这两天部署了一下自己写的django blog 记录一下备忘
系统:Ubuntu 16.04.2
部署方案:Gunicorn+Nginx+Django+supervisor+Virtualenv
- virtualenv 创建一个python3环境用于运行django blog
安装相关软件
1 | apt-get install nginx //安装nginx |
创建项目环境
1 | mkdir /django //dango相关主目录 |
拉取django项目文件并安装项目依赖
1 | cd/django/site |
django相关配置
1 | 配置项目settings.py |
测试gunicorn
1 | 使用gunicorn替换runserver启动django |
配置 nginx
vim /etc/nginx/sites-available/default //ubuntu下是这个配置文件(记得先备份)其他系统一般是 /etc/nginx/nginx.conf1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23server {
listen 80;
server_name 127.0.0.1:8000;
access_log /var/log/nginx/django.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 /static/ { #静态文件引用所有url中带static的都指向下面的目录
root /django/site/Django-project; #Django项目所在目录
}
location /media/ { #同上这个文件我的项目中是放图片和头像的
root /django/site/Django-project;
}
}
测试 先开启nginx 再运行 gunicorn 后 访问服务器外网IP 能正常访问–正常
配置 supervisor
守护进程 作用自行百度我的理解 就是 保证 gunicorn 进程一直存在 方便启动和停止
superisor 不支持python3 不过不影响使用1
2
3
4apt-get install python-pip //安装python2下的pip ubuntu自带python2.7
pip install supervisor //直接在ubuntu中安装 不是虚拟环境
echo_supervisord_conf > supervisor.conf //创建配置文件
vim supervisor.conf //编辑配置文件
激活web页面对比一下原配置文件去掉冒号就行了
配置要守护的进程 gunirorn
说明:/django/env/django/bin/gunicorn 是虚拟目录django的路径
supervisor操作
• supervisord -c supervisor.conf //启动supervisor程序
• supervisorctl //进入交互式界面 输用户名密码(默认 user/123 配置文件里有)
• status //查看APP状态
• start all start django //启动所有app或者启动指定
• stop 同上
• 测试 能否通过 supervisor 启动或停止 gunicron
设置supervisor开机自启动
创建启动文件 vim /lib/systemd/system/supervisord.service1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service
[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /django/supervisor.conf // /django/supervisor.conf配置文件的路径最好使用绝对路径
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
systemctl stop supervisord.service
systemctl start supervisord.service
测试能都通过上述命令 停止和启动 supervisor 如果可以表示成功
systemctl enable supervisord.service 设置开机自启动因为在 配置文件中已经开启了 gunicron app 随supervisor启动后自启
确保nginx也是开机自启动后,尝试 reboot 系统
如重启后能正常访问页面表示成功!!
####使用 Fabric
还可以使用 fabric 进一步自动化部署
更新服务器上代码的步骤一般有这么几个吧?
- 到github上下载更新的代码
- 重新收集一下静态文件
- 重新启动 gunicorn
- 重新启动 nginx
最少也要上面四个步骤吧?如果每次更新都这样来一遍页很麻烦吧?