Веб-сервер не имеет разрешения на доступ к файлам на сетевом диске

#permissions #windows-subsystem-for-linux #wsl-2 #ddev

#разрешения #windows-subsystem-for-linux #wsl-2 #ddev

Вопрос:

Я хочу использовать DDEV в качестве локальной среды разработки. Установка прошла успешно, и веб-сайт (WordPress) запущен.

В настоящее время наша команда использует XAMPP, и чтобы избежать загрузки больших файлов на каждом локальном компьютере, мы создаем символические ссылки (например, в папке «uploads» в WordPress). Целью является сетевой диск. Таким образом, у всех в нашей команде есть доступ к одним и тем же файлам.

Теперь я хочу сделать то же самое с DDEV. В WSL я смонтировал сетевой диск и создал символическую ссылку. Внутри консоли у меня есть полный доступ к смонтированному каталогу, я могу создавать, редактировать и удалять файлы.

Но когда я получаю доступ к файлу с помощью браузера, я получаю следующее сообщение об ошибке:

403 Запрещено. У вас нет разрешения на доступ к этому ресурсу.

Та же ошибка возникает, когда я пытаюсь загрузить новый файл в WordPress.

Есть ли какой-либо способ предоставить веб-серверу разрешение на просмотр и изменение файлов на сетевом диске?

Веб-сервер — это Apache / 2.4.38.

Комментарии:

1. Помните, что файловая система на хосте (в данном случае WSL2) отличается от файловой системы в контейнере. Итак, вам нужно будет 1) смонтировать внешнюю файловую систему в контейнер, возможно, с помощью docker-compose.*.yaml, а затем 2) Внутри веб-контейнера создать символическую ссылку, которая работает с ним. Вы можете изучить это внутри веб-контейнера ddev ssh , и когда символическая ссылка там работает, все в порядке. Рад помочь вам разобраться в этом, если у вас есть точный пример. Ключевым моментом является то, что вы должны смонтировать его в контейнер .

2. Вам понадобится docker-compose.mountuploads . yaml на основе ddev.readthedocs.io/en/stable/users/extend/custom-compose-files /… и добавьте volumes раздел в веб-службу с элементом, который работает, например - /host/path/to/uploads:/mnt/uploads , а затем вы можете добавить символическую ссылку на /mnt/uploads по мере необходимости. Имейте в виду, что docker может вообще не иметь возможности монтировать сетевые диски таким образом.

3. Еще одно замечание: именно для этой ситуации в Drupal есть хороший модуль под названием stage_file_proxy, который устраняет необходимость даже удалять файлы этого типа. Если в WP есть что-то подобное … drupal.org/project/stage_file_proxy

4. @rfay Я создал файл docker-composer. Теперь я могу получить доступ к папке uploads в ddev ssh. Но когда я пытаюсь создавать файлы (например, с touch помощью), возвращается следующее сообщение об ошибке: touch: cannot touch 'test.txt': Permission denied В моем тестовом примере мне нужны другие учетные данные для доступа к сетевому диску. Может ли это быть причиной? Это мой docker-compose-file: volumes: - /var/www/html/web/app/uploads:/mnt/t/ddev-test/uploads

5. Я переключил обе части, и теперь это работает, также с сетевым диском! Я не уверен, что именно решило основную проблему, потому что тем временем привилегии были обновлены на сетевом диске. Большое спасибо за вашу помощь!

Ответ №1:

Как упоминал @rfay, мне пришлось добавить сетевой диск в качестве тома, чтобы он был доступен через веб-контейнер. Поэтому я создал новый docker-compose-file в каталоге .ddev (см. Также В документах: https://ddev.readthedocs.io/en/stable/users/extend/custom-compose-files/#docker-compose42yaml-examples).

Кроме того, разрешения на сетевом диске были неверными.