Сайт ↗
Разделы документации
Эксплуатация · 0.8.1

Развернуть архив Docker-образов с Mac

Соберите приложение на Mac и передайте готовые образы на VPS через SSH. Registry не нужен.

На этой странице

Docker собирает приложение на Mac. Контроллер отправляет готовые образы на VPS через SSH и запускает их. Исходники на VPS не нужны. Ниже — один VPS, локальные изображения и отключённые резервные копии.

1. Создайте профиль в Generator UI

В Deployment включите Docker и Production deployment, выберите CI provider → None. В Deployment environments создайте профиль production с preset Single server. Внутри профиля выберите Image delivery → Transfer image archives over SSH, заполните свои домены, TLS contact email и Runtime directory. В Backup destination выберите None; для рабочих изображений используется Local files, выбранный для проекта.

Подробное пояснение полей — в подготовке профиля. Нажмите Save deployment settings, затем Generate. Настройки появятся в deploy/generated/environments/production.json; пустой custom-файл рядом в deploy/custom/environments/ можно пока не менять. Копировать JSON в deploy/environments/ не требуется.

2. Подготовьте VPS и Mac

Сначала выполните подготовку сервера и доменов. Затем откройте на Mac терминал в корне сгенерированного проекта example-project и выполните все шаги подготовки окружения и SSH.

В профиле production укажите Backend SSH target — deploy@203.0.113.10 со своим IP. Runtime directory — каталог на VPS, а не на Mac. Сохраните настройки и выполните Generate. Для local-медиа и отключённого backup отдельного файла секретов не требуется.

Для двух VPS создайте профиль с preset Separate frontend / backend. Подготовьте обе машины, заполните оба SSH target и создайте одинаковый Runtime directory на каждой. DNS admin направьте на frontend, API — на backend. Команды выпуска ниже остаются теми же.

3. Выполните первый запуск

На Mac, из корня example-project, с запущенным Docker Desktop. Если открыли новый терминал, сначала задайте пути к уже подготовленным SSH-файлам:

export DEPLOY_SSH_KEY_FILE="$HOME/.config/admingen/production/id_ed25519"
export DEPLOY_KNOWN_HOSTS_FILE="$HOME/.config/admingen/production/known_hosts"
bash ./deploy/control build --env production --output release-001.json
bash ./deploy/control provision --env production --release release-001.json --confirm production
bash ./deploy/control deploy --env production --release release-001.json --confirm production
bash ./deploy/control status --env production --json

Выполняйте команды по одной и переходите дальше только после успеха. Build собирает версию; provision проверяет окружение и готовит секреты, PostgreSQL и HTTPS; deploy применяет миграции и запускает приложение. После provision приложение ещё может показывать страницу обслуживания. Успешный deploy заканчивается status=complete; status должен показывать записанный текущий релиз, а проверка готовности — успешное состояние.

Build создаст release-001.json и рядом *.images.tar с образами backend, admin и служебных компонентов. Не переименовывайте архив и храните его рядом с JSON. Контроллер сам проверяет архив и доставляет его по SSH. На VPS проверенная копия сохраняется в <root>/image-archives/.

Это архив приложения, а не резервная копия БД или пользовательских изображений. Отдельный registry не требуется, но во время сборки Mac скачивает базовые образы и зависимости из интернета.

Для следующего раздела откройте отдельный терминал VPS через уже настроенный SSH:

ssh -i "$DEPLOY_SSH_KEY_FILE" -o IdentitiesOnly=yes \
  -o "UserKnownHostsFile=$DEPLOY_KNOWN_HOSTS_FILE" deploy@203.0.113.10

Используйте IP backend-VPS.

Создайте первого администратора

Для нового проекта без данных выполните на VPS под deploy или root:

docker ps --filter label=com.docker.compose.service=backend

Возьмите имя из столбца NAMES и замените им ИМЯ_BACKEND_КОНТЕЙНЕРА:

docker exec -it ИМЯ_BACKEND_КОНТЕЙНЕРА \
  admin bootstrap-superadmin --if-needed --login owner

Введите и подтвердите пароль длиной 12–128 байт UTF-8; ввод скрыт. Откройте https://admin.example.com со своим доменом и войдите как owner. Если суперадминистратор уже существует, эта команда не заменяет его и не сбрасывает пароль.

Если переносите заполненную БД из разработки, после успешного первого deploy перейдите к переносу данных в Docker-окружение. Импорт заменит новую БД, включая созданный аккаунт; после него используйте аккаунты из перенесённой базы.

Обновите приложение

Вернитесь в терминал Mac, в корень example-project. Подготовьте новые исходники: если изменения пришли из Git, выполните git pull --ff-only. При новом терминале экспортируйте два SSH-пути, как выше. Затем:

bash ./deploy/control build --env production --output release-002.json
bash ./deploy/control deploy --env production --release release-002.json --confirm production
bash ./deploy/control status --env production --json

Каждый build использует новый output; не перезаписывайте предыдущий релиз. Provision повторять не нужно. Ожидайте status=complete и новый текущий релиз в status. Сохраняйте JSON и архивы версий, к которым может понадобиться вернуться.

В этой инструкции backup отключён. Для данных отдельно настройте резервные копии; для хранения рабочих изображений вне VPS — S3.

Если выпуск остановился

В том же месте, где запускали control:

bash ./deploy/control status --env production --json
bash ./deploy/control logs --env production --service backend

Сохраните сообщение об ошибке и operation ID. Продолжение — в восстановлении операции. Не удаляйте каталог данных или state для повторной попытки. Ошибка первого deploy после миграций также требует разбора операции, даже если текущий релиз ещё не записан.