# Docker-compose部署Django+PostgreSQL+Redis+uWSGI+Nginx **Published by:** [kk](https://paragraph.com/@kk-24/) **Published on:** 2023-03-29 **URL:** https://paragraph.com/@kk-24/docker-compose-django-postgresql-redis-uwsgi-nginx ## Content 前言部署Python Web项目时,通常会使用uWSGI+Nginx或者Gunicorn+Nginx,需要开发者同时安装这些软件,做一系列的配置,费时费力,而容器技术如今已经非常火热,开发者可以使用Docker容器来部署Web应用,达到和本地开发一样的环境。准备工作1.准备一个Django项目,通过python manage.py runserver 0.0.0.0:8000可以运行起来 2.项目设置中配置PostgreSQL数据库信息 代码如下:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'postgres', # 数据库名称 使用docker默认的 'USER': 'postgres', # 使用docker默认的用户名 'HOST': 'db', 'PORT': 5432 } } 3.设置配置Redis的信息。 代码如下:CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://redis:6379', # redis(容器的地址) 'OPTIONS': { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100}, 'SOCKET_TIMEOUT': 10, }, }, } 准备DockerFile在项目目录下新建DockerFileFROM python:3.7 MAINTAINER liyuankun 705555262@qq.com ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 RUN mkdir /learntime WORKDIR /learntime ADD . /learntime/ RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi 配置docker-composeversion: '3' services: redis: image: redis command: redis-server volumes: - ./deployment/redis:/data ports: - 6379:6379 restart: always web: build: . expose: - 8000 volumes: - .:/learntime - /tmp/logs:/tmp command: bash start.sh links: - redis depends_on: - redis restart: always nginx: build: deployment/nginx ports: - 80:80 expose: - 8000 volumes: - ./staticfiles:/usr/share/nginx/html/static - ./learntime/media:/usr/share/nginx/html/media - ./deployment/nginx/ssl:/usr/share/nginx/ssl links: - web depends_on: - web restart: always 配置启动命令项目目录下新建start.sh#!/bin/bash python manage.py collectstatic --noinput&& #收集静态文件 python manage.py makemigrations&& # 迁移数据库文件 python manage.py migrate&& # 迁移数据库 python manage.py createsuperuser&& # 生成超级用户 uwsgi -i ./uwsgi.ini # 启动uWSGI 配置Nginx在项目目录下新建deployment文件夹 mkdir -p /deployment/nginx 在该目录下新建DockerFile和nginx.conf文件 DockerFile文件如下:FROM nginx # 删除原有配置文件,创建静态资源文件夹和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 # 添加配置文件 ADD ./nginx.conf /etc/nginx/conf.d/ nginx.conf文件如下:# 仅用于本地docker环境测试(80端口代理http请求) server { listen 80; # 监听80端口 server_name 127.0.0.1; # 生产环境请换成域名 charset utf-8; access_log /var/log/nginx/nginx-uwsgi.log; error_log /var/log/nginx/nginx-error.log; location / { proxy_pass http://web:8000; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static/ { alias /usr/share/nginx/html/static/; #静态资源路径 } location /media/ { alias /usr/share/nginx/html/media/; #上传文件路径 } } 部署将所有项目文件上传到服务器中,来到项目目录下 执行docker-compose up --build 若没有错误则部署成功,成功后可以执行docker-compose up -d来后台运行这些容器,执行docker-compose down关闭这些服务。 ## Publication Information - [kk](https://paragraph.com/@kk-24/): Publication homepage - [All Posts](https://paragraph.com/@kk-24/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@kk-24): Subscribe to updates