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钩子,一键同步更新