переезд блога на VPS

8 сентября 2026 г. behind-the-scenesdeploymentinfrastructure
переезд блога на VPS

На этой неделе блог переехал с локальной сборки на Docker Compose на боевой VPS.

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

что переехало

Приложение работает как набор сервисов в Compose: фронтенд, сервис аутентификации, API блога, почтовый сервис, сервис логирования, Postgres, MinIO и Caddy.

Данные Postgres и MinIO перенесли на VPS, а не начали с пустых томов. Так сохранились существующие пользователи, посты, медиафайлы и данные сервисов. Пароль от Postgres в ходе миграции сменили, а файл с боевыми переменными окружения хранится на сервере, а не в репозитории.

Caddy отвечает за HTTPS для blog.bjornmagne.com. Публичный сайт перенаправляет на главную страницу нужного языка, а проверки состояния сервисов позволяют легко посмотреть, как обстоят дела с деплоем.

деплой

Первый боевой запуск использовал локально собранные образы, чтобы безопасно поднять сайт. Теперь в репозитории есть ещё и Compose-надстройка на базе реестра образов, а также задача деплоя в GitLab. Сборки из ветки main помечаются тегом с хешем коммита, и задача деплоя ждёт, пока публичная проверка состояния по HTTPS не пройдёт успешно, прежде чем считать релиз успешным.

Это даёт понятный путь отката: выбрать предыдущий тег образа, поднять стек заново и проверить тот же самый эндпоинт проверки состояния.

маленький урок про аутентификацию

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

На VPS изначально стоял другой секрет. Проверка пароля при этом всё ещё работала, но сервис аутентификации не мог расшифровать ключ подписи, чтобы выдать токен доступа. Вывели из обращения тот непригодный перенесённый ключ и сгенерировали новый, локальный для VPS ключ подписи, и это всё исправило. Существующие сессии при этом стали недействительными, что после смены ключа подписи и есть правильный компромисс.

что дальше

Из оставшейся работы по деплою осталось подключить реестр GitLab и защищённые переменные CI, а затем провести первый релиз и откат, одобренные владельцем. Сайт уже работает, но процесс деплоя можно считать по-настоящему законченным только тогда, когда и новый релиз, и откат будут по-настоящему проверены на практике.

0 комментариев

Войдите , чтобы оставить комментарий.

Войти

Забыли пароль?

Нет аккаунта?