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部署环境

  1. 安装virtualenv   easy_install virtualenv
  2. 安装pip  easy_install pip
  3. 创建python虚拟环境  virtualenv .env
  4. 使用虚拟环境   source .env/bin/activate
  5. 安装django-cms   pip install django-cms==2.4.3(安装程序好自动安装依赖的对应版本的插件,django,south。。。)
  6. 安装uwsgi pip install uWSGI
  7. 安装supervisord pip install supervisor
  8. 创建django-cms项目     django-admin.py startproject demo
  9. 使用默认的方式运行项目   cd demo && python manage.py runserver   
  10. 访问http://localhost:8000查看页面是否正常
  11. 使用uwsgi 启动项目   uwsgi --socket 127.0.0.1:9001 --protocol http --chdir 项目的目录  --venv .env --wsgi-file demo/demo/wsgi.py
  12. 配置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. 访问页面看效果

遇到的问题:

  1. no loaded app  :解决方法 不要使用  -s , 需要使用--socket  和protocol, 并且指定wsgi-file
  2. supervisorctl 无法启动 显示unload confignation from ..., 项目的路径应该是绝对路径,不能是软连接
  3. 如果nginx无法使用uwsgi_pass, 可以使用proxy_pass 做反向代理

参考:https://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html