Первый тенант: от заказа до боевого URL за 5 минут
Что происходит после нажатия «Запустить»: какой VPS покупается, как ставится Caddy + Docker, как выпускается TLS-сертификат. Пошагово.
Когда клиент нажимает «Запустить тенант» в кабинете, в очередь jobs ставится задача deploy.provision. С этого момента wl-installer берёт на себя пять шагов и логирует каждый из них в deployment_events — клиент видит прогресс в реальном времени.
В этом гайде разберём, что делает каждый шаг, какие настройки на него влияют и что показывает в логе.
Шаг 1: выбор провайдера
wl-installer держит в registry готовые адаптеры для Hetzner, OVH, Vultr, DigitalOcean и Elistrax. При создании заказа клиент видит только те провайдеры, для которых в /admin/settings заведён рабочий токен (hetzner.token, ovh.app_key и т.д.). Если нужного провайдера нет в выпадайке — значит, оператор не залил ключ.
Регион и тип VPS подбираются по профилю продукта (lib profiles): минимальная конфигурация на старте, авто-скейл потом.
Шаг 2: создание VPS и SSH-доступ
Через API провайдера создаётся машина с base-образом Ubuntu 22.04, к ней прикрепляется наш SSH-ключ из ssh.private_key + ssh.public_key. Адаптеры провайдеров живут в api/internal/cloud — каждый реализует Provision(ctx, spec) → Server.
После того, как машина получила IP, мы ждём готовности SSH-сокета (TCP 22 поднимается). На Hetzner — обычно 25–40 секунд.
Шаг 3: установка софта и контейнеров
Через ansible-профиль (lib/profiles) устанавливаются docker, caddy и тянутся образы продукта из нашего Docker-registry. Имя образа берётся из product_versions.artifact_image: при is_current = true это всегда последний стабильный тег.
Конфиг продукта пишется в /opt/app/.env — секреты (DB-пароль, JWT) генерируются на машине и шифруются нашим vault.Encrypt при записи в платформенную БД, чтобы потом мы могли их восстановить.
Шаг 4: DNS и TLS
Если включён Cloudflare (cloudflare.token + cloudflare.zone_id), под бренд клиента создаётся A-запись с proxied = true. Это значит трафик идёт через CDN — DDoS-защита и кеширование статики из коробки.
Caddy на VPS клиента видит первый запрос на новый домен и автоматически выпускает Let's Encrypt-сертификат. Никаких ручных certbot.
Шаг 5: smoke-test и переключение статуса
Финальный health-чек: HTTP GET по app_url, ожидание 200. Если ок — статус deployment'а в БД становится running, клиент получает письмо с временным паролем админа.
Если не ок — статус failed, в deployment_events пишется stderr, оператор получает алерт в Telegram (если obs.telegram.bot_token настроен).
- 1Залить SSH-ключи и токен провайдера в /admin/settingsОткройте /admin/settings, заполните ssh.private_key, ssh.public_key, hetzner.token (или ovh/vultr/do/elistrax).
- 2Создать продукт и привязать инфра-профиль/admin/products/<id>/infra — указать CPU/RAM/диск + регион по умолчанию.
- 3Загрузить версию продуктаPOST /admin/products/<id>/versions с image-тегом, затем /promote/<version> чтобы пометить is_current.
- 4Дождаться 5-минутного цикла на VPS клиентаПрогресс виден в реальном времени в кабинете клиента и в /admin/installer/deployments/<id>/events.
Хотите развернуть свой тенант на wl-installer?
Аренда: 5 минут от заказа до боевого URL. Покупка с исходниками: 1–5 рабочих дней.