Я только что выполнил обновление до 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: техническое обслуживание и резервное копирование
- Отредактируйте страницу технического обслуживания Cloudflare, указав, что обновление системы займет 15-20 минут (возможно, это займет меньше времени, но лучше перестраховаться!) и установите таймер перезагрузки на 30 секунд. Включите маршрут Cloudflare worker для отображения страницы технического обслуживания.
- Запустите резервное копирование через командную строку:
cd /var/discourse
./launcher enter web_only
discourse backup
exit
- Войдите в панель управления Cloudflare R2 и проверьте папку с резервными копиями, чтобы убедиться, что файл был успешно загружен.
Шаг 3: безопасное завершение работы
- Сначала остановите веб-контейнер, чтобы разорвать активные соединения, затем остановите контейнер базы данных:
cd /var/discourse
./launcher stop web_only
./launcher stop data
- Убедитесь, что 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: оптимизация и очистка
- Сгенерируйте отсутствующие статистические данные таблиц pg18, иначе форум будет работать медленнее обычного:
docker exec -u postgres data /usr/lib/postgresql/18/bin/vacuumdb -d discourse --analyze-in-stages
- Протестируйте форум, чтобы убедиться, что всё работает — страница технического обслуживания теперь не должна загружаться, если у вас установлен таймер перезагрузки.
- Удалите маршрут Cloudflare worker на страницу технического обслуживания (мы не хотим достигать дневного лимита в 100 000 запросов!)
- Удалите старые данные pg18, чтобы освободить место на диске:
rm -fr /var/discourse/shared/data/postgres_data_old/
Готово!
![]()
