Nginx+Django部署实战笔记
使用python调研一个东西,结果需求增加,需要做成服务器的形式供别人访问。搜寻了下,目前python较为常见的是django框架 与Nginx配合使用。我的PC环境是ubuntu。
要说运行django就已经可以在网页上访问相应链接了,为什么还要整个Nginx呢?查询了下,大致原因是因为django不具备作为服务器的能力,所以需要Nginx承担服务器的功能。今天费了差不多半天时间来搞这个配置,本来以为很简单,结果因为我的Nginx的版本太低1.4.6,跟网上别人贴的不太一样。所以还是记录下来,以备日后查阅。
先说Django的安装
输入以下命令就可以自动安装django
$sudo pip install django
创建hello world工程
在一个文件夹下,输入下面命令
$django-admin startproject HelloWorld
再用tree看看生成了哪些文件:
再在工程目录下输入下面命令,就可以在网页上访问了。如下图
$python manage.py runserver 0.0.0.0:8000
但是如果输入的ip地址加port的话,就会有下图提示
在HelloWorld/settings.py中的ALLOWED_HOSTS = ['your ip'] 填上再运行就好了。
Nginx和安装和配置
输入sudo apt-get install nginx进行安装。然后看看版本号:
nginx -v
nginx version: nginx/1.4.6 (Ubuntu)
需要注意的是,nginx 1.4.6版本的server配置是在/etc/nginx/sites-available/default。现在来看看nginx是否可以正常运行吧。
打开/etc/nginx/sites-available/default,在里面的server中追加listen 8099; 这样当访问这个端口时,会默认定向到index.html。
启动服务:
sudo /etc/init.d/nginx restart
* Restarting nginx nginx [ OK ]
在浏览器里面输入ip:8099回车。于是出现nginx的欢迎界面。检测nginx正常运行了
将Nginx与Django关联
因为需要用到uwsgi,所以需要先安装它。输入下面命令
pip install uwsgi
安装后。可以使用uwsgi命令将py文件关联来处理http消息。这里先使用uwsgi命令来将django工程关联来处理web消息。
在工程目录下,输入下面命令
$uwsgi --http :8091 --chdir . --wsgi-file HelloWorld/wsgi.py --master --processes 4 --threads 2
这时候会报错:
File "HelloWorld/wsgi.py", line 12, in
from django.core.wsgi import get_wsgi_application
ImportError: No module named django.core.wsgi
这是因为django.core.wsgi 的包不在系统默认路径里面。先确认自己安装的pthon2.7的路径在哪,输入下面命令:
>>>importsite; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
在uwsgi.ini追加下面一行,再次运行uwsgi --http :8091 --chdir . --wsgi-file HelloWorld/wsgi.py --master --processes 4 --threads 2就可以了
pythonpath = /usr/local/lib/python2.7/dist-packages
再通过网页访问8091端口,展示如下面的页面,可以看出是DJango的介绍页。
下面再介绍将Nginx和Django关联。网上抄了一个uwsgi.ini文件,内容如下:
在/etc/nginx/sites-available/default文件的server的location里追加
uwsgi_pass 127.0.0.1:9090;
uwsgi_param UWSGI_SCRIPT HelloWorld.wsgi;
uwsgi_param UWSGI_CHDIR /home/xxx/django/HelloWorld
然后保存重起Nginx服务器
在服务器中输入127.0.0.1:8099, 展示的是django的index.html而不是Nginx的主页