Python Web application deploy using uWSGI in ubuntu
安装环境:
- Mac(10.9) + nginx(1.4.7) + python(2.7.5) + uwsgi(2.0.4) + django-cms(2.4.3)
- 使用supervisord做后台守护进程
- 默认系统已经安装python, nginx
使用virtualenv 作为python部署环境
- 安装virtualenv easy_install virtualenv
- 安装pip easy_install pip
- 创建python虚拟环境 virtualenv .env
- 使用虚拟环境 source .env/bin/activate
- 安装django-cms pip install django-cms==2.4.3(安装程序好自动安装依赖的对应版本的插件,django,south。。。)
- 安装uwsgi pip install uWSGI
- 安装supervisord pip install supervisor
- 创建django-cms项目 django-admin.py startproject demo
- 使用默认的方式运行项目 cd demo && python manage.py runserver
- 访问http://localhost:8000查看页面是否正常
- 使用uwsgi 启动项目 uwsgi --socket 127.0.0.1:9001 --protocol http --chdir 项目的目录 --venv .env --wsgi-file demo/demo/wsgi.py
- 配置supervisor来后台守护uwsgi进程 ,尽量使用默认配置
[program:demo] command= .env/bin/uwsgi --protocal=http --socket=127.0.0.1:9001 --chdir=Projects/Python/demo --wsgi-file=rojects/Python/demo/demo/wsgi.py --venv=Projects/Python/.env --processes=2 autostart=true ; start at supervisord start (default: true) stopsignal=INT ; signal used to kill process (default TERM) stdout_logfile_maxbytes=10MB ; max # logfile bytes b4 rotation (default 50MB) stdout_logfile_backups=10 ; # of stdout logfile backups (default 10) stderr_logfile_maxbytes=10MB ; max # logfile bytes b4 rotation (default 50MB) stderr_logfile_backups=10 ; # of stderr logfile backups (default 10)
13. 运行supervisord sudo supervisord -c /etc/supervisord.conf
14. 使用nginx 做前端转发
location / { include uwsgi_params; proxy_pass http://127.0.0.1:9001; }
15. 访问页面看效果
遇到的问题:
- no loaded app :解决方法 不要使用 -s , 需要使用--socket 和protocol, 并且指定wsgi-file
- supervisorctl 无法启动 显示unload confignation from ..., 项目的路径应该是绝对路径,不能是软连接
- 如果nginx无法使用uwsgi_pass, 可以使用proxy_pass 做反向代理
参考:https://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html