wl·solution
Гайды · Развёртывание
6 мин чтенияобновлено 2026-06-30

Первый тенант: от заказа до боевого 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. 1
    Залить SSH-ключи и токен провайдера в /admin/settings
    Откройте /admin/settings, заполните ssh.private_key, ssh.public_key, hetzner.token (или ovh/vultr/do/elistrax).
  2. 2
    Создать продукт и привязать инфра-профиль
    /admin/products/<id>/infra — указать CPU/RAM/диск + регион по умолчанию.
  3. 3
    Загрузить версию продукта
    POST /admin/products/<id>/versions с image-тегом, затем /promote/<version> чтобы пометить is_current.
  4. 4
    Дождаться 5-минутного цикла на VPS клиента
    Прогресс виден в реальном времени в кабинете клиента и в /admin/installer/deployments/<id>/events.
Связанные гайды

Хотите развернуть свой тенант на wl-installer?

Аренда: 5 минут от заказа до боевого URL. Покупка с исходниками: 1–5 рабочих дней.