主要按照 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