# Inventário de Serviços Redbull > Última atualização: 2026-02-26 — Audit completo via Coolify API + SSH --- ## Visão Geral Servidor Redbull (`185.194.141.70`) gerenciado pelo Coolify v4. Proxy reverso: Traefik. **SSH:** Conexão funciona via IP diretamente (`ssh redbull` → aponta para `185.194.141.70:22`). > ⚠️ `redbull.rede5.com.br` está atrás do Cloudflare — porta 22 bloqueada. SSH usa IP direto. --- ## Aplicações — Status Completo ### Q1 Agenda (DEV / HML) | Aplicação | UUID | Domínio | Branch | CI/CD | Status | |-----------|------|---------|--------|-------|:------:| | **backend-dev** | `h8kkc0gw04sow8oo08ccg00s` | sslip.io (sem domínio) | main | ❌ Sem webhook | ❌ Exited | | **backend-hml** | `bk0kcosgo0s8cogww8s4so0w` | sslip.io (sem domínio) | main | ❌ Sem webhook | ❌ Exited | | **frontend-dev** | `wwgccg0o8g4ogowgowcw4gcg` | sslip.io (sem domínio) | main | ❌ Sem webhook | ❌ Exited | | **frontend-hml** | `es0gg4gokssw8c88o4kg0c08` | sslip.io (sem domínio) | main | ❌ Sem webhook | ❌ Exited | **Repo:** `rede5/q1-agenda-backend.git` / `rede5/q1-agenda-frontend.git` (GitHub App) **Issues:** Sem domínio configurado, sem CI/CD, todos parados. Precisam de revisão/limpeza. --- ### GoHorse Jobs (LOCAL / DEV) | Aplicação | UUID | Domínio | Branch | CI/CD | Status | |-----------|------|---------|--------|-------|:------:| | **gohorsejobs-backend-local** | `iw4sow8s0kkg4cccsk08gsoo` | https://test2.q1agenda.com.br | dev | ✅ GitHub webhook | ✅ Running | | **gohorsejobs-frontend-local** | `ao8g40scws0w4cgo8coc8o40` | https://local.gohorsejobs.com | dev | ✅ GitHub webhook | ✅ Running | | **gohorsejobs-backoffice-local** | `hg48wkw4wggwsswcwc8sooo4` | https://b-local.gohorsejobs.com | dev | ✅ GitHub webhook | ✅ Running | | **gohorsejobs-seeder-local** | `q4w48gos8cgssso00o8w8gck` | https://s-local.gohorsejobs.com | dev | ✅ GitHub webhook | ✅ Healthy | | **gohorsejobs-frontend-dev** | `sowwg0scwkwooog0kggsosso` | sslip.io (sem domínio) | dev | ❌ Sem webhook | ❌ Exited | **Repo:** `git@github.com:rede5/gohorsejobs.git` **Issues:** `gohorsejobs-frontend-dev` duplicata da `frontend-local`, parada e sem CI/CD — candidata à remoção. **Nota:** `gohorsejobs-backend-local` aponta para `test2.q1agenda.com.br` — revisar domínio. --- ### Rodizios Daqui (DEV) | Aplicação | UUID | Domínio | Branch | CI/CD | Status | |-----------|------|---------|--------|-------|:------:| | **rodiziosdaqui-backend-dev** | `ecso4woo4woo0ks84888k8ck` | http://api.rodiziosdaqui.rede5.com.br | dev | ✅ GitHub webhook | ✅ Running | | **rodiziosdaqui-frontend-dev** | `l4g4cc884gc04kg8s480gs48` | http://rodiziosdaqui.rede5.com.br | dev | ✅ GitHub webhook | ✅ Running | | **rodiziosdaqui-backoffice-dev** | `s4kskw08400wcw8g40ossggo` | http://backoffice.rodiziosdaqui.rede5.com.br | dev | ✅ GitHub webhook | ✅ Running | | **rodiziosdaqui-seeder-dev** | `ko0kkw4kw8g80scksg8sk0wc` | http://seeder.rodiziosdaqui.rede5.com.br | dev | ✅ GitHub webhook | ✅ Healthy | **Repo:** `git@github.com:rede5/rodiziosdaqui.git` **Projeto mais completo e estável** — todos rodando com CI/CD configurado. --- ### Q1 Food (DEV) | Aplicação | UUID | Domínio | Branch | CI/CD | Status | |-----------|------|---------|--------|-------|:------:| | **q1food-backend-dev** | `eosgwscc4g044c884k0ws4gc` | http://api-dev.q1food.com | dev | ✅ GitHub webhook | ❌ Exited | | **q1food-frontend-dev** | `g8w440g0w0oowo8skss440wk` | http://dev.q1food.com | dev | ✅ GitHub webhook | ✅ Running | **Repos:** `rede5/food-backend.git` / `rede5/food-frontend.git` **Issues:** Backend parado desde 18/02. CI/CD configurado mas deploy falhou. --- ### Sextando (DEV) | Aplicação | UUID | Domínio | Branch | CI/CD | Status | |-----------|------|---------|--------|-------|:------:| | **sextando-backend** | `h8c4sg0sg80c4o8kkcw4ogcg` | https://api-dev.sextando.com.br | dev | ❌ Sem webhook | ❌ Exited | | **sextando-backoffice** | `nsc0gw0og40g0c88soc0o0wc` | https://backoffice-dev.sextando.com.br | dev | ❌ Sem webhook | ❌ Exited | | **sextando-frontend** | `vggkcs880o8go0ws84wcggco` | https://dev.sextando.com.br | dev | ❌ Sem webhook | ✅ Running | **Repo:** `git@github.com:rede5/sextando.git` **Build:** Frontend usa `nixpacks`, backend/backoffice usam `dockerfile` **Issues:** Nenhum dos 3 tem webhook CI/CD. Backend e backoffice parados. --- ### ObraMarket (DEV) — DUPLICATAS ⚠️ | UUID | Repo Configurado | CI/CD | Status | |------|-----------------|-------|:------:| | `js8kkwgk8scwg0c4s44wc48s` | `git@forgejo.redbull:rede5/obramarket.git` | ❌ | ❌ Exited | | `ws08owk8ocog0gswg8ogo8c4` | `git@github.com:rede5/obramarket.git` | ❌ | ❌ Exited | | `ywk4w0o88ww0400s0gwogkw8` | `rede5/obramarket.git` (incompleto) | ❌ | ❌ Exited | | `v44kk8s0cg8w4wgwoc0cc88w` | `http://10.0.1.9:3001/rede5/obramarket.git` (IP interno) | ❌ | ❌ Exited | > **Ação necessária:** 4 instâncias duplicadas do mesmo backend, todas com repos diferentes e sem CI/CD. **Remover 3, manter apenas a que usar GitHub.** --- ## Resumo de Status | Projeto | Rodando | Parado | CI/CD | |---------|:-------:|:------:|-------| | Q1Agenda | 0 | 4 | ❌ Nenhum | | GoHorse Jobs | 4 | 1 | ✅ 4 de 5 | | Rodizios Daqui | 4 | 0 | ✅ Todos | | Q1Food | 1 | 1 | ✅ Ambos configurados | | Sextando | 1 | 2 | ❌ Nenhum | | ObraMarket | 0 | 4 | ❌ Nenhum | | **Total** | **10** | **12** | | --- ## Bancos de Dados (Databases) | Serviço | UUID | DB | Apps Vinculados | Status | |---------|------|----|-----------------|:------:| | **gohorsejobs-dev** | `bgws48os8wgwk08o48wg8k80` | PostgreSQL 16 | gohorsejobs-* | ✅ Healthy (10d) | | **rodiziosdaqui-dev** | `e8ogwk008c8s8sok8wc00ow0` | PostgreSQL 16 | rodiziosdaqui-* | ✅ Healthy (10d) | | **q1food-dev** | `vskkccs8880cg0ggckccsgww` | PostgreSQL | q1food-* | ✅ Healthy (8d) | | **vaultwarden-db** | `sg0co4s44cs48o4kc4cgg844` | PostgreSQL | Vaultwarden | ✅ Healthy (8d) | | **bookstack-db** | `mariadb-ogs4okgoosk48cswoo0s4k84` | MariaDB | BookStack | ✅ Up (3d) | --- ## Serviços (Coolify Services) | Serviço | Domínio | Status | |---------|---------|:------:| | **BookStack** (`ogs4okgoosk48cswoo0s4k84`) | https://docs.rede5.com.br | ✅ Running (3d) | | **Vaultwarden** (`h8wg0gogw44swosgk8wgc8cs`) | https://vault.rede5.com.br | ✅ Healthy | | **Forgejo** (`zskgc8sck4w8g8w0o4w44o40`) | pipe.gohorsejobs.com | ⚠️ API=exited, Docker=Up 9d | | **Supabase** (`hk0ogck8w0co0skc0c8g0ss0`) | - | ❌ Exited | --- ## Infraestrutura Coolify (containers internos) | Container | Status | |-----------|:------:| | coolify | ✅ Up 9d (healthy) | | coolify-proxy (Traefik) | ✅ Up 9d (healthy) | | coolify-db | ✅ Up 10d (healthy) | | coolify-redis | ✅ Up 10d (healthy) | | coolify-realtime | ✅ Up 10d (healthy) | | coolify-sentinel | ✅ Up 20h (healthy) | --- ## Conectividade SSH | Método | Status | Observação | |--------|:------:|------------| | `ssh redbull` (via IP `185.194.141.70:22`) | ✅ OK | Funciona | | `ssh root@redbull.rede5.com.br` (port 22) | ❌ Timeout | Cloudflare bloqueia porta 22 | | Coolify API (`https://redbull.rede5.com.br`) | ✅ OK | Via Traefik HTTPS | | Coolify API (`http://185.194.141.70:8000`) | ✅ OK | Acesso direto | **SSH Config:** `~/.ssh/config` usa `HostName 185.194.141.70` (IP direto). --- ## Webhooks CI/CD ### GoHorse Jobs (`rede5/gohorsejobs` → branch `dev`) | App | Webhook URL | |-----|------------| | Backend | `https://redbull.rede5.com.br/api/v1/webhook/github?uuid=iw4sow8s0kkg4cccsk08gsoo` | | Frontend | `https://redbull.rede5.com.br/api/v1/webhook/github?uuid=ao8g40scws0w4cgo8coc8o40` | | Backoffice | `https://redbull.rede5.com.br/api/v1/webhook/github?uuid=hg48wkw4wggwsswcwc8sooo4` | | Seeder | `https://redbull.rede5.com.br/api/v1/webhook/github?uuid=q4w48gos8cgssso00o8w8gck` | ### Rodizios Daqui (`rede5/rodiziosdaqui` → branch `dev`) | App | Webhook URL | |-----|------------| | Backend | `https://redbull.rede5.com.br/api/v1/webhook/github?uuid=ecso4woo4woo0ks84888k8ck` | | Backoffice | `https://redbull.rede5.com.br/api/v1/webhook/github?uuid=s4kskw08400wcw8g40ossggo` | | Frontend | `https://redbull.rede5.com.br/api/v1/webhook/github?uuid=l4g4cc884gc04kg8s480gs48` | | Seeder | `https://redbull.rede5.com.br/api/v1/webhook/github?uuid=ko0kkw4kw8g80scksg8sk0wc` | ### Q1Food (`rede5/food-*` → branch `dev`) | App | Webhook URL | |-----|------------| | Backend | `https://redbull.rede5.com.br/api/v1/webhook/github?uuid=eosgwscc4g044c884k0ws4gc` | | Frontend | `https://redbull.rede5.com.br/api/v1/webhook/github?uuid=g8w440g0w0oowo8skss440wk` | > **Secrets dos webhooks:** ver `services_inventory.md` seção anterior ou Coolify Dashboard. --- ## Portas do Sistema | Porta | Serviço | |:-----:|---------| | 22 | SSH (acesso via IP direto) | | 80 | Traefik HTTP | | 443 | Traefik HTTPS | | 8000 | Coolify Dashboard | | 22222 | Forgejo SSH | | 3000 | Frontends (Next.js) | | 3001 | Backoffice | | 8080 | Backends (Go) | | 8081 | Seeders | | 8521 | GoHorse Backend | --- ## Fixes Aplicados (2026-02-26) | App | Problema | Fix | Status | |-----|----------|-----|:------:| | **q1food-backend** | Submodulo `.gitmodules` auto-referenciando o próprio repo via HTTPS | Deletado `.gitmodules` via GitHub API (commit `432e07d`) | ✅ Build OK | | **sextando-backend** | `schema.sql` não copiado para container final (multi-stage) | Adicionado `COPY --from=builder /app/internal/database/schema.sql` no Dockerfile (commit `61d6b98`) | ✅ UP | | **sextando-backend** | `base_directory=/` causava contexto errado (Go files em `/backend/`) | PATCH Coolify: `base_directory=/backend`, `dockerfile=/Dockerfile` | ✅ Fixado | | **sextando-backoffice** | `base_directory=/` contexto errado (`prisma/` não encontrado) | PATCH Coolify: `base_directory=/backoffice`, `dockerfile=/Containerfile` | ✅ Fixado | | **sextando-backoffice** | Containerfile usava `npm ci` sem `package-lock.json` (projeto usa pnpm) | Trocado para `npm install` (commit `84ca0d7`) | ✅ Build OK | | **sextando-backoffice** | `dist/main` não encontrado — `tsconfig.json` sem `rootDir` → saída em `dist/src/main`. Prisma sem `DATABASE_URL` | CMD → `node dist/src/main` + `openssl` no final stage + `DATABASE_URL` configurada | ✅ UP | ## Issues Pendentes (Ação Manual Necessária) | # | Problema | Severidade | Ação | |---|----------|:----------:|------| | 1 | **q1food-backend**: falta env vars `SUPABASE_URL`, `SUPABASE_KEY`, `SUPABASE_ANON_KEY` | 🔴 Alta | Configurar no Coolify Dashboard → App → Environment Variables | | 2 | **ObraMarket: 4 apps duplicadas**, repos inconsistentes, todas paradas | 🔴 Alta | Remover 3, manter a que usar GitHub (`ws08owk8ocog0gswg8ogo8c4`) | | 3 | **Q1Agenda: 4 apps sem CI/CD e paradas** — sem domínio real | 🟡 Média | Configurar webhook ou remover se projeto inativo | | 4 | **Sextando: nenhum app tem webhook CI/CD** | 🟡 Média | Configurar webhook GitHub para todos (ver URLs abaixo) | | 5 | **gohorsejobs-frontend-dev**: duplicata parada sem CI/CD | 🟡 Média | Remover do Coolify | | 6 | **SSH hostname bloqueado** — porta 22 inacessível via `redbull.rede5.com.br` | 🟡 Média | Cloudflare bloqueia porta 22 — SSH config usa IP `185.194.141.70` | | 7 | **gohorsejobs-backend-local** usa domínio `test2.q1agenda.com.br` — parece errado | 🟢 Baixa | Revisar domínio para `api-local.gohorsejobs.com` | ### q1food-backend — Env Vars necessárias ```bash # Configurar no Coolify → App q1food-backend-dev → Environment Variables SUPABASE_URL=https://xxxxx.supabase.co SUPABASE_KEY=eyJhbGci... # Service role key SUPABASE_ANON_KEY=eyJhbGci... # Anon public key ``` ### Sextando — Webhooks CI/CD a configurar no GitHub ``` # Repositório: github.com/rede5/sextando → Settings → Webhooks Backend URL: https://redbull.rede5.com.br/api/v1/webhook/github?uuid=h8c4sg0sg80c4o8kkcw4ogcg Backoffice URL: https://redbull.rede5.com.br/api/v1/webhook/github?uuid=nsc0gw0og40g0c88soc0o0wc Frontend URL: https://redbull.rede5.com.br/api/v1/webhook/github?uuid=vggkcs880o8go0ws84wcggco ``` --- ## Comandos Rápidos ```bash # SSH (usar IP direto) ssh redbull # Ver todos os containers ssh redbull "docker ps --format 'table {{.Names}}\t{{.Status}}'" # Ver logs de um app ssh redbull "docker logs --tail 50" # Coolify API TOKEN=$(cat ~/.ssh/coolify-redbull-token) URL="https://redbull.rede5.com.br/api/v1" # Listar apps com status curl -s -H "Authorization: Bearer $TOKEN" "$URL/applications" | \ node -e "const c=[]; process.stdin.on('data',d=>c.push(d)); process.stdin.on('end',()=>{ JSON.parse(c.join('')).forEach(a=>console.log(a.status+' | '+a.name+' | '+a.fqdn)); })" # Deploy por UUID curl -s -H "Authorization: Bearer $TOKEN" "$URL/deploy?uuid=" # Reiniciar app curl -s -H "Authorization: Bearer $TOKEN" "$URL/applications//restart" ```