学生特惠时买了台阿里云三年的服务器,我正好在学 Flask,所以就需要考虑在 Linux 下部署 Flask 的问题,本篇记录了参考各种文章后从零开始进行部署的所有步骤。
一、安装 Python 环境
由于 Ubuntu 默认安装了 Python 2.7,所以第一步先开始安装 Python 的pip 工具。
PIP
apt-get isntall pip
Virtualenv
Virtualenv可以创建虚拟环境。虚拟环境是 Python 解释器的一个私有副本,在这个环境中安装的私有包,不会影响系统中安装的全局Python解释器。
pip install virtualenv
我的项目目录为 /root/Flask
,那么可以在 Flask
文件夹内新建一个虚拟环境,并命名为 venv
cd /root/Flask
virtualenv venv
接下来开启虚拟环境
source venv/bin/activate
##二、安装 Flask
使用 pip
在虚拟环境中安装 Flask
pip install flask
然后在 /root/Flask
文件夹中新建一个标注 Flask 运行文件 test.py
作为例子:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if "__name__" == "__main__":
app.run()
##三、安装 uWSGI
直接通过pip
安装 uWSGI会出错,正确做法为:
apt-get install build-essential python-dev
pip install uwsgi
##四、配置 uWSGI
为了配置 uWSGI,直接在项目目录(/root/Flask
)下新建一个 config.ini
文件作为配置文件:
[uwsgi]
# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:8001
# 指向网站目录
chdir = /root/Flask
# python 启动程序文件
wsgi-file = test.py
# python 程序内用以启动的 application 变量名
callable = app
# 处理器数
processes = 4
# 线程数
threads = 2
#状态检测地址
stats = 127.0.0.1:9191
由于我们将使用 supervisor 来管理引导 uWSIGI 的启动,所以这里不需要通过命令(uwsgi config.ini
)来运行。
##五、安装 Supervisor
安装 Supervisor:
apt-get install supervisor
下面对其进行配置:
只需要新建一个 .conf
文件在 /etc/supervisor/conf.d
文件夹下即可,在这个例子中,我们新建一个test_supervisor.conf
:
[program:test]
# 启动命令入口
command=/root/Flask/venv/bin/uwsgi /root/Flask/config.ini
# 命令程序所在目录
directory=/root/Flask
#运行命令的用户名
user=root
autostart=true
autorestart=true
#日志地址
stdout_logfile=/root/Flask/uwsgi_supervisor.log
启动服务:service supervisor start
终止服务:service supervisor stop
##六、安装 Nginx
Nginx 是一个反向代理软件。
apt-get install nginx
配置 Nginx:
将 /etc/nginx/sites-available/default
文件删除,替换成新的 default
文件即可。
server {
listen 80;
server_name XXX.XXX.XXX; #公网地址
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
uwsgi_param UWSGI_PYHOME /root/Flask/venv; # 指向虚拟环境目录
uwsgi_param UWSGI_CHDIR /root/Flask; # 指向网站根目录
uwsgi_param UWSGI_SCRIPT test:app; # 指定启动程序
}
}
然后重启 Nginx:
service nginx restart
到这一步,就完成了部署 Flask 的所有步骤。