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

Caddy配置疑问:如何让Caddy正确提供Django静态文件服务

解决Caddy静态文件404问题

核心原因

你的Caddy容器无法访问宿主机的/home/myusername/static目录——Docker容器默认是隔离环境,没有挂载该目录到Caddy内部,导致Caddy找不到静态文件,返回404。

分步修复

1. 修改docker-compose.yml,给Caddy挂载静态/媒体目录

在caddy服务的volumes部分,添加宿主机静态目录的挂载配置,让Caddy容器能读取到宿主机的静态文件:

caddy:
  image: caddy:latest
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - ./Caddyfile:/etc/caddy/Caddyfile
    # 新增挂载:把宿主机的静态/媒体目录映射到Caddy容器内
    - /home/myusername/static:/usr/share/caddy/static
    - /home/myusername/media:/usr/share/caddy/media
  networks:
     stats-trade-network:
       aliases:
         - caddyForStatsTrade
  depends_on:
    webserver:
      condition: service_started
    database:
      condition: service_healthy
  restart: unless-stopped

2. 修正Caddyfile配置

调整handle_path的root路径,对应Caddy容器内的挂载目录:

mydomain.com {
  encode gzip
  
  handle_path /static/* {
        root * /usr/share/caddy/static
        file_server
    }

  handle_path /media/* {
        root * /usr/share/caddy/media
        file_server
    }

  reverse_proxy stats-trade-web-server:8000
}

注意:reverse_proxy的目标要写docker-compose里web服务的容器名stats-trade-web-server,否则Caddy找不到后端服务。

3. 优化Django静态文件收集(避免手动复制)

你的web服务已经挂载了~/static:/static,在Django的settings.py里配置以下参数,让collectstatic自动把文件放到挂载目录,不用手动复制:

STATIC_ROOT = '/static'
MEDIA_ROOT = '/media'
STATIC_URL = '/static/'
MEDIA_URL = '/media/'

4. 重启服务生效

执行命令重启所有容器:

docker-compose down
docker-compose up -d

验证

访问你的域名检查CSS/JS是否加载正常,或直接访问https://mydomain.com/static/[具体静态文件名],确认能正常返回文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:25:15