五分钟急速部署Ubuntu + Flask + uWSGI + Nginx 生产环境

突然看到篇系统介绍部署的文章,根据那文章全部推倒重写一下……
原文链接:https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-14-04

0.如果你的apt源及pip源很慢的话可以参考这篇文章

1.首先安装Nginx、pip等:

sudo apt-get update
sudo apt-get install python-pip python-dev nginx
 

2.使用virtualenv虚拟环境:

安装virtualenv

sudo pip install virtualenv

创建项目目录:

mkdir ~/myproject
cd ~/myproject

创建虚拟环境myprojectenv:

virtualenv myprojectenv

激活虚拟环境:

source myprojectenv/bin/activate

3、在虚拟环境中创建flask项目

pip install uwsgi flask
nano ~/myproject/myproject.py

创建project.py文件,将flask实例化为application:

from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

if __name__ == "__main__":
    application.run(host='0.0.0.0')

测试启动:

python myproject.py

一般启动在5000端口。

4、尝试用wsgi启动:

nano ~/myproject/wsgi.py
from myproject import application

if __name__ == "__main__":
    application.run()

然后就可以启动试试,访问本机ip的8000端口查看结果:

uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi

至此python运行环境的搭建已经结束。可以退出虚拟运行环境:

deactivate

 

5、创建uwsgi配置文件:

nano ~/myproject/myproject.ini

仍通过wsgi.py启动项目:

[uwsgi]
module = wsgi

 设置有主线程

master = true
processes = 5

通过套接字通信,并设置权限是nginx可读写:

socket = myproject.sock
chmod-socket = 660
vacuum = true

对齐两个系统组件:

die-on-term = true

自此配置文件修改完成。

 

#原文这个地方有个坑,如果你的入口,即flask的实例也命名叫application时没有问题的,但如果你叫app,就会找不到入口,所以最好加上句:

callable = application

 

6、创建自启动脚本:

sudo nano /etc/init/myproject.conf
description "uWSGI server instance configured to serve myproject"

start on runlevel [2345]
stop on runlevel [!2345]

setuid user
setgid www-data

env PATH=/home/user/myproject/myprojectenv/bin
chdir /home/user/myproject
exec uwsgi --ini myproject.ini

#注:所有的user都要替换成你自己的用户名

bash中输入一下代码启动:

sudo start myproject

 

7、配置转发nginx请求:

sudo nano /etc/nginx/sites-available/myproject
server {
    listen 80;
    server_name server_domain_or_IP;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/user/myproject/myproject.sock;
    }
}

链接到sites-enbaled目录

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

测试配置文件是否可用:

sudo nginx -t

重启nginx服务:

sudo service nginx restart

完成!

#貌似这里会跟default冲突,把default删了才能正常工作。

#之前自己总结过一次,可惜写得太烂了……不如自己翻译别人的来的快 2333333

posted @ 2017-02-27 11:30  林建帆  阅读(344)  评论(0编辑  收藏  举报