背景:已经有了正常的工作的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。
-
sudo apt-get install python-dev
-
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: 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
前车之鉴,后车之师。