如何在Docker上使用Nginx和Django提供静态文件?

时间:2017-06-16 21:42:38

标签: python django nginx django-staticfiles

我已经在StackOverflow上阅读了有关此问题的一些帖子,但无法解决我们的问题,因为标题说我试图在docker上使用django,nginx来提供静态服务。 / p>

起初我收到错误 PermissionError:[Errno 13]权限被拒绝:' / static / admin' 。我已经发现我必须将STATIC_ROOTSTATIC_ROOT = '/static'更改为STATIC_ROOT = os.path.join(BASE_DIR, 'static')。现在collectstatic适用于Docker的终端,但我的webapp静态仍无法正常工作,我想了解原因并修复它。

如果您需要更多信息,我已将该项目置于Github

project.conf

upstream web {  
  ip_hash;
  server web:8000;
}

server {
    location /static/ {    
        autoindex on;    
        alias /static/; 
    }

    location / {
        proxy_pass http://web/;
    }
    listen 8000;
    server_name localhost;
}

搬运工-compose.yml

version: '2'  
services:  
  nginx:
    image: nginx:latest
    container_name: nz01
    ports:
      - "8000:8000"
    volumes:
      - ./src:/src
      - ./config/nginx:/etc/nginx/conf.d
      - /static:/static
    depends_on:
      - web
  web:
    build: .
    container_name: dz01
    command: bash -c 'python manage.py collectstatic --noinput && python manage.py makemigrations && python manage.py migrate && gunicorn oqtor.wsgi -b 0.0.0.0:8000'
    depends_on:
      - db
    volumes:
      - ./src:/src
      - /static:/static
    expose:
      - "8000"
    links:
      - redis
    ...
...

Dockerfile:

FROM python:latest
ENV PYTHONUNBUFFERED 1

#ENV C_FORCE_ROOT true

ENV APP_USER myapp
ENV APP_ROOT /src
RUN mkdir /src;
RUN groupadd -r ${APP_USER} \
    && useradd -r -m \
    --home-dir ${APP_ROOT} \
    -s /usr/sbin/nologin \
    -g ${APP_USER} ${APP_USER}

WORKDIR ${APP_ROOT}

RUN mkdir /config
ADD config/requirements.pip /config/
RUN pip install -r /config/requirements.pip

USER ${APP_USER}
ADD . ${APP_ROOT}

1 个答案:

答案 0 :(得分:0)

所以你在评论中提到你得到一个带有文字的白页,但没有样式或javascript。在您的浏览器中,应该有一种显示资源的方法,通常可以通过右键单击页面上的任何位置来获得。这应该会显示文件尝试从哪里加载,这应该只是让你指向正确的位置。