Ubuntu 部署 Flask + WSGI + Nginx 详解

入手了一台阿里云服务器,是Ubuntu 14.04 32位版本,最初考虑是用来尝尝鲜只是买了个最低配的,价格算起来与在国外买个空间的价格相当吧(可能一年才贵100多),但用起来感觉就很不错,速度那是一个字:快。

自从倒戈向Linux世界后,对于一切大而全的开发框架与软件都有一种不讨喜的感觉,个人更喜欢于使用那些小而精,高性能高产生力的软件和开发框架,So 我现在的第一语言是Python和Coffee,开发框架就当然是 AngularJS (前端) + Flask (后端) ,关于 AngularJS 与 Flask 不在本文的叙述范围之内,本文解决的是 Flask 最后一公里的问题:Linux 部署。

我采用的部署方案是:

Web 服务器采用 uwsgi host Flask

用 Supervisor 引用 uwsgi 作常规启动服务

基于 Nginx 作反向代理

首先, 阿里云服务器可以通过 SSH 指令在本机的终端进行远程连接

ssh root@云服务器地址

输入密码进入后所有的操作与本地终端完全一至。

安装 Python 环境

接下来是python , Ubuntu 的默认环境已经预装 python 2.7 所以只需要安装 python 的 pip 安装工具即可。pip 用于安装一些基于python 应用的软件工具,在下文中将会频繁使用。

PIP

如果用python 而不懂 [pip|] 那最好就快点脑补吧, 指令如下:

sudo apt-get install pip VirtualEnv

不同的项目可能会引用各种不同的依赖包,为了避免版本与和应用之间的冲突而造成的“依赖地狱”
[Virtualenv | https://virtualenv.readthedocs.org/en/latest/] 就是我们python 项目的必须品了。VirtualEnv 可以为每个Python应用创建独立的开发环境,使他们互不影响,Virtualenv 能够做到:

在没有权限的情况下安装新套件

不同应用可以使用不同的套件版本

套件升级不影响其他应用

安装:

sudo pip install virtualenv

安装VirtualEnv 后只需要在项目目录内运行 virtualenv 目录名 就可以建立一个虚拟环境文件夹,然后启用 activate 指令即可启用该python虚拟环境,具体操作如下:

假定我的项目目录叫 /home/www/my_flask,首先安装虚拟环境 (我习惯使用的虚拟环境目录叫 venv )

my_flask root$ virtualenv venv >> New python executable in venv/bin/python >> Installing setuptools, pip...done.

在项目目录下就会建立一个新的 venv 目录,里面就是运行python 的基本环境的工具与指令,和包。 然后启用该环境,使用当前命令行状态进入虚拟环境,进入虚拟环境后,一切安装python的操作都会将包和引用装在虚拟环境内,而不会影响到全局的python 环境。

my_flask root$ source venv/bin/activate (venv)my_flask root$

调用 activate 指令后命令符前就会出现 (venv) 字样。 可通过 deactivate 退出虚拟环境。

安装 uWSGI

Flask 的实际生产运行环境选择并不多,比较成熟的是 [Gunicorn|] 和 [uWSGI|https://github.com/unbit/uwsgi] ,听说Gunicorn 的配置很简单,但可惜我一直没有配置成功过,我现采用的是 uWSGI。接下来就安装uWSGI吧。

(venv)my_flask root$ pip install uwsgi

在虚拟环境下不需要使用 sudo ,因为virtualenv 是没有权限要求的。

这个安装很迅速,基本是秒成。安装完成后我们可以先放下 uWSGI 不表,在后面再回过来配置他,因为我们首先要将关键的 Flask环境和我们的项目文件传到服务器目录内。

安装 Flask

我是用清单文件一次性安装Flask和他的相关依赖的,这样会更快。我的引用清单是这样的:
requirements.txt

Flask==0.10.1 Flask-Login==0.2.11 Flask-Mail==0.9.1 Flask-Moment==0.4.0 Flask-PageDown==0.1.5 Flask-SQLAlchemy==2.0 Flask-Script==2.0.5 Flask-WTF==0.10.2 Flask-Cache==0.13.1 Flask-Restless==0.15.0 Flask-Uploads==0.1.3 Jinja2==2.7.3 Mako==1.0.0 Markdown==2.5.1 MarkupSafe==0.23 SQLAlchemy==0.9.8 WTForms==2.0.1 Werkzeug==0.9.6 html5lib==1.0b3 itsdangerous==0.24 six==1.8.0 awesome-slugify==1.6

可以想像,如果一个一个装非疯了不可。
安装清单文件:

(venv)my_flask root$ pip install -r requirements.txt

在此还是重重地提一下:一定要注意在运行这个安装之前启用了python 虚拟环境,否则会直接安装到全局去的!

项目文件

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/16c7ef21d84ac1958d2f36efda719762.html