天天看点

uwsgi+ nginx + django采坑经验前车之鉴,后车之师。

背景:已经有了正常的工作的django项目,现在需要配置uwsgi + nginx。

一  安装配置uwsgi

    直接安装pip install uwsgi会报错如下:

Command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip_build_aa/uwsgi/setup.py';
exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))
" install --record /tmp/pip-mjkYEB-record/install-record.txt --single-version-externally-managed --comp
ile failed with error code 1 in /tmp/pip_build_aa/uwsgi
Storing debug log for failure in /home/aa/.pip/pip.log
           

  需要安装python-dev。

  1. sudo apt-get install python-dev

  2. sudo pip install uwsgi

  在django项目根目录下创建uwsgi.ini

[uwsgi]

socket = :8000

#django 目录
chdir           = /home/user/www/django项目

#Django 项目下 wsgi.py 文件路径
module          = myweb.wsgi

master          = true

#进程数
processes       = 4
vacuum          = true
#输出日志
daemonize = /srv/script/uwsgi.log
#主进程pid
pidfile = /srv/script/uwsgi.pid
#配置python安装路径
pythonpath = /srv/JMS/src/venv/local/lib/python2.7/site-packages
           

       启动uwsgi : uwsgi --ini uwsgi.ini (在django项目根目录 ,不然需要给出uwsgi完全路径。)

      停止可以采用uwsgi --stop /srv/script/uwsgi.pid,如果不好使直接杀掉uwsgi:pkill -f uwsgi -9

在这一步可以做个测试,看uwsgi是否正常工作,把上面socket换成http,测试是否能够正常访问django网站(127.0.0.1:8000此时网站只能加载不出如js,css等静态文件,但是链接是可以跳转的。)

二  安装配置nginx

       sudo apt-get install nginx(另外通过编译安装也可以,我没有研究)

      (如果出现404的错误需要更新一下 sudo apt-get update)

      这种把nginx安装在/etc/nginx这个位置。

      在/etc/nginx/conf.d下创建文件  你项目名.conf 的配置文件,配置如下:

server {                                                                    
  2     listen 8099;   #监听端口
  3     server_name xxx.xxx.xx.xxx;    #本机ip,这是个坑,我就在这儿浪费了半天,想死
  4     charset UTF-8;    #编码
  5     access_log /var/log/nginx/myweb_access.log;    #输出日志
  6     error_log /var/log/nginx/myweb_error.log;   
  7 
  8     client_max_body_size 75M;
  9 
 10     location / {
 11         include uwsgi_params;
 12         uwsgi_read_timeout 30;
 13         uwsgi_pass 127.0.0.1:8000;    #这儿要跟你uwsgi配置的一直,坑!!
 14     }
 15 
 16     location /static {                #静态文件位置
 17         alias /项目位置根/static/;
 18         
 19     }
 20 
 21     location /media {
 22         alias /项目位置根/media/;
 23     }
 24     location /admin/{                #只需这个ip可以访问admin后台
 25         allow 192.168.10.100;
 26         deny all;
 27     }
 28 }
           

      配置项目setting文件

from django.conf.urls import url
from django.views.static import serve

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
urlpatterns={
    url(r'^media/(?P<path>.*)', serve, {'document_root': MEDIA_ROOT}),
    url(r'^static/(?P<path>.*)$', serve, {'document_root': STATIC_ROOT}),
}
STATICFILES_FINDERS = (
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder"
)
           

     把之前配置的静态文件存放设置去掉。

     到这一步还是不能加载静态文件,需要将项目中的静态文件统一复制以到在conf配置的静态文件位置,只需使用这个命令即可:python manage.py collectstatic

     此时配置完成,需要启动uwsgi和nginx:

      uwsgi --ini /srv/SEAP/uwsgi.ini &

      sudo nginx

      此时可以查看进程情况: ps -ef |grep uwsgi            ps -ef |grep nginx

      我的配合的是4进程的,所以应该看到

uwsgi+ nginx + django采坑经验前车之鉴,后车之师。
uwsgi+ nginx + django采坑经验前车之鉴,后车之师。

     如果只有最下面一条,说明没有启动成功,查看一下是哪里出错了。

下面贴一些用的着的命令

启动uwsgi:   uwsgi --ini uwsgi.ini

强制杀死uwsgi:   pkill -f uwsgi -9

nginx启动: sudo nginx

nginx停止:sudo nginx -s stop

更新static  :python manage.py collectstatic

启动

uwsgi --ini /srv/SEAP/uwsgi.ini &

sudo nginx

重启

uwsgi --reload /srv/script/uwsgi.pid

nginx -s reload

停止

uwsgi --stop /srv/script/uwsgi.pid

nginx -s stop

前车之鉴,后车之师。

继续阅读