使用docker-compose,在3分钟内部署Django
我已经为已创建的项目创建了适用的docker-compose形式,因此将规范整理成一篇文章。
我在GitHub上写了一个”HowtoUse”,请随便看。
如果您更改了默认的sqlite数据库,我想您可能需要进行其他设置… 对不起。
部署环境将采用Django + Nginx + Gunicorn。
总结
请参阅上文所提供的GitHub README链接以获取用法说明。
为了实现简单的部署,我创建了一个适用于Django部署的docker-compose,它以以下目录结构运行。
django-nginx-gunicorn-docker/
├ nginx/
│ └ project.conf
├ django/
│ ├ Dockerfile
│ ├ requirements.txt
│ └ [DJANGOPROJECT]
│ ├ manage.py
│ ├ …
│ └ [PROJECTNAME]
└ docker-compose.yml
我们将整个项目挂载到容器中并运行。
现在我们来看配置文件。
docker-compose
容器编排
使用的容器包括用于Django应用的(Gunicorn也在其中运行)和用于充当反向代理角色的Nginx容器。
version: '3'
services:
django:
build: ./django
expose:
- "8000"
networks:
- nginx_network
volumes:
- ./django:/code
hostname: django-server
restart: always
nginx:
image: nginx
ports:
- "80:80"
networks:
- nginx_network
depends_on:
- django
volumes:
- ./nginx/project.conf:/etc/nginx/conf.d/default.conf
restart: always
networks:
nginx_network:
driver: bridge
在Django的卷部分,我正在挂载项目环境。如果在容器启动后进行编辑,只需重新启动容器即可使更改生效。
此外,由于在nginx容器中使用了80:80端口转发,当访问本地主机的80端口时,将被转发到nginx容器。
我没有做什么特别棘手的事情,所以关于compose的解释到此为止。
Dockerfile:
这是关于位于Django目录中的Dockerfile的说明。
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
WORKDIR /code/MYPROJECT
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "MYPROJECT.wsgi:application"]
使用Python3的映像。在第6行的RUN命令中下载了Django和Gunicorn。(还顺便下载了用于Postgres的库,但没有使用。抱歉)
Django==2.2.7
gunicorn==19.9.0
psycopg2
顺便提一下,关于Django的版本,起初我在Github上指定了2.0版本,结果被狠狠地批评了。(收到了很多安全警告。还收到来自GitHub机器人愤怒的拉取请求。)
项目配置文件
这是一个nginx的配置文件。
upstream django {
server django:8000;
}
server {
listen 80;
server_name :localhost;
location / {
proxy_pass http://django;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
在上游,您可以指定请求的目标地址。目标地址是容器的localhost。同样,您还可以在代理路径设置中使用在这里命名的内容。
服务器正在进行端口监听和代理设置。
最后
我在端口设置中遇到了困难…
大家也要小心哦;;