我采用的部署方案是:
- Web 服务器采用 uwsgi host Flask
- 用 Supervisor 引用 uwsgi 作常规启动服务
- 基于 Nginx 作反向代理
阿里云服务器可以通过 SSH 指令在本机的终端进行远程连接
ssh root@云服务器地址
输入密码进入后所有的操作与本地终端完全一至。
安装 Python 环境
接下来是python , Ubuntu 的默认环境已经预装 python 2.7 所以只需要安装 python 的 pip 安装工具即可。pip 用于安装一些基于python 应用的软件工具,在下文中将会频繁使用。
PIP
如果用python 而不懂 [pip|http://pypi.python.org/] 那最好就快点脑补吧, 指令如下:
sudo apt-get install pip
VirtualEnv
不同的项目可能会引用各种不同的依赖包,为了避免版本与应用之间的冲突而造成的“依赖地狱”,Virtualenv 就是我们python 项目的必须品了。VirtualEnv 可以为每个Python应用创建独立的开发环境,使他们互不影响,Virtualenv 能够做到:
Linux环境下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 ,本例采用的是 uWSGI,安装uWSGI。
(venv)my_flask root$ pip install uwsgi
在虚拟环境下不需要使用 sudo
,因为virtualenv 是没有权限要求的。安装完成后我们可以先放下 uWSGI 不表,首先要将关键的 Flask环境和我们的项目文件传到服务器目录内。
WSGI 分为两个部分:
- Server/Gateway: 即是HTTP Server, 负责从客户端(Nnginx、apache、IIS)接收请求,将 request 转发给 application, 并将 application(可能是个Flask应用) 返回的response 返回给客户端
- Application/Framework:一个python web 应用或 web 框架接收由 server 转发的request,处理请求,并将处理结果返回给 server
安装 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
h