easyhaproxy 6.0.0__tar.gz → 6.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.github/workflows/build.yml +16 -16
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/PKG-INFO +41 -115
- easyhaproxy-6.1.0/README.md +85 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/RELEASE.md +3 -1
- easyhaproxy-6.1.0/deploy/docker/assets/etc/easyhaproxy/www/dashboard.html +103 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/docker-compose.yml +1 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/kubernetes/README.md +1 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/kubernetes/easyhaproxy-clusterip.yml +19 -13
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/kubernetes/easyhaproxy-daemonset.yml +14 -11
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/kubernetes/easyhaproxy-nodeport.yml +19 -13
- easyhaproxy-6.1.0/docs/concepts/_category_.json +4 -0
- easyhaproxy-6.1.0/docs/concepts/index.md +103 -0
- {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/concepts}/limitations.md +2 -1
- easyhaproxy-6.1.0/docs/dashboard.png +0 -0
- easyhaproxy-6.1.0/docs/dashboard_login.png +0 -0
- easyhaproxy-6.1.0/docs/dashboard_thumbnail.png +0 -0
- easyhaproxy-6.1.0/docs/getting-started/_category_.json +4 -0
- easyhaproxy-6.1.0/docs/getting-started/docker.md +66 -0
- easyhaproxy-6.1.0/docs/getting-started/index.md +51 -0
- easyhaproxy-6.1.0/docs/getting-started/kubernetes.md +256 -0
- easyhaproxy-6.1.0/docs/getting-started/native.md +130 -0
- easyhaproxy-6.1.0/docs/getting-started/static.md +105 -0
- easyhaproxy-6.1.0/docs/getting-started/swarm.md +100 -0
- easyhaproxy-6.1.0/docs/guides/_category_.json +4 -0
- {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/guides}/acme.md +11 -37
- easyhaproxy-6.1.0/docs/guides/dashboard.md +144 -0
- {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/guides}/digitalocean.md +2 -2
- {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/guides}/dokku.md +1 -0
- easyhaproxy-6.1.0/docs/guides/helm.md +50 -0
- {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/guides}/microk8s.md +2 -1
- easyhaproxy-6.1.0/docs/guides/plugin-development.md +695 -0
- {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/guides}/plugins.md +13 -97
- {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/guides}/ssl.md +3 -2
- easyhaproxy-6.1.0/docs/reference/_category_.json +4 -0
- easyhaproxy-6.0.0/docs/pip.md → easyhaproxy-6.1.0/docs/reference/cli.md +14 -144
- {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/reference}/container-labels.md +23 -2
- easyhaproxy-6.0.0/docs/environment-variable.md → easyhaproxy-6.1.0/docs/reference/environment-variables.md +25 -6
- easyhaproxy-6.1.0/docs/reference/helm.md +117 -0
- {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/reference}/other.md +10 -9
- easyhaproxy-6.1.0/docs/reference/plugins/_category_.json +4 -0
- {easyhaproxy-6.0.0/docs/Plugins → easyhaproxy-6.1.0/docs/reference/plugins}/cleanup.md +5 -9
- {easyhaproxy-6.0.0/docs/Plugins → easyhaproxy-6.1.0/docs/reference/plugins}/cloudflare.md +3 -12
- {easyhaproxy-6.0.0/docs/Plugins → easyhaproxy-6.1.0/docs/reference/plugins}/deny-pages.md +3 -7
- {easyhaproxy-6.0.0/docs/Plugins → easyhaproxy-6.1.0/docs/reference/plugins}/fastcgi.md +23 -39
- {easyhaproxy-6.0.0/docs/Plugins → easyhaproxy-6.1.0/docs/reference/plugins}/ip-whitelist.md +3 -8
- easyhaproxy-6.1.0/docs/reference/plugins/jwt-validator.md +196 -0
- {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/reference}/volumes.md +18 -17
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/Chart.yaml +2 -2
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/deployment.yaml +7 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/service.yaml +3 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/values.yaml +2 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/pyproject.toml +1 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/easyhaproxy/main.py +36 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/easymapping/config_generator.py +8 -2
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/consts.py +8 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/haproxy.py +2 -2
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/fastcgi.py +3 -5
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/processor/kubernetes.py +3 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/haproxy.cfg.j2 +15 -1
- easyhaproxy-6.1.0/tests/conftest.py +68 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/docker.txt +15 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services-letsencrypt.txt +15 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services-multiple-hosts.txt +15 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/ssl-loose.txt +15 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/static-cors.txt +15 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/static.txt +15 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_plugins.py +4 -4
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/README.md +4 -4
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-acme-e2e.yml +4 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-acme.yml +1 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-php-fpm.yml +1 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-portainer.yml +1 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/php-app/README.md +2 -2
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/README.md +4 -4
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/cloudflare.yml +1 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/ip-whitelist.yml +1 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/jwt-validator.yml +1 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/plugins-combined.yml +1 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/service.yml +1 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/service_tls.yml +1 -1
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/static/README.md +3 -3
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/README.md +4 -4
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/test_docker_compose.py +15 -10
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/test_kubernetes.py +20 -1
- easyhaproxy-6.1.0/uv.lock +1583 -0
- easyhaproxy-6.0.0/README.md +0 -159
- easyhaproxy-6.0.0/docs/Plugins/jwt-validator.md +0 -385
- easyhaproxy-6.0.0/docs/docker.md +0 -79
- easyhaproxy-6.0.0/docs/helm.md +0 -85
- easyhaproxy-6.0.0/docs/kubernetes.md +0 -514
- easyhaproxy-6.0.0/docs/plugin-development.md +0 -2094
- easyhaproxy-6.0.0/docs/static.md +0 -140
- easyhaproxy-6.0.0/docs/swarm.md +0 -109
- easyhaproxy-6.0.0/tests/conftest.py +0 -43
- easyhaproxy-6.0.0/uv.lock +0 -882
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.dockerignore +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.github/FUNDING.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.github/dependabot.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.gitignore +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.python-version +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.run/pytest in tests.run.xml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.vscode/launch.json +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.vscode/settings.json +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/CONTRIBUTING.md +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/LICENSE +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/Makefile +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/build-multiarch.sh +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/Dockerfile +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/entrypoint.sh +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/conf.d/README.md +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/400.http +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/403.http +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/408.http +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/500.http +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/502.http +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/503.http +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/504.http +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_digitalocean.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_docker.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_dokku.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_helm.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_kubernetes.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_logo.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_microk8s.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_static.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_swarm.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/icons.xcf +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/logo.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/logo.xcf +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/video-docker-ssl.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/video-docker.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/video-kubernetes-letsencrypt.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/video-kubernetes.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/video-static.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/video-tcp-mysql.png +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/.helmignore +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/LICENSE +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/README.md +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/_helpers.tpl +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/clusterrole.yaml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/clusterrolebinding.yaml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/ingressclass.yaml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/serviceaccount.yaml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/values.schema.json +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/scripts/bump-version.sh +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/easyhaproxy/__init__.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/easymapping/__init__.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/easymapping/label_handler.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/__init__.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/certbot.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/container_env.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/filter.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/functions.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/loggers.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/__init__.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/__init__.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/cleanup.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/cloudflare.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/deny_pages.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/ip_whitelist.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/jwt_validator.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/interface.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/manager.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/types.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/processor/__init__.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/processor/docker.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/processor/interface.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/processor/static.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/processor/swarm.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/bind.j2 +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/frontend-mode-http.j2 +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/frontend-mode-tcp.j2 +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/ssl_default.j2 +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/ssl_loose.j2 +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/ssl_strict.j2 +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/__init__.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/no-services.txt +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services-fcgi.txt +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services-multi-containers.txt +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services-redirect-ssl.txt +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services-tcp.txt +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services.txt +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/ssl-strict.txt +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/00_haproxy.cfg +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/10_haproxy.cfg +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/no-services +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/run_bash.sh +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-changed-label +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-clone-to-ssl +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-fcgi +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-letsencrypt +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-multi-containers +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-multiple-hosts +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-redirect-ssl +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-tcp +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-with-cloudflare +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-with-deny-pages +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-with-ip-whitelist +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-with-jwt-validator +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-with-multiple-plugins +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/static.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/static_cors.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/static_multi_domain.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_certbot.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_certbot_haproxy_config.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_containerenv.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_daemonize.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_docker.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_functions.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_kubernetes_processor.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_labels.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_parser.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_static.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/conftest.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/AGENTS.md +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-changed-label.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-cloudflare.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-ip-whitelist.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-jwt-validator.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-multi-containers.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-plugins-combined.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-portainer-app-example.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-proxy-headers.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/pebble-config.json +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/php-app/index.php +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/php-app/info.php +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/php-app/test-path-info.php +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/fixtures/header-echo/Dockerfile +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/fixtures/header-echo/README.md +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/fixtures/header-echo/server.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/generate-keys.sh +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/.gitignore +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/jwt-validator-secret-example.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/setup-cluster.sh +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/teardown-cluster.sh +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/static/conf/config-basic.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/static/conf/config-certbot.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/static/conf/config-deny-pages.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/static/conf/config-jwt-validator.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/static/docker-compose.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/cloudflare.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/easyhaproxy.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/ip-whitelist.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/jwt-validator.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/plugins-combined.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/portainer.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/services.yml +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/test_proxy_headers.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/test_static.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/test_swarm.py +0 -0
- {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/utils.py +0 -0
|
@@ -34,7 +34,7 @@ jobs:
|
|
|
34
34
|
|
|
35
35
|
steps:
|
|
36
36
|
- name: Checkout repository
|
|
37
|
-
uses: actions/checkout@
|
|
37
|
+
uses: actions/checkout@v7
|
|
38
38
|
|
|
39
39
|
- name: Install uv
|
|
40
40
|
run: curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
@@ -58,7 +58,7 @@ jobs:
|
|
|
58
58
|
|
|
59
59
|
steps:
|
|
60
60
|
- name: Checkout repository
|
|
61
|
-
uses: actions/checkout@
|
|
61
|
+
uses: actions/checkout@v7
|
|
62
62
|
|
|
63
63
|
- name: Install uv
|
|
64
64
|
run: curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
@@ -82,7 +82,7 @@ jobs:
|
|
|
82
82
|
|
|
83
83
|
steps:
|
|
84
84
|
- name: Checkout repository
|
|
85
|
-
uses: actions/checkout@
|
|
85
|
+
uses: actions/checkout@v7
|
|
86
86
|
|
|
87
87
|
- name: Install uv
|
|
88
88
|
run: curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
@@ -106,7 +106,7 @@ jobs:
|
|
|
106
106
|
|
|
107
107
|
steps:
|
|
108
108
|
- name: Checkout repository
|
|
109
|
-
uses: actions/checkout@
|
|
109
|
+
uses: actions/checkout@v7
|
|
110
110
|
|
|
111
111
|
- name: Install uv
|
|
112
112
|
run: curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
@@ -138,7 +138,7 @@ jobs:
|
|
|
138
138
|
|
|
139
139
|
steps:
|
|
140
140
|
- name: Checkout repository
|
|
141
|
-
uses: actions/checkout@
|
|
141
|
+
uses: actions/checkout@v7
|
|
142
142
|
|
|
143
143
|
- name: Install uv
|
|
144
144
|
run: curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
@@ -170,17 +170,17 @@ jobs:
|
|
|
170
170
|
|
|
171
171
|
steps:
|
|
172
172
|
- name: Checkout repository
|
|
173
|
-
uses: actions/checkout@
|
|
173
|
+
uses: actions/checkout@v7
|
|
174
174
|
|
|
175
175
|
- name: Set up QEMU
|
|
176
|
-
uses: docker/setup-qemu-action@
|
|
176
|
+
uses: docker/setup-qemu-action@v4
|
|
177
177
|
|
|
178
178
|
- name: Set up Docker Buildx
|
|
179
|
-
uses: docker/setup-buildx-action@
|
|
179
|
+
uses: docker/setup-buildx-action@v4
|
|
180
180
|
|
|
181
181
|
- name: Log into registry
|
|
182
182
|
if: github.event_name == 'push' || github.event.inputs.push == 'true'
|
|
183
|
-
uses: docker/login-action@
|
|
183
|
+
uses: docker/login-action@v4
|
|
184
184
|
with:
|
|
185
185
|
registry: ${{ secrets.DOCKER_REGISTRY }}
|
|
186
186
|
username: ${{ secrets.DOCKER_REGISTRY_USER }}
|
|
@@ -190,11 +190,11 @@ jobs:
|
|
|
190
190
|
# https://github.com/docker/metadata-action
|
|
191
191
|
- name: Extract Docker metadata
|
|
192
192
|
id: meta
|
|
193
|
-
uses: docker/metadata-action@
|
|
193
|
+
uses: docker/metadata-action@v6
|
|
194
194
|
with:
|
|
195
195
|
images: ${{ secrets.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
196
196
|
|
|
197
|
-
- uses: actions/github-script@
|
|
197
|
+
- uses: actions/github-script@v9
|
|
198
198
|
id: tags
|
|
199
199
|
with:
|
|
200
200
|
script: |
|
|
@@ -215,7 +215,7 @@ jobs:
|
|
|
215
215
|
run: |
|
|
216
216
|
echo "${{ steps.tags.outputs.result }}"
|
|
217
217
|
|
|
218
|
-
- uses: actions/github-script@
|
|
218
|
+
- uses: actions/github-script@v9
|
|
219
219
|
id: normalized
|
|
220
220
|
with:
|
|
221
221
|
script: |
|
|
@@ -239,7 +239,7 @@ jobs:
|
|
|
239
239
|
# Build and push Docker image with Buildx (don't push on PR)
|
|
240
240
|
# https://github.com/docker/build-push-action
|
|
241
241
|
- name: Build and push Docker image
|
|
242
|
-
uses: docker/build-push-action@
|
|
242
|
+
uses: docker/build-push-action@v7
|
|
243
243
|
with:
|
|
244
244
|
context: .
|
|
245
245
|
file: deploy/docker/Dockerfile
|
|
@@ -271,7 +271,7 @@ jobs:
|
|
|
271
271
|
|
|
272
272
|
steps:
|
|
273
273
|
- name: Checkout repository
|
|
274
|
-
uses: actions/checkout@
|
|
274
|
+
uses: actions/checkout@v7
|
|
275
275
|
|
|
276
276
|
- name: Install uv
|
|
277
277
|
run: curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
@@ -291,12 +291,12 @@ jobs:
|
|
|
291
291
|
env:
|
|
292
292
|
DOC_GITHUB_TOKEN: '${{ secrets.DOC_TOKEN }}'
|
|
293
293
|
steps:
|
|
294
|
-
- uses: actions/checkout@
|
|
294
|
+
- uses: actions/checkout@v7
|
|
295
295
|
if: startsWith(github.ref, 'refs/tags/')
|
|
296
296
|
with:
|
|
297
297
|
ref: master
|
|
298
298
|
|
|
299
|
-
- uses: actions/checkout@
|
|
299
|
+
- uses: actions/checkout@v7
|
|
300
300
|
if: github.ref == 'refs/heads/master'
|
|
301
301
|
|
|
302
302
|
- name: Get result
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: easyhaproxy
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.1.0
|
|
4
4
|
Summary: HAProxy label based routing with service discovery for Docker, Swarm, and Kubernetes
|
|
5
5
|
License: MIT License
|
|
6
6
|
|
|
@@ -45,6 +45,11 @@ Requires-Dist: pyyaml>=6.0
|
|
|
45
45
|
Requires-Dist: requests>=2.31.0
|
|
46
46
|
Description-Content-Type: text/markdown
|
|
47
47
|
|
|
48
|
+
---
|
|
49
|
+
sidebar_key: docker-easy-haproxy
|
|
50
|
+
tags: [docker, devops]
|
|
51
|
+
---
|
|
52
|
+
|
|
48
53
|
# EasyHAProxy
|
|
49
54
|
|
|
50
55
|
[](https://github.com/sponsors/byjg)
|
|
@@ -60,133 +65,55 @@ Description-Content-Type: text/markdown
|
|
|
60
65
|
|
|
61
66
|
## Service discovery for HAProxy
|
|
62
67
|
|
|
63
|
-
EasyHAProxy dynamically creates
|
|
64
|
-
|
|
65
|
-
EasyHAProxy can detect and configure HAProxy automatically on the following platforms:
|
|
66
|
-
|
|
67
|
-
- Docker
|
|
68
|
-
- Docker Swarm
|
|
69
|
-
- Kubernetes
|
|
70
|
-
- Static YAML definitions (`EASYHAPROXY_DISCOVER=static`)
|
|
71
|
-
|
|
72
|
-
## Who is using?
|
|
73
|
-
|
|
74
|
-
EasyHAProxy is part of some projects:
|
|
75
|
-
- Dokku
|
|
76
|
-
- MicroK8s
|
|
77
|
-
- DigitalOcean Marketplace
|
|
78
|
-
|
|
79
|
-
See detailed instructions on how to install below.
|
|
80
|
-
|
|
81
|
-
## EasyHAProxy Mission
|
|
82
|
-
|
|
83
|
-
Easy to set up and low configuration to numerous features.
|
|
68
|
+
EasyHAProxy dynamically creates `haproxy.cfg` based on metadata from your workloads — Docker labels, Swarm service labels, or Kubernetes Ingress annotations. No HAProxy knowledge required.
|
|
84
69
|
|
|
85
70
|
## Features
|
|
86
71
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
- Enable/disable Stats on port 1936 with a custom password.
|
|
96
|
-
- Enable/disable custom errors.
|
|
97
|
-
|
|
98
|
-
Also, it is possible to set up HAProxy from a simple Yaml file instead of creating `haproxy.cfg` file.
|
|
99
|
-
|
|
100
|
-
## How Does It Work?
|
|
101
|
-
|
|
102
|
-
You don't need to change your current infrastructure and don't need to learn the HAProxy configuration.
|
|
103
|
-
|
|
104
|
-
The steps are:
|
|
105
|
-
|
|
106
|
-
- Run the EasyHAProxy container;
|
|
107
|
-
- Add some labels to the containers you want to be parsed by EasyHAProxy (see detailed instructions below);
|
|
108
|
-
- EasyHAProxy will automatically detect the containers, set up, and reload the HAProxy configurations for you without downtime.
|
|
72
|
+
- **Automatic service discovery** — Docker, Docker Swarm, Kubernetes, or static YAML
|
|
73
|
+
- **Zero-downtime HAProxy reload** — configuration updates happen without dropping connections
|
|
74
|
+
- **Automatic TLS with ACME** — Let's Encrypt, ZeroSSL, BuyPass, and more
|
|
75
|
+
- **Custom SSL certificates** — volume-mount or label-embed your own PEM files
|
|
76
|
+
- **TCP mode** — proxy any TCP service, not just HTTP
|
|
77
|
+
- **Plugin system** — JWT validation, IP whitelisting, Cloudflare IP restoration, FastCGI, path blocking, and custom plugins
|
|
78
|
+
- **Real-time monitoring dashboard** — built-in, zero-dependency web UI with live traffic charts, frontend/backend health, and per-server stats (enabled with a single env var)
|
|
79
|
+
- **Balance algorithms** — roundrobin, leastconn, source, uri, and more
|
|
109
80
|
|
|
110
|
-
##
|
|
81
|
+
## Supported platforms
|
|
111
82
|
|
|
112
|
-
|
|
83
|
+
[](docs/getting-started/kubernetes.md)
|
|
84
|
+
[](docs/getting-started/swarm.md)
|
|
85
|
+
[](docs/getting-started/docker.md)
|
|
86
|
+
[](docs/getting-started/static.md)
|
|
113
87
|
|
|
114
|
-
|
|
115
|
-
[](docs/swarm.md)
|
|
116
|
-
[](docs/docker.md)
|
|
117
|
-
[](docs/static.md)
|
|
88
|
+
Install using tools:
|
|
118
89
|
|
|
119
|
-
|
|
90
|
+
[](docs/guides/helm.md)
|
|
91
|
+
[](docs/guides/microk8s.md)
|
|
92
|
+
[](docs/guides/dokku.md)
|
|
93
|
+
[](docs/guides/digitalocean.md)
|
|
120
94
|
|
|
121
|
-
|
|
122
|
-
[](docs/microk8s.md)
|
|
123
|
-
[](docs/dokku.md)
|
|
124
|
-
[](docs/digitalocean.md)
|
|
95
|
+
## Documentation
|
|
125
96
|
|
|
126
|
-
|
|
97
|
+
| Section | Description |
|
|
98
|
+
|---------|-------------|
|
|
99
|
+
| **[Getting Started](docs/getting-started/)** | Choose your runtime and discovery mode, minimal working setup |
|
|
100
|
+
| **[Guides](docs/guides/ssl.md)** | SSL, ACME, plugins, Helm, MicroK8s, Dokku, DigitalOcean |
|
|
101
|
+
| **[Concepts](docs/concepts/)** | Service discovery, config pipeline, plugin model, TLS termination |
|
|
102
|
+
| **[Reference](docs/reference/environment-variables.md)** | Environment variables, container labels, CLI flags, volumes |
|
|
127
103
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
- [Custom SSL](docs/ssl.md)
|
|
131
|
-
- [Automatic Certificate Issuing](docs/acme.md) (e.g. Letsencrypt)
|
|
132
|
-
|
|
133
|
-
## Configuration Reference
|
|
134
|
-
|
|
135
|
-
Detailed configuration guides for advanced setups:
|
|
136
|
-
|
|
137
|
-
- [Container Labels](docs/container-labels.md) - Configure Docker/Swarm containers with labels
|
|
138
|
-
- [Environment Variables](docs/environment-variable.md) - Configure EasyHAProxy behavior
|
|
139
|
-
- [Volumes](docs/volumes.md) - Map volumes for certificates, config, and custom files
|
|
140
|
-
- [Plugins](docs/plugins.md) - Extend HAProxy with plugins ([Development Guide](docs/plugin-development.md))
|
|
141
|
-
- [JWT Validator](docs/Plugins/jwt-validator.md) - JWT authentication validation
|
|
142
|
-
- [FastCGI](docs/Plugins/fastcgi.md) - PHP-FPM and FastCGI application support
|
|
143
|
-
- [Cloudflare](docs/Plugins/cloudflare.md) - Restore visitor IP from Cloudflare CDN
|
|
144
|
-
- [IP Whitelist](docs/Plugins/ip-whitelist.md) - Restrict access to IPs/CIDR ranges
|
|
145
|
-
- [Deny Pages](docs/Plugins/deny-pages.md) - Block access to specific paths
|
|
146
|
-
- [Cleanup](docs/Plugins/cleanup.md) - Automatic cleanup of temporary files
|
|
147
|
-
- [Other Configurations](docs/other.md) - Additional configurations (ports, custom errors, etc.)
|
|
148
|
-
- [Limitations](docs/limitations.md) - Important limitations and considerations
|
|
149
|
-
|
|
150
|
-
## Development
|
|
151
|
-
|
|
152
|
-
### Requirements
|
|
153
|
-
|
|
154
|
-
- Python 3.11 or higher
|
|
155
|
-
- [uv](https://github.com/astral-sh/uv) package manager
|
|
156
|
-
|
|
157
|
-
### Installation for Development
|
|
158
|
-
|
|
159
|
-
```bash
|
|
160
|
-
# Install uv (if not already installed)
|
|
161
|
-
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
162
|
-
|
|
163
|
-
# Clone the repository
|
|
164
|
-
git clone https://github.com/byjg/docker-easy-haproxy.git
|
|
165
|
-
cd docker-easy-haproxy
|
|
166
|
-
|
|
167
|
-
# Install dependencies (creates virtual environment automatically)
|
|
168
|
-
uv sync --dev
|
|
169
|
-
|
|
170
|
-
# Run tests
|
|
171
|
-
make test
|
|
172
|
-
# or directly: uv run pytest tests/ -vv
|
|
173
|
-
|
|
174
|
-
# Run linting
|
|
175
|
-
make lint
|
|
104
|
+
## Who is using?
|
|
176
105
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
106
|
+
EasyHAProxy is part of some projects:
|
|
107
|
+
- [Dokku](docs/guides/dokku.md)
|
|
108
|
+
- [MicroK8s](docs/guides/microk8s.md)
|
|
109
|
+
- [DigitalOcean Marketplace](docs/guides/digitalocean.md)
|
|
180
110
|
|
|
181
|
-
|
|
111
|
+
## Monitoring Dashboard
|
|
182
112
|
|
|
183
|
-
|
|
184
|
-
# Install with uv
|
|
185
|
-
uv pip install easymapping
|
|
113
|
+
[](docs/guides/dashboard.md)
|
|
186
114
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
```
|
|
115
|
+
A real-time dashboard is available at `http://<host>:11936/` whenever `HAPROXY_PASSWORD` is set —
|
|
116
|
+
no extra containers, no Prometheus, no Grafana. See the [dashboard guide](docs/guides/dashboard.md).
|
|
190
117
|
|
|
191
118
|
## See EasyHAProxy in action
|
|
192
119
|
|
|
@@ -201,6 +128,5 @@ Click on the image to see the videos (use HD for better visualization)
|
|
|
201
128
|
|
|
202
129
|
[Here is the code](https://gist.github.com/byjg/e125e478a0562190176d69ea795fd3d4) applied in the test examples above.
|
|
203
130
|
|
|
204
|
-
|
|
205
131
|
----
|
|
206
132
|
[Open source ByJG](http://opensource.byjg.com)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_key: docker-easy-haproxy
|
|
3
|
+
tags: [docker, devops]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# EasyHAProxy
|
|
7
|
+
|
|
8
|
+
[](https://github.com/sponsors/byjg)
|
|
9
|
+
[](http://opensource.byjg.com)
|
|
10
|
+
[](https://github.com/byjg/docker-easy-haproxy/actions/workflows/build.yml)
|
|
11
|
+
[](https://github.com/byjg/docker-easy-haproxy/)
|
|
12
|
+
[](https://opensource.byjg.com/opensource/licensing.html)
|
|
13
|
+
[](https://github.com/byjg/docker-easy-haproxy/releases/)
|
|
14
|
+
[](https://opensource.byjg.com/helm)
|
|
15
|
+
[](https://artifacthub.io/packages/search?repo=byjg)
|
|
16
|
+
|
|
17
|
+

|
|
18
|
+
|
|
19
|
+
## Service discovery for HAProxy
|
|
20
|
+
|
|
21
|
+
EasyHAProxy dynamically creates `haproxy.cfg` based on metadata from your workloads — Docker labels, Swarm service labels, or Kubernetes Ingress annotations. No HAProxy knowledge required.
|
|
22
|
+
|
|
23
|
+
## Features
|
|
24
|
+
|
|
25
|
+
- **Automatic service discovery** — Docker, Docker Swarm, Kubernetes, or static YAML
|
|
26
|
+
- **Zero-downtime HAProxy reload** — configuration updates happen without dropping connections
|
|
27
|
+
- **Automatic TLS with ACME** — Let's Encrypt, ZeroSSL, BuyPass, and more
|
|
28
|
+
- **Custom SSL certificates** — volume-mount or label-embed your own PEM files
|
|
29
|
+
- **TCP mode** — proxy any TCP service, not just HTTP
|
|
30
|
+
- **Plugin system** — JWT validation, IP whitelisting, Cloudflare IP restoration, FastCGI, path blocking, and custom plugins
|
|
31
|
+
- **Real-time monitoring dashboard** — built-in, zero-dependency web UI with live traffic charts, frontend/backend health, and per-server stats (enabled with a single env var)
|
|
32
|
+
- **Balance algorithms** — roundrobin, leastconn, source, uri, and more
|
|
33
|
+
|
|
34
|
+
## Supported platforms
|
|
35
|
+
|
|
36
|
+
[](docs/getting-started/kubernetes.md)
|
|
37
|
+
[](docs/getting-started/swarm.md)
|
|
38
|
+
[](docs/getting-started/docker.md)
|
|
39
|
+
[](docs/getting-started/static.md)
|
|
40
|
+
|
|
41
|
+
Install using tools:
|
|
42
|
+
|
|
43
|
+
[](docs/guides/helm.md)
|
|
44
|
+
[](docs/guides/microk8s.md)
|
|
45
|
+
[](docs/guides/dokku.md)
|
|
46
|
+
[](docs/guides/digitalocean.md)
|
|
47
|
+
|
|
48
|
+
## Documentation
|
|
49
|
+
|
|
50
|
+
| Section | Description |
|
|
51
|
+
|---------|-------------|
|
|
52
|
+
| **[Getting Started](docs/getting-started/)** | Choose your runtime and discovery mode, minimal working setup |
|
|
53
|
+
| **[Guides](docs/guides/ssl.md)** | SSL, ACME, plugins, Helm, MicroK8s, Dokku, DigitalOcean |
|
|
54
|
+
| **[Concepts](docs/concepts/)** | Service discovery, config pipeline, plugin model, TLS termination |
|
|
55
|
+
| **[Reference](docs/reference/environment-variables.md)** | Environment variables, container labels, CLI flags, volumes |
|
|
56
|
+
|
|
57
|
+
## Who is using?
|
|
58
|
+
|
|
59
|
+
EasyHAProxy is part of some projects:
|
|
60
|
+
- [Dokku](docs/guides/dokku.md)
|
|
61
|
+
- [MicroK8s](docs/guides/microk8s.md)
|
|
62
|
+
- [DigitalOcean Marketplace](docs/guides/digitalocean.md)
|
|
63
|
+
|
|
64
|
+
## Monitoring Dashboard
|
|
65
|
+
|
|
66
|
+
[](docs/guides/dashboard.md)
|
|
67
|
+
|
|
68
|
+
A real-time dashboard is available at `http://<host>:11936/` whenever `HAPROXY_PASSWORD` is set —
|
|
69
|
+
no extra containers, no Prometheus, no Grafana. See the [dashboard guide](docs/guides/dashboard.md).
|
|
70
|
+
|
|
71
|
+
## See EasyHAProxy in action
|
|
72
|
+
|
|
73
|
+
Click on the image to see the videos (use HD for better visualization)
|
|
74
|
+
|
|
75
|
+
[](https://youtu.be/ar8raFK0R1k)
|
|
76
|
+
[](https://youtu.be/xwIdj9mc2mU)
|
|
77
|
+
[](https://youtu.be/uq7TuLIijks)
|
|
78
|
+
[](https://youtu.be/v9Q4M5Al7AQ)
|
|
79
|
+
[](https://youtu.be/B_bYZnRTGJM)
|
|
80
|
+
[](https://youtu.be/JHqcq9crbDI)
|
|
81
|
+
|
|
82
|
+
[Here is the code](https://gist.github.com/byjg/e125e478a0562190176d69ea795fd3d4) applied in the test examples above.
|
|
83
|
+
|
|
84
|
+
----
|
|
85
|
+
[Open source ByJG](http://opensource.byjg.com)
|
|
@@ -54,7 +54,7 @@ EasyHAProxy follows [Semantic Versioning](https://semver.org/):
|
|
|
54
54
|
- **MINOR**: New features, plugin additions, backward-compatible changes
|
|
55
55
|
- **PATCH**: Bug fixes, documentation updates, minor improvements
|
|
56
56
|
|
|
57
|
-
**Current Version:** `6.
|
|
57
|
+
**Current Version:** `6.1.0` (as of Chart.yaml)
|
|
58
58
|
|
|
59
59
|
## Automated Release (Recommended)
|
|
60
60
|
|
|
@@ -329,6 +329,8 @@ helm show chart byjg/easyhaproxy
|
|
|
329
329
|
|
|
330
330
|
| Version | Release Date | Type | Highlights |
|
|
331
331
|
|---------|--------------|-------|---------------------------------------------------------------------------------------------------------------------------------------|
|
|
332
|
+
| 6.1.0 | 2026-06-24 | Minor | FastCGI protocol support, certbot sidecar plugin, dependency updates |
|
|
333
|
+
| 6.0.1 | 2026-02-23 | Patch | HAProxy dashboard, real-time monitoring dashboard with live traffic charts, ACME e2e test fixes |
|
|
332
334
|
| 6.0.0 | 2026-XX-XX | Major | Python module refactoring (one-class-per-file), IngressClassName support (spec.ingressClassName + deprecated annotation fallback), modernized build system (uv/pyproject.toml), improved version management and release tooling, GitHub Actions workflow_dispatch push control |
|
|
333
335
|
| 5.0.0 | 2025-12-04 | Major | Plugin framework (builtin plugins: JWT, FastCGI, Cloudflare, IP whitelist, deny pages, cleanup), docs restructure, examples refreshed |
|
|
334
336
|
| 4.6.0 | 2024-11-27 | Minor | FastCGI plugin, JWT enhancements |
|