Перейти к содержимому

Развертывание Repovio

Руководство по производственному развертыванию, прокси-серверу TLS, резервному копированию, восстановлению, обновлению и откату для Repovio.

Стек Compose Repovio запускает PostgreSQL, один раз применяет миграцию Prisma, а затем запускает API и веб-приложения. Он не завершает TLS. Поместите веб-службы и службы API за обратным прокси-сервером, которому принадлежат общедоступное имя хоста и сертификаты.

Предварительные условия

  • Docker Engine с Docker Compose v2. — DNS-запись для общедоступного имени хоста. — Обратный прокси-сервер, который получает и обновляет сертификаты TLS. — Каталог частного сервера, доступный для чтения только администраторам развертывания.

Стек Compose сохраняет данные PostgreSQL, включая нормализованные изображения профиля пользователя, в томе с именем repovio-postgres. Не удаляйте этот том, если вы намеренно не хотите удалить все данные Repovio.

Первое развертывание

Шаг 1. Ознакомьтесь с выпущенной версией Repovio и создайте файл частной среды:

cp .env.example .env
chmod 600 .env

Шаг 2. Замените все заполнители в .env, особенно POSTGRES_PASSWORD, оба URL-адреса базы данных, AUTH_JWT_SECRET и

TOKEN_ENCRYPTION_KEY. Сгенерируйте ключ шифрования с помощью:

openssl rand -base64 32

Шаг 3. Установите URL-адреса, видимые извне. Для развертывания по адресу https://repovio.example.com используйте:

PUBLIC_URL=https://repovio.example.com
OIDC_CALLBACK_URL=https://repovio.example.com/api/v1/auth/oidc/callback
CORS_ORIGIN=https://repovio.example.com
NUXT_PUBLIC_API_BASE_URL=https://repovio.example.com/api/v1
OAUTH_CALLBACK_URL=https://repovio.example.com/api/v1/provider-accounts/oauth/callback

Шаг 4. Привяжите порты контейнера к петле, когда обратный прокси-сервер работает на том же хосте:

REPOVIO_API_PORT=127.0.0.1:3001
REPOVIO_WEB_PORT=127.0.0.1:3000

В противном случае ограничьте доступ к портам 3000 и 3001 с помощью брандмауэра хоста. Никогда не открывайте контейнер PostgreSQL.

Шаг 5. Установите REPOVIO_VERSION в .env на точную выпущенную пару изображений, затем запустите стек:

docker compose pull
docker compose up --detach --wait

Сохраните это значение в .env, чтобы каждая последующая команда Compose использовала тот же API и ту же веб-версию.

Шаг 6. Подтвердите конечную точку работоспособности API локально:

curl --fail http://127.0.0.1:3001/api/health

Шаг 7. Откройте общедоступный URL-адрес Repovio и заполните однократная настройка при первом запуске, чтобы создать первый

системный администратор.

Обратный прокси и TLS

Проксируйте общедоступный веб-источник на порт 3000, а пути API и Socket.IO — на порт 3001. Например, блок сайта Caddy может использовать:

repovio.example.com {
  reverse_proxy /api/* 127.0.0.1:3001
  reverse_proxy /socket.io/* 127.0.0.1:3001
  reverse_proxy /mcp 127.0.0.1:3001
  reverse_proxy 127.0.0.1:3000
}

Прокси-сервер должен перенаправлять HTTP на HTTPS, проверять восходящие соединения в соответствии со своей локальной политикой и сохранять общедоступное имя хоста. Настройте поставщиков OAuth с тем же URL-адресом обратного вызова HTTPS, который установлен в OAUTH_CALLBACK_URL.

Обновление

Перенос более ранней установки

Следуйте инструкциям обновление брендинга перед запуском переименованного стека. Задайте для REPOVIO_POSTGRES_VOLUME точное имя существующего тома. Сохраните учетные данные базы данных и ключ шифрования; для брендинга не требуется копирование или сброс базы данных.

Шаг 1. Создайте и проверьте резервную копию базы данных перед изменением изображений.

Шаг 2. Установите для REPOVIO_VERSION точную версию выпуска в .env.

Шаг 3: Потяните и примените фиксатор:

docker compose pull
docker compose up --detach --wait

Служба migrate применяет ожидающие миграции Prisma до запуска API. Проверяйте его после каждого обновления:

docker compose logs migrate

Шаг 4. Прежде чем считать обновление завершенным, проверьте конечную точку работоспособности и панель мониторинга, обслуживаемую прокси-сервером.

Резервное копирование базы данных

Запускайте резервные копии из каталога развертывания. При этом на хост будет записан дамп пользовательского формата PostgreSQL без вывода учетных данных или ввода их в командную строку:

mkdir -p backups
backup_file="backups/repovio-$(date +%F-%H%M%S).dump"
docker compose exec -T postgres sh -c 'pg_dump -U "$POSTGRES_USER" -Fc "$POSTGRES_DB"' \
  > "$backup_file"
pg_restore --list "$backup_file"

Храните зашифрованные копии вне хоста и периодически проверяйте восстановление на отдельной системе.

Восстановление базы данных

При восстановлении заменяются текущие объекты базы данных. Сначала создайте новую резервную копию и запланируйте время простоя.

docker compose stop api web
docker compose exec -T postgres sh -c 'pg_restore -U "$POSTGRES_USER" --clean --if-exists --no-owner -d "$POSTGRES_DB"' \
  < backups/repovio-YYYY-MM-DD-HHMMSS.dump
docker compose up --detach --wait

После этого проверьте docker compose logs migrate и конечную точку работоспособности API. Восстановите дамп, сделанный совместимой версией Repovio, при откате изменений схемы.

Откат

Шаг 1. Сохраните резервную копию, сделанную непосредственно перед неудачным обновлением.

Шаг 2. Установите для REPOVIO_VERSION в .env последнюю заведомо исправную версию образа.

Шаг 3: Запустите docker compose pull и docker compose up --detach --wait.

Шаг 4. Если новая версия перенесла базу данных несовместимо, остановите API и Интернет, восстановите совместимую резервную копию, а затем

снова запустите предыдущую версию образа.

Никогда не используйте docker compose down --volumes в качестве команды обновления или отката: он удаляет указанный том PostgreSQL.