使用系统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进行操作。