Перейти к содержанию

How-to: задеплоить стек в Coolify

Каждый деплоимый стек (stacks/<имя>) = отдельный ресурс Coolify. Монорепо не ломает автодеплой: ресурс следит только за своей папкой.

Шаги

  1. New Resource → Docker Compose (from Git): репа shtrihme/event-bus-platform, ветка main.
  2. Base Directory = stacks/<имя> (для docs-site/reader-mcp — корень /, см. их README; им нужен docs/).
  3. Watch Paths = stacks/<имя>/** — push пересобирает только этот стек.
  4. Env — переменные из .env.example стека, значения из Infisical (секреты).
  5. Домены — в UI Coolify на нужный сервис/порт. Coolify сам цепляет сервис к proxy-сети.
  6. Deploy.

Автодеплой (один раз на репу)

Нужен GitHub webhook → Coolify (GitHub App или ручной вебхук) + включённый Auto Deploy. Без вебхука деплой только ручной.

Грабли (проверено на этой платформе)

  • Конфиги — в образ, не bind-mount. Coolify ремапит bind файла в директорию → «not a directory». Запекай конфиг (COPY в Dockerfile), как nats/caddy.
  • $ в env-значениях (bcrypt-хэши): экранируй $$--env-file интерполируется и съедает $<буквы>.
  • Мультисетевой сервис под доменом → Traefik может выбрать не ту сеть. Лейбл traefik.docker.network=coolify (как у nats) или одна сеть + домен в UI (как inngest-auth).
  • Postgres не меняет пароль на существующем томе — для смены сбрось том.
  • Дашборды без своей авторизации (Jaeger UI, Inngest) — за Basic Auth (Caddy-сайдкар, как inngest-auth) или не публиковать.

Порты доменов (текущие)

  • nats → 8080 (wss), inngest-auth → 8080 (дашборд за Basic Auth), windmill server → 8000, docs-site → 80, reader-mcp → 8080.
  • На 4222/8222/8289 домена нет (внутренняя сеть).