![8d50f585afe8e38e4c94f1532c631005.png](https://i-blog.csdnimg.cn/blog_migrate/f5e212ec76250cfcb9afcf4e105353fd.jpeg)
本文使用的系统是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
更多安装细节请参考
CentOSyeasy.gitbook.io![5218a4dd7020f076062379cce86450a5.png](https://i-blog.csdnimg.cn/blog_migrate/431627fe26cd7cd65fa6c4fe2d3fe6b0.png)
3.docker更换阿里镜像源
由于国内访问国外的的网比较慢,所以配置国内加速器提升获取Docker官方镜像的速度。
登录阿里云容器镜像服务,开通镜像加速器,复制自己的加速器地址,下面要用到。
![debea7efd76a2bfb6964f09306e7f8a1.png](https://i-blog.csdnimg.cn/blog_migrate/3ce291ba5d2e8ea6c5a0f931ba415877.png)
配置加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["上面的加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
详情请参考阿里云官方配置
Logincr.console.aliyun.com4.克隆django项目
sudo yum install -y git
git clone 你的django项目地址
项目目录结构如下图:
![7c92f86b2d6b63f8ff2e37551401b792.png](https://i-blog.csdnimg.cn/blog_migrate/bc662330a4850b0946d55039c108cbee.png)
django_example是django项目源代码
tmp存放日志文件,目录结构如下图:
![673cd8d852d27d4e69450d2279528f95.png](https://i-blog.csdnimg.cn/blog_migrate/993fa7fd999405455c5b100f4cd9837a.png)
nginx存放nginx的相关配置
docker-compose.yml是docker-compose配置文件
5.基于docker构建django依赖环境
django_example结构如下图
![87011002dfd414b14c1556a6c89c5dc1.png](https://i-blog.csdnimg.cn/blog_migrate/fbd9773e3840a74ea8e80df898e206a8.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](https://i-blog.csdnimg.cn/blog_migrate/7b543d8b652fa1cdda67bb4648d56933.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](https://i-blog.csdnimg.cn/blog_migrate/419f0f1a080c9de1922c3c90d7d5590a.jpeg)
requirements.txt要安装gunicorn,gevent这两个依赖
![47077b44dd32d9defae000bf57e876ee.png](https://i-blog.csdnimg.cn/blog_migrate/e33c1489f3c625707fbfcbcca709f1d2.jpeg)
如果修改了代码,想在服务器上更新,可以提交代码到git仓库;然后在服务器上更新
# 更新代码
git pull
# 重启容器
docker-compose restart
后续工作
- jenkins持续集成+自动化部署