You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Django+Nginx以提供后期生成的Media文件?

问题解决:Docker+Nginx环境下Django生成的Media文件无法访问

核心原因

你的Django容器生成的.wav文件没有写入共享的Docker卷中:Nginx挂载了media_volume卷,但Django容器本身未挂载该卷,文件仅保存在Django容器内部的/usr/src/app/media目录,导致Nginx访问的共享卷为空。

解决方案步骤

1. 给Django容器挂载Media共享卷

修改docker-compose.yml,在web服务的volumes配置中添加media卷挂载,让Django生成的文件写入共享卷:

version: '3'

services:
  web:
    # 保留原有web服务配置(如build、command等)
    volumes:
      - media_volume:/usr/src/app/media  # 新增:挂载共享media卷
      # 若有其他挂载(如代码卷)可继续保留
  nginx:
    build: ./nginx
    ports:
      - "80:80"
    volumes:
      - static_volume:/usr/src/app/staticfiles
      - media_volume:/usr/src/app/media
    depends_on:
      - web

  redis:
    image: "redis:alpine"

volumes:
  static_volume:
  media_volume:

2. 确认MEDIA_ROOT路径正确性

检查settings.py中MEDIA_ROOT是否指向共享卷路径:

# 确保BASE_DIR正确指向项目根目录(即容器内的/usr/src/app)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')  # 最终路径应为/usr/src/app/media

3. 修复文件权限问题

若挂载后仍无法访问,需解决权限冲突:

  • 在Django的Dockerfile中添加目录权限配置:
# 创建media目录并设置权限(假设运行用户为www-data)
RUN mkdir -p /usr/src/app/media
RUN chown -R www-data:www-data /usr/src/app/media
  • 确保Django与Nginx使用相同用户ID运行,避免读写权限限制。

4. 验证文件写入状态

  • 进入Django容器,检查生成的文件是否存在:
docker exec -it <web容器名称> ls /usr/src/app/media
  • 进入Nginx容器,确认共享卷中存在相同文件:
docker exec -it <nginx容器名称> ls /usr/src/app/media

额外提示

  • 生产环境建议将Media文件存储到对象存储(如S3、阿里云OSS等),避免容器卷的管理风险;当前方案可满足临时切换环境的需求。
  • 确保Nginx的location /media/配置中,alias路径末尾斜杠正确(/usr/src/app/media/),防止路径匹配错误。

内容的提问来源于stack exchange,提问作者Dakopen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:12:54