Обновление PostgreSQL 18 для self-hosters

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

Я только что выполнил обновление PostgreSQL до версии 18 для стандартной установки и для двух контейнеров без каких-либо проблем. Ещё раз спасибо @chrisr и команде за простые инструкции.

Для конфигурации с двумя контейнерами за CDN Cloudflare с использованием бакетов R2 для загрузок и резервных копий я выполнил следующие шаги:

Шаг 1: очистка диска

# удалить все неиспользуемые данные Docker
docker system prune -a -f
# очистить старые логи и кэш apt
journalctl --vacuum-time=2d
apt-get clean
apt-get autoremove -y
# проверить размер базы данных
du -sh /var/discourse/shared/data/postgres_data
# проверить доступное свободное место
df -h -x tmpfs -x devtmpfs

Шаг 2: техническое обслуживание и резервное копирование

  1. настройте страницу технического обслуживания в Cloudflare с сообщением о плановом обновлении системы на 15–20 минут и установите таймер перезагрузки (возможно, это займёт меньше времени, но лучше перестраховаться!). Включите маршрут Cloudflare Worker для отображения страницы технического обслуживания.

  1. запустите резервное копирование через командную строку:
cd /var/discourse
./launcher enter web_only
discourse backup
exit
  1. войдите в панель управления Cloudflare R2 и проверьте папку резервных копий, чтобы убедиться, что файл успешно загружен

Шаг 3: безопасное отключение

  1. сначала остановите веб-контейнер, чтобы разорвать все активные соединения, затем остановите контейнер с базой данных:
cd /var/discourse
./launcher stop web_only
./launcher stop data
  1. убедитесь, что PostgreSQL корректно завершил работу:
tail -n 20 shared/data/log/var-log/postgres/current

Шаг 4: обновление и пересборка

выполните следующие команды в указанном порядке:

./launcher rebuild data # выгрузка, миграция и восстановление PostgreSQL 18
./launcher rebuild data # пересборка контейнера с базой данных
./launcher rebuild web_only # пересборка веб-приложения

Шаг 5: оптимизация и очистка

  1. сгенерируйте отсутствующие статистические данные таблиц pg18, иначе форум будет работать медленнее обычного:
docker exec -u postgres data /usr/lib/postgresql/18/bin/vacuumdb -d discourse --analyze-in-stages
  1. протестируйте форум, чтобы убедиться, что всё работает — страница технического обслуживания больше не должна отображаться, если у вас установлен таймер перезагрузки.
  2. удалите маршрут Cloudflare Worker на страницу технического обслуживания (мы не хотим достигать дневного лимита в 100 000 запросов!)
  3. удалите старые данные pg18, чтобы освободить место на диске:
rm -fr /var/discourse/shared/data/postgres_data_old/

готово! :partying_face: :clinking_beer_mugs:

3 лайка