安装python
在python下载源码包:
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz # 解压 tar -zxf Python-3.6.5.tgz cd Python-3.6.5 #编译 ./configure --prefix=/appliocation/python3 --enable-optimizations make && make install # 配置环境变量 vim ~/.bash_prefile # 在这一行增加python的bin路径,如下 export PATH=$HOME/bin:/usr/local/python3/bin:/usr/local/bin:$PATH source ~/.bash_profile
安装django
pip3 isntall django==1.11.8 # 创建django项目 django-admin startproject hello_django cd hello_django #创建应用 python3 manager.py startapp app01 #创建uwsgi配置文件 vim hello_django.ini #输入这些内容 # myweb_uwsgi.ini file [uwsgi] # Django-related settings socket = :8080 #真实服务的端口 # Django项目根目录 (绝对路径) chdir = /root/hello_django # wsgi.py文件在项目中的位置 module = hello_django.wsgi # process-related settings # master master = true # 运行的进程数 processes = 4 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true
启动uwsgi
# 安装基础开发包 yum groupinstall "Development tools" yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel # 安装uwsgi pip install uwsgi uwsgi --version # 查看 uwsgi 版本 uwsgi hello_django/hello_django.ini 在seething.py修改才可以访问,默认只是localhost,如下 ALLOWED_HOSTS = ['192.168.0.75', '127.0.0.1', 'localhost']
安装Nginx
cd ~ wget http://nginx.org/download/nginx-1.5.6.tar.gz tar xf nginx-1.5.6.tar.gz cd nginx-1.5.6 ./configure --prefix=/usr/local/nginx-1.5.6 --with-http_stub_status_module --with-http_gzip_static_module make && make install
配置Nginx
找到nginx.conf,写入如下内容
server { #这里是访问时用到的端口 listen 80; server_name localhost; charset UTF-8; client_max_body_size 75M; location / { include uwsgi_params; #同uwsgi内容 uwsgi_pass 127.0.0.1:8080; #链接超时时间 uwsgi_read_timeout 30; } }
如此一来,重启你的nginx,访问80端口,就能看到效果了。
还有问题?
你可能发现了,你网页上的静态资源无法访问!!比如说admin页面,会特别简陋,这是因为nginx+uwsgi+Django时,Django对静态资源的处理nginx不能代理(可能吧)。总之这种事不该让Django做,因为nginx在处理静态资源上能力更强,对于静态资源,就让nginx处理吧。
通常来说,你会有两种静态资源/media/
开头的链接和/static/
开头的。static用来处理一些网站原始图片,视频,js,css文件,Django是自己就支持这种链接的。那么如何关闭让Django处理/static/
开头的文件呢,很简单,在setting.py
中将DEBUG
值改为False
,这时,Django就不去处理/static/
文件了。
那么/media/
呢?一般来说,用户上传的图片,我们会保存起来,在网页上显示时候就用/media/
,在setting.py
中设置
MEDIA_URL = '/media/' #访问的前缀链接 MEDIA_ROOT = os.path.join(BASE_DIR, '../media') #存放文件的具体位置
再在url.py
中添加
from django.conf import settings from django.conf.urls.static import static if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
这里的意思是在DEBUG=True时,会解析/media/
文件,文件存放的位置是第二个参数。
如此一来当即在部署为生产环境时,只需要吧DEBUG改为False,Django就不会去处理static
和media
了。
收集静态文件
Django有一个工具可以将应用里用到的所有静态文件收集起来,方便nginx解析。具体:
在setting.py
中设置STATIC_ROOT = os.path.join(BASE_DIR, '../collectedstatic')
这样收集的静态文件就都放进上面的目录里了。如何运行这个工具?python3 manager.py collectstatic
配置nginx解析静态文件
同样,nginx.conf
首先,在文件顶部加入 user root
声明让root用户跑nginx,否则访问静态文件可能提示没有权限
其次,在上面说的配置文件location /
前加入以下带内容
location /static/ { autoindex on; alias /root/SchoolBuyWeb/collectedstatic/; } location /media/ { autoindex on; alias /root/SchoolBuyWeb/media/; }
注意alias
后对应好自己设定的目录即可!
重启nginx,现在已经ok了~~
重启uWSGI服务器
There are several ways to make uWSGI gracefully restart.
有几种方法完美重启uWSGI。
# using kill to send the signal
#使用kill发送信号
kill -HUP `cat /tmp/project-master.pid` (好用)
# or the convenience option --reload
#或者使用简单选项 --reload
uwsgi --reload /tmp/project-master.pid
# or if uwsgi was started with touch-reload=/tmp/somefile
#或者,如果uwsgi是使用touch-reload=/tmp/somefile启动
touch /tmp/somefile
Or from your application, in python:
或者在Python程序里:
uwsgi.reload()
注意,如果要使用pid,需要在uwsgi启动参数中指定 --pidfile,如:
#/etc/rc.local 修改自启动
/usr/local/bin/uwsgi /var/www/html/mz_uwsgi.ini --pidfile /tmp/uwsgi.pid
或者需要在mz_uwsgi.ini配置
pidfile=/tmp/mz_uwsgi.pid
sudo killall -9 uwsgi 这个命令也可以编辑杀死进程
比reboot服务器方便。
还有问题可以参考 http://www.runoob.com/django/django-nginx-uwsgi.html