Giter Site home page Giter Site logo

lazy-balancer's Introduction

Lazy-Balancer

项目起源于好哥们需要一个 7 层负载均衡器,无奈商业负载均衡器成本高昂,操作复杂。又没有特别喜欢(好看,好用)的开源产品,作为一名大 Ops 怎么能没有办法?正好最近在看 Django 框架,尝试自己给 Nginx 画皮,项目诞生!非专业开发,代码凑合看吧。

  • 项目基于 Django + AdminLTE 构建,在 Ubuntu 18.04 上测试通过;为了保证良好的兼容性,请使用 Chrome 浏览器。
  • 为了后续扩展方便,请大家使用 Tengine 替代 Nginx 服务

项目地址

更新(2024-07-18)

  • 优化 修改 DNS 解析超时时间为 5 秒,防止域名解析慢导致的 Nginx 启动失败

  • 优化 配置同步逻辑,从节点同步前会检测主节点配置状态,如果配置异常则直接同步失败

  • 优化 Docker 启动命令默认限制容器日志大小,请按需修改

  • 优化 新增默认数据库,新环境不再需要执行初始化数据库操作

    如果升级,请备份您的数据库或配置文件,防止覆盖或丢失

  • 新增 Dashboard 页面增加 Nginx 手动开关

    操作接口会占用本地 9001,更新时请确保没有规则使用该端口

  • 新增 同步状态及配置查询 API,请查阅 API 文档

  • 新增 配置同步失败关闭 Nginx 功能(可选),防止多节点同步异常导致的服务异常

    请自行监控并使用前端 LB 执行健康检测

  • 修复 Vagrant 部署脚本,快速搭建本地开发环境

更新(2024-01-23)

  • 新增 Dashboard 页面 5 秒自动刷新所有数据

  • 新增 nginx-module-vts 模块,实现更完善的流量监测能力

    • 新增 Dashboard 页面 Nginx 启动时间显示

      API 中同步增加字段,单位为 ms,可以自行转换

    • 新增 Dashboard 页面中 TCP 流量监测功能

    • 新增 Dashboard 页面中流量统计 MB/GB 单位自适应显示,单位超过 GB 会加粗显示

    • 新增 Prometheus 格式流量监测接口

      该服务会占用 9191/tcp 端口 可以在系统设置中打开 公开指标接口 功能,以实现外部监控,该功能可能造成隐私泄露等安全风险,建议使用 Telegraf 等方案从本地收集数据

      上游服务器健康状态(HTTP/TCP)<BASE_URL>:9191/up_status?format=[prometheus|json|html]

      流量统计(HTTP)<BASE_URL>:9191/req_status_http/format/[prometheus|json|html]/

      流量统计(TCP)<BASE_URL>:9191/req_status_tcp/format/[prometheus|json|html]/

  • 优化 因插件功能冲突,动态域名解析功能,由原 ngx_upstream_jdomain 模块更换为 Tengine 自带 ngx_http_upstream_dynamic 模块

    ngx_http_upstream_dynamic 模块和主动健康检测模块及负载均衡算法实现冲突,开启动态域名解析功能后,需要由 DNS 实现负载均衡及健康检测

  • 优化 暂时精简 LuaJIT 环境

  • 优化 引入 jemalloc 进行内存管理优化

  • 优化 默认使用 VNSWRR 算法替代 NGINX 负载均衡算法

更新(2023-12-03)

  • 更新 Python 到 3.9
  • 更新 Tengine 到 3.1.0
  • 更新 LuaJIT 到 20231006
  • 更新 Alpine 到 3.18.4
  • 更新 部分 Python 依项
  • 优化 在所有保存配置操作前均执行 nginx -t 验证已存在配置,如果异常将不会执行配置渲染及后续操作
  • 优化 状态页面拆分配置和进程状态,现在配置异常不会影响 Nginx 状态,将会独立显示 “配置异常” 状态
  • 优化 服务启动流程,服务启动时将重新生成并应用配置文件,防止错误配置导致的启动失败
  • 优化 修改状态/删除规则时,将允许只保存,不应用配置,以防止现有多条配置失效导致的 nginx 启动失败
  • 优化 导入/保存/重新生成等操作将临时禁用按钮,防止重复点击导致的错误
  • 优化 修改了规则保存逻辑,现在只有在规则检查失败后才会重新渲染配置,在规则数量较多时,极大提高保存速度
  • 优化 默认关闭错误页服务器详细信息显示
  • 新增 “重新应用配置” 功能,可以手动重新渲染或重载 Nginx 配置,默认重新渲染,选择取消后可选择仅重载配置
  • 新增 stream 模块中 proxy_timeout 1800s 固定配置项
  • 新增 check_shm_size 32M 固定配置项
  • 新增 规则列表分页长度配置,默认 10 条,可配置 10-100 条分页
  • 新增 测试支持 ARM 架构,pull 镜像可以使用 --platform linux/arm64 参数
  • 新增 HTTP 类型规则后端节点域名动态检测 ngx_upstream_jdomain 实现,防止 upstream 域名 IP 变动,仅支持 HTTP 协议
  • 新增 更换主动健康检测模块 ngx_healthcheck_module,以解决动态域名模块兼容性问题,并增加 TCP 规则的后端节点检测功能
  • 修复 在 SSL 状态下打开后端域名开关不生效的问题
  • 修复 部分情况下配置错误导入失败无法回滚的 Bug,优化了导入逻辑,略微提升了导入速度
  • 修复 其他交互 Bug

更新(2021-06-16)

  • IPv6 监听支持
  • 更新 Tengine 至 2.3.3

更新(2020-01-21)

  • 从该版本开始,将尝试部分功能 API 化,更多 API 文档见 /api/docs
  • 尝试将 Python 更新至 Python3
  • 修复 TCP 模式下端口占用检测无效的问题

更新(2019-11-22)

  • 新增 TCP 负载均衡支持
  • 新增配置同步功能
  • 支持后端服务器为 HTTPS 协议,当后端为 HTTPS 协议时,HTTP 健康检测将使用发送 SSL Hello 包的方式
  • 支持域名后端,配置为域名后端时禁用节点配置
  • 新增 HTTP/2,Gzip 等配置
  • 增加 Docker 支持
  • 去除原 iptables 防火墙管理功能
  • 当协议为 HTTP/HTTPS 时,允许用户自定义 Server 级别 Nginx 配置
  • 当协议为 HTTP/HTTPS 时,可以在列表页预览后端节点状态
  • 当协议为 HTTP/HTTPS 时,允许用户自定义后端节点域名,当未定义时,转发用户输入的域名
  • 当协议为 HTTPS 时,可以在列表页预览证书过期状态,及获取证书信息
  • 允许后端节点为域名格式
  • 增加 HTTP/80,HTTPS/443 的默认规则,禁止直接 IP 访问(返回444),证书路径在 /etc/nginx/default.*,可自行更换
  • 新增允许非标准 HTTP Header 转发(如下划线_)
  • 修复其他 Bug

更新

  • 将 Nginx 更换为 Tengine 以提供更灵活的功能支持以及性能提升
  • 新增 HTTP 状态码方式检测后端服务器,默认 TCP 方式
  • 新增 HTTP 状态码方式支持查看后端服务器状态
  • 修复因前方有防火墙导致无法获取后端服务器状态
  • 修复因主机头导致后端服务器探测失败
  • 新增自定义管理员用户
  • 新增配置通过文件备份和还原
  • 新增实时查看访问日志和错误日志
  • 新增实时请求统计
  • 更新 Vagrantfile
  • 修复其他 Bug

功能

  • Nginx 可视化配置
  • Nginx 负载均衡(反向代理)配置
  • Nginx 证书支持
  • 系统状态监测
  • 支持 TCP 被动后端节点宕机检测
  • 支持 HTTP 主动后端节点宕机检测
  • 日志实时查询
  • 请求统计

运行

容器

  • 编译镜像

    nerdctl build --platform=arm64,amd64 -t <lazy-balancer>:<v1.3.9.1beta> .
    

    也可以 DockerHub https://hub.docker.com/r/v55448330/lazy-balancer

  • 启动命令

    docker run -d --restart=always --net=host --name=lazy_balancer \
      --log-opt max-size=500m \
      --log-opt max-file=3 \
      -v <db_dir>:/app/lazy_balancer/db \
      -v <log_dir>:/var/log/nginx \
      <lazy-balancer>:<v1.3.9.1beta> or v55448330/lazy-balancer:latest
    

    主机

  • 部署

部署方式参照 deploy.sh 脚本

  • 启动服务

    supervisord -c /app/lazy_balancer/service/supervisord_docker.conf
    

    or

    supervisorctl start webui
    supervisorctl start nginx
    
  • 登录系统

    http://[IP]:8000/  
    

    首次登陆会要求创建管理员用户,如需修改,可在系统配置中重置管理员用户

演示

image image image image image image image image image image image image image image

授权

本项目由 小宝 维护,采用 GPLv3 开源协议。欢迎反馈!欢迎贡献代码!

lazy-balancer's People

Contributors

itwye avatar owenchenxy avatar v55448330 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lazy-balancer's Issues

http://127.0.0.1/req_status

File "/home/lizx/lazy-balancer-master/dashboard/views.py", line 26, in get_status_info
'bytes_in' : r[2],
IndexError: list index out of range

/home/lizx/lazy-balancer-master# vi ./nginx/views.py
get_req_status()

http://127.0.0.1/req_status 不能访问,怎么处理

请求添加 ldap 用户接入支持

没想到项目23 年还在更新,给力啊! 之前的老版本用了 2 年多了,主要用来做测试环境的外网映射端口确实很不错
日常使用就一个问题,希望能对接公司 ldap 用户,这样可以让其他用户登录进来自助添加端口映射和查询,
权限上可以保持和本地 admin一样的权限即可,不用做额外细化处理,这样就很完美了

本来以为项目不更新了,希望作者大大有空能考虑下把接入 ldap 特性加进去 :)

支持HttpGuard以提供完善的安全服务

开发者您好,
您的项目非常出色。
在生产和使用过程中高效的解决了问题。
这里提出一个小建议:
希望能增加HttpGuard来提供Nginx安全防护,包括WAF和防CC。
感谢您的浏览,希望您能够采纳。

能支持自定义 location / 下面的头信息设置吗?

开发者您好,您的项目非常好用。

但当前遇到下面这个情况:
搭建harbor(使用 http 协议),然后使用 lazy-balancer 进行负载并设置为 https 协议,配置完成后推送镜像会出现 unknown blob 的错误信息。

[root@node ~]# docker push registry.xxx.com/library/redis:4.0.11
The push refers to repository [registry.xxx.com/library/redis]
30ef89133368: Pushing [==================================================>]  3.584kB
c51049421f35: Pushing  1.536kB
54363b01291a: Pushing [==================================================>]   24.8MB/24.8MB
94bdf74df564: Pushing [>                                                  ]  48.13kB/2.999MB
2c1e04fae1f2: Pushing [==================================================>]  338.4kB
ef68f6734aa4: Waiting
unknown blob

删除这两个头信息就可以解决此问题,所以能支持自定义 location / 下面的头信息设置吗?

proxy_set_header Host			$host;
proxy_set_header X-Forwarded-Host	$host;

IPv6 Support with Lazy Balancer

Hi,

I am using Lazy Balancer and its fantastic project for my Container Hosting, but i would like to ask you is there any possibility where i can also use IPv6 to bind with Lazy Balancer because current setup only bind IPv4.

Your support will be highly appreciated.

please help: make error in ubuntu 18

cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I src/proc -I objs
-o objs/src/core/ngx_murmurhash.o
src/core/ngx_murmurhash.c
src/core/ngx_murmurhash.c: In function ‘ngx_murmur_hash2’:
src/core/ngx_murmurhash.c:37:11: error: this statement may fall through [-Werror=implicit-fallthrough=]
h ^= data[2] << 16;
~~^~~~~~~~~~~~~~~~
src/core/ngx_murmurhash.c:38:5: note: here
case 2:
^~~~
src/core/ngx_murmurhash.c:39:11: error: this statement may fall through [-Werror=implicit-fallthrough=]
h ^= data[1] << 8;
~~^~~~~~~~~~~~~~~
src/core/ngx_murmurhash.c:40:5: note: here
case 1:
^~~~
cc1: all warnings being treated as errors
objs/Makefile:477: recipe for target 'objs/src/core/ngx_murmurhash.o' failed
make[1]: *** [objs/src/core/ngx_murmurhash.o] Error 1
make[1]: Leaving directory '/app/lazy_balancer/resource/nginx/tengine'

忘记密码

我在登陆页面忘记了旧密码,请问我需要怎么做才能重置密码

Language

Possible multi language or englesh ?

ubuntu 18.04初始化数据库失败

刚下载了最新库。因为没有了之前的tengine,我是下载最新的tengine库。

No handlers could be found for logger "django_apscheduler"
Traceback (most recent call last):
File "manage.py", line 10, in
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/init.py", line 364, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/init.py", line 356, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/makemigrations.py", line 110, in handle
loader.check_consistent_history(connection)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/loader.py", line 283, in check_consistent_history
applied = recorder.applied_migrations()
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/recorder.py", line 65, in applied_migrations
self.ensure_schema()
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/recorder.py", line 52, in ensure_schema
if self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor()):
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/base.py", line 254, in cursor
return self._cursor()
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/base.py", line 229, in _cursor
self.ensure_connection()
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/base.py", line 213, in ensure_connection
self.connect()
File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 94, in exit
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/base.py", line 213, in ensure_connection
self.connect()
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/base.py", line 189, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py", line 198, in get_new_connection
conn = Database.connect(**conn_params)
django.db.utils.OperationalError: unable to open database file

ubuntu18.04 初始化数据库 失败

Traceback (most recent call last):
File "manage.py", line 10, in
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/init.py", line 353, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/init.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 398, in execute
self.check()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 426, in check
include_deployment_checks=include_deployment_checks,
File "/usr/local/lib/python2.7/dist-packages/django/core/checks/registry.py", line 75, in run_checks
new_errors = check(app_configs=app_configs)
File "/usr/local/lib/python2.7/dist-packages/django/core/checks/urls.py", line 13, in check_url_config
return check_resolver(resolver)
File "/usr/local/lib/python2.7/dist-packages/django/core/checks/urls.py", line 23, in check_resolver
for pattern in resolver.url_patterns:
File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 33, in get
res = instance.dict[self.name] = self.func(instance)
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 417, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 33, in get
res = instance.dict[self.name] = self.func(instance)
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 410, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python2.7/importlib/init.py", line 37, in import_module
import(name)
File "/app/lazy_balancer/lazy_balancer/urls.py", line 20, in
from .views import logout_view,login_view,create_superuser
File "/app/lazy_balancer/lazy_balancer/views.py", line 10, in
from nginx.ip import *
File "/app/lazy_balancer/nginx/ip.py", line 3, in
import iptc
File "/usr/local/lib/python2.7/dist-packages/iptc/init.py", line 10, in
from iptc.ip4tc import (is_table_available, Table, Chain, Rule, Match, Target,
File "/usr/local/lib/python2.7/dist-packages/iptc/ip4tc.py", line 13, in
from .xtables import (XT_INV_PROTO, NFPROTO_IPV4, XTablesError, xtables,
File "/usr/local/lib/python2.7/dist-packages/iptc/xtables.py", line 704, in
raise XTablesError("can't find directory with extensions; "
iptc.xtables.XTablesError: can't find directory with extensions; please set XTABLES_LIBDIR

疑似缺少 django_apscheduler_djangojob 表,还是我的姿势不对?

@v55448330 大佬 你好,按照文档运行镜像,查看日志出现以下报错正常吗?

# docker run -p 8000:8000  v55448330/lazy-balancer:v1.3.2beta

2020-02-27 18:50:45,652 INFO Included extra file "/app/lazy_balancer/service/conf.d/supervisor_balancer_docker.conf" during parsing
2020-02-27 18:50:45,652 INFO Included extra file "/app/lazy_balancer/service/conf.d/supervisor_balancer_docker.conf" during parsing
2020-02-27 18:50:45,652 INFO Set uid to user 0 succeeded
2020-02-27 18:50:45,652 INFO Set uid to user 0 succeeded
2020-02-27 18:50:45,657 INFO RPC interface 'supervisor' initialized
2020-02-27 18:50:45,657 INFO RPC interface 'supervisor' initialized
2020-02-27 18:50:45,657 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2020-02-27 18:50:45,657 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2020-02-27 18:50:45,657 INFO supervisord started with pid 1
2020-02-27 18:50:45,657 INFO supervisord started with pid 1
2020-02-27 18:50:46,664 INFO spawned: 'nginx' with pid 8
2020-02-27 18:50:46,664 INFO spawned: 'nginx' with pid 8
2020-02-27 18:50:46,668 INFO spawned: 'webui' with pid 9
2020-02-27 18:50:46,668 INFO spawned: 'webui' with pid 9
[2020-02-27 10:50:47,710][INFO][run_with_reloader autoreload]: Watching for file changes with StatReloader
Exception during getting jobs
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: django_apscheduler_djangojob

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django_apscheduler/jobstores.py", line 68, in get_due_jobs
    out = self._get_jobs(next_run_time__lte=serialize_dt(now))
  File "/usr/local/lib/python3.8/site-packages/django_apscheduler/jobstores.py", line 153, in _get_jobs
    for job_id, job_state in job_states:
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 274, in __iter__
    self._fetch_all()
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 1242, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 144, in __iter__
    return compiler.results_iter(tuple_expected=True, chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1085, in results_iter
    results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1133, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 99, in execute
    return super().execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: django_apscheduler_djangojob
Exception during get_next_run_time for jobs
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: django_apscheduler_djangojob

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django_apscheduler/jobstores.py", line 78, in get_next_run_time
    return deserialize_dt(DjangoJob.objects.filter(next_run_time__isnull=False).earliest('next_run_time').next_run_time)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 646, in earliest
    return self._earliest(*fields, field_name=field_name)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 643, in _earliest
    return obj.get()
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 402, in get
    num = len(clone)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 256, in __len__
    self._fetch_all()
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 1242, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 55, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1133, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 99, in execute
    return super().execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: django_apscheduler_djangojob
2020-02-27 18:50:49,800 INFO success: nginx entered RUNNING state, process has stayed up for > than 3 seconds (startsecs)
2020-02-27 18:50:49,800 INFO success: nginx entered RUNNING state, process has stayed up for > than 3 seconds (startsecs)
2020-02-27 18:50:49,800 INFO success: webui entered RUNNING state, process has stayed up for > than 3 seconds (startsecs)
2020-02-27 18:50:49,800 INFO success: webui entered RUNNING state, process has stayed up for > than 3 seconds (startsecs)

进入容器执行初始化数据库貌似也有此类报错信息

# docker exec -it a572b415dc17 sh
# /app/lazy_balancer # python manage.py makemigrations --noinput
reload config error
Exception during getting jobs
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: django_apscheduler_djangojob

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django_apscheduler/jobstores.py", line 68, in get_due_jobs
    out = self._get_jobs(next_run_time__lte=serialize_dt(now))
  File "/usr/local/lib/python3.8/site-packages/django_apscheduler/jobstores.py", line 153, in _get_jobs
    for job_id, job_state in job_states:
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 274, in __iter__
    self._fetch_all()
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 1242, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 144, in __iter__
    return compiler.results_iter(tuple_expected=True, chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1085, in results_iter
    results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1133, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 99, in execute
    return super().execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: django_apscheduler_djangojob
Exception during get_next_run_time for jobs
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: django_apscheduler_djangojob

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django_apscheduler/jobstores.py", line 78, in get_next_run_time
    return deserialize_dt(DjangoJob.objects.filter(next_run_time__isnull=False).earliest('next_run_time').next_run_time)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 646, in earliest
    return self._earliest(*fields, field_name=field_name)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 643, in _earliest
    return obj.get()
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 402, in get
    num = len(clone)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 256, in __len__
    self._fetch_all()
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 1242, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 55, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1133, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 99, in execute
    return super().execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: django_apscheduler_djangojob
No changes detected


# /app/lazy_balancer #  python manage.py migrate --run-syncdb
reload config error
Exception during getting jobs
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: django_apscheduler_djangojob

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django_apscheduler/jobstores.py", line 68, in get_due_jobs
    out = self._get_jobs(next_run_time__lte=serialize_dt(now))
  File "/usr/local/lib/python3.8/site-packages/django_apscheduler/jobstores.py", line 153, in _get_jobs
    for job_id, job_state in job_states:
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 274, in __iter__
    self._fetch_all()
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 1242, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 144, in __iter__
    return compiler.results_iter(tuple_expected=True, chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1085, in results_iter
    results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1133, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 99, in execute
    return super().execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: django_apscheduler_djangojob
Exception during get_next_run_time for jobs
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: django_apscheduler_djangojob

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django_apscheduler/jobstores.py", line 78, in get_next_run_time
    return deserialize_dt(DjangoJob.objects.filter(next_run_time__isnull=False).earliest('next_run_time').next_run_time)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 646, in earliest
    return self._earliest(*fields, field_name=field_name)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 643, in _earliest
    return obj.get()
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 402, in get
    num = len(clone)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 256, in __len__
    self._fetch_all()
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 1242, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 55, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1133, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 99, in execute
    return super().execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: django_apscheduler_djangojob
Operations to perform:
  Synchronize unmigrated apps: api, coreapi, customfilter, dashboard, django_filters, drf_yasg, main, messages, nginx, proxy, rest_framework, settings, staticfiles
  Apply all migrations: admin, auth, contenttypes, django_apscheduler, sessions
Synchronizing apps without migrations:
  Creating tables...
    Creating table t_settings
    Creating table t_settings_sync_status
    Creating table t_main_config
    Creating table t_proxy_upstream_config
    Creating table t_proxy_config
    Running deferred SQL...
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying django_apscheduler.0001_initial... OK
  Applying django_apscheduler.0002_auto_20180412_0758... OK
  Applying sessions.0001_initial... OK

Docker部署的情况下访问Post接口报错。

Docker部署后Get接口访问正常,Post接口访问报错
错误信息为 :
400Undocumented | Error: Bad RequestResponse headers connection: keep-alive content-length: 0 date: Thu, 02 Jan 2020 01:28:52 GMT server: Tengine
以上错误信息为默认配置下产生。不知道是不是我配置有啥问题。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.