Django线上部署实战教程之Nginx+Gunicorn+Django篇
我们的目标:
安装gunicorn
(trydjango110_env)# pip install gunicorn
实战部署django
收集项目所有静态文件:
Django project的settings.py文件:
STATIC_URL = \'/static/\'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
STATIC_ROOT = os.path.join(BASE_DIR, "static_assets")
# STATIC_ROOT=/www/http/static
将django admin和django app的静态文件收集到STATIC_ROOT目录下:
(trydjango110_env)# python manage.py collectstatic
修改ALLOWED_HOSTS:
修改Django项目的settings.py文件中的ALLOWED_HOSTS配置:
ALLOWED_HOSTS = ["*", ]
修改nginx配置:
备份原来的nginx配置:
# mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
新建一个/usr/local/nginx/conf/nginx.conf文件,
按下方gunicorn版nginx配置修改/usr/local/nginx/conf/nginx.conf文件
#user nobody;
worker_processes 1;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main \'$remote_addr - $remote_user [$time_local] "$request" \'
\'$status $body_bytes_sent "$http_referer" \'
\'"$http_user_agent" "$http_x_forwarded_for"\';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream trydjango110 {
server unix:/usr/local/envs/trydjango110/bbs.sock;
}
server {
listen 80;
server_name localhost;
#access_log logs/host.access.log main;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://trydjango110;
break;
}
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /static/ {
alias /usr/local/envs/trydjango110/static_assets/;
}
}
}
重载nginx配置:
# /usr/local/nginx/sbin/nginx -s reload
通过gunicorn启动Django项目,在你的django project目录下运行:
# gunicorn bbs.wsgi:application --bind=unix:/usr/local/envs/trydjango110/bbs.sock
可以把gunicorn启动Django项目的命令写成脚本,增加很多参数设置:
按照下方内容,在Django project下创建bbs_gunicorn_start.sh文件:
#!/bin/bash
NAME="posts" # 应用的名字,这里填上Django project下面的app名字
DJANGODIR=/usr/local/envs/trydjango110 # Django project 路径
SOCKFILE=/usr/local/envs/trydjango110/bbs.sock # 使用这个文件进行unix socket通信
# USER=hello # 运行的用户,我们这里使用的是root用户所以不需要
# GROUP=webapps # 运行的用户组
NUM_WORKERS=3 # Gunicorn 可以产生的工作进程数量
DJANGO_SETTINGS_MODULE=bbs.settings # Django project使用的settings
DJANGO_WSGI_MODULE=bbs.wsgi # WSGI模块,默认与settings.py文件同目录
echo "Starting $NAME as `whoami`"
# 启用虚拟环境
#cd $DJANGODIR # cd到Django project目录
#source trydjango110_env/bin/activate # 启用
#export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
#export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Start your Django gunicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--bind=unix:$SOCKFILE
\
--log-level=debug \
--log-file=-
赋予该启动脚本执行权限:
# chmod a+x bbs_gunicorn_start.sh
运行该启动脚本:
# sh bbs_gunicorn_start.sh
参考链接:
Django官网部署教程(gunicorn):
https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/gunicorn/
其他:
http://www.jianshu.com/p/288ebe5396a0