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
加载新的配置
- Quickstart for Python/WSGI applications
- flask-uwsgi
- Kickstarting Flask on Ubuntu - Setup and Deployment
- Serving Flask With Nginx
- 通过Nginx+uWSGI部署Flask应用
- 在阿里云ECS上部署Nginx + uWSGI + Flask生产环境
nginx + passenger + virtualenv
passenger 的基本安装不再赘述,直接看官方文档即可,这里有个 quickstart 文档。
接下来说说常用的命令。
-
启动当前目录下的应用:
$ passenger start
-
重启应用:
$ passenger-config restart-app
然后会有选项来让你选择你要重启的应用,使用上下箭头来选择,enter 确定。
- 查看 passenger 托管的应用的情况
$ passenger-status
接下来的例子以 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
- Setting up and deploying Python Flask to Dreamhost
- official doc: Deploying a Python app with Passenger to production
- official doc: Passenger basics for python
- official doc: Passenger library documentation
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
加载新的配置