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

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

Для конфигурации с двумя контейнерами за Cloudflare CDN с использованием 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 минут (возможно, это займет меньше времени, но лучше перестраховаться!) и установите таймер перезагрузки на 30 секунд. Включите маршрут 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:

7 лайков