Обновление PostgreSQL не работает из Китая

данные не могут быть восстановлены

./launcher rebuild data
Обнаружена архитектура x86_64.
Проверка актуальности лаунчера
Лаунчер актуален
2.0.20250129-0720: Загрузка из docker-hub-china/discourse-base
Digest: sha256:d798a945ca4d31c29e5d263cdaf807bafab9b5f6737be0b1b852bea0063a3b91
Статус: Образ актуален для registry.cn-wulanchabu.aliyuncs.com/docker-hub-china/discourse-base:2.0.20250129-0720
registry.cn-wulanchabu.aliyuncs.com/docker-hub-china/discourse-base:2.0.20250129-0720
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-02-06T04:49:43.809493 #1]  INFO -- : Чтение из stdin
I, [2025-02-06T04:49:43.812252 #1]  INFO -- : Пропущен отсутствующий хук before_code
I, [2025-02-06T04:49:43.812294 #1]  INFO -- : Пропущен отсутствующий хук before_db_migrate
I, [2025-02-06T04:49:43.812309 #1]  INFO -- : Пропущен отсутствующий хук after_code
I, [2025-02-06T04:49:43.816721 #1]  INFO -- : Файл > /etc/service/postgres/run  chmod: +x  chown: 
I, [2025-02-06T04:49:43.820580 #1]  INFO -- : Файл > /etc/service/postgres/log/run  chmod: +x  chown: 
I, [2025-02-06T04:49:43.824283 #1]  INFO -- : Файл > /etc/runit/3.d/99-postgres  chmod: +x  chown: 
I, [2025-02-06T04:49:43.827979 #1]  INFO -- : Файл > /root/install_postgres  chmod: +x  chown: 
I, [2025-02-06T04:49:43.832007 #1]  INFO -- : Файл > /root/upgrade_postgres  chmod: +x  chown: 
I, [2025-02-06T04:49:43.832273 #1]  INFO -- : Замена data_directory = '/var/lib/postgresql/15/main' на data_directory = '/shared/postgres_data' в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T04:49:43.832904 #1]  INFO -- : Замена (?-mix:#?listen_addresses *=.*) на listen_addresses = '*' в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T04:49:43.833313 #1]  INFO -- : Замена (?-mix:#?synchronous_commit *=.*) на synchronous_commit = $db_synchronous_commit в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T04:49:43.843122 #1]  INFO -- : Замена (?-mix:#?shared_buffers *=.*) на shared_buffers = $db_shared_buffers в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T04:49:43.843548 #1]  INFO -- : Замена (?-mix:#?work_mem *=.*) на work_mem = $db_work_mem в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T04:49:43.843885 #1]  INFO -- : Замена (?-mix:#?default_text_search_config *=.*) на default_text_search_config = '$db_default_text_search_config' в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T04:49:43.844162 #1]  INFO -- : Замена (?-mix:#?checkpoint_segments *=.*) на checkpoint_segments = $db_checkpoint_segments в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T04:49:43.844439 #1]  INFO -- : Замена (?-mix:#?logging_collector *=.*) на logging_collector = $db_logging_collector в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T04:49:43.844732 #1]  INFO -- : Замена (?-mix:#?log_min_duration_statement *=.*) на log_min_duration_statement = $db_log_min_duration_statement в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T04:49:43.845050 #1]  INFO -- : Замена (?-mix:^#local +replication +postgres +peer$) на local replication postgres  peer в /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-06T04:49:43.845283 #1]  INFO -- : Замена (?-mix:^host.*all.*all.*127.*$) на host all all 0.0.0.0/0 md5 в /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-06T04:49:43.845505 #1]  INFO -- : Замена (?-mix:^host.*all.*all.*::1\/128.*$) на host all all ::/0 md5 в /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-06T04:49:43.845723 #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 уже запущен, остановите контейнер ; exit 1
fi

2025/02/06 04:49:45 socat[33] E connect(, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): Отказано в подключении
initdb: предупреждение: включена аутентификация "trust" для локальных подключений
initdb: подсказка: Вы можете изменить это, отредактировав pg_hba.conf или используя опцию -A, или --auth-local и --auth-host при следующем запуске initdb.

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

socat[33] E connect(, AF=1 “/shared/postgres_run/.s.PGSQL.5432”, 36): Connection refused

Видите ли вы также ошибку ниже, значительно дальше в выводе ваших логов?

The source cluster was not shut down cleanly

Если да, попробуйте следовать этим инструкциям.

Контейнеры не запущены

Видите ли вы какие-либо ошибки на этом первом этапе?

Я использовал методы data.yml и web_only.yml

Вы можете по-прежнему следовать тем же инструкциям, но замените все вхождения app или standalone на data.

По-прежнему не подключено

$ ./launcher enter data
Определена архитектура x86_64.
root@sober-data:/# export SVWAIT=300
sv stop nginx
sv stop unicorn
sv stop postgres
exit
fail: nginx: не удалось перейти в директорию сервиса: файл не существует
fail: unicorn: не удалось перейти в директорию сервиса: файл не существует
ok: down: postgres: 0s, обычно up
logout

Это означает, что вы были подключены к контейнеру. (Просто убедитесь, что контейнер web_only остается остановленным во время пересборки контейнера data.)

ok: down: postgres: 0s, normally up

Это вывод, который имеет значение. Это означает, что postgres теперь корректно остановлен, и вы можете продолжить со следующими шагами.

 ./launcher enter  data
Обнаружена архитектура x86_64.
root@sober-data:/# sv stop postgres
ok: down: postgres: 0s, normally up
root@sober-data:/# exit
logout
root@sober:/var/discourse$ ./launcher rebuild  data
Обнаружена архитектура x86_64.
Проверка актуальности лаунчера
Лаунчер актуален
Остановка старого контейнера
+ /usr/bin/docker stop -t 600 data
data
2.0.20250129-0720: Pulling from docker-hub-china/discourse-base
Digest: sha256:d798a945ca4d31c29e5d263cdaf807bafab9b5f6737be0b1b852bea0063a3b91
Status: Image is up to date for registry.cn-wulanchabu.aliyuncs.com/docker-hub-china/discourse-base:2.0.20250129-0720
registry.cn-wulanchabu.aliyuncs.com/docker-hub-china/discourse-base:2.0.20250129-0720
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-02-06T06:19:20.379635 #1]  INFO -- : Reading from stdin
I, [2025-02-06T06:19:20.380959 #1]  INFO -- : Пропущен отсутствующий хук before_code
I, [2025-02-06T06:19:20.380976 #1]  INFO -- : Пропущен отсутствующий хук before_db_migrate
I, [2025-02-06T06:19:20.380983 #1]  INFO -- : Пропущен отсутствующий хук after_code
I, [2025-02-06T06:19:20.383923 #1]  INFO -- : Файл > /etc/service/postgres/run  chmod: +x  chown: 
I, [2025-02-06T06:19:20.386435 #1]  INFO -- : Файл > /etc/service/postgres/log/run  chmod: +x  chown: 
I, [2025-02-06T06:19:20.389343 #1]  INFO -- : Файл > /etc/runit/3.d/99-postgres  chmod: +x  chown: 
I, [2025-02-06T06:19:20.391719 #1]  INFO -- : Файл > /root/install_postgres  chmod: +x  chown: 
I, [2025-02-06T06:19:20.394375 #1]  INFO -- : Файл > /root/upgrade_postgres  chmod: +x  chown: 
I, [2025-02-06T06:19:20.394471 #1]  INFO -- : Замена data_directory = '/var/lib/postgresql/15/main' на data_directory = '/shared/postgres_data' в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T06:19:20.394742 #1]  INFO -- : Замена (?-mix:#?listen_addresses *=.*) на listen_addresses = '*' в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T06:19:20.394972 #1]  INFO -- : Замена (?-mix:#?synchronous_commit *=.*) на synchronous_commit = $db_synchronous_commit в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T06:19:20.395126 #1]  INFO -- : Замена (?-mix:#?shared_buffers *=.*) на shared_buffers = $db_shared_buffers в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T06:19:20.395261 #1]  INFO -- : Замена (?-mix:#?work_mem *=.*) на work_mem = $db_work_mem в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T06:19:20.395400 #1]  INFO -- : Замена (?-mix:#?default_text_search_config *=.*) на default_text_search_config = '$db_default_text_search_config' в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T06:19:20.395510 #1]  INFO -- : Замена (?-mix:#?checkpoint_segments *=.*) на checkpoint_segments = $db_checkpoint_segments в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T06:19:20.395622 #1]  INFO -- : Замена (?-mix:#?logging_collector *=.*) на logging_collector = $db_logging_collector в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T06:19:20.395723 #1]  INFO -- : Замена (?-mix:#?log_min_duration_statement *=.*) на log_min_duration_statement = $db_log_min_duration_statement в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T06:19:20.395845 #1]  INFO -- : Замена (?-mix:^#local +replication +postgres +peer$) на local replication postgres  peer в /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-06T06:19:20.395930 #1]  INFO -- : Замена (?-mix:^host.*all.*all.*127.*$) на host all all 0.0.0.0/0 md5 в /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-06T06:19:20.396007 #1]  INFO -- : Замена (?-mix:^host.*all.*all.*::1\/128.*$) на host all all ::/0 md5 в /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-06T06:19:20.396096 #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 уже запущен, остановите контейнер ; exit 1
fi

initdb: предупреждение: включена аутентификация "trust" для локальных подключений
initdb: подсказка: Вы можете изменить это, отредактировав pg_hba.conf или используя опцию -A, или --auth-local и --auth-host при следующем запуске initdb.

Зависла ли пересборка на этом этапе? Если да, отмените её и выполните вместо этого следующие команды, а затем опубликуйте результаты.

./launcher start data
./launcher enter data
psql --version
apt-get update

Спасибо большое. Давайте вернемся к версии Docker и файлу postgres.template.yml

./launcher rebuild data
Обнаружена архитектура x86_64.
Проверка актуальности лаунчера
Лаунчер актуален
Остановка старого контейнера
+ /usr/bin/docker stop -t 600 data
data
2.0.20250129-0720: Загрузка образа из docker-hub-china/discourse-base
Амплитуда: sha256:d798a945ca4d31c29e5d263cdaf807bafab9b5f6737be0b1b852bea0063a3b91
Статус: Образ registry.cn-wulanchabu.aliyuncs.com/docker-hub-china/discourse-base:2.0.20250129-0720 уже актуален
registry.cn-wulanchabu.aliyuncs.com/docker-hub-china/discourse-base:2.0.20250129-0720
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-02-06T07:02:42.768651 #1]  INFO -- : Чтение из stdin
I, [2025-02-06T07:02:42.769907 #1]  INFO -- : Пропущен отсутствующий хук before_code
I, [2025-02-06T07:02:42.769923 #1]  INFO -- : Пропущен отсутствующий хук before_db_migrate
I, [2025-02-06T07:02:42.769933 #1]  INFO -- : Пропущен отсутствующий хук after_code
I, [2025-02-06T07:02:42.772767 #1]  INFO -- : Файл > /etc/service/postgres/run  chmod: +x  chown: 
I, [2025-02-06T07:02:42.775230 #1]  INFO -- : Файл > /etc/service/postgres/log/run  chmod: +x  chown: 
I, [2025-02-06T07:02:42.777690 #1]  INFO -- : Файл > /etc/runit/3.d/99-postgres  chmod: +x  chown: 
I, [2025-02-06T07:02:42.779645 #1]  INFO -- : Файл > /root/install_postgres  chmod: +x  chown: 
I, [2025-02-06T07:02:42.781825 #1]  INFO -- : Файл > /root/upgrade_postgres  chmod: +x  chown: 
I, [2025-02-06T07:02:42.781974 #1]  INFO -- : Замена data_directory = '/var/lib/postgresql/15/main' на data_directory = '/shared/postgres_data' в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T07:02:42.782261 #1]  INFO -- : Замена (?-mix:#?listen_addresses *=.*) на listen_addresses = '*' в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T07:02:42.782427 #1]  INFO -- : Замена (?-mix:#?synchronous_commit *=.*) на synchronous_commit = $db_synchronous_commit в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T07:02:42.782551 #1]  INFO -- : Замена (?-mix:#?shared_buffers *=.*) на shared_buffers = $db_shared_buffers в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T07:02:42.782661 #1]  INFO -- : Замена (?-mix:#?work_mem *=.*) на work_mem = $db_work_mem в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T07:02:42.782762 #1]  INFO -- : Замена (?-mix:#?default_text_search_config *=.*) на default_text_search_config = '$db_default_text_search_config' в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T07:02:42.782877 #1]  INFO -- : Замена (?-mix:#?checkpoint_segments *=.*) на checkpoint_segments = $db_checkpoint_segments в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T07:02:42.782974 #1]  INFO -- : Замена (?-mix:#?logging_collector *=.*) на logging_collector = $db_logging_collector в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T07:02:42.783076 #1]  INFO -- : Замена (?-mix:#?log_min_duration_statement *=.*) на log_min_duration_statement = $db_log_min_duration_statement в /etc/postgresql/15/main/postgresql.conf
I, [2025-02-06T07:02:42.783180 #1]  INFO -- : Замена (?-mix:^#local +replication +postgres +peer$) на local replication postgres  peer в /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-06T07:02:42.783258 #1]  INFO -- : Замена (?-mix:^host.*all.*all.*127.*$) на host all all 0.0.0.0/0 md5 в /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-06T07:02:42.783334 #1]  INFO -- : Замена (?-mix:^host.*all.*all.*::1\/128.*$) на host all all ::/0 md5 в /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-06T07:02:42.783416 #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 уже запущен, остановите контейнер ; exit 1
fi

initdb: предупреждение: включена аутентификация "trust" для локальных подключений
initdb: подсказка: Вы можете изменить это, отредактировав pg_hba.conf или используя опцию -A, или --auth-local и --auth-host при следующем запуске initdb.

2.0.20250129-0720: Загрузка из docker-hub-china/discourse-base

Можете подтвердить, находится ли ваш сервер в Китае?

Зеркало не проблема, это способ ускорения сети для зеркала в Китае, иначе зеркало не будет иметь скорости сети

Я перенёс ваши вопросы в новую тему. Полагаю, это связано с запуском обновления из Китая.

Судя по вашему логу, пересборка завершается неудачей на этапе apt-get update. Рекомендую использовать VPN для подключения вашего сервера к репозиториям apt.

Я также выполняю процесс ускорения китайской сети для apt-get update. Мне бы хотелось узнать, какие пакеты обновляются в основном при выполнении apt-get update.

Я бы предпочел узнать, в чём заключается корневая причина того, что подключение к /shared/postgres_run/.s.PGSQL.5432 не удаётся.

Можете ли вы получить доступ к репозиторию ниже с вашего сервера?

curl -v https://apt.postgresql.org/pub/repos/apt/

Этот репозиторий необходим для установки старых пакетов PostgreSQL, используемых во время обновления.

Это обычно происходит, когда база данных была завершена некорректно. Мы уже исправляли это ранее, когда вы запускали и останавливали контейнер data. В вашем последнем выводе журнала эта ошибка не отображается.

Вы имеете в виду, что версия PostgreSQL слишком устарела, что вызывает проблемы. Это обновление можно интегрировать в обработку Discourse/base в зеркале. Я использую зеркало Discourse/base: 2.0.20250129-0720.

Есть ли какие-либо проблемы с моим пониманием? Какая версия PostgreSQL работает корректно, а какая вызывает проблемы?

Или, возможно, проблема заключается в том, что используемое мной зеркало слишком новое, что вызывает проблемы при сборке данных. Мне нужно собрать данные, используя зеркало Discourse/base: 2.0.20250114-0014, чтобы адаптироваться к обновлению PostgreSQL.

Я выполнил обновление до PostgreSQL 15

Шаблоны необходимо использовать последовательно:

postgres.13.template.yml
postgres.15.template.yml
postgres.template.yml

Файлы postgres.13.template.yml и postgres.15.template.yml содержат конфигурацию ускорения сети для Китая:

run:
  - exec: cat /etc/os-release && psql --version
  - exec: |
      if [ -f /etc/apt/sources.list ]; then
        sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
      else
        echo "deb http://mirrors.ustc.edu.cn/debian bookworm main contrib non-free non-free-firmware" | sudo tee /etc/apt/sources.list
        echo "deb http://mirrors.ustc.edu.cn/debian bookworm-updates main contrib non-free non-free-firmware" | sudo tee -a /etc/apt/sources.list
      fi
  - exec: |
      if [ -f /etc/apt/sources.list.d/debian.sources ]; then
        sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources
      else
        sudo bash -c 'cat > /etc/apt/sources.list.d/debian.sources <<EOF
        URIs: http://mirrors.ustc.edu.cn/debian
        Suites: bookworm bookworm-updates
        Components: main contrib non-free non-free-firmware
        Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

        Types: deb
        URIs: http://mirrors.ustc.edu.cn/debian-security
        Suites: bookworm-security
        Components: main contrib non-free non-free-firmware
        Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
        EOF'
      fi
  - exec: cat /etc/apt/sources.list && cat /etc/apt/sources.list.d/debian.sources