阿里云高性能服务器2折起:点我购买
前面我们已经成功用Flask生成了word文件,具体请看Flask生成word文件。用Flask的目的就是可以为了将程序做成网页,放在网上让更多的人使用,可是Flask自身所带的Web仅可作为调试,不能用在生产环境。
在生产环境中,通常采用uWSGI+Nginx的方式部署Flask程序。我们就拿一台新的阿里云服务器,从零看一看如何部署一个Flask程序。
首先要说明的是,虽然Ubuntu已经更新到了16版本,但是在最新版本下进程管理软件supervisor在我测试的服务器重启后不会自启动,至今没有搞清楚原因。而我在生产环境中,要用supervisor管理uWSGI,所以我采用了Ubuntu14.04版本。
下面正式开始我们的部署之旅:
一、安装virtualenvwrapper
Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:
1、将所有虚拟环境整合在一个目录下
2、管理(新增,删除,复制)虚拟环境
3、快速切换虚拟环境
因为现在大部分linux服务器都预装了python2和python3,我采用python3开发,所以安装命令是:
pip3 install virtualenvwrapper
如果是python2,用pip install 即可
安装完毕后,修改linux环境变量配置文件,方便我们启动shell后,可以直接使用virtualenvwrapper:
vim ~/.bash_profile
向里面添加下列内容(每行的作用,上面已经标明,根据自己需要更改即可):
export WORKON_HOME=$HOME/.virtualenvs # 虚拟环境创建的地方
export PROJECT_HOME=$HOME/workspace
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 # 指定虚拟使用的python解释器路径
source /usr/local/bin/virtualenvwrapper.sh # 每次登陆用户自动执行下脚本
下面建立一个虚拟环境,用作运行flask的python环境:
mkvirtualenv flask_python3_formal
启动虚拟环境:
workon flask_python3_formal
二、安装uWSGI
之前一直对Nginx和uWSGI到底是什么很模糊,其实对于编程新手在前期大不可去纠结它们到底是什么。Nginx就是一个软件,软件为我们提供服务,它提供静态文件访问的web服务(当然还有其他服务,这里我们只需要了解这么多即可)。然而,它不能直接执行托管Python应用程序,而uWSGI解决了这个问题。
在我们的python虚拟环境里运行安装命令:
pip install uwsgi
这里因为我们在虚拟环境flask_python3_formal中只有python3,所以直接使用pip即可。
随后,我们将我们的项目文件夹上传到服务器,并在其中建立uWSGI的配置文件config.ini,写入下面的内容:
[uwsgi]
# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:8001
# 指向网站目录
chdir = /tmp
# python 启动程序文件
wsgi-file = app_mac.py
# python 程序内用以启动的 application 变量名
callable = app
# 处理器数
processes = 4
# 线程数
threads = 2
#状态检测地址
stats = 127.0.0.1:9191
运行uWSGI:
uwsgi config.ini
如果一切正常,会得到uWSGI正常运行的提示,我们先ctrl+c结束掉。因为在生产环境,必须有一个软件来监控uWSGI,保证服务器重启后或者其本身Crash掉可以自动重启。
三、安装supervisor
supervisor就解决上面所描述的问题,它可以监控多个应用,保证其稳定运行,安装:
apt-get install supervisor
其配置文件位置在/etc/supervisor/supervisor.conf
正常情况下,我们只需要在配置文件最下面加入两行(如有其它配置需要,可以查阅相关文档):
[include]
files = /etc/supervisor/*.conf
这样supervisor就会监控/etc/supervisor目录下所有conf文件,我们在此目录下建立文件my_flask_supervisor.conf:
[program:my_flask]
command= /root/.virtualenvs/flask_python3_formal/bin/uwsgi /tmp/app_mac/config.ini #要执行的命令,这里就是运行uWSGI配置文件
directory= /tmp/app_mac
user=root
autostart=true
autorestart=true
stdout_logfile=/tmp/app_mac/uwsgi_supervisor.log #日志文件
随后,启动supervisor:
supervisord -c /etc/supervisor/supervisord.conf
至此,uWSGI配置完毕
四、安装Nginx
离最终目标仅剩最后一步,安装Nginx:
apt-get install nginx
安装完成后,在项目目录新建一个Nginx的配置文件flask.conf用于我们的Flask应用。向其键入以下内容(根据说明自行修改配置):
server {
listen 80; #监听端口
server_name X.X.X.X; #服务器公网IP
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理,8001对应uWSGI启动的端口
uwsgi_param UWSGI_PYHOME /root/.virtualenvs; # 指向虚拟环境目录
uwsgi_param UWSGI_CHDIR /tmp/app_mac; # 指向网站根目录
uwsgi_param UWSGI_SCRIPT manage:app; # 指定启动程序
}
}
最后,将刚建立的配置文件使用符号链接到Nginx配置文件文件夹中,重启Nginx:
ln -s /tmp/app_mac/flask.conf /etc/nginx/conf.d/
service nginx restart
至此,如果一切顺利,则访问http://X.X.X.X,就可以正常看到你的Flask程序了。