Python 运维《Django By Example》

DJango部署 Gunicorn+Nginx+Django+s

2017-09-15  本文已影响56人  镜kong

这两天部署了一下自己写的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 进一步自动化部署
更新服务器上代码的步骤一般有这么几个吧?

git pull    # 抓取github上最新的代码
git checkout . && git clean -xdf     #上一步可能会失败 执行该命令丢弃本地所有未提交的代码后重试
pip install -r requirements.txt

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

上一篇 下一篇

猜你喜欢

热点阅读