南京邮电大学移动互联网俱乐部

部署Django Application(一)使用CentOS + Nginx + Gunicorn + Supervisord

作者: 林翔宇

本文是去年做掌上南邮第一版服务器程序的时候写的部署笔记,原来放在简书上,时隔一年后,还收到一两个喜欢,看来还有那么一点点价值,于是就搬过来好了。

初始化服务器环境

yum -y install vim git screen python-pip
curl -L https://github.com/robbyrussell/oh-my-    zsh/raw/master/tools/install.sh | sh
pip install virtualenvwrapper gunicorn django
mkdir /usr/local/virtualenv
mkvirtualenv python

配置gunicorn服务器

Gunicorn(gunicorn.org)是一个Python WSGI UNIX的HTTP服务器。,从Ruby的独角兽(Unicorn)项目移植。

在Django项目下建立shell脚本

#!/bin/bash
set -e 
LOGFILE=guni.log
LOGDIR=$(dirname $LOGFILE)
NUM_WORKERS=3  # cpu core nums * 2 + 1
USER=nobody
GROUP=nogroup
# WORKER=gevent # install python gevent
ADDRESS=127.0.0.1:8000
test -d $LOGDIR || mkdir -p $LOGDIR
exec gunicorn_django -w $NUM_WORKERS --bind=$ADDRESS \
 # -k $WORKER 
  --daemon \
  --user=$USER --group=$GROUP --log-level=error \
  --log-file=$LOGFILE 2>>$LOGFILE

安装Nginx用作反向代理与静态服务器

  • 使用http://lnmp.org/ 安装Nginx
  • 用Lnmp一键安装包带的脚本新建一个虚拟主机
  • 更改主机的Nginx配置文件

      server {
    
          listen       80;
          server_name  nuptapi.nupter.org;
          access_log   /home/wwwlogs/nuptapi.nupter.org.log;
          error_log    /home/wwwlogs/nuptapi.nupter.org.error.log;
          root /home/wwwroot/nuptapi.nupter.org;
    
          location  /static/ {
              alias /home/wwwroot/nuptapi.nupter.org/static/;
          }
    
          location  / {
              proxy_pass            http://127.0.0.1:8000;
              proxy_redirect        off;
              proxy_set_header      Host             $host;
              proxy_set_header      X-Real-IP        $remote_addr;
              proxy_set_header      X-Forwarded-For  $proxy_add_x_forwarded_for;
              client_max_body_size  10m;
          }
    
      }
    

用Supervisord守护进程

  • echo_supervisord_conf > /etc/supervisord.conf
  • vim /etc/supervisord.conf

更改配置文件以下的内容

  • chown=lxy:lxy ; socket file uid:gid owner
  • [program:nuptapi] command=/home/wwwroot/django_helloworld/gunicorn_start.sh

  • Shell运行supervisord

  • 同时supervisord 默认会在9001端口打开一个HTTP服务器,可以在Nginx再配置一个反向代理来远程登陆

其它

  • 配置DNS服务器,解析域名A记录到服务器IP
  • 重启Nginx

Comments