[建站记录]2.VPS部署Flask

主要按照 Kickstarting Flask on Ubuntu - Setup and Deployment
原理

  • nginx: 反向代理连接外网
  • gunicorn: 连接程序和nginx
  • supervisor: 管理进程
  • flask: 建站框架

    准备工作:新建用户,安装需要的软件

    新增用户

    $ adduser newuser
    $ adduser newuser sudo
    切换到新用户.

    $su newuser
    安装

    $ sudo apt-get update
    $ sudo apt-get install -y python python-pip python-virtualenv nginx gunicorn

建flask小站

实际我的目录当然不是这个啦~

$ sudo mkdir /home/www && cd /home/www

建立并激活virtualenv小环境,

$ sudo virtualenv env
$ source env/bin/activate

安装:

$ sudo pip install Flask
$ sudo mkdir flask_project && cd flask_project
$ sudo vim app.py

加入如下代码:

from flask import Flask, jsonify

app = Flask(__name__)


@app.route('/')
def index():
    return 'Flask is running!'


@app.route('/data')
def names():
    data = {"names": ["John", "Jacob", "Julie", "Jennifer"]}
    return jsonify(data)


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

静态文件目录:

$ sudo mkdir static

sudo vim static/index.html :

<h1>Test!</h1>

设置Nginx

配置文件路径:/etc/nginx/sites-enabled/
default文件是一个模板,

$ sudo /etc/init.d/nginx start
$ sudo rm /etc/nginx/sites-enabled/default
$ sudo touch /etc/nginx/sites-available/flask_project
$ sudo ln -s /etc/nginx/sites-available/flask_project /etc/nginx/sites-enabled/flask_project
$ sudo vim /etc/nginx/sites-enabled/flask_project

这里的配置是需要进一步学习的,内容先放着:

server {
    server_name leemoi.space; #域名
    root /home/www/flask_project/;
    location / {
        proxy_pass http://localhost:8000; #gunicorn的ip和端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    location /static {
        alias  /home/www/flask_project/static/; #静态目录
    }
}

使生效:

$ sudo /etc/init.d/nginx restart
$ sudo /etc/init.d/nginx start
或者:
$ service nginx restart

这时候已经可以试一下了,gunicorn连接flask和nginx:

$ cd /home/www/flask_project/
$ gunicorn app:app -b localhost:8000

访问域名就能看到网站已经在运行!

设置supervisor

用来管理gunicorn进程.也可以控制一个VPS运行多个站点.

$ sudo apt-get install -y supervisor
$ sudo vim /etc/supervisor/conf.d/flask_project.conf

设置为:

[program:flask_project]
command = gunicorn app:app -b localhost:8000
directory = /home/leroy/www/flask_project
user = leroy

看下效果:

$ sudo pkill gunicorn
$ sudo supervisorctl reread
$ sudo supervisorctl update
$ sudo supervisorctl start flask_project

相关问题解决记录:

多次问题出在supervisor控制gunicorn上面
如果出现问题,杀进程再重启supervisor
$ ps -aux |grep supervisor
$ sudo pkill pid
$ sudo supervisord
$ sudo supervisorctl reload

问题:出现abnormal termination:
supervisorctl tail

1.如果你的pymongo是安装在virtualenv下的话,你得用virtualenv下的python运行 jobmonitor.py
2.权限问题
3.python中文编码问题导致gunicorn无法运行:

#coding:utf-8