jknapp de2957fcd2
All checks were successful
HAProxy Manager Build and Push / Build-and-Push (push) Successful in 39s
Update README.md for changes to script
2025-02-21 10:29:31 -08:00

2.3 KiB

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)

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"
}