突然看到篇系统介绍部署的文章,根据那文章全部推倒重写一下……
原文链接: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