deploy

Deploy flask application

nginx + uwsgi + supervisor + virtualenv

首先在该应用文件夹下新建一个 xxx.ini 文件,一个基本的例子如下:

[uwsgi]
base = /path/to/your_app
app = your_app_name
module = %(app)
home = %(base)/venv
pythonpath = %(base)
socket = /path/to/your_app/%n.sock
chmod-socket = 666
callable = app
logto = /path/to/your_log_directory/%n.log

然后在该文件夹下运行 uwsgi --ini xxx.ini, 会生成一个 xxx.sock

/etc/supervisor/conf.d 文件夹下新建一个配置文件 xxx.conf, 基本配置如下:

[program:your_app_name]
command = /path/to/your_app/venv/bin/uwsgi --ini /path/to/your_app/xxx.ini
directory = /path/to/your_app
autostart = true
autorestart = true

然后运行 sudo supervisorctl update 后,再运行 sudo supervisorctl status 应该可以看到我们的程序已经在运行了

/etc/nginx/conf.d 下新建一个基本的配置文件 xxx.conf

server {
    listen 80;
    server_name xxx.example.com;

    location / { try_files $uri @your_app; }
    location @your_app {
        include uwsgi_params;
        uwsgi_pass unix:/path/to/your_app/xxx.sock;
    }
}

然后运行 sudo nginx -t 检查配置文件是否有效,然后 sudo service nginx reload 加载新的配置

nginx + passenger + virtualenv

passenger 的基本安装不再赘述,直接看官方文档即可,这里有个 quickstart 文档

接下来说说常用的命令。

然后会有选项来让你选择你要重启的应用,使用上下箭头来选择,enter 确定。

接下来的例子以 flask 的最基础的 hello world 作为示范:

# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index('/'):
    return 'Hello, world.'

if __name__ == '__main__':
    app.run(debug=True)

接下来在同一目录下新建 passenger_wsgi.py 文件,暴露出 WSGI 的实例对象,

# passenger_wsgi.py
from app import app as application

然后使用 passenger start 就可以使用 passenger 启动应用了,使用 ctrl-c 停止应用。

接下来是集成 nginx,也是十分方便:

# /etc/nginx/conf.d/my_flask_app.conf
server {
    listen 80;
    server_name yourserver.com;

    # Tell Nginx and Passenger where your app's 'public' directory is
    # 这里直接指向你的 flask app 文件夹就行,没有 public 文件也是 ok 的。
    root /var/www/myapp/code/public;

    # Turn on Passenger
    passenger_enabled on;
}

重启 nginix:

 $ sudo service nginx restart

Deploy web.py

nginx + supervisor + uwsgi + virtualenv

/etc/supervisor/conf.d 下新建一个配置文件 xxx.conf

[program:your_app_name]
command = /path/to/your_app/venv/bin/uwsgi -s :8080(for example) xxxx(你主程序 xxxx.py)
directory = /path/to/your_app
autostart = true
autorestart = true

然后运行 sudo supervisorctl update 后,再运行 sudo supervisorctl status 应该可以看到我们的程序已经在运行了

/etc/nginx/conf.d 下新建一个配置文件 xxx.conf

server {
    listen 80;
    server_name xxx.example.com;
    charset utf-8;
    client_max_body_size 75M;

    location / { try_files $uri @your_app; }
    location @your_app {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8080;( supervisor 中设置的端口号一样)
    }
}

然后运行 sudo nginx -t 检查配置文件是否有效,然后 sudo service nginx reload 加载新的配置