{"id":13585652,"url":"https://github.com/v55448330/lazy-balancer","last_synced_at":"2025-04-07T10:31:33.691Z","repository":{"id":9736193,"uuid":"62794699","full_name":"v55448330/lazy-balancer","owner":"v55448330","description":"nginx for balancer web ui","archived":false,"fork":false,"pushed_at":"2024-01-25T09:30:09.000Z","size":18691,"stargazers_count":553,"open_issues_count":7,"forks_count":230,"subscribers_count":52,"default_branch":"master","last_synced_at":"2024-02-14T21:13:59.920Z","etag":null,"topics":["balancer","django","load-balancer","nginx","tcp","tengine"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/v55448330.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-07-07T09:38:08.000Z","updated_at":"2024-07-17T05:33:59.611Z","dependencies_parsed_at":"2023-12-21T14:00:44.651Z","dependency_job_id":"850dcc3a-5961-4542-a114-3c77290b164e","html_url":"https://github.com/v55448330/lazy-balancer","commit_stats":null,"previous_names":[],"tags_count":60,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v55448330%2Flazy-balancer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v55448330%2Flazy-balancer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v55448330%2Flazy-balancer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v55448330%2Flazy-balancer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/v55448330","download_url":"https://codeload.github.com/v55448330/lazy-balancer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247636420,"owners_count":20970927,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["balancer","django","load-balancer","nginx","tcp","tengine"],"created_at":"2024-08-01T15:05:03.841Z","updated_at":"2025-04-07T10:31:32.398Z","avatar_url":"https://github.com/v55448330.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Lazy-Balancer\n\n项目起源于好哥们需要一个 7 层负载均衡器，无奈商业负载均衡器成本高昂，操作复杂。又没有特别喜欢（好看，好用）的开源产品，作为一名大 Ops 怎么能没有办法？正好最近在看 Django 框架，尝试自己给 Nginx 画皮，项目诞生！非专业开发，代码凑合看吧。\n\n\u003e * 项目基于 [Django](https://www.djangoproject.com/) + [AdminLTE](https://www.almsaeedstudio.com/) 构建，在 Ubuntu 18.04 上测试通过；为了保证良好的兼容性，请使用 Chrome 浏览器。\n\u003e * 为了后续扩展方便，请大家使用 [Tengine](http://tengine.taobao.org/) 替代 Nginx 服务\n\n## 项目地址\n\n- GITHUB - https://github.com/v55448330/lazy-balancer\n- 码云 - http://git.oschina.net/v55448330/lazy-balancer\n- OSCHINA - http://www.oschina.net/p/nginx-balancer\n\n## 更新（2024-10-31）\n\n* 新增 全局配置中支持自定义日志格式\n* 优化 新增部分功能提示信息\n* 优化 适配移动端浏览器样式\n\n\u003e 本次更新涉及数据库变动，无法直接升级，请备份配置后，删除数据库并重新还原配置\n\n## 更新（2024-07-18）\n\n* 优化 修改 DNS 解析超时时间为 5 秒，防止域名解析慢导致的 Nginx 启动失败\n* 优化 配置同步逻辑，从节点同步前会检测主节点配置状态，如果配置异常则直接同步失败\n* 优化 Docker 启动命令默认限制容器日志大小，请按需修改\n* 优化 新增默认数据库，新环境不再需要执行初始化数据库操作\n  \n  \u003e 如果升级，请备份您的数据库或配置文件，防止覆盖或丢失\n* 新增 Dashboard 页面增加 Nginx 手动开关\n\n  \u003e 操作接口会占用本地 9001，更新时请确保没有规则使用该端口\n\n* 新增 同步状态及配置查询 API，请查阅 API 文档\n* 新增 配置同步失败关闭 Nginx 功能（可选），防止多节点同步异常导致的服务异常\n  \n  \u003e 请自行监控并使用前端 LB 执行健康检测\n* 修复 Vagrant 部署脚本，快速搭建本地开发环境\n\n## 更新（2024-01-23）\n\n* 新增 Dashboard 页面 5 秒自动刷新所有数据\n* 新增 [nginx-module-vts](https://github.com/vozlt/nginx-module-vts) 模块，实现更完善的流量监测能力\n  * 新增 Dashboard 页面 Nginx 启动时间显示\n    \n    \u003e API 中同步增加字段，单位为 ms，可以自行转换\n  * 新增 Dashboard 页面中 TCP 流量监测功能\n  * 新增 Dashboard 页面中流量统计 MB/GB 单位自适应显示，单位超过 GB 会加粗显示\n  * 新增 Prometheus 格式流量监测接口\n    \n    \u003e 该服务会占用 `9191/tcp` 端口\n    \u003e 可以在系统设置中打开 `公开指标接口` 功能，以实现外部监控，该功能可能造成隐私泄露等安全风险，建议使用 Telegraf 等方案从本地收集数据\n    \u003e \n    \u003e 上游服务器健康状态（HTTP/TCP）`\u003cBASE_URL\u003e:9191/up_status?format=[prometheus|json|html]`\n    \u003e \n    \u003e 流量统计（HTTP）`\u003cBASE_URL\u003e:9191/req_status_http/format/[prometheus|json|html]/`\n    \u003e \n    \u003e 流量统计（TCP）`\u003cBASE_URL\u003e:9191/req_status_tcp/format/[prometheus|json|html]/`\n* 优化 因插件功能冲突，动态域名解析功能，由原 [ngx_upstream_jdomain](https://github.com/nicholaschiasson/ngx_upstream_jdomain) 模块更换为 Tengine 自带 [ngx_http_upstream_dynamic](https://tengine.taobao.org/document_cn/http_upstream_dynamic_cn.html) 模块\n  \n  \u003e 因 `ngx_http_upstream_dynamic` 模块和主动健康检测模块及负载均衡算法实现冲突，开启动态域名解析功能后，需要由 DNS 实现负载均衡及健康检测\n* 优化 暂时精简 LuaJIT 环境\n* 优化 引入 [jemalloc](https://jemalloc.net/) 进行内存管理优化\n* 优化 默认使用 [VNSWRR](https://tengine.taobao.org/document_cn/ngx_http_upstream_vnswrr_module_cn.html) 算法替代 NGINX 负载均衡算法\n\n## 更新（2023-12-03）\n\n* 更新 Python 到 3.9\n* 更新 Tengine 到 3.1.0\n* 更新 LuaJIT 到 20231006\n* 更新 Alpine 到 3.18.4\n* 更新 部分 Python 依项\n* 优化 在所有保存配置操作前均执行 nginx -t 验证已存在配置，如果异常将不会执行配置渲染及后续操作\n* 优化 状态页面拆分配置和进程状态，现在配置异常不会影响 Nginx 状态，将会独立显示 “配置异常” 状态\n* 优化 服务启动流程，服务启动时将重新生成并应用配置文件，防止错误配置导致的启动失败\n* 优化 修改状态/删除规则时，将允许只保存，不应用配置，以防止现有多条配置失效导致的 nginx 启动失败\n* 优化 导入/保存/重新生成等操作将临时禁用按钮，防止重复点击导致的错误\n* 优化 修改了规则保存逻辑，现在只有在规则检查失败后才会重新渲染配置，在规则数量较多时，极大提高保存速度\n* 优化 默认关闭错误页服务器详细信息显示\n* 新增 “重新应用配置” 功能，可以手动重新渲染或重载 Nginx 配置，默认重新渲染，选择取消后可选择仅重载配置\n* 新增 stream 模块中 proxy_timeout 1800s 固定配置项\n* 新增 check_shm_size 32M 固定配置项\n* 新增 规则列表分页长度配置，默认 10 条，可配置 10-100 条分页\n* 新增 测试支持 ARM 架构，pull 镜像可以使用 `--platform linux/arm64` 参数\n* 新增 HTTP 类型规则后端节点域名动态检测 [ngx_upstream_jdomain](https://github.com/nicholaschiasson/ngx_upstream_jdomain) 实现，防止 upstream 域名 IP 变动，仅支持 HTTP 协议\n* 新增 更换主动健康检测模块 [ngx_healthcheck_module](https://github.com/zhouchangxun/ngx_healthcheck_module)，以解决动态域名模块兼容性问题，并增加 TCP 规则的后端节点检测功能\n* 修复 在 SSL 状态下打开后端域名开关不生效的问题\n* 修复 部分情况下配置错误导入失败无法回滚的 Bug，优化了导入逻辑，略微提升了导入速度\n* 修复 其他交互 Bug\n\n## 更新（2021-06-16）\n\n* IPv6 监听支持\n* 更新 Tengine 至 2.3.3\n\n## 更新（2020-01-21）\n\n* 从该版本开始，将尝试部分功能 API 化，更多 API 文档见 `/api/docs`\n* 尝试将 Python 更新至 Python3\n* 修复 TCP 模式下端口占用检测无效的问题\n\n## 更新（2019-11-22）\n\n* 新增 TCP 负载均衡支持\n* 新增配置同步功能\n* 支持后端服务器为 HTTPS 协议，当后端为 HTTPS 协议时，HTTP 健康检测将使用发送 SSL Hello 包的方式\n* 支持域名后端，配置为域名后端时禁用节点配置\n* 新增 HTTP/2，Gzip 等配置\n* 增加 Docker 支持\n* 去除原 iptables 防火墙管理功能\n* 当协议为 HTTP/HTTPS 时，允许用户自定义 Server 级别 Nginx 配置\n* 当协议为 HTTP/HTTPS 时，可以在列表页预览后端节点状态\n* 当协议为 HTTP/HTTPS 时，允许用户自定义后端节点域名，当未定义时，转发用户输入的域名\n* 当协议为 HTTPS 时，可以在列表页预览证书过期状态，及获取证书信息\n* 允许后端节点为域名格式\n* 增加 HTTP/80，HTTPS/443 的默认规则，禁止直接 IP 访问（返回444），证书路径在 `/etc/nginx/default.*`，可自行更换\n* 新增允许非标准 HTTP Header 转发（如下划线_）\n* 修复其他 Bug\n\n## 更新\n\n* 将 Nginx 更换为 Tengine 以提供更灵活的功能支持以及性能提升\n* 新增 HTTP 状态码方式检测后端服务器，默认 TCP 方式\n* 新增 HTTP 状态码方式支持查看后端服务器状态\n* 修复因前方有防火墙导致无法获取后端服务器状态\n* 修复因主机头导致后端服务器探测失败\n* 新增自定义管理员用户\n* 新增配置通过文件备份和还原\n* 新增实时查看访问日志和错误日志\n* 新增实时请求统计\n* 更新 Vagrantfile\n* 修复其他 Bug\n\n## 功能\n\n* Nginx 可视化配置\n* Nginx 负载均衡（反向代理）配置\n* Nginx 证书支持\n* 系统状态监测\n* 支持 TCP 被动后端节点宕机检测\n* 支持 HTTP 主动后端节点宕机检测\n* 日志实时查询\n* 请求统计\n\n## 运行\n\n### 容器\n\n* 编译镜像\n  \n  ```\n  nerdctl build --platform=arm64,amd64 -t \u003clazy-balancer\u003e:\u003cv1.4.0beta\u003e .\n  ```\n  \n  \u003e 也可以 DockerHub `https://hub.docker.com/r/v55448330/lazy-balancer`\n\n* 启动命令\n  \n  ```\n  docker run -d --restart=always --net=host --name=lazy_balancer \\\n    --log-opt max-size=500m \\\n    --log-opt max-file=3 \\\n    -v \u003cdb_dir\u003e:/app/lazy_balancer/db \\\n    -v \u003clog_dir\u003e:/var/log/nginx \\\n    \u003clazy-balancer\u003e:\u003cv1.4.0beta\u003e or v55448330/lazy-balancer:latest\n  ```\n  \n  ### 主机\n\n* 部署\n\n\u003e 部署方式参照 `deploy.sh` 脚本\n\n* 启动服务\n  \n  ```\n  supervisord -c /app/lazy_balancer/service/supervisord_docker.conf\n  ```\n\n  or\n    ```\n    supervisorctl start webui\n    supervisorctl start nginx\n    ```\n  \n* 登录系统\n  ```\n  http://[IP]:8000/  \n  ```\n  \u003e 首次登陆会要求创建管理员用户，如需修改，可在系统配置中重置管理员用户\n\n## 演示\n\n### PC 端\n\n![image](readme_img/1.jpg)\n![image](readme_img/2.png)\n![image](readme_img/3.png)\n![image](readme_img/4.png)\n![image](readme_img/5.jpg)\n![image](readme_img/6.jpg)\n![image](readme_img/7.jpg)\n![image](readme_img/8.png)\n![image](readme_img/9.png)\n![image](readme_img/10.jpg)\n![image](readme_img/11.jpg)\n![image](readme_img/12.png)\n![image](readme_img/13.jpg)\n![image](readme_img/14.jpg)\n\n### Mobile 端\n\n![image](readme_img/m1.png)\n![image](readme_img/m2.png)\n![image](readme_img/m3.png)\n![image](readme_img/m4.png)\n\n## 授权\n本项目由 [小宝](http://www.ichegg.org) 维护，采用 [GPLv3](http://www.gnu.org/licenses/gpl-3.0.html) 开源协议。欢迎反馈！欢迎贡献代码！\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fv55448330%2Flazy-balancer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fv55448330%2Flazy-balancer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fv55448330%2Flazy-balancer/lists"}