阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ubuntu 12.04 下部署 Nginx+uWSGI+Flask

132次阅读
没有评论

共计 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

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计2440字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中