共计 2440 个字符,预计需要花费 7 分钟才能阅读完成。
Flask 本身就可以直接启动 HTTP 服务器,但是受限于管理、部署、性能等问题,在生产环境中,我们一般不会使用 Flask 自身所带的 HTTP 服务器。
从现在已有的实践来看,对于 Flask,比较好的部署方式是使用 uWSGI 做 WSGI 容器,Nginx 做前端服务器。这样做的好处在于:
1. uWSGI 性能好,提供的功能也很多,运维方便。
2. Nginx 对于静态文件处理较好,而且默认支持 uWSGI 协议,在负载均衡和压力控制上都可以很方便的实现。
现在说一下具体的部署步骤:
因为本人比较喜欢 Ubuntu Server 做服务器操作系统,所以这些操作只适于 Ubuntu 系统。在 Ubuntu 中我们就应该安装 Ubuntu 的方式进行部署运维,而不是进行编译安装,通过 ubuntu apt 源安装部署,不仅在整体风格上符合系统风格,而且提供给配置和运维巨大方便。
首先更新软件源:
sudo apt-get update
安装 Nginx:
sudo apt-get install nginx
安装 uWSGI 以及 uWSGI 对于 Python 的支持:
sudo apt-get install uwsgi uwsgi-plugin-python
安装 virtualenv:
这里是一个个人选择问题,因为众多 python 包也可以通过 apt 源安装。
我个人习惯是,一些 python 工具通过源安装,比如 supervisor,管理和升级都比较方便,而 python 一些第三方库还是在 virtualenv 中通过 pip 安装,像是 virtualenv 这样的基础工具还是通过源安装。
sudo apt-get install python-virtualenv
建立 Python 环境:
mkdir -p /var/virenvs
cd /var/virenvs
virtualenv myenv
安装 Flask:
cd myenv
. bin/activate
pip install flask
建议使用 pip 的 freeze 和 install -r requirement_file 进行环境部署。
假设我们的项目路径在 /var/virenvs/myenv/myproject,这时我们可以通过 git 或者其他什么方式把程序部署上来。
给项目目录配置权限,nginx 和 uwsgi 默认是以 www-data 用户和组来运行:
chown -R www-data:www-data /var/virenvs/myenv/myproject
chmod -R 775 /var/virenvs/myenv/myproject
对于 nginx 和 uwsgi 我们可以使用 vhost 方式进行部署,这样既能保证每个项目使用独立的 virtualenv 又可以,共用一个 uWSGI 池,这样在使用、部署和管理上都比较方便。
vim /etc/nginx/site-available/myproject
server {
listen 80;
server_name hostname;
location /static {
alias /var/virenvs/myenv/myproject/static;
}
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9001;
uwsgi_param UWSGI_PYHOME /var/virenvs/myenv;
uwsgi_param UWSGI_CHDIR /var/virenvs/myenv/myproject;
uwsgi_param UWSGI_MODULE mywebsite;
uwsgi_param UWSGI_CALLABLE app;
}
error_page 404 /404.html;
}
其中 mywebsite 为项目目录下的 mywebsite.py 文件,UWSGI_CALLABLE 为其中的 Flask 实例名。
建立软连接到 enabled 目录
ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/myproject
uwsgi 配置
vim /etc/uwsgi/apps-available/myuwsgi.ini
[uwsgi]
plugins=python
vhost=true
socket=127.0.0.1:9001
uwsgi 还有很多其他配置项,生成环境中需要好好配置。
建立软连接到 enabled 目录
ln -s /etc/uwsgi/apps-available/myuwsgi.ini /etc/uwsgi/apps-enabled/myuwsgi.ini
重启服务
service nginx restart
service uwsgi restart
部署完成
推荐阅读 :
你应该使用 Nginx + uWSGI http://www.linuxidc.com/Linux/2013-07/87286.htm
uWSGI + Nginx 部署 Flask Web 应用 http://www.linuxidc.com/Linux/2013-06/85828.htm
Django+Nginx+uWSGI 部署 http://www.linuxidc.com/Linux/2013-02/79862.htm
Linux 下 Nginx+uWSGI 部署 Python 应用 http://www.linuxidc.com/Linux/2012-10/72443.htm
Ubuntu Server 12.04 安装 Nginx+uWSGI+Django 环境 http://www.linuxidc.com/Linux/2012-05/60639.htm
CentOS 5.5 + Nginx 0.8.50 + uWSGI + Django 1.2.3 部署 Django 项目 http://www.linuxidc.com/Linux/2011-05/36399.htm
更多 Ubuntu 相关信息见 Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2