AngularJS阿里云安顿 Flask + WSGI + Nginx 详解

我使用的布局方案是:

配置 uwsgi

好了,项目标备选工作早就做完了,是时候回过头去安顿 uwsgi
了,它的现实指令可以去看它的官方文档,大家在此处运用其中的一种指令格局:配置起动。我动用
.ini文件作为配置,在项目目录下创办一个 confg.ini
(具体见下文)写好后方可如此举行

(venv)my_flask root$ uwsgi config.ini

自家以为是最简便易行的不二法门,也不难更改。好了第一部分来了,config.ini
是如此写的:

[uwsgi]

# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:8001 

# 指向网站目录
chdir = /home/www/ 

# python 启动程序文件
wsgi-file = manage.py 

# python 程序内用以启动的 application 变量名
callable = app 

# 处理器数
processes = 4

# 线程数
threads = 2

#状态检测地址
stats = 127.0.0.1:9191

注意 : callable=app 这个 app 是 manage.py
程序文件内的一个变量,那么些变量的品种是 Flask的 application 类 。

运行 uwsgi

“`
(venv)my_flask root$ uwsgi config.ini

[uWSGI] getting INI configuration from config.ini

*** Starting uWSGI 2.0.8 (64bit) on [Fri Dec 19 14:34:11 2014]


// 此处略去那么些无用的启动音信
** Stats server enabled on 127.0.0.1:9191 fd: 15 \**
“`

OK, 此时早就司空见惯启动 uwsgi 并将 Flask 项目载入其中了,ctrl+c
关闭程序。但那只是命令启动格局,要使其伙同服务器启动并作为后台服务运作才是运营条件的骨子里所须求。由此接下去我们需求设置另一个工具来指引迷津
uwsgi 。

安装 uWSGI

Flask 的实际上生产运作条件拔取并不多,比较成熟的是
[Gunicorn|http://gunicorn.org/] 和
[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
虚拟环境,否则会直接设置到全局去的!

抵不住朋友的引发,今日到底入手了一台阿里云服务器,是Ubuntu 1.4
32位版本,最初设想是用来尝尝鲜只是买了个最低配的,价格算起来与在国外买个空中的价位一定吧(可能一年才贵100多),但用起来感到就很不错,速度那是一个字:快。

总结

阿里云的服务器运行速度很科学,加上Flask+uWSGI+nginx
那种高性能结构,整个网站响应速度极为之快,每页响应速度不到0.1s ,
与之相比较自己事先使用 C# 布署在Avarix
上的网站(同一个顺序,不一样语言落成)每页响应速度至少2s 那简直是
200:1的性能,当然我还一直不闲到去专们用软件去测那两者之间的差值,写本文的目标也是对此作一记下,以便将来纪念。

配置 Nginx

Ubuntu 上安顿 Nginx 也是很简单,不要去改变默许的 nginx.conf 只必要将

/ext/nginx/sites-available/default

文件替换掉就可以了。

新建一个 default 文件:

    server {
      listen  80;
      server_name XXX.XXX.XXX; #公网地址

      location / {
        include      uwsgi_params;
        uwsgi_pass   127.0.0.1:8001;  # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
        uwsgi_param UWSGI_PYHOME /home/www/my_flask/venv; # 指向虚拟环境目录
        uwsgi_param UWSGI_CHDIR  /home/www/my_flask; # 指向网站根目录
        uwsgi_param UWSGI_SCRIPT manage:app; # 指定启动程序
      }
    }

将default配置文件替换掉就水到渠成了!
还有,更改配置还须要记得重启一下nginx:

sudo service nginx restart

安装 Python 环境

接下去是python , Ubuntu 的默许环境已经预装 python 2.7 所以只要求设置
python 的 pip 安装工具即可。pip 用于安装一些基于python
应用的软件工具,在下文大校会反复使用。

自打倒戈向林玉堂ux世界后,对于一切大而全的开发框架与软件都有一种不讨喜的感到,个人更爱好于采纳那一个小而精,高性能高产百威的软件和付出框架,So
我现在的首先言语是Python和Coffee,开发框架就自然是 AngularJS (前端) +
Flask (后端) ,关于 AngularJS 与 Flask
不在本文的描述范围以内,本文解决的是 Flask 最终一海里的问题:Linux
陈设。

开行服务

sudo service supervisor start
  • Web 服务器选用 uwsgi host Flask
  • 用 Supervisor 引用 uwsgi 作正常启动服务
  • 按照 Nginx 作反向代理

安装 Supervisor

[Supervisor|http://supervisord.org/configuration.html]可以同时启动多个利用,最要紧的是,当某个应用Crash的时候,他可以活动重启该应用,保障可用性。

sudo apt-get install supervisor

Supervisor 的大局的配备文件地方在:

/etc/supervisor/supervisor.conf

正常情形下大家并不必要去对其作出任何的变更,只须求添加一个新的 *.conf
文件放在

/etc/supervisor/conf.d/

下就足以,那么大家就新建立一个用于启动 my_flask 项目的 uwsgi 的
supervisor 配置 (命名为:my_flask_supervisor.conf):

[program:my_flask]
# 启动命令入口
command=/home/www/my_flask/venv/bin/uwsgi /home/www/my_flask/config.ini

# 命令程序所在目录
directory=/home/www/my_flask
#运行命令的用户名
user=root

autostart=true
autorestart=true
#日志地址
stdout_logfile=/home/www/my_flask/logs/uwsgi_supervisor.log        
ssh root@云服务器地址

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
退出虚拟环境。

PIP

如果用python 而不懂 [pip|http://pypi.python.org/]
那最好就快点脑补吗, 指令如下:

sudo apt-get install pip

输入密码进入后具备的操作与地面终端完全一至。

首先, 阿里云服务器可以经过 SSH 指令在本机的终点举行长途连接

项目文件

接下去就是上传
Flask的档次文件,此前自己在各大的“转发专业户”里找了很多的材料,在这一步中大三只是在地点加个标准的Flask运行文件,虽说做个范例可以但说其实的这很令人迷惑,为啥?先看看代码吧:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

生育环境内,哪个人会用那样的代码呢,这只是Flask
的最简入门范,我的Flask项目中 app
是被做在包内的,相信广大人都是这么做的,在包外大家选用 Flask Script
写一个 manage.py 文件
作为启动文件,这更有益于支撑各个的体系,包含可以设置到 window下的
法斯特CGI 中。

那么我的 那几个 manage.py 是其一样子的:

#!/usr/bin/env python
import os

if os.path.exists('.env'):
    print('Importing environment from .env...')
    for line in open('.env'):
        var = line.strip().split('=')
        if len(var) == 2:
            os.environ[var[0]] = var[1]

from app import create_app
from flask.ext.script import Manager, Shell

# 通过配置创建 app 
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)

def make_shell_context():
    return dict(app=app)


manager.add_command("shell", Shell(make_context=make_shell_context))

@manager.command
def deploy():
    """Run deployment tasks."""
    pass


if __name__ == '__main__':
    manager.run()

诸如此类做自我地开发条件足以那样运行 Flask:

python manage.py runserver

更详实的做法请参考 [Flask
Script|http://flask-script.readthedocs.org/en/latest/] 扩展

可以吗,大家得以用
帮衬SSH的FTP工具将Flask项目文件上传播服务器上,上面是一切项目文件结构:

www/
└── my_flask  
│   ├── logs
│   └── venv  //虚拟目录
│   │   ├── bin
│   │   │         ├── activate
│   │   │         ├── easy_install
│   │   │         ├── gunicorn
│   │   │         ├── pip
│   │   │         └── python
│   │   ├── include
│   │   │          └── python2.7 -> /usr/include/python2.7
│   │   ├── lib
│   │   │         └── python2.7
│   │   ├── local
│   │   │         ├── bin -> /home/shenye/shenyefuli/bin
│   │   │         ├── include -> /home/shenye/shenyefuli/include
│   │   │         └── lib -> /home/shenye/shenyefuli/lib
│   └── app  //Flask 程序目录
│   │           └──  __init__.py //这是程序包文件。这个目录下还有其它的文件此处略过
│   ├── manage.py   
│   ├── requirements.txt                

安装 Nginx

[Nginx|http://nginx.com/]是轻量级、性能强、占用资源少,能很好的处理高并发的反向代理软件。

sudo apt-get install nginx

终止服务

sudo service supervisor stop

相关文章