У меня возникла проблема с запуском PostgreSQL при попытке пересобрать моё приложение, и я надеюсь на вашу помощь.
Вот лог: он застрял в этом статусе уже более 30 минут.
Status: Image is up to date for discourse/base:2.0.20240825-0027
docker.io/discourse/base:2.0.20240825-0027
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2024-08-26T17:16:15.344712 #1] INFO -- : Reading from stdin
I, [2024-08-26T17:16:15.357924 #1] INFO -- : File > /etc/service/postgres/run chmod: +x chown:
I, [2024-08-26T17:16:15.362740 #1] INFO -- : File > /etc/service/postgres/log/run chmod: +x chown:
I, [2024-08-26T17:16:15.367767 #1] INFO -- : File > /etc/runit/3.d/99-postgres chmod: +x chown:
I, [2024-08-26T17:16:15.372845 #1] INFO -- : File > /root/install_postgres chmod: +x chown:
I, [2024-08-26T17:16:15.377501 #1] INFO -- : File > /root/upgrade_postgres chmod: +x chown:
I, [2024-08-26T17:16:15.377876 #1] INFO -- : Replacing data_directory = '/var/lib/postgresql/13/main' with data_directory = '/shared/postgres_data' in /etc/postgresql/13/main/postgresql.conf
I, [2024-08-26T17:16:15.378854 #1] INFO -- : Replacing (?-mix:#?listen_addresses *=.*) with listen_addresses = '*' in /etc/postgresql/13/main/postgresql.conf
I, [2024-08-26T17:16:15.379386 #1] INFO -- : Replacing (?-mix:#?synchronous_commit *=.*) with synchronous_commit = $db_synchronous_commit in /etc/postgresql/13/main/postgresql.conf
I, [2024-08-26T17:16:15.379835 #1] INFO -- : Replacing (?-mix:#?shared_buffers *=.*) with shared_buffers = $db_shared_buffers in /etc/postgresql/13/main/postgresql.conf
I, [2024-08-26T17:16:15.380263 #1] INFO -- : Replacing (?-mix:#?work_mem *=.*) with work_mem = $db_work_mem in /etc/postgresql/13/main/postgresql.conf
I, [2024-08-26T17:16:15.380761 #1] INFO -- : Replacing (?-mix:#?default_text_search_config *=.*) with default_text_search_config = '$db_default_text_search_config' in /etc/postgresql/13/main/postgresql.conf
I, [2024-08-26T17:16:15.381203 #1] INFO -- : Replacing (?-mix:#?checkpoint_segments *=.*) with checkpoint_segments = $db_checkpoint_segments in /etc/postgresql/13/main/postgresql.conf
I, [2024-08-26T17:16:15.381901 #1] INFO -- : Replacing (?-mix:#?logging_collector *=.*) with logging_collector = $db_logging_collector in /etc/postgresql/13/main/postgresql.conf
I, [2024-08-26T17:16:15.382352 #1] INFO -- : Replacing (?-mix:#?log_min_duration_statement *=.*) with log_min_duration_statement = $db_log_min_duration_statement in /etc/postgresql/13/main/postgresql.conf
I, [2024-08-26T17:16:15.382802 #1] INFO -- : Replacing (?-mix:^#local +replication +postgres +peer$) with local replication postgres peer in /etc/postgresql/13/main/pg_hba.conf
I, [2024-08-26T17:16:15.383231 #1] INFO -- : Replacing (?-mix:^host.*all.*all.*127.*$) with host all all 0.0.0.0/0 md5 in /etc/postgresql/13/main/pg_hba.conf
I, [2024-08-26T17:16:15.383604 #1] INFO -- : Replacing (?-mix:^host.*all.*all.*::1\/128.*$) with host all all ::/0 md5 in /etc/postgresql/13/main/pg_hba.conf
I, [2024-08-26T17:16:15.384079 #1] INFO -- : > if [ -f /root/install_postgres ]; then
/root/install_postgres && rm -f /root/install_postgres
elif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
fi
2024/08/26 17:16:15 socat[28] E connect(, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): Connection refused
I, [2024-08-26T17:16:15.452500 #1] INFO -- : Generating locales (this might take a while)...
Generation complete.
I, [2024-08-26T17:16:15.453058 #1] INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main
I, [2024-08-26T17:16:15.455944 #1] INFO -- : Terminating async processes
2024-08-26 17:16:15.500 UTC [30] LOG: starting PostgreSQL 13.16 (Debian 13.16-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2024-08-26 17:16:15.501 UTC [30] LOG: listening on IPv4 address "0.0.0.0", port 5432
2024-08-26 17:16:15.501 UTC [30] LOG: listening on IPv6 address "::", port 5432
2024-08-26 17:16:15.507 UTC [30] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2024-08-26 17:16:15.516 UTC [31] LOG: database system was interrupted; last known up at 2024-08-26 17:10:28 UTC
2024-08-26 17:16:15.769 UTC [31] LOG: database system was not properly shut down; automatic recovery in progress
2024-08-26 17:16:15.774 UTC [31] LOG: redo starts at 18F/E62D1458
2024-08-26 17:16:15.774 UTC [31] LOG: invalid record length at 18F/E62D1490: wanted 24, got 0
2024-08-26 17:16:15.774 UTC [31] LOG: redo done at 18F/E62D1458
2024-08-26 17:16:15.809 UTC [30] LOG: database system is ready to accept connections```
У меня тоже возникает такая же проблема при попытке пересобрать систему в последние несколько дней. Я не могу запустить или пересобрать Discourse без ошибок.
Я пробовал использовать возможности запуска/остановки, но это, похоже, не сработало. Сама виртуальная машина также перезагружалась несколько раз. Система просто зависает на строке о том, что база данных готова принимать подключения.
Ctrl+C не сработал, и я перепробовал множество разных вещей, включая откат к старым версиям, но как только я попытался выполнить пересборку, процесс завис в том же самом месте.
Мне удалось добиться дальнейшего прогресса. В директории /var/discourse/ на моём сервере я переключился на коммит b1108913820edd27f869634d0fc654639758889a. Этот коммит сделан несколько дней назад и не содержит трёх следующих коммитов (1, 2, 3) из истории discourse_docker. Я подозреваю, что одно из этих изменений стало причиной зависания PostgreSQL.
В любом случае, в итоге приложение снова запущено. Это был ужасный опыт, lol.
Та же проблема при обновлении с версии 3.3.0 до 3.3.1. Обновление застревает на той же строке лога (система базы данных готова принимать подключения).
Помогает перезагрузка или просто завершение процесса обновления и запуск команды ./launcher start app. Новая версия 3.3.1 отображается. Но не уверен, что это правильный способ действий.
Чтобы решить проблему, мне пришлось создать новый droplet, выполнить чистую установку, восстановить резервную копию, после чего пересборка заработала корректно.
У меня также есть резервная копия рабочей версии (которая на немного более старой версии), но как только я обновился до последней версии через пересборку, возникла та же проблема. Поэтому я подозреваю, что в одном из последних коммитов было внесено изменение, которое ломает обновление со старой версии на новую.
Просто напоминаю об этом, так как я тоже столкнулся с этой проблемой после указанного коммита. Попробовал все предложенные выше способы для её решения.
Вот дополнительная информация, которая поможет в расследовании проблемы.
Ошибка наблюдается на одном хосте с Ubuntu 18.04.6, но на другом хосте, который также был обновлён сегодня до той же версии Ubuntu, процесс пересборки Discourse прошёл нормально.
Я планирую обновить Ubuntu на проблемном хосте и посмотреть, поможет ли это. Буду держать всех в курсе.
Для тех, кого это затронуло, пожалуйста, выполните команду ls -lahn /var/discourse/shared/standalone/ | grep -E "postgres|redis" и сообщите, отличается ли вывод от приведённого ниже:
drwxr-xr-x 2 101 104 4.0K Aug 29 01:33 postgres_backup
drwx------ 19 101 104 4.0K Aug 29 01:42 postgres_data
drwxrwxr-x 3 101 104 4.0K Aug 29 01:42 postgres_run
drwxr-xr-x 2 103 106 4.0K Aug 29 01:38 redis_data
drwxr-xr-x 2 101 104 4.0K Jun 15 2020 postgres_backup
drwx------ 19 101 104 4.0K May 3 2022 postgres_data
drwxrwsr-x 5 101 104 4.0K May 3 2022 postgres_run
drwxr-xr-x 2 103 106 4.0K May 3 2022 redis_data
Просто примечание: в моём случае всё произошло немного иначе.
Восстановление зависло на сообщении The database system is ready to accept connections, как это случалось и у других. Пришлось перезагрузить ВМ и выполнить ./launcher start app, чтобы запустить Форумы. Однако, когда Discourse снова стал доступен, его версия осталась прежней — 3.3.0.beta4-dev.
Сегодня я не смогу выполнить обновление Ubuntu, но буду держать всех в курсе, как только смогу, и сообщу, будет ли восстановление успешным после этого.
Я обновил нашу тестовую среду до Ubuntu 20.6, и восстановление/обновление прошло успешно до версии Discourse 3.4.0.beta2-dev. Однако это та же хост-система, которая вчера без проблем прошла восстановление на Ubuntu 18.4.