Назад | Перейти на главную страницу

Ошибка Apache 403 для статических файлов из тома докера

Я борюсь со статическими файлами, и, поскольку я новичок в докере и не совсем свободно с Apache я не уверен, связана ли проблема с первым или вторым.

[установка] У меня есть докеризованное приложение с WSGI-сервером, и я использую не докерированный Apache в качестве прокси-сервера. Прокси-сервер работает, но поскольку сервер WSGI не может обслуживать статические файлы, Apache должен это делать. Вот конф:

<VirtualHost *:80>
        ServerName my.domain.name

        ProxyPass /staticfiles !
        <Location />
                ProxyPass http://localhost:8000/
                ProxyPassReverse http://localhost:8000/
        </Location>

        Alias /staticfiles "/var/lib/docker/volumes/app_static_volume/_data/"

        <Directory "/var/lib/docker/volumes/app_static_volume/_data">
                Options Indexes FollowSymLinks
                Order allow,deny
                Allow from all
                Require all granted
        </Directory>
</VirtualHost>

Несмотря на все директивы, которые я пробовал в Directory, Я все еще получаю 403 ошибки. в журнале упоминается проблема с разрешениями.

[Mon May 06 17:06:27.531541 2019] [core:error] [pid 73031:tid 139870919952128] (13)Permission denied: [client 127.0.0.1:55892] AH00035: access to /staticfiles/jengu/jquery.datetimepicker.full.min.js denied (filesystem path '/var/lib/docker/volumes/app_static_volume') because search permissions are missing on a component of the path, referer: http://my.domain.name/

Это имеет смысл:

ls -la /var/lib/docker/volumes/app_static_volume/_data 
total 16
drwxr-xr-x 4 root root 4096 mai    6 14:33 .
drwxr-xr-x 3 root root 4096 mai    6 14:33 ..
drwxr-xr-x 6 root root 4096 mai    6 14:33 admin
drwxr-xr-x 3 root root 4096 mai    6 14:33 app

ls -la /var/lib/docker 
total 84
drwx--x--x  15 root root  4096 mai    6 10:19 .
drwxr-xr-x  60 root root  4096 janv.  9 19:43 ..
drwx------   2 root root  4096 août  13  2018 builder
.........
drwx------   6 root root  4096 mai    6 14:33 volumes
#docker-compose
version: '3.7'

services:
  web:
    build:
      context: ./app
      dockerfile: Dockerfile.prod
    command: gunicorn my_app.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - static_volume:/usr/src/app/staticfiles
    ports:
      - 127.0.0.1:8000:8000
    env_file: .env
    depends_on:
      - db
  db:
    image: postgres:11.2-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file: .env.db

volumes:
  postgres_data:
  static_volume: 

[Что я пробовал] Конечно, я мог изменить путь, по которому монтируется том (и я попробовал, просто скажу: - ./web-app/application:/usr/src/jengu/staticfiles), Я мог бы указать где-нибудь в /home/myuser но, в любом случае, в какой-то момент один компонент пути не будет доступен для поиска.

[Mon May 06 17:53:18.038814 2019] [core:error] [pid 78453:tid 140402917062400] (13)Permission denied: [client 127.0.0.1:34708] AH00035: access to /staticfiles/app/jquery.datetimepicker.full.min.js denied (filesystem path '/home/david/Documents') because search permissions are missing on a component of the path, referer: http://my.domain.name/

Есть ли элегантный обходной путь, чтобы мне не пришлось массово менять права в моей системе? Правильно ли я понял объемы докеров? Моя проблема связана только с докером или я что-то пропустил в моем файле конфигурации apache? Любая помощь приветствуется

[редактировать] Я пытался использовать символическая ссылка чтобы преодолеть проблему.

ln -s /var/lib/docker/volumes/app_static_volume/_data/ /var/www/html/app/staticfiles

Кажется, не решает много

[Tue May 07 00:55:05.192193 2019] [core:error] [pid 5345:tid 140310969526016] [client 127.0.0.1:40766] AH00037: Symbolic link not allowed or link target not accessible: /var/www/html/app/staticfiles, referer: http://my.domain.name/

Самый простой способ, который я смог найти, - это смонтировать том в месте, где все компоненты PATH были разрешены для поиска (например, /usr/local/share/). Здесь docker compose файл

version: '3.7'

services:
  web:
    build:
      context: ./app
      dockerfile: Dockerfile.prod
    command: gunicorn my_app.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - /usr/local/share/app/staticfiles:/usr/src/app/staticfiles
    ports:
      - 127.0.0.1:8000:8000
    env_file: .env
    depends_on:
      - db
  db:
    image: postgres:11.2-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file: .env.db

volumes:
  postgres_data:
  static_volume: