cookiecutter-django 部署指南

2019/8/13 posted in  python

cookiecutter对于项目的管理结构比较清晰,但是在部署的时候就会出现这样那样的问题,这里整理一下cookiecutter构建的项目上基于guincorn的部署指南。 后面再逐步整理其他的部署指南

安装配置指南

1. 虚拟环境的安装和配置

首先还是要创建我们的虚拟环境 virtualenv,这里就不过多介绍了。配置完成后,进入虚拟环境,安装依赖包

(venv)....$ pip install -r requirements/production.txt

系统原生生成的还是需要添加我们自己添加的部分依赖包,所以在之前还是要修改一下production.txt文件,加入自己的依赖包

完成后对于cookiecutter还是要加入自己的一些配置文件,配置文件建议放到venv中,这里我们在虚拟环境中添加一个新的配置文件

2. 修改环境变量

# vi ../collectvenv/bin/postactivate

export WEB_CONCURRENCY=4
export DJANGO_SETTINGS_MODULE='config.settings.production'
export DATABASE_URL='postgres://<user>:<password>@<ip>:<port>/<databasename>'
export DJANGO_SECRET_KEY='<添加秘钥>'
export DJANGO_ALLOWED_HOSTS='<添加网站名>'
export REDIS_URL='redis://127.0.0.1:6379/<redis>'
export DJANGO_ADMIN_URL='admin/'

把这些添加上之后不要忘记了要执行一下

(venv)... $ source ../collectvenv/bin/postactivate

让这个配置文件在当前环境下生效

3. 添加guincorn配置文件

配置文件可以在collect_web项目路径下

vi /opt/collect/collect_web# vi gunicorn.conf.py

把相应的配置都加上

import logging
import logging.handlers
from logging.handlers import WatchedFileHandler
import os
import multiprocessing
bind = "0.0.0.0:9091"   #绑定的ip与端口
backlog = 512                #监听队列数量,64-2048
#chdir = '/home/test/server/bin'  #gunicorn要切换到的目的工作目录
worker_class = 'sync' #使用gevent模式,还可以使用sync 模式,默认的是sync模式
workers = 4 # multiprocessing.cpu_count()    #进程数
threads = 16 #multiprocessing.cpu_count()*4 #指定每个进程开启的线程数
loglevel = 'info' #日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
# accesslog = "/home/log/gunicorn_access.log"      #访问日志文件
#errorlog = "/home/log/gunicorn_error.log"        #错误日志文件
accesslog = "-"  #访问日志文件,"-" 表示标准输出
errorlog = "-"   #错误日志文件,"-" 表示标准输出
proc_name = 'collect_web'   #进程名

4. 执行测试

配置完成后可以执行测试

/opt/collect/collect_web# gunicorn -c gunicorn.conf.py config.wsgi

使用默认的gunicorn需要对项目的路径比较清楚,我们发现cookiecutter的wsgi.py文件是写在config里面的,所以这里我们需要修改到config下面,才能找到相应的wsgi,然后进行到下一步

5. 修改配置文件

启动后会发现依然有一部分的环境变量找不到,实际上是因为我们没有使用那一部分。所以这里比较重要的就是修改config中的production.py中的相关内容。把不需要的尽量屏蔽掉。

6. 发布相应文件

如果是新建数据库的话记得migrate。如果是新环境的话记得去collectstatic一下,把所有的静态文件都发布到同一个包中去。

cd project-directory
git pull
python manage.py migrate
python manage.py collectstatic

7. 配置nginx

server {
    server_name ***
    listen 80;
    location /{
        proxy_pass http://127.0.0.1:9091/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass_request_body on;
        client_max_body_size 100m;
    }

    location /static/ {
        alias /opt/collect/collect_web/staticfiles/;
    }
}

systemd配置

待完成事项:

  • 配置自启动和进程监控
  • 配置github钩子,一键同步更新

可以参考的网站

gunicorn官方部署文档

cookiecutter-django官方文档