查看端口号是不是被占用
netstat -anp | grep 8080
复制代码
查看应用的进程
ps aux|grep nginx
复制代码
flask部分
- flask部分
- 首先flask写服务的部分略去(和业务相关)
gunicorn部分
-
gunicorn部分
-
首先我们的flask项目的启动方式是:
-
app.run(host="0.0.0.0",use_reloader=True, port=5000) 复制代码
-
-
我们使用gunicorn进行启动的话,不用写端口号,可以使用gunicorn设置启动的端口号
-
# flask服务的启动方式变成 app.run(debug=False) 复制代码
-
使用gunicorn进行启动
-
# 原始命令 worker 4 线程是4个 gunicorn -w 4 manage:app 复制代码
-
# 当我们的app是使用工厂函数构建的时候 gunicorn -w 4 "my_project:create_app()" 复制代码
-
-
-
完成上面的步骤,即可使用gunicorn完成flask的启动
-
supervisor部分
-
supervisor部分
-
主要是完成gunicorn的配置
-
我们使用四个进程(每个进程四个线程)通过gunicorn对flask进行启动
-
[program:gunicorn] command=gunicorn -w 4 "manage:create_app()" -b :8091 directory=/home/a21036/waws/PaddleOCR priority=1 numprocs=1 autostart=true autorestart=true startretries=10 exitcodes=0 stopsignal=KILL stopwaitsecs=10 redirect_stderr=true [program:gunicorn_1] command=gunicorn -w 4 "manage:create_app()" -b :8092 directory=/home/a21036/waws/PaddleOCR priority=1 numprocs=1 autostart=true autorestart=true startretries=10 exitcodes=0 stopsignal=KILL stopwaitsecs=10 redirect_stderr=true [program:gunicorn_2] command=gunicorn -w 4 "manage:create_app()" -b :8093 directory=/home/a21036/waws/PaddleOCR priority=1 numprocs=1 autostart=true autorestart=true startretries=10 exitcodes=0 stopsignal=KILL stopwaitsecs=10 redirect_stderr=true [program:gunicorn_3] command=gunicorn -w 4 "manage:create_app()" -b :8094 directory=/home/a21036/waws/PaddleOCR priority=1 numprocs=1 autostart=true autorestart=true startretries=10 exitcodes=0 stopsignal=KILL stopwaitsecs=10 redirect_stderr=true 复制代码
-
我们的supervisor没有启动就使用下面命令启动
-
supervisord -c /usr/supervisor/supervisor.conf 复制代码
-
-
若我们已经启动了supervisor,我们使用下面的命令来启动
-
supervisorctl start gunicorn start gunicorn_1 start gunicorn_2 start gunicorn_3 复制代码
-
supervisorctl start all 复制代码
-
-
-
nginx部分
-
nginx部分
-
主要是考虑程序的并发性,对启动的四个服务,进行负载均衡
-
在/etc/nginx/cond.d中新建两个文件,upstream.conf 控制分发的文件 backend.conf 实际的监听端口实现操作的配置
-
upstream.conf
-
upstream backends { server localhost:9001; server localhost:9002; server localhost:9003; server localhost:9004; } server { listen 80; location / { proxy_pass http://backends; } } 复制代码
-
-
backend.conf
-
server { listen localhost:9001; location ^~ /static/ { alias /home/a21036/static/; autoindex on; } location = /upload { proxy_pass http://localhost:8091/upload; proxy_redirect off; proxy_set_header Host $http_post; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location =/ { proxy_pass http://localhost:8091/; proxy_redirect off; proxy_set_header Host $http_post; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen localhost:9002; location ^~ /static/ { alias /home/a21036/static/; autoindex on; } location = /upload { proxy_pass http://localhost:8092/upload; proxy_redirect off; proxy_set_header Host $http_post; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location =/ { proxy_pass http://localhost:8092/; proxy_redirect off; proxy_set_header Host $http_post; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen localhost:9003; location ^~ /static/ { alias /home/a21036/static/; autoindex on; } location = /upload { proxy_pass http://localhost:8093/upload; proxy_redirect off; proxy_set_header Host $http_post; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location =/ { proxy_pass http://localhost:8093/; proxy_redirect off; proxy_set_header Host $http_post; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen localhost:9004; location ^~ /static/ { alias /home/a21036/static/; autoindex on; } location = /upload { proxy_pass http://localhost:8094/upload; proxy_redirect off; proxy_set_header Host $http_post; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location =/ { proxy_pass http://localhost:8094/; proxy_redirect off; proxy_set_header Host $http_post; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 复制代码
-
-
在这个地方犯了一个严重的错误:
-
server { listen localhost:8094; # 错误根源 location ^~ /static/ { alias /home/a21036/static/; autoindex on; } location = /upload { proxy_pass http://localhost:8094/upload; proxy_redirect off; proxy_set_header Host $http_post; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location =/ { proxy_pass http://localhost:8094/; proxy_redirect off; proxy_set_header Host $http_post; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 复制代码
-
实际的错误原因:我们使用supervisor进行将gunicorn进行启动,启动了8094的服务,然后在使用nginx进行listen监听8094,会出现端口被占用的问题,我已我们需要用其他端口对8094进行监听,这里使用9004对8094进行监控
-
-
-
-
我们的nginx没有启动就使用下面命令启动
-
systemctl start nginx 复制代码
-
-
若我们已经启动了nginx,我们使用下面的命令来reload配置文件
-
# 检测我们的nginx的配置语法是不是有问题 /usr/sbin/nginx -t # 重载配置文件 /usr/sbin/nginx -s reload 复制代码
-
-
其他部分
-
其他:
-
当我们对配置出现问题的时候,我们可以通过配置文件中指定的log的位置,找到log,查看log就能找到问题所在了,以下以nginx的日志为例
-
# 查看方式1 tail -F xxxx.log # 新生成的日志以滚动的方式进行查看 # 查看方式2 vim xxxx.log # 全量查看日志 复制代码
-
nginx又两个主要日志放在/var/log/nginx
- access.log
- error.log
- 我们可以看到之前端口占用的配置错误
- access.log
-
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END