В prod-local backend, система администрирования и PostgreSQL работают в Docker. Интерфейс и API доступны через HTTPS. Это отдельное окружение: у него своя БД и свои изображения.
В примере окружение называется local. Выполняйте команды в корне сгенерированного проекта.
1. Подготовьте инструменты и файлы
Нужны Bash, jq и запущенный Docker с Compose и Buildx. Docker-клиент и сервер должны поддерживать API 1.49+ и image inspect --platform; для локальных образов включите containerd image store.
В Generator UI откройте Deployment, включите Docker и Production deployment. CI provider можно оставить None. Сохраните и выполните Generate.
2. Создайте профиль local в UI
В Deployment → Deployment environments введите New profile name: local, выберите Local production (Docker) и нажмите Add profile.
Оставьте домены admin.local.test и api.local.test, порты 8443 и 9443, если они свободны. Allowed HTTPS origins должен содержать https://admin.local.test:8443. Runtime directory, каталог local-медиа и локальных backup будут рассчитаны от папки проекта: вручную вписывать абсолютные пути не нужно. Для prod-local резервные копии остаются локальными.
Если для проекта выбран S3, заполните его параметры в профиле по инструкции S3. Адаптер хранения един для проекта.
Нажмите Save deployment settings, затем Generate. Профиль появится в deploy/generated/environments/local.json; пустой deploy/custom/environments/local.json пока оставьте без изменений. Копировать пример в deploy/environments/ не требуется. Если там уже есть local.json, импортируйте его в UI и уберите ручной файл после сохранения и генерации: иначе он продолжит перекрывать профиль.
3. Добавьте локальные адреса
Добавьте строку в hosts-файл ОС. На macOS/Linux это /etc/hosts; для редактирования нужны права администратора:
127.0.0.1 admin.local.test api.local.test
Освободите порты 8443 и 9443, если их использует другое приложение.
4. Подготовьте и запустите окружение
Выполняйте команды по очереди, дожидаясь успешного завершения каждой:
bash ./deploy/control provision --env local
bash ./deploy/control up --env local
bash ./deploy/control status --env local --json
provision собирает образы, создаёт каталоги, ключи и локальные сертификаты. up применяет миграции и запускает приложение. status показывает текущий релиз и готовность компонентов.
Если команда завершилась ошибкой, сначала разберите её по инструкции восстановления операций. Не удаляйте deploy/.state/local: там хранятся данные окружения.
5. Откройте интерфейс
Адрес системы администрирования — https://admin.local.test:8443, API — https://api.local.test:9443.
Добавьте deploy/.state/local/pki/ui-ca.crt в доверенные сертификаты своей ОС или браузера. Это публичный сертификат локального центра сертификации; приватный ключ импортировать не нужно. Без настройки доверия браузер будет предупреждать о сертификате.
6. Создайте первого суперадминистратора
Посмотрите имена запущенных контейнеров:
docker ps --format 'table {{.Names}}\t{{.Status}}'
Найдите backend именно окружения local: в имени обычно есть название проекта, local и backend. Скопируйте его имя и подставьте вместо ИМЯ_КОНТЕЙНЕРА:
docker exec -it ИМЯ_КОНТЕЙНЕРА admin bootstrap-superadmin --if-needed --login owner
Введите и повторите пароль длиной 12–128 байт UTF-8. Ввод скрыт. Если активный суперадминистратор уже есть, команда ничего не создаст. Войдите в интерфейс с этим аккаунтом: аккаунт Generator UI для него не подходит.
Остановка и повторный запуск
bash ./deploy/control down --env local
bash ./deploy/control up --env local
Остановка сохраняет БД, изображения и историю. up запускает уже записанную версию, а не собирает изменённые исходники.
Логи можно открыть так:
bash ./deploy/control logs --env local --service backend
Вместо backend доступны frontend и postgres.
Обновление
После изменения модели выполните Generate, затем соберите и примените новую версию:
bash ./deploy/control build --env local --output local-release-02.json
bash ./deploy/control deploy --env local --release local-release-02.json --confirm local
local-release-02.json создаст команда build. Не пишите его вручную; для следующей сборки выбирайте новое имя. Подробности — обновление приложения.