DJango部署 Gunicorn+Nginx+Django+supervisor+Virtualenv

这两天部署了一下自己写的django blog 记录一下备忘

  • 系统:Ubuntu 16.04.2

  • 部署方案:Gunicorn+Nginx+Django+supervisor+Virtualenv

  • virtualenv 创建一个python3环境用于运行django blog


1.安装相关软件

apt-get install nginx                            //安装nginx

systemctl enable nginx                     //设置nginx开机自启动

apt-getinstall python3 python3-pip    //安装python3和PIP

python3-m pip install virtualenv         //安装virtualenv

2.创建项目环境

mkdir  /django                                        //dango相关主目录

mkdir  /django/site                                 //用来放网站文件

mkdir  /django/env                                //用来放虚拟环境目录

创建虚拟环境

cd/django/env

virtualenv --python=python3 django               //这个用来跑django项目

3.拉取django项目文件并安装项目依赖

cd/django/site

git cloneXXXXXXXX(你的项目git仓库地址)                        //拉取项目

cd  Django-project(你的Django项目)

source /django/env/django/bin/activate                                 //激活虚拟环境

pip install -r requirements                                //安装项目依赖这步不懂的自行百度pip

安装完毕依赖后

python manager.py runserver                       //测试一下项目和环境在本机能正常访问127.0.0.1:8000表示正常

pip install gunicorn                                           //在虚拟环境下安装gunicorn

pip install gevent//在虚拟环境下安装gevent

4.django相关配置

配置项目settings.py

INSTALLED_APPS下添加gunicorn

DEBUG= False               //关闭调试模式

ALLOWED_HOSTS= ['*']                  //我直接设成所有了也可以根据自己需要设置

STATIC_ROOT= os.path.join(BASE_DIR, 'static')              //设置静态文件目录

python manage.py collectstatic               //收集静态文件(在django虚拟环境下执行)

5.测试gunicorn

使用gunicorn替换runserver启动django

激活虚拟环境切换到Django项目根目录

gunicorn --worker-class=gevent blogprject.wsgi:application

//blogprject就是你的项目名称内有setting.py和wsgi.py的那个文件夹的名字

无报错,能正常访问127.0.0.1:8000表示成功

默认用的是8000端口 如果要在一台服务器上部署多个网站可以指定别的端口

-b 127.0.0.1:8080       这个参数可以指定别的端口

6.配置 nginx

vim /etc/nginx/sites-available/default //ubuntu下是这个配置文件(记得先备份)其他系统一般是 /etc/nginx/nginx.conf

server {

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 能正常访问--正常

7.配置 supervisor

守护进程 作用自行百度我的理解 就是 保证 gunicorn 进程一直存在 方便启动和停止
superisor 不支持python3 不过不影响使用

apt-get install python-pip                //安装python2下的pip ubuntu自带python2.7
pip install supervisor                             //直接在ubuntu中安装 不是虚拟环境
echo_supervisord_conf > supervisor.conf                   //创建配置文件
vim supervisor.conf                                                                            //编辑配置文件

激活web页面对比一下原配置文件去掉冒号就行了


image.png
image.png

配置要守护的进程 gunirorn


image.png

说明:/django/env/django/bin/gunicorn 是虚拟目录django的路径

supervisor操作

• supervisord -c supervisor.conf //启动supervisor程序
• supervisorctl //进入交互式界面 输用户名密码(默认 user/123 配置文件里有)
• status //查看APP状态

image.png

• start all start django //启动所有app或者启动指定
• stop 同上
• 测试 能否通过 supervisor 启动或停止 gunicron

设置supervisor开机自启动

创建启动文件 vim /lib/systemd/system/supervisord.service

[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上下载更新的代码
git pull    # 抓取github上最新的代码
git checkout . && git clean -xdf     #上一步可能会失败 执行该命令丢弃本地所有未提交的代码后重试
  • 安装最新的依赖库
pip install -r requirements.txt
  • 检查一下setting.py 文件中服务器部署相关配置还在不在
  • 重新收集一下静态文件
  • 重新启动 gunicorn或supervisor
  • 重新启动 nginx
    最少也要上面j几个步骤吧?如果每次更新都这样来一遍页很麻烦吧?

所以该 Fabric 这个神器出场啦。。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容