使用Docker和Nginx服务Django媒体文件的步骤如下:
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
version: '3'
services:
web:
build: .
ports:
- "8000:8000"
volumes:
- ./media:/app/media
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./media:/app/media
depends_on:
- web
在上述配置中,我们定义了两个服务:web和nginx。web服务使用之前创建的Dockerfile构建镜像,并将容器的8000端口映射到主机的8000端口。同时,将主机的media文件夹挂载到容器的/app/media路径,以便访问媒体文件。
nginx服务使用官方的Nginx镜像,并将容器的80端口映射到主机的80端口。同时,将主机的nginx/conf.d文件夹挂载到容器的/etc/nginx/conf.d路径,以便配置Nginx反向代理。
server {
listen 80;
server_name localhost;
location /media/ {
alias /app/media/;
}
location / {
proxy_pass http://web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
在上述配置中,我们定义了Nginx的反向代理规则。所有以/media/开头的URL将被代理到Django应用的媒体文件路径,而其他URL将被代理到web服务的8000端口。
docker-compose up
现在,Django应用和Nginx服务已经通过Docker容器运行起来了。可以通过访问http://localhost/media/来访问Django的媒体文件,而访问http://localhost/则会被代理到Django应用。
推荐的腾讯云相关产品:腾讯云容器服务(Tencent Kubernetes Engine,TKE),腾讯云对象存储(Tencent Cloud Object Storage,COS)。
腾讯云容器服务(TKE):是一种高度可扩展的容器管理服务,可帮助您轻松部署、管理和扩展应用程序容器。了解更多信息,请访问:https://cloud.tencent.com/product/tke
腾讯云对象存储(COS):是一种安全、低成本、高可靠的云端对象存储服务,适用于存储和处理任意类型的文件和媒体内容。了解更多信息,请访问:https://cloud.tencent.com/product/cos
领取专属 10元无门槛券
手把手带您无忧上云