jknapp f58dbef3c5
All checks were successful
HAProxy Manager Build and Push / Build-and-Push (push) Successful in 1m47s
Merge pull request 'Update Cron' (#2) from update-cron into main
Reviewed-on: #2
2025-05-30 18:16:47 +00:00
2025-02-20 14:46:30 -08:00
2025-02-20 13:41:38 -08:00
2025-05-30 11:16:12 -07:00
2025-04-18 16:52:57 -07:00
2025-02-17 04:31:42 +00:00
2025-05-30 00:03:17 +00:00

HAProxy Manager

A Flask-based API service for managing HAProxy configurations, domains, and SSL certificates. A Flask-based API service for managing HAProxy configurations with dynamic SSL certificate management and health monitoring.

To run the container:

docker run -d  -p 80:80 -p 443:443 -p 8000:8000 -v lets-encrypt:/etc/letsencrypt -v haproxy:/etc/haproxy --name haproxy-manager repo.anhonesthost.net/cloud-hosting-platform/haproxy-manager-base:latest

Features

  • RESTful API for HAProxy configuration management
  • Database-backed configuration storage using SQLite
  • Automatic HAProxy configuration generation from templates
  • Let's Encrypt SSL certificate integration with auto-renewal
  • Health monitoring endpoint
  • Dynamic backend server management
  • Template override support for custom backend configurations
  • Process monitoring and auto-restart capabilities
  • Socket-based HAProxy runtime API integration

Requirements

  • HAProxy
  • Python 3.x
  • Flask
  • SQLite3
  • Certbot (for Let's Encrypt certificates)
  • OpenSSL (for self-signed start-up certificate)

Web UI Interface

The HAProxy Manager includes a web-based user interface accessible at port 8000, providing:

  • Domain and backend server management interface
  • SSL certificate status monitoring

Do Not Expose port 8000 to the open internet If you need to have it exposed to the internet, restrict it to an IP Address via IPTABLES or other firewalls.

# Allow access from the specific IP address (replace 192.168.1.100 with your IP)
iptables -A INPUT -p tcp --dport 8000 -s {YOUR_PUBLIC_IP} -j ACCEPT

# Drop all other connections to port 8000
iptables -A INPUT -p tcp --dport 8000 -j DROP

If you need to be able to access the web interface from multiple locations, I recommend putting it behind an authenticated Proxy like Authentik

API Endpoints

Health Check

Check the status of the HAProxy Manager service.

GET /health

# Response
{
    "status": "healthy",
    "haproxy_status": "running",
    "database": "connected"
}

Add Domain

Add a new domain with backend servers configuration.

POST /api/domain
Content-Type: application/json

{
    "domain": "example.com",
    "backend_name": "example_backend",
    "template_override": null,
    "servers": [
        {
            "name": "server1",
            "address": "10.0.0.1",
            "port": 8080,
            "options": "check"
        },
        {
            "name": "server2",
            "address": "10.0.0.2",
            "port": 8080,
            "options": "check backup"
        }
    ]
}

# Response
{
    "status": "success",
    "domain_id": 1
}

Enable SSL

Request and configure SSL certificate for a domain using Let's Encrypt.

POST /api/ssl
Content-Type: application/json

{
    "domain": "example.com"
}

# Response
{
    "status": "success"
}

Remove Domain

Remove a domain and its associated backend configuration.

DELETE /api/domain
Content-Type: application/json

{
    "domain": "example.com"
}

# Response
{
    "status": "success",
    "message": "Domain configuration removed"
}
Description
Base code for HAProxy Web Manager
Readme MIT 139 KiB
Languages
Python 48.6%
HTML 39.8%
Smarty 9.3%
Dockerfile 2%
Shell 0.3%