Ubuntu 20.04 64 Bit
Python 3.8.2
第一件事当然是更新一下
sudo apt update
sudo apt upgrade
安装并设置宝塔面板
为了部署和配置方便,我们这里直接安装宝塔面板。
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
登录宝塔面板后,编译安装LNMP:
Nginx+ MySQL+ PureFtpd
(如果站点纯粹使用python则无需安装php和phpmyadmin)
部署flask+uWSGI环境
先安装依赖
sudo apt-get install build-essential python3-dev libssl-dev libffi-dev
sudo apt-get install python3-pip
sudo pip3 install uwsgi flask pymysql
在宝塔上部署网站
我们先在宝塔上新建一个站点,FPT和MYSQL一起新建也可以,假定域名为example.com,目录为yoursite。假定去阿里云申请免费证书,并下载适用于nginx的证书文件,并将证书文件yoursert.pem和yoursite.key放置于目录yoursite下
Nginx配置:
server {
listen 80;
server_name example.com www.example.com; #此处填写域名管理选项卡中绑定的域名,多个域名用空格隔开
rewrite ^(.*) https://$server_name$1 permanent;
}
server
{
# ssl证书使用443
listen 443 ssl;
server_name example.com www.example.com ; #此处填写域名管理选项卡中绑定的域名,多个域名用空格隔开
charset utf-8;
# 证书.pem的存放地址
ssl_certificate /www/wwwroot/yoursite/yourcert.pem;
# 证书.key的存放地址
ssl_certificate_key /www/wwwroot/yoursite/yourcert.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
error_page 497 https://$host:$server_port$uri$is_args$args;
location / {
include uwsgi_params; # 导入uwsgi配置
uwsgi_pass 127.0.0.1:5555; # 转发端口,需要和uwsgi配置当中的监听端口一致
uwsgi_param UWSGI_PYTHON /usr/bin/python3; # Python解释器所在的路径,如果有虚拟环境可将路径设置为虚拟环境
uwsgi_param UWSGI_CHDIR /www/wwwroot/yoursite; # 项目根目录
uwsgi_param UWSGI_SCRIPT run:app; # 项目的主程序,比如你整站用run.py文件来响应客户端请求,文件中app = Flask(__name__),那么这里就填run:app
}
}
这样设定好以后网站默认是开启SSL的,SSL监听的是443端口,需要在宝塔的安全面板中,在防火墙设置里放行443,否则网站将无法访问。
UWSGI配置:
在网站根目录新建一个uwsgi.ini,内容如下:
[uwsgi]
# uWSGI 的监听端口
socket = 127.0.0.1:5555
# 项目根目录
chdir = /www/wwwroot/yoursite
# Flask 项目的启动文件
wsgi-file = run.py
# 程序内启用的application变量名
callable = app
# 进程数量
processes = 4
vacuum = true
master = true
# py文件更新后自动重启
py-autoreload = 1
# 设置stats文件和pidfile位置
stats = %(chdir)/uwsgi.status
pidfile = %(chdir)/uwsgi.pid
# 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
daemonize = %(chdir)/uwsgi.log
启动uWSGI服务:
uwsgi --ini /www/wwwroot/yoursite/uwsgi.ini &
这时候可以测试一下网站是否能够访问。如果出现500错误或者Bad Gateway,可以cat /www/wwwroot/yoursite/uwsgi.log查看一下uWSGI的日志
设置uwsgi自启动服务
在 Ubuntu 上使用 Nginx+ uWSGI 部署Flask项目,在实际生成环境中需要系统自动启动这两项服务,Ubuntu默认自启动Nginx,需要对uwsgi设置为系统自启动。
Ubuntu20.04采用systemctl来管理开机启动的脚本,对于uwsgi服务要设置成系统服务来进行自启动。
创建uwsgi.service文件
sudo nano /etc/systemd/system/uwsgi.service
代码如下:
[Unit]
Description=uWSGI server
After=syslog.target
[Service]
#用户名
User=www
#用户组
Group=www
#项目目录
WorkingDirectory=/www/wwwroot/yoursite
#服务启动的代码(可以用which uwsgi查看uwsgi安装位置)
ExecStart=/usr/local/bin/uwsgi --ini /www/wwwroot/yoursite/uwsgi.ini
#服务停止代码
ExecStop=/usr/local/bin/uwsgi --stop /www/wwwroot/yoursite/uwsgi.pid
#这种方式可以让你用nohup起动服务
Type=oneshot
#表示虽然nohup后台运行了,也认为这个服务是起来的
RemainAfterExit=yes
[Install]
#指明会跟随系统启动而启动该服务
WantedBy=multi-user.target
启动、停止、重启、查看服务命令 :
sudo systemctl start uwsgi
sudo systemctl stop uwsgi
sudo systemctl restart uwsgi
sudo systemctl status uwsgi
加入、关闭系统自启动:
sudo systemctl daemon-reload
#执行enable命令后在/etc/systemd/system/multi-user.target.wants目录下生成uwsgi.sevice的链接文件
sudo systemctl enable uwsgi
sudo systemctl disable uwsgi