Как управлять обслуживанием медиа-файлов с помощью Django, Nginx, Docker и Traefik? - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь загрузить и сохранить медиафайлы (изображения, PDF-файлы) в приложении с Django. В режиме разработки он работает нормально, но я получаю «404 Not Found Запрошенный URL /mediafiles/images/test.jpg не найден на этом сервере». при развертывании на сервере.

«Забавно» отметить: мне удается загрузить файлы, я вижу их на своем хосте и в обоих контейнерах (nginx и веб-сервер), но всякий раз, когда я пытаюсь получить к ним доступ, я получаюошибка Not Found.

Я прочитал и безуспешно пробовал многие вещи, такие как изменение файла conf nginx, игра с файлом docker-compose ... у вас есть идея, куда мне теперь смотреть? ?

Вот, что я думаю, уместная информация:

Сервер: Ubuntu 16.04

Docker-Compose

services:
  nginx:
    image: nginx
    depends_on:
      - webserver
    volumes:
      - ./config/nginx/conf.d:/etc/nginx/conf.d
      - ./static:/usr/share/nginx/html:ro
      - ./mediafiles:/usr/share/nginx/mediafiles:ro
    labels:
      - "traefik.backend=${TRAEFIK_HOST}_static"
      - "traefik.frontend.rule=Host:${TRAEFIK_HOST}; PathPrefixStrip: /static/"
      - "traefik.enable=true"
      - "traefik.port=80"

  webserver:
    image: ${MY_IMAGE}
    volumes:
      - ./static:/tmp/html/static
      - ./mediafiles:/code/server/mediafiles
    labels:
      - "traefik.backend=${TRAEFIK_HOST}"
      - "traefik.frontend.rule=Host:${TRAEFIK_HOST}"
      - "traefik.enable=true"
      - "traefik.port=8000"

volumes:
  mediafiles:

Nginx Config

server {
listen       80;
server_name  localhost;

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

location /mediafiles {
    autoindex on;
    alias /usr/share/nginx/mediafiles/;
}
}

Django Settings.py

MEDIA_ROOT = '/code/server/mediafiles/'
MEDIA_URL = '/mediafiles/'
STATIC_URL = '/static/'
STATIC_ROOT = '/tmp/html/static/'

Django urls.py

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT,)

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Скажите, нужна ли другая информация. И заранее спасибо!

1 Ответ

0 голосов
/ 01 ноября 2019

Ваша проблема здесь в том, что mediafiles местоположение находится перед корневым

server {
    listen       80;
    server_name  localhost;

    location /mediafiles {
        autoindex on;
        alias /usr/share/nginx/mediafiles/;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...