记录一下将本地的flask web后台部署到阿里云服务器的整个过程:
- 安装python环境
由于不同的项目可能会引用不同的python包,为了避免不同版本和应用之间的冲突而造成“依赖地狱”,我们使用virtualenv为不同的应用创建独立的开发环境:
pip install virtualenv
mkdir myproject
cd myproject
python3 -m venv venv
激活venv:
. venv/bin/activate
- 将代码从本地上传到服务器上
使用scp命令上传代码 - 安装uwsgi并配置
(venv)my_flask_project root$ pip install uwsgi
接着需要配置uwsgi, 在项目目录下创建一个config.ini,如下所示:
[uwsgi]
# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:8001
# 指向网站目录
chdir = /home/www/
# python 启动程序文件
wsgi-file = manage.py
# python 程序内用以启动的 application 变量名
callable = app
# 处理器数
processes = 4
# 线程数
threads = 2
#状态检测地址
stats = 127.0.0.1:5000
这边的stats是flask起服务时的端口号,socket是uwsgi起的端口号。
- 下载supervisor并配置
下载配置好uwsgi后并没有大功告成,我们需要对应用的进程进行保护,在进程异常中断时能够重启。supervisor便是用来实现进程保护。
安装:
apt-get install supervisor
Supervisor 的全局的配置文件位置在:
/etc/supervisor/supervisor.conf
正常情况下我们不需要对该文件进行任何操作,只需要添加一个新的*.conf即可,比如在该目录下新建一个my_flask_supervisor.conf,并进行如下配置:
[program:my_flask]
# 启动命令入口
command=/home/www/my_flask/venv/bin/uwsgi /home/www/my_flask/config.ini
# 命令程序所在目录
directory=/home/www/my_flask
#运行命令的用户名
user=root
autostart=true
autorestart=true
#日志地址
stdout_logfile=/home/www/my_flask/logs/uwsgi_supervisor.log
启动supervisor
ubantu
service supervisor start
centos :
supervisord
停止supervisor
service supervisor stop
- 配置nginx
找到nginx.conf
由于我是https协议,所以监听的端口号是443,如果是http协议,则对应的端口号为80。配置如下:
server {
listen 443;
server_name XXX.XXX.XXX; #公网地址
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
uwsgi_param UWSGI_PYHOME /home/www/my_flask/venv; # 指向虚拟环境目录
uwsgi_param UWSGI_CHDIR /home/www/my_flask; # 指向网站根目录
uwsgi_param UWSGI_SCRIPT manage:app; # 指定启动程序
}
location ~/uri {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
uwsgi_param UWSGI_PYHOME /home/www/my_flask/venv; # 指向虚拟环境目录
uwsgi_param UWSGI_CHDIR /home/www/my_flask; # 指向网站根目录
uwsgi_param UWSGI_SCRIPT manage:app; # 指定启动程序
}
}
另外 在python代码中app.route('uri/')
uri后面需要加/,否则会报404