django + nginx_Docker自动化部署Django

8d50f585afe8e38e4c94f1532c631005.png

本文使用的系统是centos7,利用docker-compose完成部署。

1.部署工具

  • 阿里云服务器
  • docker
  • docker-compose
  • django
  • python
  • nginx
  • gunicorn
  • mysql
  • centos7
  • git

2.安装docker

#安装依赖
sudo yum install -y yum-utils 
           device-mapper-persistent-data 
           lvm2
#添加软件源
sudo yum-config-manager 
    --add-repo 
    https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's/download.docker.com/mirrors.ustc.edu.cn/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
#安装docker ce
sudo yum makecache fast
sudo yum install docker-ce
#将当前用户加入docker用户组
sudo usermod -aG docker $USER

更多安装细节请参考

CentOS​yeasy.gitbook.io
5218a4dd7020f076062379cce86450a5.png

3.docker更换阿里镜像源

由于国内访问国外的的网比较慢,所以配置国内加速器提升获取Docker官方镜像的速度。

登录阿里云容器镜像服务,开通镜像加速器,复制自己的加速器地址,下面要用到。

debea7efd76a2bfb6964f09306e7f8a1.png

配置加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["上面的加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

详情请参考阿里云官方配置

Login​cr.console.aliyun.com

4.克隆django项目

sudo yum install -y git
git clone 你的django项目地址

项目目录结构如下图:

7c92f86b2d6b63f8ff2e37551401b792.png

django_example是django项目源代码

tmp存放日志文件,目录结构如下图:

673cd8d852d27d4e69450d2279528f95.png

nginx存放nginx的相关配置

docker-compose.yml是docker-compose配置文件

5.基于docker构建django依赖环境

django_example结构如下图

87011002dfd414b14c1556a6c89c5dc1.png

Dockerfile内容如下,基于ubuntu构建django项目的依赖环境

FROM ubuntu
RUN apt-get update && 
    apt-get install -y python3 
                        python3-dev 
                        python3-pip 
                        cifs-utils 
    && apt-get clean 
    && apt-get autoclean 
    && rm -rf /var/lib/apt/lists/*
WORKDIR /var/django_example
COPY requirements.txt /var/django_example
RUN pip3 install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --no-cache-dir
CMD ["bash", "run.sh"]

requirements.txt是项目的依赖环境

可用pip freeze > requirements.txt命令导出依赖

gunicorn.conf是gunicorn配置文件,内容如下

bind=['0.0.0.0:8000'] #绑定8000端口,第6步要用到
time_out=60
# 项目名称,跟你的django项目名称一致
proc_name='django_example'
pidfile='/tmp/django_example.pid'
worker_class='gevent'
max_requests=600
accesslog='/tmp/gunicorn_access.log'
errorlog='/tmp/gunicorn_error.log'

run.sh脚本用于收集静态文件以及启动django项目,内容如下

python manage.py collectstatic
gunicorn django_example.wsgi:application -c gunicorn.conf

6.基于docker构建nginx环境

nginx目录结构如下

b3a3e0bbcb2c8b7604f01827a587868d.png

log存放nginx日志文件

Dockerfile用于构建nginx环境,内容如下:

FROM nginx
EXPOSE 80

example.conf是nginx配置文件,内容如下:

server {
    listen 80;
    server_name  你的服务器ip或者域名;
    charset utf-8;
    client_max_body_size 200m;
    access_log  /var/log/nginx/access.log;
    error_log  /var/log/nginx/err.log;
    location / {
        proxy_pass http://web:8000; # 这里的8000端口要跟第五步gunicorn绑定的端口一致
        proxy_redirect     off;
        proxy_set_header   Host                 $http_host;
        proxy_set_header   X-Real-IP            $remote_addr;
        proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto    $scheme;
    }
    # 静态文件配置
    location /static/ {
        alias /var/django_example/static/;
    }
}

7.docker安装mysql

  • MYSQL_ROOT_PASSWORD 是设置root用户的密码
  • mysql:8.0.16是mysql的版本,这里可根据自己的项目进行修改
docker run --name mysql 
    --restart=always 
    -p 3306:3306 
    -e MYSQL_ROOT_PASSWORD=test123 
    -e TZ=Asia/Shanghai 
    -d mysql:8.0.16

8.docker-compose配置

安装docker-compose

sudo yum install -y docker-compose

docker-compose.yml内容如下:

version: "3"
services:
  web:
    # 镜像构建目录,这里改为你的django项目
    build: ./django_example
    # 容器名称
    container_name: django_web
    # 挂载本地目录到容器
    volumes:
      - ./django_example:/var/django_example
      - ./tmp/logs:/tmp
    # 配置时区
    environment:
      - TZ=Asia/Shanghai
    # 开机自启
    restart: always
    command: bash run.sh
  nginx:
    build: ./nginx
    container_name: nginx_web
    volumes:
      - ./nginx/show.conf:/etc/nginx/conf.d/show.conf
      - ./nginx/log:/var/log/nginx
      - ./hg_show/static:/var/hg_show/static
    # 端口映射,服务器的8080端口映射到docker容器的80端口
    ports:
      - "8080:80"
    # 依赖上面的web容器
    links:
      - web
    depends_on:
      - web
    environment:
      - TZ=Asia/Shanghai
    restart: always

至此配置完成,cd进入docker-compose.yml所在的同级目录,启动项目

构建容器
docker-compose build
# 后台启动容器
docker-compose up -d

在浏览器输入http:ip:8080,成功访问即部署成功。

如果是阿里云服务器,请到阿里云控制台开放8080端口并关闭云服务器端防火墙,否则无法访问

9.注意事项

修改django项目的settings文件

  • ALLOWED_HOSTS添加你的服务器ip
  • INSTALLED_APPS 添加gunicorn

331b246cebb010d0d184456fff203221.png

requirements.txt要安装gunicorn,gevent这两个依赖

47077b44dd32d9defae000bf57e876ee.png

如果修改了代码,想在服务器上更新,可以提交代码到git仓库;然后在服务器上更新

# 更新代码
git pull
# 重启容器
docker-compose restart

后续工作

  • jenkins持续集成+自动化部署
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值