第一篇博客,不是很懂语法之类的,希望通过多写点东西,记录自己的成长,早点成为一个pyer.
就写下这两天折腾的这个nginx-uwsgi-django.
首先附上官方文档链接 http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
环境 python == Python 2.7.3, os == centos6.5 x86_64
django == 1.8.1
uwsgi == uWSGI 2.0.15 (64bit) #都是pip 直接安装的
nginx == 1.10.1 #yum install -y
1.刚刚创建的project
$django-admin startproject test_nginx_uwsgi $cd test_nginx_uwsgi/ $tree . ├── manage.py └── test_nginx_uwsgi ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
2.当前目录下创建test.py文件,代码如下:
#test.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return "Hello World" #国际惯例,helloworld
运行代码:
$uwsgi --http :9111 --wsgi-file test.py ##中间东西很多,又看不懂,乱七八糟的,我就不贴了## *** uWSGI is running in multiple interpreter mode *** spawned uWSGI worker 1 (and the only) (pid: 19381, cores: 1)
参数含义简介:
- :9111 > 想必大家都知道,运行的端口
- wsgi-file > 指定加载的文件
- 报错[uwsgi: command not found]的话,ln -s /your-python-dir/bin/* /usr/bin/*
如图所示,第一步完成!
3.测试您的django 是否能够正常运行!ps:为了方便起见我们直接用admin网站测试好了~~
$python manage.py syncdb #创建superuser $python manage.py makemigration $python manage.py migrate $python manage.py runserver 0.0.0.0:9111
大家有目共睹
4.使用Uwsgi 跑 django项目
cmd: (其中test_nginx_uwsgi.wsgi指的就是test_nginx_uwsgi目录下的wsgi.py,django1.8自动生成)
$ uwsgi --http :9111 --module test_nginx_uwsgi.wsgi
又成功了一步~可以对比上面的,同样的url,这里却很难看,是因为没有加载static文件
但是可以说明 web-client <-> Uwsgi <-> Django 是连通的,下面的就要看Nginx.
5.配置Nginx.
由于版本的问题,如果这里也用官方的源码就不行了。
- 收集静态文件
#首先setting.py中添加 STATIC_ROOT = '/root/django/test_nginx_uwsgi/static_root/'
------------------------------我是换行------------------------------
$python manage.py collectstatic You have requested to collect static files at the destination location as specified in your settings: /root/django/test_nginx_uwsgi/static_root This will overwrite existing files! Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel: yes #·······省略~ 62 static files copied to '/root/django/test_nginx_uwsgi/static_root'. - nginx配置文件在 /etc/nginx/nginx.conf ,其中include -> /etc/nginx/conf.d/*.conf [这个,相信大多数linux服务如出一辙]
- vi /etc/nginx/conf.d/test_nginx_uwsgi.conf,代码如下
# test_nginx_uwsgi.conf # the upstream component nginx needs to connect to upstream django_test { #加上_test,因为和原来的冲突了,这里备注下 # server unix:///path/to/your/mysite/mysite.sock; # for a file socket server 127.0.0.1:9111; # for a web port socket (we'll use this first) 类似uwsgi端口 } # configuration of the server server { # the port your site will be served on listen 8090; #nginx 运行端口 # the domain name it will serve for server_name .example.com; # substitute your machine's IP address or FQDN charset utf-8; # max upload size client_max_body_size 75M; # adjust to taste # Django media location /media { alias /root/django/test_nginx_uwsgi/media; # 加载你的meida, } location /static { alias /root/django/test_nginx_uwsgi/static_root; # 加载你的静态文件 } # Finally, send all non-media requests to the Django server. location / { uwsgi_pass django_test; include /etc/nginx/uwsgi_params; #官方说要把文件cp到项目目录,感觉没必要 } }
- 重启 nginx (不知道是我这机器有毛病还是····,光restart不行)
[root@lzy test_nginx_uwsgi]# /etc/init.d/nginx restart stopping nginx.... Done. starting nginx.. [root@lzy test_nginx_uwsgi]# nginx -c /etc/nginx/nginx.conf [root@lzy test_nginx_uwsgi]# nginx -s reload [root@lzy test_nginx_uwsgi]# lsof -i :8090 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1354 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1383 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1384 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1386 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1387 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1388 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1390 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1391 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1392 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1393 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1398 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1399 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1400 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1401 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1402 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1403 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) nginx 1404 root 9u IPv4 87392561 0t0 TCP *:8090 (LISTEN) #可以看到8090端口已经在运行 nginx 了,说明配置文件有效果了
6.接下来官网Balala了一堆,我这种fish压根不懂,我也没按他的做,跳过这一步··
7.配置test_nginx_uwsgi_uwsgi.ini 启动配置文件
ps:参考了http://www.runoob.com/django/django-nginx-uwsgi.html
创建test_nginx_uwsgi_uwsgi.ini 就在项目根目录
#test_nginx_uwsgi.ini file [uwsgi] # Django-related settings socket = :9111 # the base directory (full path) chdir = /root/django/test_nginx_uwsgi # Django s wsgi file module = test_nginx_uwsgi.wsgi # process-related settings # master master = true # maximum number of worker processes processes = 4 # ... with appropriate permissions - may be needed chmod-socket = 664 # clear environment on exit vacuum = true
8.配置完成,就剩下启动了
启动就很简单呢
#首先启动uwsgi 指定配置文件ini $uwsgi --ini test_nginx_uwsgi.ini #也可以 nohup uwsgi --ini test_nginx_uwsgi.ini & 后台执行,无输出 #其次重启Nginx,参照上面重启步骤 #浏览器打开 192.168.8.199:8090/admin
大功告成~现在就是通过nginx端口打开的django,如果nginx Listen 80,那么浏览器不用输端口也行呢
#error: /var/log/nginx/nginx.log提示 13 Pemmer deied【权限问题】,修改/etc/nginx/nginx.conf,user nginx -> user root