第一步:
进入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 nginx
,killall uwsgi
。
然后启动
命令行输入nginx
,nohup 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项目。