docker 上的 Django;静态文件消失
Django on docker; Staticfiles disappearing
我正在尝试使用 docker nginx 和 gunicorn 部署我的 django 项目。
我的问题是容器中缺少我用于项目的静态文件。
在项目中:
ls staticfiles/
css disconnected.html images lib nothing.css
与 docker exec -it foo_web_1 /bin/sh
一起进入容器后
ls staticfiles/
admin
我的docker-撰写文件:
version: '3.7'
services:
web:
build:
context: ./foo-app
dockerfile: Dockerfile.prod
command: gunicorn foo-app.wsgi:application --bind 0.0.0.0:8000
volumes:
- static_volume:/home/foo-app/web/staticfiles
- media_volume:/home/foo-app/web/mediafiles
expose:
- 8000
env_file:
- ./.env.prod
nginx:
build: ./nginx
volumes:
- static_volume:/home/foo-app/web/staticfiles
- media_volume:/home/foo-app/web/mediafiles
ports:
- 2375:80
depends_on:
- web
volumes:
postgres_data:
static_volume:
media_volume:
nginx.conf 文件:
upstream foo-app {
server web:8000;
}
server {
listen 80;
location / {
proxy_pass http://foo-app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /staticfiles/ {
alias /home/foo-app/web/staticfiles/;
}
location /mediafiles/ {
alias /home/foo-app/web/mediafiles/;
}
}
settings.py中与静态文件相关的部分:
STATIC_URL = "/staticfiles/"
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "staticfiles")
]
在我的 docker 文件中,我定义了以下内容:
ENV HOME=/home/foo-app
ENV APP_HOME=/home/foo-app/web
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
后来我简单地复制了整个项目使用
COPY . $APP_HOME
所有其他文件都显示得非常好,我尝试删除并重建整个项目以避免工件无济于事。
通过将 STATIC_ROOT
与我的静态文件的位置分开,然后将 python manage.py collectstatic --no-input --clear
添加到我的启动脚本,问题得到了解决。
我正在尝试使用 docker nginx 和 gunicorn 部署我的 django 项目。
我的问题是容器中缺少我用于项目的静态文件。
在项目中:
ls staticfiles/
css disconnected.html images lib nothing.css
与 docker exec -it foo_web_1 /bin/sh
ls staticfiles/
admin
我的docker-撰写文件:
version: '3.7'
services:
web:
build:
context: ./foo-app
dockerfile: Dockerfile.prod
command: gunicorn foo-app.wsgi:application --bind 0.0.0.0:8000
volumes:
- static_volume:/home/foo-app/web/staticfiles
- media_volume:/home/foo-app/web/mediafiles
expose:
- 8000
env_file:
- ./.env.prod
nginx:
build: ./nginx
volumes:
- static_volume:/home/foo-app/web/staticfiles
- media_volume:/home/foo-app/web/mediafiles
ports:
- 2375:80
depends_on:
- web
volumes:
postgres_data:
static_volume:
media_volume:
nginx.conf 文件:
upstream foo-app {
server web:8000;
}
server {
listen 80;
location / {
proxy_pass http://foo-app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /staticfiles/ {
alias /home/foo-app/web/staticfiles/;
}
location /mediafiles/ {
alias /home/foo-app/web/mediafiles/;
}
}
settings.py中与静态文件相关的部分:
STATIC_URL = "/staticfiles/"
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "staticfiles")
]
在我的 docker 文件中,我定义了以下内容:
ENV HOME=/home/foo-app
ENV APP_HOME=/home/foo-app/web
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
后来我简单地复制了整个项目使用
COPY . $APP_HOME
所有其他文件都显示得非常好,我尝试删除并重建整个项目以避免工件无济于事。
通过将 STATIC_ROOT
与我的静态文件的位置分开,然后将 python manage.py collectstatic --no-input --clear
添加到我的启动脚本,问题得到了解决。