Ошибка обновления

Я запускаю Discourse на Debian 11 с помощью Docker в виде одного контейнера.

Пытался обновить его командой ./launcher rebuild app.

Процесс завершается ошибкой с таким сообщением:

I, [2023-01-04T20:53:09.920876 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!

Не могу найти способ снова запустить его.

Есть какие-нибудь идеи?

Я вижу, что владелец указан неверно:

drwxr-xr-x 15 sshd             netdev          4096 Jan  4 21:43 .
drwxr-xr-x  3 root             root            4096 Jan  3  2018 ..
drwxr-xr-x  3             1000 www-data        4096 Jan  3  2018 backups
drwxr-xr-x  8 sshd             netdev          4096 Feb  2  2021 letsencrypt
drwxr-xr-x  4 sshd             netdev          4096 Jan  3  2018 log
drwxr-xr-x  2 systemd-timesync systemd-resolve 4096 Jan  3  2018 postgres_backup
drwx------ 19 systemd-timesync systemd-resolve 4096 Jan  4 21:53 postgres_data
drwx------ 19 sshd             netdev          4096 Jan  4 20:49 postgres_data_new
drwxrwsr-x  6 systemd-timesync systemd-resolve 4096 Jan  4 21:53 postgres_run
drwxr-xr-x  2 systemd-resolve  kvm             4096 Jan  4 21:53 redis_data
drwxr-xr-x  2 sshd             netdev          4096 Jan 22  2021 ssl
drwxr-xr-x  2 sshd             netdev          4096 Jan 21  2021 ssl_old
drwxr-xr-x  4 sshd             netdev          4096 Jan  3  2018 state
drwxr-xr-x  4             1000 www-data        4096 Jan  4 21:28 tmp
drwxr-xr-x  4             1000 www-data        4096 Jan  5  2018 uploads

Я запускаю контейнер с помощью ./launcher start app, затем захожу в него: ./launcher enter app.

Я сбрасываю владельца командой chown -R postgres:postgres /shared/.

После этого всё исправляется. Но при повторной сборке приложения владелец снова оказывается неверным…

Это не та ошибка, она будет выше, нам нужно увидеть больше лога.

\n2023-01-04 20:48:05.355 UTC [41] LOG: запуск PostgreSQL 13.9 (Debian 13.9-1.pgdg110+1) на архитектуре x86_64-pc-linux-gnu, скомпилирован с помощью gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-бит\n2023-01-04 20:48:05.377 UTC [41] LOG: прослушивание IPv4-адреса "0.0.0.0", порт 5432\n2023-01-04 20:48:05.377 UTC [41] LOG: прослушивание IPv6-адреса "::", порт 5432\n2023-01-04 20:48:05.566 UTC [41] LOG: прослушивание Unix-сокета "/var/run/postgresql/.s.PGSQL.5432"\n2023-01-04 20:48:05.734 UTC [44] LOG: база данных была остановлена в 2023-01-04 20:46:17 UTC\n2023-01-04 20:48:05.878 UTC [41] LOG: система баз данных готова принимать подключения\nI, [2023-01-04T20:48:09.779985 #1] INFO -- :\nI, [2023-01-04T20:48:09.780390 #1] INFO -- : > su postgres -c 'createdb discourse' || true\n2023-01-04 20:48:10.014 UTC [54] postgres@postgres ERROR: база данных "discourse" уже существует\n2023-01-04 20:48:10.014 UTC [54] postgres@postgres STATEMENT: CREATE DATABASE discourse;\ncreatedb: ошибка: создание базы данных не удалось: ERROR: база данных "discourse" уже существует\nI, [2023-01-04T20:48:10.017003 #1] INFO -- :\nI, [2023-01-04T20:48:10.017425 #1] INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true\n2023-01-04 20:48:10.188 UTC [58] postgres@discourse ERROR: роль "discourse" уже существует\n2023-01-04 20:48:10.188 UTC [58] postgres@discourse STATEMENT: create user discourse;\nERROR: роль "discourse" уже существует\n\n\n\n129:M 04 Jan 2023 20:48:21.224 # Не удалось прослушивать порт 6379 (TCP), прерывание.\n\n\nДругих ошибок я не вижу.\n\n:man_shrugging:

Внутри контейнера я пытаюсь запустить службу postgresql, но получаю ошибку.

root@server /var/discourse # ./launcher enter app
Архитектура x86_64 обнаружена.
root@discourse:/var/www/discourse# service postgresql start
[FAIL] Запуск сервера базы данных PostgreSQL 13: main[....] Ошибка: владелец конфигурации (postgres:105) и владелец данных (systemd-timesync:101) не совпадают, а владелец конфигурации не root ... не удалось!
 не удалось!
root@discourse:/var/www/discourse#

Если вы изменили владельцев файлов внутри общей папки, установка будет нарушена. Один из вариантов — переустановка и восстановление из резервной копии, другой — ручное исправление владельцев этих файлов.

@Falco: спасибо!

Я изменил владельцев после того, как обновление не удалось. Я нашёл подсказку с chown где-то в посте.

Как создать резервную копию в текущем состоянии?

Как вручную исправить владельцев?

Ещё раз спасибо!

Внутри контейнера я попытался выполнить discourse backup. Система сообщила, что Redis не запущен. В логе Redis за «текущий» период в конце я обнаружил следующие строки…

10316:M 05 Jan 2023 08:05:27.314 # Сервер инициализирован
10316:M 05 Jan 2023 08:05:27.314 # ПРЕДУПРЕЖДЕНИЕ: overcommit_memory установлен в 0! Фоновое сохранение может завершиться неудачей при нехватке памяти. Чтобы исправить эту проблему, добавьте 'vm.overcommit_memory = 1' в файл /etc/sysctl.conf, затем перезагрузите систему или выполните команду 'sysctl vm.overcommit_memory=1', чтобы изменения вступили в силу.
10316:M 05 Jan 2023 08:05:27.314 # Не удалось обработать формат RDB версии 10
10316:M 05 Jan 2023 08:05:27.314 # Критическая ошибка при загрузке базы данных: недопустимый аргумент. Выход.
10321:C 05 Jan 2023 08:05:28.345 # oO0OoO0OoO0Oo Redis запускается oO0OoO0OoO0Oo
10321:C 05 Jan 2023 08:05:28.345 # Версия Redis=6.2.3, биты=64, коммит=00000000, модифицирован=0, pid=10321, только что запущен
10321:C 05 Jan 2023 08:05:28.345 # Конфигурация загружена
10321:M 05 Jan 2023 08:05:28.346 * Монохронные часы: POSIX clock_gettime
10321:M 05 Jan 2023 08:05:28.347 * Режим работы=standalone, порт=6379.
10321:M 05 Jan 2023 08:05:28.347 # ПРЕДУПРЕЖДЕНИЕ: Настройка TCP backlog, равная 511, не может быть применена, так как /proc/sys/net/core/somaxconn установлен в меньшее значение 128.
10321:M 05 Jan 2023 08:05:28.347 # Сервер инициализирован
10321:M 05 Jan 2023 08:05:28.347 # ПРЕДУПРЕЖДЕНИЕ: overcommit_memory установлен в 0! Фоновое сохранение может завершиться неудачей при нехватке памяти. Чтобы исправить эту проблему, добавьте 'vm.overcommit_memory = 1' в файл /etc/sysctl.conf, затем перезагрузите систему или выполните команду 'sysctl vm.overcommit_memory=1', чтобы изменения вступили в силу.
10321:M 05 Jan 2023 08:05:28.348 # Не удалось обработать формат RDB версии 10
10321:M 05 Jan 2023 08:05:28.348 # Критическая ошибка при загрузке базы данных: недопустимый аргумент. Выход.

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

После этого я перезапустил контейнер командой ./launcher restart app. Теперь я могу получить доступ к Discourse. Но это старая версия 2.8.3, которую я вчера пытался обновить до 3.0.0.beta16.

Не уверен, как продолжить обновление Discourse.

Я думаю, что моя проблема связана с этой темой: Problem upgrading multi-site/multi-containers Discourse instance - #5 by jtraulle

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

./launcher rebuild app

Мне удалось установить версию 2.9.0.beta2 (идентификатор коммита: 88a8584348ed93a28286839bfc1c32b06bd50b3f), указав идентификатор коммита в качестве значения параметра “version” в файле app.yml. На этот раз обновление прошло успешно. После этого я смог обновиться до версии 3.0.0.beta16.

Спасибо всем.