我知道有很多这样的问题。但我已经尝试了很多我发现的方法,但没有任何帮助。
我有 Django + uWSGI + Nginx + PostgreSQL 的组合。
静态文件由
python manage.py collectstatic
收集在movies_admin/static目录中。
我通过 nginx 127.0.0.1/admin 在本地地址登录 Django admin。页面本身已加载,但仅加载文本、字段等。没有图形 - 这是我的问题。 我的 docker-compose 文件:
version: '3'
services:
django:
restart: always
build: movies_admin/.
env_file:
- .env
ports:
- "8000:8000"
container_name: work_django
depends_on:
- postgres
postgres:
restart: always
env_file:
- .env
image: 'postgres:${PG_VER}'
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
container_name: work_database
ports:
- "5432:5432"
volumes:
- ${DB_VOLUME_CATALOG_PATH}:/var/lib/postgresql/data/
nginx:
image: 'nginx:${NGINX_VER}'
volumes:
- ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
- ${NGINX_CONFD_CATALOG}:/etc/nginx/conf.d:ro
- ${STATIC_PATH}:/var/www/static/:ro
container_name: work_nginx
depends_on:
- django
ports:
- "80:80"
我查过了。 static目录挂载在nginx容器的'/var/www/static/'目录下。
我的站点.conf:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location /static/ {
alias /var/www/static/;
}
location @backend {
proxy_pass http://django:8000;
}
location ~* \.(?:jpg|jpeg|gif|png|ico|css|js)$ {
log_not_found off;
expires 90d;
}
location / {
try_files $uri @backend;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
我的settings.py的一部分:
STATIC_ROOT = '/var/www/static'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static/'),
'/opt/app/static/',
]
STATIC_URL = '/static/'
我相信您必须安装“WhiteNoise”库才能直接从同一服务器中的文件夹提供静态文件。当 Debug 为 False 时,Django 不提供静态文件。 我建议观看此视频的一小部分(它在正确的时间开始):https://youtu.be/IkHKg5Unniw?t=465