Nginx和Gunicorn部署Django

使用系统CentOS7

部署前准备

1.安装nginx

2.安装mysql

3.安装redis

4.安装所需版本的python

5.安装virtualenvwrapper

6.创建www用户并加入root组

7.其它

修改部署

1.启动nginx,确定nginx可以正常运行

2.clone项目到www用户的根目录,并安装requirements.txt里面的依赖

3.collect收集项目的静态资源,修改settings的数据库配置文件,执行migrate创建数据库并创建超级用户

collectstatic
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '.ididiao.org']

#...

# 静态文件
STATIC_URL = '/static/'
# STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
# 收集文件的路径
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
migrate
python manage.py createsuperuser

4.在项目根目录下编写gunicorn.conf文件

bind = "127.0.0.1:8000"
# workers是工作线程数,一般设置成:服务器CPU个数 + 1
workers = 2
errorlog = './logs/gunicorn.error.log'
accesslog = './logs/gunicorn.access.log'

5.修改nginx的配置文件,主要修改80端口的监听

server {
     listen 80;
     server_name localhost example.com;
     access_log /www/ultimate-ruccet/logs/nginx.access.log;
     error_log /www/ultimate-ruccet/logs/nginx.error.log;

     location / {
         proxy_pass http://127.0.0.1:8000;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }

     location /robots.txt {
        alias /www/ultimate-ruccet/static/robots.txt;
     }

     location /favicon.ico {
          alias /www/ultimate-ruccet/static/favicon.ico;
     }

     location ~ ^/(media|static)/  {
         root    /www/ultimate-ruccet;
         expires 30d;
     }


     # this prevents hidden files (beginning with a period) from being served
      location ~ /\. {
        access_log off; log_not_found off; deny all;
     }

}

启动项目

1.启动nginx

2.启动gunicon

(ruccet) www@localhost: nohup gunicorn config.wsgi:application -c /home/www/ultimate-ruccet/gunicorn.conf&

自动化脚本

每次都要输入很长的命令进行gunicorn的关闭和启动比较麻烦,再次我写了个shell进行启动的关闭的执行,这样每次启动和关闭就比较简单了,具体的目录可以根据自己的情况进行修改

#!/bin/sh
## service name

#项目的目录
SERVICE_DIR=/home/www/ultimate-ruccet
#gunicorn的名字
SERVICE_NAME=gunicorn
#gunicorn的配置文件名
SERVICE_CONF=gunicorn.conf
#虚拟环境的路径
VIRTUAL_DIR=/home/www/venv-repo/ruccet/bin/activate
#pid存放的位置
PID=gunicorn\.pid

cd $SERVICE_DIR

source $VIRTUAL_DIR

case "$1" in

    start)
        nohup gunicorn config.wsgi:application -c $SERVICE_DIR/$SERVICE_CONF >/dev/null 2>&1 &
        echo $! > $SERVICE_DIR/$PID
        echo "*** start $SERVICE_NAME ***"
        ;;
    stop)
        kill `cat $SERVICE_DIR/$PID`
        rm -rf $SERVICE_DIR/$PID
        echo "*** stop $SERVICE_NAME ***"
        	
        sleep 2
        P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "*** $SERVICE_NAME process not exists or stop success ***"
        else
            echo "*** $SERVICE_NAME process pid is:$P_ID ***"
            echo "*** begin kill $SERVICE_NAME process,kill is:$P_ID ***"
            kill -9 $P_ID
        fi
        ;;
    restart)
        $0 stop
        sleep 2
        $0 start
        echo "*** restart $SERVICE_NAME ***"
        ;;

    *)
        ## restart
        $0 stop
        sleep 2
        $0 start
        ;;
esac
exit 0

其实关于Django的自动化部署是比较方便的,你也可以使用Fabric进行操作。

转载于:https://my.oschina.net/liuyuantao/blog/1189252

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值