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.
Files changed (253) hide show
  1. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.github/workflows/build.yml +16 -16
  2. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/PKG-INFO +41 -115
  3. easyhaproxy-6.1.0/README.md +85 -0
  4. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/RELEASE.md +3 -1
  5. easyhaproxy-6.1.0/deploy/docker/assets/etc/easyhaproxy/www/dashboard.html +103 -0
  6. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/docker-compose.yml +1 -1
  7. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/kubernetes/README.md +1 -1
  8. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/kubernetes/easyhaproxy-clusterip.yml +19 -13
  9. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/kubernetes/easyhaproxy-daemonset.yml +14 -11
  10. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/kubernetes/easyhaproxy-nodeport.yml +19 -13
  11. easyhaproxy-6.1.0/docs/concepts/_category_.json +4 -0
  12. easyhaproxy-6.1.0/docs/concepts/index.md +103 -0
  13. {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/concepts}/limitations.md +2 -1
  14. easyhaproxy-6.1.0/docs/dashboard.png +0 -0
  15. easyhaproxy-6.1.0/docs/dashboard_login.png +0 -0
  16. easyhaproxy-6.1.0/docs/dashboard_thumbnail.png +0 -0
  17. easyhaproxy-6.1.0/docs/getting-started/_category_.json +4 -0
  18. easyhaproxy-6.1.0/docs/getting-started/docker.md +66 -0
  19. easyhaproxy-6.1.0/docs/getting-started/index.md +51 -0
  20. easyhaproxy-6.1.0/docs/getting-started/kubernetes.md +256 -0
  21. easyhaproxy-6.1.0/docs/getting-started/native.md +130 -0
  22. easyhaproxy-6.1.0/docs/getting-started/static.md +105 -0
  23. easyhaproxy-6.1.0/docs/getting-started/swarm.md +100 -0
  24. easyhaproxy-6.1.0/docs/guides/_category_.json +4 -0
  25. {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/guides}/acme.md +11 -37
  26. easyhaproxy-6.1.0/docs/guides/dashboard.md +144 -0
  27. {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/guides}/digitalocean.md +2 -2
  28. {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/guides}/dokku.md +1 -0
  29. easyhaproxy-6.1.0/docs/guides/helm.md +50 -0
  30. {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/guides}/microk8s.md +2 -1
  31. easyhaproxy-6.1.0/docs/guides/plugin-development.md +695 -0
  32. {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/guides}/plugins.md +13 -97
  33. {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/guides}/ssl.md +3 -2
  34. easyhaproxy-6.1.0/docs/reference/_category_.json +4 -0
  35. easyhaproxy-6.0.0/docs/pip.md → easyhaproxy-6.1.0/docs/reference/cli.md +14 -144
  36. {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/reference}/container-labels.md +23 -2
  37. easyhaproxy-6.0.0/docs/environment-variable.md → easyhaproxy-6.1.0/docs/reference/environment-variables.md +25 -6
  38. easyhaproxy-6.1.0/docs/reference/helm.md +117 -0
  39. {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/reference}/other.md +10 -9
  40. easyhaproxy-6.1.0/docs/reference/plugins/_category_.json +4 -0
  41. {easyhaproxy-6.0.0/docs/Plugins → easyhaproxy-6.1.0/docs/reference/plugins}/cleanup.md +5 -9
  42. {easyhaproxy-6.0.0/docs/Plugins → easyhaproxy-6.1.0/docs/reference/plugins}/cloudflare.md +3 -12
  43. {easyhaproxy-6.0.0/docs/Plugins → easyhaproxy-6.1.0/docs/reference/plugins}/deny-pages.md +3 -7
  44. {easyhaproxy-6.0.0/docs/Plugins → easyhaproxy-6.1.0/docs/reference/plugins}/fastcgi.md +23 -39
  45. {easyhaproxy-6.0.0/docs/Plugins → easyhaproxy-6.1.0/docs/reference/plugins}/ip-whitelist.md +3 -8
  46. easyhaproxy-6.1.0/docs/reference/plugins/jwt-validator.md +196 -0
  47. {easyhaproxy-6.0.0/docs → easyhaproxy-6.1.0/docs/reference}/volumes.md +18 -17
  48. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/Chart.yaml +2 -2
  49. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/deployment.yaml +7 -0
  50. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/service.yaml +3 -0
  51. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/values.yaml +2 -0
  52. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/pyproject.toml +1 -1
  53. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/easyhaproxy/main.py +36 -0
  54. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/easymapping/config_generator.py +8 -2
  55. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/consts.py +8 -1
  56. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/haproxy.py +2 -2
  57. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/fastcgi.py +3 -5
  58. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/processor/kubernetes.py +3 -0
  59. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/haproxy.cfg.j2 +15 -1
  60. easyhaproxy-6.1.0/tests/conftest.py +68 -0
  61. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/docker.txt +15 -1
  62. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services-letsencrypt.txt +15 -1
  63. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services-multiple-hosts.txt +15 -1
  64. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/ssl-loose.txt +15 -1
  65. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/static-cors.txt +15 -1
  66. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/static.txt +15 -1
  67. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_plugins.py +4 -4
  68. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/README.md +4 -4
  69. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-acme-e2e.yml +4 -0
  70. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-acme.yml +1 -1
  71. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-php-fpm.yml +1 -1
  72. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-portainer.yml +1 -1
  73. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/php-app/README.md +2 -2
  74. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/README.md +4 -4
  75. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/cloudflare.yml +1 -1
  76. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/ip-whitelist.yml +1 -1
  77. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/jwt-validator.yml +1 -1
  78. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/plugins-combined.yml +1 -1
  79. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/service.yml +1 -1
  80. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/service_tls.yml +1 -1
  81. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/static/README.md +3 -3
  82. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/README.md +4 -4
  83. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/test_docker_compose.py +15 -10
  84. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/test_kubernetes.py +20 -1
  85. easyhaproxy-6.1.0/uv.lock +1583 -0
  86. easyhaproxy-6.0.0/README.md +0 -159
  87. easyhaproxy-6.0.0/docs/Plugins/jwt-validator.md +0 -385
  88. easyhaproxy-6.0.0/docs/docker.md +0 -79
  89. easyhaproxy-6.0.0/docs/helm.md +0 -85
  90. easyhaproxy-6.0.0/docs/kubernetes.md +0 -514
  91. easyhaproxy-6.0.0/docs/plugin-development.md +0 -2094
  92. easyhaproxy-6.0.0/docs/static.md +0 -140
  93. easyhaproxy-6.0.0/docs/swarm.md +0 -109
  94. easyhaproxy-6.0.0/tests/conftest.py +0 -43
  95. easyhaproxy-6.0.0/uv.lock +0 -882
  96. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.dockerignore +0 -0
  97. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.github/FUNDING.yml +0 -0
  98. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.github/dependabot.yml +0 -0
  99. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.gitignore +0 -0
  100. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.python-version +0 -0
  101. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.run/pytest in tests.run.xml +0 -0
  102. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.vscode/launch.json +0 -0
  103. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/.vscode/settings.json +0 -0
  104. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/CONTRIBUTING.md +0 -0
  105. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/LICENSE +0 -0
  106. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/Makefile +0 -0
  107. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/build-multiarch.sh +0 -0
  108. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/Dockerfile +0 -0
  109. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/entrypoint.sh +0 -0
  110. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/conf.d/README.md +0 -0
  111. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/400.http +0 -0
  112. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/403.http +0 -0
  113. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/408.http +0 -0
  114. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/500.http +0 -0
  115. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/502.http +0 -0
  116. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/503.http +0 -0
  117. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/504.http +0 -0
  118. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_digitalocean.png +0 -0
  119. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_docker.png +0 -0
  120. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_dokku.png +0 -0
  121. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_helm.png +0 -0
  122. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_kubernetes.png +0 -0
  123. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_logo.png +0 -0
  124. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_microk8s.png +0 -0
  125. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_static.png +0 -0
  126. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/easyhaproxy_swarm.png +0 -0
  127. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/icons.xcf +0 -0
  128. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/logo.png +0 -0
  129. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/logo.xcf +0 -0
  130. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/video-docker-ssl.png +0 -0
  131. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/video-docker.png +0 -0
  132. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/video-kubernetes-letsencrypt.png +0 -0
  133. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/video-kubernetes.png +0 -0
  134. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/video-static.png +0 -0
  135. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/docs/video-tcp-mysql.png +0 -0
  136. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/.helmignore +0 -0
  137. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/LICENSE +0 -0
  138. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/README.md +0 -0
  139. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/_helpers.tpl +0 -0
  140. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/clusterrole.yaml +0 -0
  141. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/clusterrolebinding.yaml +0 -0
  142. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/ingressclass.yaml +0 -0
  143. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/templates/serviceaccount.yaml +0 -0
  144. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/helm/easyhaproxy/values.schema.json +0 -0
  145. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/scripts/bump-version.sh +0 -0
  146. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/easyhaproxy/__init__.py +0 -0
  147. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/easymapping/__init__.py +0 -0
  148. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/easymapping/label_handler.py +0 -0
  149. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/__init__.py +0 -0
  150. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/certbot.py +0 -0
  151. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/container_env.py +0 -0
  152. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/filter.py +0 -0
  153. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/functions.py +0 -0
  154. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/functions/loggers.py +0 -0
  155. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/__init__.py +0 -0
  156. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/__init__.py +0 -0
  157. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/cleanup.py +0 -0
  158. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/cloudflare.py +0 -0
  159. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/deny_pages.py +0 -0
  160. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/ip_whitelist.py +0 -0
  161. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/builtin/jwt_validator.py +0 -0
  162. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/interface.py +0 -0
  163. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/manager.py +0 -0
  164. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/plugins/types.py +0 -0
  165. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/processor/__init__.py +0 -0
  166. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/processor/docker.py +0 -0
  167. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/processor/interface.py +0 -0
  168. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/processor/static.py +0 -0
  169. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/processor/swarm.py +0 -0
  170. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/bind.j2 +0 -0
  171. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/frontend-mode-http.j2 +0 -0
  172. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/frontend-mode-tcp.j2 +0 -0
  173. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/ssl_default.j2 +0 -0
  174. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/ssl_loose.j2 +0 -0
  175. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/src/templates/ssl_strict.j2 +0 -0
  176. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/__init__.py +0 -0
  177. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/no-services.txt +0 -0
  178. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services-fcgi.txt +0 -0
  179. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services-multi-containers.txt +0 -0
  180. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services-redirect-ssl.txt +0 -0
  181. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services-tcp.txt +0 -0
  182. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/services.txt +0 -0
  183. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/expected/ssl-strict.txt +0 -0
  184. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/00_haproxy.cfg +0 -0
  185. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/10_haproxy.cfg +0 -0
  186. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/no-services +0 -0
  187. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/run_bash.sh +0 -0
  188. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services +0 -0
  189. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-changed-label +0 -0
  190. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-clone-to-ssl +0 -0
  191. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-fcgi +0 -0
  192. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-letsencrypt +0 -0
  193. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-multi-containers +0 -0
  194. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-multiple-hosts +0 -0
  195. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-redirect-ssl +0 -0
  196. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-tcp +0 -0
  197. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-with-cloudflare +0 -0
  198. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-with-deny-pages +0 -0
  199. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-with-ip-whitelist +0 -0
  200. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-with-jwt-validator +0 -0
  201. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/services-with-multiple-plugins +0 -0
  202. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/static.yml +0 -0
  203. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/static_cors.yml +0 -0
  204. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/fixtures/static_multi_domain.yml +0 -0
  205. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_certbot.py +0 -0
  206. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_certbot_haproxy_config.py +0 -0
  207. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_containerenv.py +0 -0
  208. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_daemonize.py +0 -0
  209. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_docker.py +0 -0
  210. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_functions.py +0 -0
  211. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_kubernetes_processor.py +0 -0
  212. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_labels.py +0 -0
  213. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_parser.py +0 -0
  214. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests/test_static.py +0 -0
  215. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/conftest.py +0 -0
  216. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/AGENTS.md +0 -0
  217. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-changed-label.yml +0 -0
  218. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-cloudflare.yml +0 -0
  219. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-ip-whitelist.yml +0 -0
  220. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-jwt-validator.yml +0 -0
  221. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-multi-containers.yml +0 -0
  222. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-plugins-combined.yml +0 -0
  223. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-portainer-app-example.yml +0 -0
  224. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose-proxy-headers.yml +0 -0
  225. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/docker-compose.yml +0 -0
  226. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/pebble-config.json +0 -0
  227. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/php-app/index.php +0 -0
  228. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/php-app/info.php +0 -0
  229. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/docker/php-app/test-path-info.php +0 -0
  230. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/fixtures/header-echo/Dockerfile +0 -0
  231. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/fixtures/header-echo/README.md +0 -0
  232. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/fixtures/header-echo/server.py +0 -0
  233. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/generate-keys.sh +0 -0
  234. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/.gitignore +0 -0
  235. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/jwt-validator-secret-example.yml +0 -0
  236. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/setup-cluster.sh +0 -0
  237. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/kubernetes/teardown-cluster.sh +0 -0
  238. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/static/conf/config-basic.yml +0 -0
  239. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/static/conf/config-certbot.yml +0 -0
  240. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/static/conf/config-deny-pages.yml +0 -0
  241. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/static/conf/config-jwt-validator.yml +0 -0
  242. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/static/docker-compose.yml +0 -0
  243. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/cloudflare.yml +0 -0
  244. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/easyhaproxy.yml +0 -0
  245. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/ip-whitelist.yml +0 -0
  246. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/jwt-validator.yml +0 -0
  247. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/plugins-combined.yml +0 -0
  248. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/portainer.yml +0 -0
  249. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/swarm/services.yml +0 -0
  250. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/test_proxy_headers.py +0 -0
  251. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/test_static.py +0 -0
  252. {easyhaproxy-6.0.0 → easyhaproxy-6.1.0}/tests_e2e/test_swarm.py +0 -0
  253. {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@v4
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@v4
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@v4
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@v4
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@v4
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@v4
173
+ uses: actions/checkout@v7
174
174
 
175
175
  - name: Set up QEMU
176
- uses: docker/setup-qemu-action@v3
176
+ uses: docker/setup-qemu-action@v4
177
177
 
178
178
  - name: Set up Docker Buildx
179
- uses: docker/setup-buildx-action@v3
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@v3
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@v5
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@v6
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@v6
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@v5
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@v4
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@v4
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@v4
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.0.0
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
  [![Sponsor](https://img.shields.io/badge/Sponsor-%23ea4aaa?logo=githubsponsors&logoColor=white&labelColor=0d1117)](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 the `haproxy.cfg` based on metadata collected from your workloads (Docker labels, Swarm service labels, or Kubernetes ingress annotations).
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
- EasyHAProxy will discover services based on Docker (or Swarm) labels and Kubernetes ingress annotations, then dynamically build the `haproxy.cfg`. Below, EasyHAProxy main features:
88
-
89
- - Support Automatic Certificate Management Environment (ACME) protocol compatible with Let's Encrypt and other CAs.
90
- - Set your custom SSL certificates
91
- - Balance traffic between multiple replicas
92
- - Set SSL policies (`strict`, `default`, `loose`) via `EASYHAPROXY_SSL_MODE`.
93
- - Set up HAProxy to listen to TCP.
94
- - Add redirects.
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
- ## Detailed Instructions
81
+ ## Supported platforms
111
82
 
112
- For detailed instructions on how to use EasyHAProxy, follow the instructions for the platform you want to use:
83
+ [![Kubernetes](docs/easyhaproxy_kubernetes.png)](docs/getting-started/kubernetes.md)
84
+ [![Docker Swarm](docs/easyhaproxy_swarm.png)](docs/getting-started/swarm.md)
85
+ [![Docker](docs/easyhaproxy_docker.png)](docs/getting-started/docker.md)
86
+ [![Static](docs/easyhaproxy_static.png)](docs/getting-started/static.md)
113
87
 
114
- [![Kubernetes](docs/easyhaproxy_kubernetes.png)](docs/kubernetes.md)
115
- [![Docker Swarm](docs/easyhaproxy_swarm.png)](docs/swarm.md)
116
- [![Docker](docs/easyhaproxy_docker.png)](docs/docker.md)
117
- [![Static](docs/easyhaproxy_static.png)](docs/static.md)
88
+ Install using tools:
118
89
 
119
- Or you can install using tools:
90
+ [![Helm](docs/easyhaproxy_helm.png)](docs/guides/helm.md)
91
+ [![MicroK8s](docs/easyhaproxy_microk8s.png)](docs/guides/microk8s.md)
92
+ [![Dokku](docs/easyhaproxy_dokku.png)](docs/guides/dokku.md)
93
+ [![DigitalOcean](docs/easyhaproxy_digitalocean.png)](docs/guides/digitalocean.md)
120
94
 
121
- [![Helm](docs/easyhaproxy_helm.png)](docs/helm.md)
122
- [![MicroK8s](docs/easyhaproxy_microk8s.png)](docs/microk8s.md)
123
- [![Dokku](docs/easyhaproxy_dokku.png)](docs/dokku.md)
124
- [![DigitalOcean](docs/easyhaproxy_digitalocean.png)](docs/digitalocean.md)
95
+ ## Documentation
125
96
 
126
- ## Special Topics
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
- If you already set up the EasyHAProxy, is time to go deeper:
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
- # Format code
178
- make format
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
- ### Installing the Package
111
+ ## Monitoring Dashboard
182
112
 
183
- ```bash
184
- # Install with uv
185
- uv pip install easymapping
113
+ [![HAProxy Monitor](docs/dashboard_thumbnail.png)](docs/guides/dashboard.md)
186
114
 
187
- # Or install from source
188
- uv pip install -e ".[dev]"
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
+ [![Sponsor](https://img.shields.io/badge/Sponsor-%23ea4aaa?logo=githubsponsors&logoColor=white&labelColor=0d1117)](https://github.com/sponsors/byjg)
9
+ [![Opensource ByJG](https://img.shields.io/badge/opensource-byjg-success.svg)](http://opensource.byjg.com)
10
+ [![Build Status](https://github.com/byjg/docker-easy-haproxy/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/byjg/docker-easy-haproxy/actions/workflows/build.yml)
11
+ [![GitHub source](https://img.shields.io/badge/Github-source-informational?logo=github)](https://github.com/byjg/docker-easy-haproxy/)
12
+ [![GitHub license](https://img.shields.io/github/license/byjg/docker-easy-haproxy.svg)](https://opensource.byjg.com/opensource/licensing.html)
13
+ [![GitHub release](https://img.shields.io/github/release/byjg/docker-easy-haproxy.svg)](https://github.com/byjg/docker-easy-haproxy/releases/)
14
+ [![Helm Version](https://img.shields.io/badge/dynamic/yaml?color=blue&label=Helm&query=%24.entries.easyhaproxy%5B0%5D.version&url=http%3A%2F%2Fopensource.byjg.com%2Fhelm%2Findex.yaml)](https://opensource.byjg.com/helm)
15
+ [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/byjg)](https://artifacthub.io/packages/search?repo=byjg)
16
+
17
+ ![EasyHAProxy](docs/easyhaproxy_logo.png)
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
+ [![Kubernetes](docs/easyhaproxy_kubernetes.png)](docs/getting-started/kubernetes.md)
37
+ [![Docker Swarm](docs/easyhaproxy_swarm.png)](docs/getting-started/swarm.md)
38
+ [![Docker](docs/easyhaproxy_docker.png)](docs/getting-started/docker.md)
39
+ [![Static](docs/easyhaproxy_static.png)](docs/getting-started/static.md)
40
+
41
+ Install using tools:
42
+
43
+ [![Helm](docs/easyhaproxy_helm.png)](docs/guides/helm.md)
44
+ [![MicroK8s](docs/easyhaproxy_microk8s.png)](docs/guides/microk8s.md)
45
+ [![Dokku](docs/easyhaproxy_dokku.png)](docs/guides/dokku.md)
46
+ [![DigitalOcean](docs/easyhaproxy_digitalocean.png)](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
+ [![HAProxy Monitor](docs/dashboard_thumbnail.png)](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
+ [![Docker In Action](docs/video-docker.png)](https://youtu.be/ar8raFK0R1k)
76
+ [![Docker and Letsencrypt](docs/video-docker-ssl.png)](https://youtu.be/xwIdj9mc2mU)
77
+ [![K8s In Action](docs/video-kubernetes.png)](https://youtu.be/uq7TuLIijks)
78
+ [![K8s and Letsencrypt](docs/video-kubernetes-letsencrypt.png)](https://youtu.be/v9Q4M5Al7AQ)
79
+ [![Static Configuration](docs/video-static.png)](https://youtu.be/B_bYZnRTGJM)
80
+ [![TCP Mode](docs/video-tcp-mysql.png)](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.0.0` (as of Chart.yaml)
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 |