ArgumentError: каталог для pid=/.../unicorn.pid не доступен для записи

Я пытаюсь настроить Discourse на сервере. Я уже делал это несколько раз, тестируя скрипт для исправления различных аспектов архивов mbox за 18 лет активности в рассылке перед их импортом в Discourse. Ранее всё работало.

Вернувшись к этой задаче после перерыва, я запустил ./discourse-setup и получил ошибки от Let’s Encrypt из-за превышения лимитов запросов (так как я делал много попыток ранее). Чтобы обойти это, я отредактировал containers/app.yml, удалив два шаблона Let’s Encrypt (HTTPS мне не нужен для тестов), и запустил ./launcher rebuild app.

К сожалению, теперь при обращении к сайту я получаю ошибку “502 Bad gateway – nginx”. Вывод команды ./launcher logs app содержит множество таких ошибок:

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:104:in `block in reload': directory for pid=/var/www/discourse/tmp/pids/unicorn.pid not writable (ArgumentError)

            raise ArgumentError, "directory for #{var}=#{path} not writable"
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:100:in `each'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:100:in `reload'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:78:in `initialize'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:78:in `new'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:78:in `initialize'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `new'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'
config/unicorn_launcher: line 71: kill: (90) - No such process
config/unicorn_launcher: line 15: kill: (90) - No such process
(80) exiting

Учитывая, что раньше всё работало, это может быть вызвано несколькими причинами:

  • Недавнее изменение в Discourse.
  • Тот факт, что я не использую Let’s Encrypt.
  • Тот факт, что я также изменил настройки почты (хотя, вероятно, это не имеет значения).

Любая помощь будет полезна. Спасибо.

Используйте другой поддомен. Я не думаю, что Discourse будет работать по HTTP.

:frowning:

Если это ожидаемое поведение, не следует ли убрать опцию пропуска SSL? Я имею в виду, что отсутствие опции конфигурации лучше, чем опция, которая не работает…

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

Однако ошибка «недоступно для записи» кажется странной. Это, похоже, проблема, отличная от проблемы с сертификатом.

Ваш диск не переполнен, верно?

Нет, не заполнен.

root@ubuntu:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           193M  1.1M  192M   1% /run
/dev/vda1        78G   11G   67G  14% /
tmpfs           965M     0  965M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/vda15      105M  6.1M   99M   6% /boot/efi
overlay          78G   11G   67G  14% /var/lib/docker/overlay2/fa186c119fd0bc36dfbec9d7541b325bc8b099ff7aae53661aa992c66fb61c95/merged
tmpfs           193M  4.0K  193M   1% /run/user/0

Я понял, что могу использовать тестовый инструмент Let’s Encrypt, и сделал это с помощью следующего диффа:

diff --git a/templates/web.letsencrypt.ssl.template.yml b/templates/web.letsencrypt.ssl.template.yml
index ba5f551..17e5614 100644
--- a/templates/web.letsencrypt.ssl.template.yml
+++ b/templates/web.letsencrypt.ssl.template.yml
@@ -16,7 +16,7 @@ hooks:
          - install -d -m 0755 -g root -o root $LETSENCRYPT_DIR
          - cd /root/acme.sh && LE_WORKING_DIR="${LETSENCRYPT_DIR}" ./acme.sh --install --log "${LETSENCRYPT_DIR}/acme.sh.log"
          - cd /root/acme.sh && LE_WORKING_DIR="${LETSENCRYPT_DIR}" ./acme.sh --upgrade --auto-upgrade
-         - cd /root/acme.sh && LE_WORKING_DIR="${LETSENCRYPT_DIR}" ./acme.sh --set-default-ca  --server  letsencrypt
+         - cd /root/acme.sh && LE_WORKING_DIR="${LETSENCRYPT_DIR}" ./acme.sh --set-default-ca  --server  letsencrypt_test
 
     - file:
        path: "/etc/nginx/letsencrypt.conf"

Теперь сертификат, кажется, сформирован корректно, но ошибка всё ещё присутствует, что указывает на то, что она действительно не связана с этим.

[Mon 14 Aug 2023 10:55:24 AM UTC] Your cert is in: /shared/letsencrypt/lilypond.community_ecc/lilypond.community.cer
[Mon 14 Aug 2023 10:55:24 AM UTC] Your cert key is in: /shared/letsencrypt/lilypond.community_ecc/lilypond.community.key
[Mon 14 Aug 2023 10:55:24 AM UTC] The intermediate CA cert is in: /shared/letsencrypt/lilypond.community_ecc/ca.cer
[Mon 14 Aug 2023 10:55:24 AM UTC] And the full chain certs is there: /shared/letsencrypt/lilypond.community_ecc/fullchain.cer
[Mon 14 Aug 2023 10:55:25 AM UTC] Installing key to: /shared/ssl/lilypond.community_ecc.key
[Mon 14 Aug 2023 10:55:25 AM UTC] Installing full chain to: /shared/ssl/lilypond.community_ecc.cer
[Mon 14 Aug 2023 10:55:25 AM UTC] Run reload cmd: sv reload nginx
warning: nginx: unable to open supervise/ok: file does not exist
[Mon 14 Aug 2023 10:55:25 AM UTC] Reload error for :
C = US, O = (STAGING) Let's Encrypt, CN = (STAGING) Artificial Apricot R3
error 2 at 1 depth lookup: unable to get issuer certificate
C = US, O = (STAGING) Let's Encrypt, CN = (STAGING) Ersatz Edamame E1
error 2 at 1 depth lookup: unable to get issuer certificate
Started runsvdir, PID is 6029
ok: run: redis: (pid 6040) 0s
ok: run: postgres: (pid 6041) 0s
supervisor pid: 6039 unicorn pid: 6062
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:104:in `block in reload': directory for pid=/var/www/discourse/tmp/pids/unicorn.pid not writable (ArgumentError)

            raise ArgumentError, "directory for #{var}=#{path} not writable"
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:100:in `each'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:100:in `reload'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:78:in `initialize'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:78:in `new'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:78:in `initialize'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `new'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'
config/unicorn_launcher: line 71: kill: (6062) - No such process
config/unicorn_launcher: line 15: kill: (6062) - No such process
(6039) exiting

Не знаю, что делать дальше.

Просто для проверки: теперь, когда лимит квоты Let’s Encrypt истёк, я попробовал запустить без применения патча выше. Вот что получилось:

[Mon 14 Aug 2023 07:57:34 PM UTC] Ваш сертификат находится в: /shared/letsencrypt/lilypond.community_ecc/lilypond.community.cer
[Mon 14 Aug 2023 07:57:34 PM UTC] Ваш ключ сертификата находится в: /shared/letsencrypt/lilypond.community_ecc/lilypond.community.key
[Mon 14 Aug 2023 07:57:34 PM UTC] Промежуточный сертификат ЦС находится в: /shared/letsencrypt/lilypond.community_ecc/ca.cer
[Mon 14 Aug 2023 07:57:34 PM UTC] Полный цепочечный сертификат находится здесь: /shared/letsencrypt/lilypond.community_ecc/fullchain.cer
[Mon 14 Aug 2023 07:57:34 PM UTC] Установка ключа в: /shared/ssl/lilypond.community_ecc.key
[Mon 14 Aug 2023 07:57:34 PM UTC] Установка полного цепочечного сертификата в: /shared/ssl/lilypond.community_ecc.cer
[Mon 14 Aug 2023 07:57:34 PM UTC] Выполнение команды перезагрузки: sv reload nginx
warning: nginx: не удалось открыть supervise/ok: файл не существует
[Mon 14 Aug 2023 07:57:34 PM UTC] Ошибка перезагрузки для :
C = US, O = (STAGING) Let's Encrypt, CN = (STAGING) Artificial Apricot R3
ошибка 2 на глубине 1 при поиске: не удалось получить сертификат издателя
C = US, O = (STAGING) Let's Encrypt, CN = (STAGING) Ersatz Edamame E1
ошибка 2 на глубине 1 при поиске: не удалось получить сертификат издателя
Запущен runsvdir, PID = 6029
ok: run: redis: (pid 6038) 0s
ok: run: postgres: (pid 6041) 0s
PID супервизора: 6042, PID unicorn: 6062
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:104:in `block in reload': каталог для pid=/var/www/discourse/tmp/pids/unicorn.pid недоступен для записи (ArgumentError)

            raise ArgumentError, "directory for #{var}=#{path} not writable"
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:100:in `each'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:100:in `reload'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:78:in `initialize'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:78:in `new'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:78:in `initialize'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `new'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'
config/unicorn_launcher: строка 71: kill: (6062) — процесс не найден
config/unicorn_launcher: строка 15: kill: (6062) — процесс не найден
(6042) завершение работы
ok: run: redis: (pid 6038) 1s
timeout: down: postgres: 1s, обычно up, требуется up
ok: run: redis: (pid 6038) 9s
timeout: down: postgres: 0s, обычно up, требуется up
ok: run: redis: (pid 6038) 17s
timeout: down: postgres: 1s, обычно up, требуется up
ok: run: redis: (pid 6038) 24s
timeout: down: postgres: 0s, обычно up, требуется up
ok: run: redis: (pid 6038) 32s
timeout: down: postgres: 1s, обычно up, требуется up
ok: run: redis: (pid 6038) 39s
timeout: down: postgres: 0s, обычно up, требуется up
ok: run: redis: (pid 6038) 47s
ok: run: postgres: (pid 6134) 0s
PID супервизора: 6126, PID unicorn: 6136
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:104:in `block in reload': каталог для pid=/var/www/discourse/tmp/pids/unicorn.pid недоступен для записи (ArgumentError)

            raise ArgumentError, "directory for #{var}=#{path} not writable"
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:100:in `each'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:100:in `reload'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:78:in `initialize'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:78:in `new'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:78:in `initialize'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `new'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'
config/unicorn_launcher: строка 71: kill: (6136) — процесс не найден
config/unicorn_launcher: строка 15: kill: (6136) — процесс не найден
(6126) завершение работы
ok: run: redis: (pid 6038) 54s
timeout: down: postgres: 1s, обычно up, требуется up
ok: run: redis: (pid 6038) 62s
timeout: down: postgres: 0s, обычно up, требуется up
ok: run: redis: (pid 6038) 69s
timeout: down: postgres: 0s, обычно up, требуется up
ok: run: redis: (pid 6038) 77s
timeout: down: postgres: 1s, обычно up, требуется up
ok: run: redis: (pid 6038) 84s
timeout: down: postgres: 0s, обычно up, требуется up
ok: run: redis: (pid 6038) 92s
ok: run: postgres: (pid 6193) 0s
PID супервизора: 6190, PID unicorn: 6195
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:104:in `block in reload': каталог для pid=/var/www/discourse/tmp/pids/unicorn.pid недоступен для записи (ArgumentError)

            raise ArgumentError, "directory for #{var}=#{path} not writable"
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:100:in `each'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:100:in `reload'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:78:in `initialize'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:78:in `new'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:78:in `initialize'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `new'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'
	from /var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'
config/unicorn_launcher: строка 71: kill: (6195) — процесс не найден
config/unicorn_launcher: строка 15: kill: (6195) — процесс не найден
(6190) завершение работы
ok: run: redis: (pid 6038) 94s

Похоже, это проблема с правами доступа к папке. Это довольно странно, так как эта папка находится внутри файловой системы контейнера и не подключена с хоста.

Вы можете попробовать войти в запущенный контейнер и вручную настроить права доступа к папке. Если вам понадобится помощь, пожалуйста, предоставьте вывод команды:

docker exec -it app ls -lah /var/www/discourse/tmp/pids
docker exec -it app chown discourse.www-data /var/www/discourse/tmp/pids
docker exec -it app chmod g+w /var/www/discourse/tmp/pids
./launcher rebuild app

Я снова устанавливаю с нуля и в этот раз стараюсь внимательнее следить за сообщениями в логе сборки приложения.

Вот что я вижу:

153:C 16 Aug 2023 20:24:11.676 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
153:C 16 Aug 2023 20:24:11.676 # Redis version=7.0.7, bits=64, commit=00000000, modified=0, pid=153, just started
153:C 16 Aug 2023 20:24:11.676 # Configuration loaded
153:M 16 Aug 2023 20:24:11.677 * monotonic clock: POSIX clock_gettime
153:M 16 Aug 2023 20:24:11.677 # Warning: Could not create server TCP listening socket *:6379: bind: Address already in use
153:M 16 Aug 2023 20:24:11.678 # Failed listening on port 6379 (TCP), aborting.

А также это:

I, [2023-08-16T20:24:26.172936 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'yarn install --frozen-lockfile && yarn cache clean'
warning " > @glint/environment-ember-loose@1.0.2" has unmet peer dependency "@glimmer/component@^1.1.2".
warning " > @glint/environment-ember-template-imports@1.0.2" has unmet peer dependency "ember-template-imports@^3.0.0".
warning " > @mixer/parallel-prettier@2.0.3" has unmet peer dependency "prettier@^2.0.0".
warning Resolution field "babel-plugin-ember-template-compilation@2.0.0" is incompatible with requested version "babel-plugin-ember-template-compilation@^2.0.1"
warning Resolution field "unset-value@2.0.1" is incompatible with requested version "unset-value@^1.0.0"
warning " > babel-plugin-debug-macros@0.4.0-pre1" has unmet peer dependency "@babel/core@^7.0.0".
warning "workspace-aggregator-d7aa52aa-3a92-43f5-97ca-2c6c21fe43f0 > discourse > @uppy/aws-s3@3.0.6" has incorrect peer dependency "@uppy/core@^3.1.2".
warning "workspace-aggregator-d7aa52aa-3a92-43f5-97ca-2c6c21fe43f0 > discourse > @uppy/aws-s3-multipart@3.1.3" has incorrect peer dependency "@uppy/core@^3.1.2".
warning "workspace-aggregator-d7aa52aa-3a92-43f5-97ca-2c6c21fe43f0 > discourse > @uppy/xhr-upload@3.1.1" has incorrect peer dependency "@uppy/core@^3.1.2".
warning "workspace-aggregator-d7aa52aa-3a92-43f5-97ca-2c6c21fe43f0 > discourse > @uppy/aws-s3 > @uppy/xhr-upload@3.3.0" has incorrect peer dependency "@uppy/core@^3.2.1".

(После завершения сборки я попробую внести изменения прав доступа вручную.)

До изменения владельца и прав доступа:

root@ubuntu-app:/var/www/discourse# ls -lah /var/www/discourse/tmp/pids
total 8.0K
drwxr-xr-x 2 root root 4.0K Aug 16 20:47 .
drwxr-xr-x 6 root root 4.0K Aug 16 20:53 ..

После:

root@ubuntu-app:/var/www/discourse# ls -lah /var/www/discourse/tmp/pids
total 16K
drwxrwxr-x 1 discourse www-data 4.0K Aug 16 20:58 .
drwxr-xr-x 1 root      root     4.0K Aug 16 20:53 ..
-rw-r--r-- 1 discourse www-data    5 Aug 16 20:58 unicorn.pid

Теперь вывод команды ./launcher logs app выглядит следующим образом:

ok: run: redis: (pid 5790) 184s
ok: run: postgres: (pid 6154) 0s
supervisor pid: 6155 unicorn pid: 6159
config/unicorn_launcher: line 71: kill: (6159) - No such process
config/unicorn_launcher: line 15: kill: (6159) - No such process
(6155) exiting
ok: run: redis: (pid 5790) 188s
ok: run: postgres: (pid 6176) 0s
supervisor pid: 6177 unicorn pid: 6181
config/unicorn_launcher: line 71: kill: (6181) - No such process
config/unicorn_launcher: line 15: kill: (6181) - No such process
(6177) exiting
ok: run: redis: (pid 5790) 192s
timeout: down: postgres: 1s, normally up, want up
ok: run: redis: (pid 5790) 200s
timeout: down: postgres: 0s, normally up, want up
ok: run: redis: (pid 5790) 208s
timeout: down: postgres: 1s, normally up, want up
ok: run: redis: (pid 5790) 215s
timeout: down: postgres: 0s, normally up, want up
ok: run: redis: (pid 5790) 223s
timeout: down: postgres: 1s, normally up, want up
ok: run: redis: (pid 5790) 230s
timeout: down: postgres: 1s, normally up, want up
ok: run: redis: (pid 5790) 238s
ok: run: postgres: (pid 6264) 0s
supervisor pid: 6260 unicorn pid: 6266
config/unicorn_launcher: line 71: kill: (6266) - No such process
config/unicorn_launcher: line 15: kill: (6266) - No such process
(6260) exiting
ok: run: redis: (pid 5790) 244s
ok: run: postgres: (pid 6283) 0s
supervisor pid: 6284 unicorn pid: 6288

В браузере сообщается об ошибке HTTPS на сайте, и при выборе «опасного» варианта для обхода я получаю страницу nginx «bad gateway» (неверный шлюз).

У меня возникает та же проблема с текущей версией git.

Пересборка контейнера после выполнения chown и chmod отменит их эффекты.

У меня та же проблема. В последний раз, когда Discourse сломался, это произошло из-за незамеченной проблемы с плагинами. Я использую следующие:

          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/tfpk/discourse-reveal-anonymous.git
          - git clone https://github.com/discourse/discourse-push-notifications.git
          - git clone https://github.com/discourse/discourse-data-explorer.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-math.git

Можно сравнить наши наблюдения? Есть ли сейчас какие-либо известные проблемы с этими плагинами?

Вот дополнительная информация. В stderr gunicorn я вижу:

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.7/lib/active_record/connection_adapters/postgresql_adapter.rb:87:in `rescue in new_client': connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory (ActiveRecord::ConnectionNotEstablished)
	Is the server running locally and accepting connections on that socket?

В логе PG я вижу:

2023-08-21 19:24:00.721 UTC [1681] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-08-21 19:24:00.728 UTC [1681] LOG:  could not open configuration file "/etc/postgresql/13/main/pg_hba.conf": Permission denied
2023-08-21 19:24:00.728 UTC [1681] FATAL:  could not load pg_hba.conf
2023-08-21 19:24:00.741 UTC [1681] LOG:  database system is shut down

Далее:

# ls -l /etc/postgresql/13/main/pg_hba.conf
-rw-r----- 1 root root 4846 Aug 21 19:05 /etc/postgresql/13/main/pg_hba.conf

Под каким пользователем работает postgres внутри контейнера? С учётом вышеуказанных прав доступа, это должен быть root или кто-то из группы root.

Хорошо, я выполнил chmod o+r /etc/postgresql/13/main/pg_hba.conf, и теперь контейнер снова запущен.

Это немного беспокоит — почему рекомендуемый метод установки не работает из коробки? Мой статус плагинов сейчас включает те, что перечислены выше, за исключением Data Explorer, который я отключил, так как он вызывал сбой в прошлый раз.

Перекрёстная ссылка на

где сообщается о подобных симптомах.

Обновление: Я изменил команду git в секции cmd файла app.yml, чтобы использовать sudo, как описано в связанном посте.

Я считаю этот сбой прерывистым. Из трёх попыток (после каждой я полностью очищал директорию shared) один раз удалось, а два раза — нет. При сбое ручное исправление трёх проблемных прав доступа и последующая перезапуск контейнера приводили к тому, что система, судя по всему, работала нормально. Было бы неплохо иметь улучшенное логирование и более эффективные автоматические тесты для обнаружения сбоев при запуске контейнера.

Изменение прав доступа для /var/www/discourse/tmp/pids и /etc/postgre/13/main/pg_hba.conf не помогает.

Я изменил список плагинов перед пересборкой, но даже после восстановления списка плагинов получаю ту же ошибку ArgumentError. Уверены ли вы, что проблема в списке плагинов?

После запуска контейнера я вижу, что в директорию pids записываются файлы. Затем мой лог запуска (launcher log) прекращается.

ok: down: unicorn: 0s, normally up
run-parts: executing /etc/runit/3.d/10-redis
ok: down: redis: 0s, normally up
run-parts: executing /etc/runit/3.d/99-postgres
run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
run-parts: executing /etc/runit/1.d/cleanup-pids
Cleaning stale PID files
run-parts: executing /etc/runit/1.d/copy-env
Started runsvdir, PID is 35
ok: run: redis: (pid 52) 0s
ok: run: postgres: (pid 55) 0s
supervisor pid: 42 unicorn pid: 75

Есть ли что-то ещё, на что стоит обратить внимание?

У меня та же проблема, описанная в этой теме. Сегодня пытался установить Discourse на новый сервер, но установка не удалась из-за отсутствия прав на запись.

«Исправление» с помощью chown/chmod не работает: права снова сбрасываются при выполнении ./launcher rebuild app.

Итак, вам удалось воспроизвести это на чистой установке? Это очень полезная информация, так как я не могу воспроизвести проблему при обновлении существующей.

Да, я пытался установить Discourse, просто следуя руководству, и подумал, что схожу с ума, поскольку всё «казалось» работающим, но я получаю только ошибку «502».

Я попробовал изменить разрешения внутри контейнера без пересборки. Теперь я вижу следующее:

ok: run: redis: (pid 50) 4677s
ok: run: postgres: (pid 12224) 0s
supervisor pid: 12215 unicorn pid: 12226
config/unicorn_launcher: line 71: kill: (12226) - No such process
config/unicorn_launcher: line 15: kill: (12226) - No such process
(12215) exiting
ok: run: redis: (pid 50) 4686s
ok: run: postgres: (pid 12249) 0s
supervisor pid: 12240 unicorn pid: 12251
config/unicorn_launcher: line 71: kill: (12251) - No such process
config/unicorn_launcher: line 15: kill: (12251) - No such process
(12240) exiting
ok: run: redis: (pid 50) 4695s
timeout: down: postgres: 1s, normally up, want up
ok: run: redis: (pid 50) 4703s
ok: run: postgres: (pid 12279) 0s
supervisor pid: 12275 unicorn pid: 12281

У меня есть второй сервер, настроенный точно так же, как этот, который работает уже более года. Там всё просто работает: остановка контейнера, выполнение git pull, пересборка и запуск тоже проходят без проблем.

Добавляю это как дополнительный факт, так как не вижу его в этой теме.

Вы видите сообщение fatal: detected dubious ownership... в логе unicorn? У меня появляется это сообщение.

Добавление /var/www/discourse как safe.directory в gitconfig не имеет эффекта для моей установки.

Итак, я только что получил новый Droplet с Ubuntu 22.04, запустил руководство по установке, и всё прошло отлично. Не могу воспроизвести эту проблему ни на старом, ни на новом установке.

Какой дистрибутив вы использовали?

Ничего подобного при новой установке нет:

root@test-install:/var/discourse# cat /var/discourse/shared/standalone/log/rails/unicorn.std*
I, [2023-08-22T17:16:33.594602 #2982]  INFO -- : Обновление списка Gem
I, [2023-08-22T17:16:38.624384 #2982]  INFO -- : прослушивание на addr=127.0.0.1:3000 fd=10
I, [2023-08-22T17:16:43.003213 #2982]  INFO -- : запуск 1 управляемого sidekiq
I, [2023-08-22T17:16:47.070059 #2982]  INFO -- : главный процесс готов
I, [2023-08-22T17:16:50.490722 #3068]  INFO -- : worker=0 готов
I, [2023-08-22T17:16:52.394685 #3077]  INFO -- : worker=1 готов
I, [2023-08-22T17:16:53.139229 #3085]  INFO -- : worker=2 готов
I, [2023-08-22T17:16:53.518292 #3097]  INFO -- : worker=3 готов
Загрузка Sidekiq в процессе с идентификатором 3059