我有一个使用Nginx在Docker容器中运行的django应用程序。已成功找到我的应用程序的所有静态文件(如css,js),并已将nginx.conf文件配置为应有的状态。但是找不到我的django / admin静态文件。
我找到了this solution,并按提示进行了尝试:
1)在设置中同时设置STATIC_URL和STATIC_ROOT。py
2)在您的nginx conf中仅定义一个静态条目(带有尾随 斜线)。不需要第二个地址来解决static / admin /:
location /static/ { alias /path/to/static/; }
3)使用collectstatic应该收集admin-> static / admin。它将与 您收集的所有其余静态媒体。
python manage.py collectstatic
这样做时,我的STATIC_ROOT会收到管理静态文件,但没有收到我的应用程序静态文件。
我对Docker卷没有问题。 NGINX容器正在接收STATIC_ROOT内容。但是,我将共享.yml文件,因为也许您检测到该文件上的错误。
“ manage.py collectstatic”在我的cldj / Dockerfile中运行。
settings.py:
STATIC_URL = '/static/'
STATICFILES_DIRS = ['/proj/static/']
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
nginx.conf:
location /static/ {
autoindex off;
alias /static_files/;
}
docker-compose.yml:
version: '3'
volumes:
static_files:
services:
dj:
build:
context: .
dockerfile: df/cldj/Dockerfile
container_name: dj
volumes:
- ./proj:/proj
- static_files:/proj/static_files
ports:
- 8000:8000
command: gunicorn -w 4 proj.wsgi --bind 0.0.0.0:8000
nx:
build:
context: .
dockerfile: df/nx/Dockerfile
container_name: nx
volumes:
- static_files:/static_files
ports:
- 80:80
- 443:443
depends_on:
- dj
我更改了我的settings.py
,如下文Abhimanyu所述:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
使用docker-compose build
,将应用容器按需要用collectstatic填充。但是NGINX容器会收到一个名为“ static_files”的空文件夹。
我意识到docker-compose.yml
在应用程序服务中包含以下几行:
volumes:
- ./proj:/proj
- static_files:/proj/static_files
我将其更改为指向“静态”文件夹(我的STATIC_ROOT
):
volumes:
- ./proj:/proj
- static_files:/proj/static
但是,这样,整个static/
文件夹又被static/admin
文件夹覆盖了(我松开了我的应用静态文件)
按照Abhimanyu的说明进行操作之后,我需要使用static_files
删除旧的$docker volume rm static_files
卷。
现在一切正常。
答案 0 :(得分:1)
使用STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
然后运行
python manage.py collectstatic
它将在您的项目目录中创建一个名为static的文件夹。在那里,您将找到所有的CSS和JS文件