How-to: задеплоить стек в Coolify¶
Каждый деплоимый стек (stacks/<имя>) = отдельный ресурс Coolify. Монорепо не
ломает автодеплой: ресурс следит только за своей папкой.
Шаги¶
- New Resource → Docker Compose (from Git): репа
shtrihme/event-bus-platform, веткаmain. - Base Directory =
stacks/<имя>(для docs-site/reader-mcp — корень/, см. их README; им нуженdocs/). - Watch Paths =
stacks/<имя>/**— push пересобирает только этот стек. - Env — переменные из
.env.exampleстека, значения из Infisical (секреты). - Домены — в UI Coolify на нужный сервис/порт. Coolify сам цепляет сервис к proxy-сети.
- 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 домена нет (внутренняя сеть).