flask+uswgi+nginx+python3.6的venv发布网站ubuntu14.04
---------------------------nginx---------------
sudo apt-get install nginx
sudo apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件。
sudo apt-get purge nginx nginx-common # 卸载所有东东,包括删除配置文件。
server {
listen 80;
server_name ip或域名;
charset utf-8;
rewrite_log on;
location / {
include uwsgi_params;
uwsgi_pass unix:/home/ubuntu/project/project.sock;
}
}
-------------------------python and flask------------------------------
ubuntu14.04 默认安装的是python3.4,也可以手工编译升级成python3.6参见本人的升级python版本文章。
sudo apt-get install python3.6-venv
mkdir project
cd project
pyhon3 -m venv venv 创建虚拟环境
. venv/bin/activate
pip install --upgrade pip
pip freeze > requirements.txt
pip install -r requirements.txt
pip install uwsgi
deactivate
-------------------------------uwsgi配置 ------------------------------
uwsgi.ini文件内容如下:
chdir = /deploy/project_dir
module = module_filename:create_app() # module_filename.py文件中定义了工厂方法create_app()方法,当然也可以使用定义全局app用下面的两行代替 参考:http://flask.pocoo.org/docs/1.0/cli/#application-discovery
# wsgi-file = manage.py
# callable = app
master = true
processes = 2
threads = 2
http = ip:port # 如果使用url直接在浏览器中访问uwsgi则需要设置成http协议,如果是Nginx和uwsgi通信则可以设置成socket协议如:socket = /var/www/project/uwsgi.sock
chmod-socket= 666
logfile-chmod= 644
daemonize=%(chdir)/uwsgi.log
可以使用uwsgi --http ip:5000 --module 'module_filename:create_app()'来测试一下,成功后再运行uwsgi --ini uwsgi.ini
----------------------supervisor-----------------
sudo apt-get install supervisor 以这种方式安装后自动设置为开机启动。
supervisord配置文件在: /etc/supervisor/supervisord.conf
然后 program 的配置文件命名规则推荐:app_name.conf,放在/etc/supervisor/conf.d/下面
; ================================
; uwsgi supervisor
; ================================
[program:app_lesson] # project_name为项目名称
command = /home/ubuntu/lesson/venv/bin/uwsgi --ini /home/ubuntu/lesson/uwsgi.ini
stopsignal=QUIT
autostart=true
autorestart=true
stdout_logfile=/var/log/uwsgi/supervisor_flask.log # 运行日志
stderr_logfile=/var/log/uwsgi/supervisor_flask_err.log # 错误日志
supervisorctl 是 supervisord 的命令行客户端工具,使用的配置和 supervisord 一样
sudo supervisord -c supervisord.conf # 指定配置文件启动supervisord
sudo supervisorctl 进入 supervisorctl 的 shell 交互界面
help # 查看帮助
status # 查看程序状态
stop program_name # 关闭 指定的程序
start program_name # 启动 指定的程序
restart program_name # 重启 指定的程序
tail -f program_name # 查看 该程序的日志
update # 重启配置文件修改过的程序(修改了配置,通过这个命令加载新的配置)
sudo chmod 777 /run
sudo chmod 777 /var/log
sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock
sudo service supervisor restart
------------------------------------------------------------------------------------
ps -ef|grep uwsgi| grep -v grep|cut -c 7-15|xargs sudo kill -9
如果出错,则查看/var/log/nginx/error.log,根据错误信息来处理。
总结: stack is : the web client <-> the web server <-> the socket <-> uWSGI <-> Python