ITPub博客

首页 > 应用开发 > Java > flask+nginx+gunicorn+supervisor的框架体系构建一个服务

flask+nginx+gunicorn+supervisor的框架体系构建一个服务

原创 Java 作者:守夜人爱吃兔子 时间:2021-07-09 13:56:51 0 删除 编辑

 

查看端口号是不是被占用

netstat -anp | grep 8080

查看应用的进程

ps aux|grep nginx

flask部分

首先flask写服务的部分略去(和业务相关)

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部分

主要是完成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部分

主要是考虑程序的并发性,对启动的四个服务,进行负载均衡

在/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

image-20210709105321582.png

error.log

我们可以看到之前端口占用的配置错误

image-20210709105712179.png



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70000430/viewspace-2780510/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2021-05-27

  • 博文量
    40
  • 访问量
    32040