Docker部署Django+Mysql+Redis+Gunicorn+Nginx的实现

2020-06-17 07:00:05易采站长站整理

start.sh:容器初始化后执行的 shell 命令脚本

requirements.txt:django项目环境依赖文件

gunicorn.conf:gunicorn 配置文件

deployment目录包含 mysql 容器配置信息, nginx 容器配置信息和 redis 容器数据目录。

mysql:放置数据库配置信息,conf 放置数据库初始化配置文件 my.cnf,data 用于挂载数据库数据,init 放置 sql 脚本(导入表结构和数据,并挂载到容器中)。

nginx:放置 nginx 配置信息,ssl 放置 ssl证书

redis: 挂载 redis 数据

五. 构建 Django 容器环境

1. Django 项目 Dockerfile编写

容器环境和本机环境是 隔离 的,你可以把容器当做 另一个系统 ,起初这个系统与你本机的系统 并无关联 ,我们通过编写 Dockerfile 文件 配置并构建 容器环境(像在干净的系统中配置 python 环境一样)。


# 建立 python3.6 环境
FROM daocloud.io/python:3.6

# 镜像作者
MAINTAINER zyk 2295098032@qq.com

# 设置 python 环境变量
ENV PYTHONUNBUFFERED 1

# 创建 my_blog 文件夹
RUN mkdir /my_blog

# 将 my_blog 文件夹为工作目录
WORKDIR /my_blog

# 将当前目录加入到工作目录中(. 表示当前目录)
ADD . /my_blog

# 利用 pip 安装依赖(- i 表示指定清华源,默认源下载过慢)
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

#设置环境变量
ENV SPIDER=/my_blog

2. 编写 gunicorn 配置文件

编写 gunicorn.conf 文件,用于 gunicorn 的启动


workers=3 # 并行工作进程数
threads = 2 # 指定每个工作者的线程数
bind=['0.0.0.0:8000'] # 监听内网端口8000
proc_name='my_blog' # 进程名称
pidfile='/tmp/blog.pid' # 设置进程文件目录
worker_class='gevent' # 工作模式协程
timeout=30 # 超时
max_requests=6000 # 最大请求数

3. 编写 start.sh 命令脚本

start.sh 脚本用于启动 django 容器


#!/bin/bash
# 从第一行到最后一行分别表示:
# 1. 守护进程执行 celery,没有这个需求的小伙伴可以将第一行命令其删除
# 2. 收集静态文件到根目录,
# 3. 生成数据库可执行文件,
# 4. 根据数据库可执行文件来修改数据库
# 5. 用 gunicorn 启动 django 服务
celery multi start w1 -A celery_tasks.tasks worker -l info&&
python manage.py collectstatic --noinput&&
python manage.py makemigrations&&