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
DJango部署 Gunicorn+Nginx+Django+supervisor+Virtualenv_第1张图片
image.png

配置要守护的进程 gunirorn


DJango部署 Gunicorn+Nginx+Django+supervisor+Virtualenv_第2张图片
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 这个神器出场啦。。。。

你可能感兴趣的:(DJango部署 Gunicorn+Nginx+Django+supervisor+Virtualenv)