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/

Date: <2016-07-30 Sat 12:42>

Author: Matrikslee

Created: 2017-05-29 Mon 17:56

Emacs 25.2.1 (Org mode 8.2.10)