腾讯云服务器使用uwsgi+nginx+supervisor部署flask项目

2 篇文章 0 订阅
1 篇文章 0 订阅

第一步:
进入flask项目所处的虚拟环境中,输入pip freeze > package.txt,将项目运行所需要的所有包放在package.txt文件中。
在这里插入图片描述
第二步:
将falsk项目导入云主机上,可以使用xshell进行操作。
在这里插入图片描述
第三步:
在云主机上安装项目运行所需要的python环境,可以参考https://blog.csdn.net/weixin_44951273/article/details/98533979
第四步:
在项目中执行pip3 install -r package.txt
在这里插入图片描述
运行一下我们的项目,能够运行就说明python环境搭建好了
在这里插入图片描述
第五步:
安装mysql,因为我是用的数据库是mysql,可根据自己的项目安装相应的数据库。mysql安装可参考https://mp.csdn.net/postedit/98675909.
记得将项目中的相关配置,比如把debug关掉,host设置为“0.0.0.0”,数据库如果更改了端口或密码,需要重新配置。
第六步:
安装uwsgipip3 install uwsgi
在这里插入图片描述
配置软连接ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
在这里插入图片描述
使用uwsgi运行flask,在/home下新建一个文件夹命名为script,并进入
在这里插入图片描述
创建uwsgi.ini文件添加如下代码

[uwsgi]
# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:8001

# 指向网站目录
chdir=/home/blog

# python 启动程序文件
wsgi-file = run.py

#最大请求数,最多请求5000次就重启进程,以防止内存泄漏
max-requests = 5000

#请求超时时间,超过60秒关闭请求
harakiri = 60

# python 程序内用以启动的 application 变量名
callable = app

# 处理器数
processes = 4

# 线程数
threads = 2

buffer-size = 32768

#状态检测地址
stats = 127.0.0.1:9191         

启动脚本uwsgi uwsgi.ini

在这里插入图片描述
第七步:
安装nginx,输入wget -c https://nginx.org/download/nginx-1.12.2.tar.gz
在这里插入图片描述
解压:tar -zxvf nginx-1.12.2.tar.gz
进入解压目录
在这里插入图片描述
执行./configure \
在这里插入图片描述
在执行make&&make install
编译完成后创建软连接ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
在命令行输入nginx,如果没反应就代表安装成功。
进入nginx配置文件配置nginx
在这里插入图片描述

http {
    include       mime.types;
    default_type  application/octet-stream;
    #upstream负载均衡
    upstream flask{
        ip_hash; #通过对请求的ip进行hash操作,将同一ip的请求发送给同一台服务器,用于解决session不共享的问题
        server 127.0.0.1:8001;
        #server 127.0.0.1:8001;
    }
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65; # 连接超时时间

    #gzip  on;

 	server {
        listen       80; # 默认监听端口号
        server_name  212.64.57.113; # 域名解析,可以是远程主机ip或域名

        charset utf-8;
        #运行日志存放目录
        access_log  /home/logs/access.log;
        error_log  /home/logs/error.log;
        # 静态文件访问地址,我的静态文件名叫statics,注意看自己的静态文件名
        location /statics {
            alias /home/blog/myblog/statics;
        }
        # 配置默认访问页
        location / {
            include uwsgi_params;
            uwsgi_pass flask; # 名称必须和upstream后面的名称相同
            uwsgi_param UWSGI_CHDIR  /home/blog;
            uwsgi_param UWSGI_SCRIPT run:app;
        }

        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

第八步:
启动项目
先杀死所有nginx和uwsgi进程killall nginxkillall uwsgi
然后启动
命令行输入nginxnohup uwsgi --ini /home/script/uwsgi.ini& # 后台运行
在这里插入图片描述
此时网页中输入项目地址
在这里插入图片描述
成功启动项目。
项目虽然成功启动了,但是使用nohup后台运行部不是很可靠,如果其意外结束我们还需要进入服务器手动重启,有没有一种能够监控后台程序,在程序停止后能够自动重启的机制吗?
的确有,supervisor是一个python编写的进程管理程序,可以检测后台程序,在程序停止后会自动启动程序,首先我们需要安装supervisoryum install supervisor
在这里插入图片描述
设置为开机自启动systemctl enable supervisord
在这里插入图片描述
启动supervisorsystemctl start supervisord
在这里插入图片描述
配置vim /etc/supervisord.conf
添加如下代码

[program:uwsgi] 
command = uwsgi --ini /home/script/uwsgi.ini # 启动命令
autostart = true # supervisor启动时该程序自动启动
autorestart = true # 程序异常退出后自动重启
user=root # 运行命令的用户名
startretries = 5 # 启动失败后自动重启的次数
startsecs = 10 # 启动成功后10秒没有异常退出,就认为正常启动了
stdout_logfile=/home/logs/uwsgi_supervisor.log # 日志地址 

注意如何uwsgi.ini中如果配置了daemonize,需要将其注释掉,因为Supervisor无法控制守护进程服务,只能控制非守护进程。
重新启动supervisorsupervisord -c /etc/supervisord.conf
在这里插入图片描述
最后启动nginx

输入网址查看效果
在这里插入图片描述
这样就成功的使用uwsgi+nginx+supervisor部署了一个flask项目。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值