300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 【Docker】Docker双容器部署Nginx+uWSGI+django -0804

【Docker】Docker双容器部署Nginx+uWSGI+django -0804

时间:2021-07-09 20:30:05

相关推荐

【Docker】Docker双容器部署Nginx+uWSGI+django -0804

参考大江狗文章

/weixin_42134789/article/details/106345938

效果:docker双容器部署Nginx+uWSGI+django

docker的container显示如下:

访问http://localhost/显示网页

文件结构:

myproject_docker # 项目根目录

├── compose # 存放各项容器服务的Dockerfile和配置文件

│ ├── nginx

│ │ ├── Dockerfile # 构建Nginx镜像所的Dockerfile

│ │ ├── log # 挂载保存nginx容器内nginx日志

│ │ ├── nginx.conf # Nginx配置文件

│ └── uwsgi # 挂载保存django+uwsgi容器内uwsgi日志

├── docker-compose.yml # 核心编排文件

└── django # 常规Django项目目录

第一步:编写docker-compose.yml文件

version: "3"volumes: # 自定义数据卷,位于宿主机/var/lib/docker/volumes内myproject_media_vol: # 定义数据卷同步media文件夹数据services:web:build: . # 使用myproject目录下的Dockerfileexpose:- "8000"volumes:- ./Django:/var/www/html/Django # 挂载项目代码- myproject_media_vol:/var/www/html/Django/package/media # 以数据卷挂载容器内用户上传媒体文件- ./compose/uwsgi:/tmp # 挂载uwsgi日志# links:# - db# - redis# depends_on: # 依赖关系# - db# - redisenvironment:- DEBUG=Falserestart: alwaystty: truestdin_open: truenginx:build: ./compose/nginxports:- "80:80"- "443:443"expose:- "80"volumes:- ./Django/package/static:/usr/share/nginx/html/static # 挂载静态文件- ./compose/nginx/log:/var/log/nginx # 挂载日志- myproject_media_vol:/usr/share/nginx/html/media # 挂载用户上传媒体文件links:- webdepends_on:- webrestart: always

第二步:编写Web (Django+uWSGI)镜像和容器所需文件

构建Web镜像(Django+Uwsgi)的所使用的Dockerfile如下所示:

FROM python:3.8-slimRUN apt-get update -y && apt-get install gcc -yCOPY ./Django /codeWORKDIR /code/packageRUN pip install -i https://pypi.tuna./simple -r requirements.txtRUN pip install -i https://pypi.tuna./simple uwsgiEXPOSE 8000RUN chmod 777 /code/package/runserver-docker.shRUN chmod 777 /code/package/start.shRUN chmod 777 /code/package/GAGA/SQLRUN chmod 777 /code/package/GAGA/SQL/db.sqlite3RUN chmod 777 /code/package/logRUN chmod 777 /code/package/log/admin.log# Windows环境下编写的start.sh每行命令结尾有多余的\r字符,需移除。RUN sed -i 's/\r//' ./start.sh# 设置start.sh文件可执行权限RUN chmod +x ./start.sh# 设置start.sh文件可执行权限RUN chmod 777 *CMD ["/bin/sh","/code/package/start.sh"]

start.sh脚本文件内容如下所示。最重要的是最后一句,使用uwsgi.ini配置文件启动Django服务。

#!/bin/bash# 从第一行到最后一行分别表示:# 1. 生成数据库迁移文件# 2. 根据数据库迁移文件来修改数据库# 3. 用 uwsgi启动 django 服务, 不再使用python manage.py runserverpython manage.py collectstatic --noinput&&python manage.py makemigrations&&python manage.py migrateuwsgi --ini uwsgi.ini

uwsgi.ini配置文件如下所示:

[uwsgi]project=GAGAuid=www-datagid=www-database=/code/packagechdir=%(base)/module=%(project).wsgi:applicationmaster=Trueprocesses=2#http=0.0.0.0:8000socket=0.0.0.0:8000buffer-size=65536vacuum=Truemax-requests=5000harakiri=60harakiri-verbose=true

第三步:编写Nginx镜像和容器所需文件

构建Nginx镜像所使用的Dockerfile如下所示:

# nginx镜像compose/nginx/DockerfileFROM nginx:latest# 删除原有配置文件,创建静态资源文件夹和ssl证书保存文件夹RUN rm /etc/nginx/conf.d/default.conf \&& mkdir -p /usr/share/nginx/html/static \&& mkdir -p /usr/share/nginx/html/media \&& mkdir -p /usr/share/nginx/ssl# 设置Media文件夹用户和用户组为Linux默认www-data, 并给予可读和可执行权限,# 否则用户上传的图片无法正确显示。RUN chown -R www-data:www-data /usr/share/nginx/html/media \&& chmod -R 775 /usr/share/nginx/html/media# 添加配置文件ADD ./nginx.conf /etc/nginx/conf.d/# 关闭守护模式CMD ["nginx", "-g", "daemon off;"]

Nginx的配置文件如下所示

# nginx配置文件# compose/nginx/nginx.confupstream django {ip_hash;server web:8000; # Docker-compose web服务端口}server {listen 80; # 监听80端口server_name localhost; # 可以是nginx容器所在ip地址或127.0.0.1,不能写宿主机外网ip地址charset utf-8;client_max_body_size 10M; # 限制用户上传文件大小location /static {alias /usr/share/nginx/html/static; # 静态资源路径}location /media {alias /usr/share/nginx/html/media; # 媒体资源,用户上传文件路径}location / {include /etc/nginx/uwsgi_params;uwsgi_pass django;uwsgi_read_timeout 600;uwsgi_connect_timeout 600;uwsgi_send_timeout 600;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;# proxy_pass http://django; # 使用uwsgi通信,而不是http,所以不使用proxy_pass。}}access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log warn;server_tokens off;

第四步:使用docker-compose 构建镜像并启动容器组服务

# 进入docker-compose.yml所在文件夹,输入以下命令构建镜像docker-compose build# 查看已生成的镜像docker images# 启动容器组服务docker-compose up# 查看运行中的容器docker ps

第五步:打开浏览器,输入ip地址或域名来访问网站。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。