Django5 Docker部署生产环境CSS无法正常渲染问题求助
Django5 Docker部署生产环境CSS无法正常渲染问题求助
大家好,我遇到一个特别诡异的问题:我的Django5应用在本地venv开发环境下一切正常,但部署到Docker容器且设置DEBUG=False后,CSS完全无法正常渲染。更奇怪的是,CSS的加载请求看起来都是成功的——自定义CSS里的英雄图、颜色都不生效,连后台管理的CSS也崩了。我用gunicorn搭配Nginx托管静态文件,/static/目录下的favicon.ico能正常显示,css、js这些文件夹也都在Nginx容器里存在,查看页面源码点击链接也能打开对应的文件,但就是样式不生效,实在搞不懂哪里出问题了,求大家帮忙看看!
我的相关配置
Django settings.py关键配置
from pathlib import Path import os import environ env = environ.Env( DEBUG=(bool, False) ) BASE_DIR = Path(__file__).resolve().parent.parent environ.Env.read_env(os.path.join(BASE_DIR, '.env')) SECRET_KEY = env('SECRET_KEY') DEBUG = env('DEBUG') ALLOWED_HOSTS = ['*'] ... STATIC_URL = '/static/' STATIC_ROOT = '/usr/share/nginx/html/static/'
项目根urls.py配置
urlpatterns = [ path("admin/", admin.site.urls), ... ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
docker-compose.yaml中执行collectstatic的配置
web: build: context: . dockerfile: Dockerfile command: > sh -c "python manage.py collectstatic --noinput && python manage.py migrate && supervisord -c /etc/supervisor/conf.d/supervisord.conf" volumes: - .:/code ports: - "8000:8000" depends_on: - db - rabbitmq environment: - DATABASE_URL=postgres://mysite:fakepassword@db:5432/mysite - CELERY_BROKER_URL=amqp://guest@rabbitmq//
Dockerfile.nginx配置
# Use the official Nginx image from the Docker Hub FROM nginx:latest # Copy the Nginx configuration file to the container COPY nginx.conf /etc/nginx/nginx.conf # Copy the SSL certificates to the container COPY certificate.crt.pem /etc/nginx/ssl/certificate.pem COPY certificate.key.pem /etc/nginx/ssl/private_key.pem # Copy the static files from the Django container COPY staticfiles /usr/share/nginx/html/static COPY media /usr/share/nginx/html/media # Expose port 443 for HTTPS EXPOSE 443
Nginx容器日志(站点URL已替换为mysite)
nginx-1 | 172.18.0.1 - - [18/Feb/2025:20:39:49 +0000] "GET / HTTP/1.1" 200 6030 "https://mysite/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" nginx-1 | 172.18.0.1 - - [18/Feb/2025:20:39:49 +0000] "GET /static/css/styles.css HTTP/1.1" 304 0 "mysite" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" nginx-1 | 172.18.0.1 - - [18/Feb/2025:20:39:59 +0000] "GET / HTTP/1.1" 200 6030 "https://mysite/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" nginx-1 | 172.18.0.1 - - [18/Feb/2025:20:39:59 +0000] "GET /static/css/styles.css HTTP/1.1" 200 2269 "https://mysite/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" nginx-1 | 172.18.0.1 - - [18/Feb/2025:20:39:59 +0000] "GET /static/images/favicon.ico HTTP/1.1" 200 5879 "https://mysite/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" nginx-1 | 172.18.0.1 - - [18/Feb/2025:20:39:59 +0000] "GET /static/images/favicon.ico HTTP/1.1" 200 5879 "https://mysite/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
从日志里能看到CSS文件都是200或304的状态码,但样式就是不生效,后台的CSS也是加载了但没渲染。实在没头绪了,有没有大佬能指点一下?
备注:内容来源于stack exchange,提问作者openastronomer
相关产品推荐
相关产品推荐

