Права доступа к папке uploads?

Сначала я попытался запустить Discourse с настройками, близкими к стандартным, и всё работало вполне нормально: я мог загружать файлы и выполнять другие действия.

Затем я понял, что путь в app.yml указан как /var/discourse, и изменил его на /var/www/discourse. Я остановил и уничтожил контейнер, полностью удалив предыдущую папку. Теперь всё снова запущено и работает… но я заметил, что больше не могу загружать файлы.

Какие права доступа нужны для папки uploads? Я могу внести изменения вручную, но хотел бы знать точно, что именно нужно сделать, и является ли это нормальным (разве запускатель не должен сам настраивать правильные права доступа, особенно при запуске с нуля?)

В логах я вижу ошибки nginx, например:

2024/07/12 19:11:23 [crit] 76#76: *160552 stat() “/var/www/discourse/public/uploads/default/original/1X/971c712ff3f1758abc63ac777ad708042cc41ddf.png” failed (13: Permission denied), client: 172.17.0.1, server: _, request: “GET /phorum/uploads/default/original/1X/971c712ff3f1758abc63ac777ad708042cc41ddf.png HTTP/1.0”, host: “myhost.com”, referrer: “https://myhost.com/phorum/admin/site_settings/category/branding

Права доступа для uploads следующие:

drwxr--r--+ 3 discourse www-data 21 Jul 12 11:47 uploads

Это рекомендуемый вариант.

Путь /var/www/discourse — это путь к Discourse внутри контейнера. /var/discourse — это обычный путь для Discourse_docker вне контейнера.

Поскольку вы только начали, я бы порекомендовал просто начать заново и на этот раз ничего не переименовывать.

Я предполагаю, что вы не обновили путь в файле app.yml, и поэтому система пытается обратиться к несуществующему ресурсу.

У меня на этом сервере много других проектов, и все они удобно размещены в моей папке /var/www, поэтому я предпочитаю оставить всё как есть :slight_smile: Меня не волнует, как это устроено внутри контейнера.

Но я же его обновил? В разделе mounts или где ещё это должно быть указано?

Извините, помочь не могу. Но я абсолютно уверен, что у вас там нет Nginx :wink: Ситуация такая же с контейнером Docker.

Извините, я не понимаю, о каком Nginx речь? Логи от Nginx в Discourse, а мой Nginx, выполняющий терминацию SSL, находится выше него.

Именно в этом и суть. Раз ваш обратный прокси nginx не находится в этом пути, почему же контейнер Docker должен быть? Но контейнер живет своей собственной жизнью, и путь к контейнеру не должен влиять на то, что делает его Nginx. Вы что-то еще меняли?

Я проверил, что у меня есть:

lrwxrwxrwx 1 root root 15 Jul 12 10:10 uploads -> /shared/uploads

И в качестве примера: одно изображение в /var/www/discourse/public/uploads/default/original/1X выглядит так:

-rw-r--r-- 1 discourse www-data 7100 May 19 2022 08335563eac3a393e60a902d4d38cffdfa6d967d

На этом мои знания заканчиваются. Иначе Docker был бы для меня огромной загадкой :rofl:

Так что, по сути, это запись для всех? Разве это не считается плохим для безопасности?

Вам действительно не стоит рисковать и раскрывать свои секреты из файла app.yml всему миру.

Внутри Docker? Я так не думаю. И… мне всё равно, потому что всё это запланировано и сделано командой CDCK, и я доверяю им, что они знают, что делают :smirking_face:

Конечно, но я ничего не раскрываю :slight_smile:

Права доступа одинаковы, независимо от того, внутри или снаружи. Кроме того, папка uploads смонтирована.

Ладно, ничего не сработало, поэтому я в итоге изменил права доступа к папке uploads на 755, и теперь всё в порядке. После перестройки выяснилось, что сами загрузки были в порядке (со стороны движка), однако nginx не мог их прочитать.

Я не до конца понимаю, зачем вы делаете всё это. Выбор разместить контейнер в пути, который станет видимым во всём мире при малейшей ошибке, — это ваше решение, и это ваш выбор. Но всё остальное… зачем?

Использование обратного прокси перед Discourse — это действительно просто, и в противном случае ваша установка была бы стандартной, без всех этих хлопот. Конечно, если вы хотите поэкспериментировать и это ваше хобби, но довольно скоро кто-нибудь заявит, что поддержка предоставляется только для стандартной установки, а главная проблема в том, что никто на самом деле не знает, что вы сделали. Или почему.

Что именно имеется в виду под «всем этим»? У меня относительно стандартная настройка :slight_smile: И я пытаюсь решить проблему.

Если хотите, вы можете загрузить файл, посмотреть его права доступа и скопировать их.

Возможно, загрузите несколько файлов, а затем выполните

 find uploads -ls | less

Вы исправляете проблему, возникшую, когда вы начали делать что-то другое, что требуется в стандартной ситуации. Даже с обратным прокси.

Вот почему вы довольно далеко от стандарта :smirking_face: Потому что есть два варианта:

  • у вас в руках баг, которого ни у кого другого нет
  • вы сделали что-то необычное

Возможно, это баг. И вы подтвердили это, выполнив стандартную установку безопасным (во многих отношениях) способом и одновременно правильно настроив обратный прокси. Потому что если проблема всё ещё сохраняется, я могу поспорить, что она связана с виртуальным хостом и/или портами. Но если всё работает… то мы возвращаемся к варианту «необычное» — где никто не знает, что именно вы сделали.

Вы видите проблему здесь?

В любом случае — использование обратного прокси означает отсутствие поддержки… такова наша политика. Однако другие пользователи могут и довольно часто помогают,