python flask虚拟环境 uwsgi nginx Supervisor 宝塔面板部署
安装部署对应的python版本
1.安装虚拟环境插件virtualenv
pip install virtualenv
2.创建虚拟环境
virtualenv /www/wwwroot/项目/env
virtualenv + 路径
3.激活虚拟环境
source /www/wwwroot/项目/env/bin/activate
4.退出虚拟环境的指令
deactivate
这里不用管,需要退出的时候再使用
部署flask项目所需模块和文件
1.本地到flask项目路径下使用终端
pip freeze requirements.txt
2.导出所需模块
把requirements.txt文件上传项目根目录
安装所需模块:
pip install -r /www/wwwroot/项目/requirements.txt
3.把项目文件上传到项目目录下,然后使用
python app.py
4.运行访问服务器ip加端口测试模块导入正常,ctrl+c退出
部署安装uwsgi和nginx配置
1.安装uwsgi
pip install uwsgi
2.卸载指令
pip uninstall uwsgi
安装后输入uwsgi测试是否弹出信息
3.项目路径下创建uwsgi.ini
配置文件写入以下内容并保存
[uwsgi]
#uwsgi启动时,所使用的地址和端口(这个是http协议的,也可以使用socket协议,将http改成socket)
http=0.0.0.0:5000
#指向网站目录
chdir=/www/wwwroot/项目
#python 启动程序文件
wsgi-file=app.py``> ``
#回调的app对象
callable=app
#处理器数
processes=4
#线程数
threads=2
4.CD到项目路径:/www/wwwroot/项目
启动uwsgi
uwsgi --ini uwsgi.ini &
5.访问服务器ip加端口测试是否正常使用uwsgi,退出uwsgi使用
sudo lsof -i:5000
6. 查看5000端口所在进程id 然后使用
kill -9 进程id
多个空格隔开然后回车杀死
部署nginx
宝塔面板部署就不说了,安装好nginx和Supervisor进程守护
nginx配置:宝塔面板-软件商店-已安装-nginx设置-配置修改-最后面加上:
1.添加 uWSGI 配置这里默认80端口没带证书
server
{
listen 80;
server_name baidu.com; #把这个域名换成你自己的
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000;
}
# 可选项:设置静态文件目录
location /static {
alias /www/wwwroot/项目/static;
}
}
}
2.如果需要带证书可以https访问的用以下配置
#下面为可以访问80端口和https443端口的配置
server {
listen 80;
server_name baidu.com;#换成自己的
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name baidu.com;#换成自己的
ssl_certificate /path/to/your/certificate.crt;#这里可以是证书crt和pem后缀名
ssl_certificate_key /path/to/your/private_key.key;#这里是证书key后缀名
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000;
}
# 可选项:设置静态文件目录
location /static {
alias /www/wwwroot/项目/static; #写自己的static静态文件路径也可以不要
}
}
-
然后保存重启nginx,启动uwsgi:
uwsgi --ini uwsgi.ini &
测试域名是否正常访问,这里已经反代不需要加端口
最后一步配置Supervisor
1.在项目根目录下创建一个start.sh
文件写入以下保存
#激活虚拟环境
source /www/wwwroot/项目/env/bin/activate
#启动uWSGI应用程序
uwsgi --ini /www/wwwroot/项目/uwsgi.ini
-
宝塔面板-软件商店-已安装-最后一步配置Supervisor设置-添加守护进程:
-
启动用户自己选,我使用默认的root,运行目录:
/www/wwwroot/项目
-
启动命令:
/www/wwwroot/wiki/start.sh
然后保存运行 -
如果运行报错:请检查以下sudo lsof -i:5000 端口是否被占用,还是一样杀死进程在启动即可
-
整个项目的操作都是在虚拟环境下执行,甚至用不到退出虚拟环境指令