Django项目通过docker打包运行

实习的时候遇到过一个希望用docker运行的Web页面,这是离开学校之后做的第一个项目,然后通过nginx做代理服务器运行了一下,在此记录。

1、setting.py

因为要用于生产环境,所以将Debug设置为False

# 关闭django的调试
DEBUG = False
# 允许所有链接
ALLOWED_HOSTS = ['*']
# 在DEBUG=False的时候,Django就不会自己查找静态文件了
# 这里通过设置STATIC_ROOT等会通过docker收集静态文件
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# STATICFILES_DIRS = [
#     os.path.join(BASE_DIR, "static"),
# ]

2、requirement.txt

当时打算使用gunicorn作为wsgi服务器,所以在requirement.txt加入了

# wsgi包
gunicorn

3、Dockerfile

Dockerfile位于项目根目录,它定义了如何构建Docker容器。它基于Python官方镜像,设置了工作目录,安装了依赖,并指定了如何收集静态文件以及运行应用程序的命令。

# 使用 Python 官方镜像作为基础镜像
FROM python:3.11.2

# 设置环境变量,防止 Python 在容器中写字节码
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# 设置工作目录
WORKDIR /app

# 将依赖文件复制到容器中
COPY requirements.txt /app/

# 设置pip源
COPY pip.conf /root/.pip/pip.conf

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 将项目文件复制到容器中
COPY . /app/

# 收集静态文件
RUN python manage.py collectstatic --noinput

# 运行应用程序,注释通过docker-compose.yml运行
#CMD ["gunicorn", "--bind", "0.0.0.0:8000", "WellCare.wsgi:application"]

4、pip.conf

pip.conf被我放在根目录下,采用了阿里云的镜像源,提高依赖的安装速度

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com

5、docker-compose.yml

docker-compose.yml同样是根目录下的文件,它定义了容器的服务配置,包括应用服务和Nginx服务。这里配置了服务之间的依赖(例如nginx依赖于wcwb-web-www这个项目)、端口映射、卷挂载,以便在容器环境中高效地运行Django应用和Nginx代理。

version: '3.8'  # DockerCompose 的版本

services:
  wcwb-web-www:
    build: .
    command: gunicorn WellCare.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - .:/app
      - static_volume:/app/static
      - media_volume:/app/media
    expose:
      - 8000

  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - static_volume:/app/static
      - media_volume:/app/media
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - wcwb-web-www

volumes:
  static_volume:
  media_volume:

6、nginx.conf

nginx.conf是根目录下的nginx服务器的配置,配置了将Nginx服务器作为代理服务器的详细设置,包括静态和媒体文件的处理路径,以及如何转发对Django应用的请求。这是确保Web服务正确运行的关键部分。用一个便于理解的方法来说alias给/static/起了/app/static/的别名,在Dockerfile中,我们的应用在linux系统的根目录下的/app下,nginx会将网址路径中的/static/转译为/app/static/,从而查找静态文件

server {
    listen 80;
    server_name localhost; # 修改为你的域名或 IP

    location /static/ {
        alias /app/static/; # Django collectstatic 收集静态文件的路径
    }

    location /media/ {
        alias /app/media/; # Django 媒体文件路径
    }

    location / {
        proxy_pass http://wcwb-web-www:8000; # Django 应用的内部网络地址
        proxy_set_header Host $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;
    }
}

7.运行

这个命令会根据docker-compose.yml 文件中的定义,构建(如果需要)并启动所有服务.--build 选项表示在启动服务之前先构建(或重新构建)镜像。如果你的服务已经构建好了,并且没有对 Dockerfile 或依赖做出任何改变,那么下次启动可以省略 --build 选项

docker-compose up --build

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在CentOS上使用Docker打包Django的过程如下: 首先,确保已在CentOS系统上安装了Docker,可以通过运行以下命令进行检查: ``` docker -v ``` 如果没有安装Docker,请根据CentOS版本选择合适的安装方法。一般来说,可以通过运行以下命令进行安装: ``` yum install docker ``` 安装完成后,确保Docker服务已启动,可以通过运行以下命令来启动Docker服务: ``` systemctl start docker ``` 然后,在CentOS的工作目录中创建一个新的Django项目,可以使用以下命令: ``` django-admin startproject myproject ``` 进入项目目录: ``` cd myproject ``` 下一步是创建一个Dockerfile,以指定Django项目的构建和运行环境。在项目目录中创建一个名为"Dockerfile"(无文件扩展名)的文件,内容如下: ``` # 使用Docker官方提供的Python基础镜像 FROM python:3 # 将项目目录复制到容器中的/app目录 COPY . /app # 设置工作目录为/app WORKDIR /app # 安装项目所需的依赖项 RUN pip install -r requirements.txt # 暴露Django运行时使用的端口号(默认为8000) EXPOSE 8000 # 启动Django应用程序 CMD python manage.py runserver 0.0.0.0:8000 ``` 接下来,在项目目录中创建一个名为"requirements.txt"的文件,并指定Django以及其他项目所需的所有依赖项,例如: ``` Django==3.2.8 ``` 确保已经安装了Docker Compose,可以使用以下命令来检查: ``` docker-compose -v ``` 如果没有安装Docker Compose,请根据CentOS版本选择合适的安装方法。 最后,使用Docker Compose构建和运行Docker容器。在项目目录中创建一个名为"docker-compose.yml"的文件,内容如下: ``` version: '3' services: app: build: . ports: - "8000:8000" ``` 运行以下命令以构建和运行Docker容器: ``` docker-compose up ``` Docker将根据Dockerfile指定的配置构建镜像,并在指定的端口上运行Django应用程序。您可以通过访问http://localhost:8000来访问部署的Django应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值