Я только что выполнил обновление 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: техническое обслуживание и резервное копирование
- настройте страницу технического обслуживания в Cloudflare с сообщением о плановом обновлении системы на 15–20 минут и установите таймер перезагрузки (возможно, это займёт меньше времени, но лучше перестраховаться!). Включите маршрут 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/
готово!
![]()
