1
0
Fork 0
docker-easy-haproxy/docs/static.md
Joao Gilberto Magalhaes 97845b8a52 Refactor E2E tests and configuration format
- Replaced `easymapping` configuration with `containers` for better maintainability and clarity.
- Introduced `DockerComposeFixture` class in `utils.py` to manage Docker Compose lifecycle and smart build strategy.
- Enhanced YAML-to-environment variable conversion in `ContainerEnv` for dynamic configuration support.
- Updated HAProxy configurations and test fixtures to reflect the new format.
- Improved test coverage for YAML parsing, environment variable handling, and HAProxy config generation.
2026-02-13 12:01:47 -05:00

4.4 KiB

sidebar_position
4

Static File

Setup Docker EasyHAProxy

This method will use a static configuration, which is simpler and easier than creating a haproxy.cfg

You can use this configuration to set up external servers unrelated to docker or Kubernetes.

:::tip Live Reload EasyHAProxy monitors this file for changes and automatically reconfigures HAProxy when any changes are detected. :::

First, create a YAML configuration:

stats:
  username: admin
  password: password
  port: 1936         # Optional (default 1936)

customerrors: true   # Optional (default false)

ssl_mode: default

logLevel:
  haproxy: INFO

certbot:
  email: "acme@example.org"

containers:
  # HTTP with certbot + redirect to HTTPS
  "host1.com.br:80":
    ip: ["container:5000"]
    certbot: true
    redirect_ssl: true

  # Additional HTTP host
  "host2.com.br:80":
    ip: ["other:3000"]

  # Redirect www → main domain
  "www.host1.com.br:80":
    ip: ["container:5000"]
    redirect_ssl: true

  # HTTPS version
  "host1.com.br:443":
    ip: ["container:80"]
    ssl: true

  # Different host on different port
  "host3.com.br:8080":
    ip: ["domain:8181"]

:::info New Configuration Format The containers format simplifies static configuration:

  • Flatter structure: "hostname:port" keys instead of nested easymappingportshosts
  • Better readability: Port and localport embedded in keys ("host:port" and "container:localport")
  • Plugin support: Global and per-host plugin configuration
  • Clearer mapping: Format mirrors internal Docker label structure :::

Then map this file to /etc/haproxy/static/config.yml in your EasyHAProxy container:

docker run -d \
      --name easy-haproxy-container \
      -v /my/static/:/etc/haproxy/static/ \
      -e EASYHAPROXY_DISCOVER="static" \
      # + Environment Variables \
      -p 80:80 \
      -p 443:443 \
      -p 1936:1936 \
      --network easyhaproxy \
    byjg/easy-haproxy

:::tip Docker Socket Optional Mounting /var/run/docker.sock is not required in static discovery mode. Add it only if you are simultaneously discovering Docker containers. :::

You can find other information on docker label configuration and environment variable guide

Yaml Definition

stats:
  username: admin     # Optional (default "admin")
  password: password  # If stats or stats.password is omitted, stats will be public with no password
  port: 1936          # Optional (default 1936)

customerrors: true   # Optional (default false)

ssl_mode: default    # Optional

logLevel:
  certbot: DEBUG       # Optional (default: DEBUG). Can be: TRACE,DEBUG,INFO,WARN,ERROR,FATAL
  easyhaproxy: DEBUG   # Optional (default: DEBUG). Can be: TRACE,DEBUG,INFO,WARN,ERROR,FATAL
  haproxy: INFO        # Optional (default: INFO). Can be: TRACE,DEBUG,INFO,WARN,ERROR,FATAL

certbot:       
  email: "acme@example.org"  # If email is defined enable ACME/Certbot
  autoconfig: ""             # If empty use letsencrypt, otherwise try to set the CA defined. 
  eab_hmac_key: ""           # If required by the CA, set here.
  eab_kid: ""                # If required by the CA, set here.
  server: False              # If empty/False uses Letsencrypt, otherwise the CA Endpoint defined here
  retry_count: 60            # If the certificate reaches the Rate Limit, try again after 'n' iterations.
}

containers:
  # Format: "hostname:port"
  "host1.com.br:80":
    ip: ["container:5000"]   # Endpoints (ip, dns, container, etc) with format "address:localport"
    certbot: true            # Optional. Request a certbot certificate. Requires certbot.email set.
    redirect_ssl: true       # Optional. Redirect HTTP to HTTPS for this host.
    mode: http               # Optional. Default `http`. Can be http or tcp

  # HTTPS version (SSL)
  "host1.com.br:443":
    ip: ["container:80"]
    ssl: true                # Enable SSL for this port

  # Redirect www → main domain (using redirect_ssl with backend)
  "www.host1.com.br:80":
    ip: ["container:5000"]
    redirect_ssl: true

:::note SSL Certificates in Static Mode The only way to provide SSL certificates in static configuration mode is to map the certificates to EasyHAProxy as a docker volume. Refer to the SSL documentation to learn how to configure this. :::


Open source ByJG