nginx、flask、uwsgi 部署
Table of Contents
很久之前就学过一点 flask 的皮毛,但是当时由于没有时间去研究其部署方法,后来就放弃了。 昨天继续把它捡起来,然后学了学,在自己的电脑上动手,成功的把程序跑起来了。
flaskr
既然是部署网站,那就需要一个网站不是吗.
我在 flask 官方手册的帮助下,完成了一个小小的可以看的网站.实现了表单的提交.
代码存在我的 github 仓库,地址为: https://github.com/matrikslee/flaskr
nginx
安装
如果没有安装 nginx ,需要先进行安装.
这里写一下 ubuntu 系统的安装放吧.
sudo add-apt-repository ppa:nginx/stable sudo apt-get update sudo apt-get install nginx
操作
关于 nginx 的启动和停止等操作方法.
sudo /etc/init.d/nginx start #启动 sudo /etc/init.d/nginx stop #停止 sudo /etc/init.d/nginx retart #重启
配置
写一份配置文件放到 /etc/nginx/conf.d/
目录下:
server { listen 80; server_name localhost; charset utf-8; client_max_body_size 75M; location / { try_files $uri @board; } location @board { include uwsgi_params; uwsgi_pass unix:/var/uwsgi/flaskr_uwsgi.sock; } }
我把它保存为 flaskr_nginx.conf
,重启 nginx.
好了,nginx 这边可以暂时不管了.
uwsgi
这是最麻烦的一个步骤了, 首先我们需要安装 uwsgi, 不过此前需要做好准备工作.
安装依赖
我们需要使用 pip、virtualenv 以及 python-dev 包, 因此需要一些操作来安装它.
sudo apt-get install python python-dev python-setuptools sudo easy_install pip pip install virtualenv
配置
创建目录
sudo mkdir -p /var/uwsgi sudo mkdir -p /var/log/uwsgi sudo mkdir -p /etc/uwsgi/vassals
配置环境
cd /var/uwsgi sudo -i virtualenv venv source venv/bin/active #进入虚拟环境 #退出虚拟环境用 deactive 命令即可 pip install flask uwsgi #在虚拟环境中安装 uwsgi 以及 flask git clone https://github.com/lechain/flaskr.git deactive #注意:调试程序需要进入到虚拟环境
/etc/init/uwsgi.conf
description "uWSGI" start on runlevel [2345] stop on runlevel [06] respawn env UWSGI=/var/uwsgi/venv/bin/uwsgi env LOGTO=/var/log/uwsgi/emperor.log exec $UWSGI --master --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto $LOGTO
/etc/uwsgi/vassals/flaskruwsgi.ini
[uwsgi] #application's base folder base = /var/uwsgi #python module to import app = flaskr module = %(app) home = %(base)/venv pythonpath = %(base) #socket file's location socket = /var/uwsgi/%n.sock #permissions for the socket file chmod-socket = 644 #the variable that holds a flask application inside the module imported at line #6 callable = app #location of log files logto = /var/log/uwsgi/%n.log
chown
sudo chown -R www-data:www-data /var/uwsgi sudo chown -R www-data:www-data /var/log/uwsgi/