Compare commits
2 Commits
claude/wip
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c3550384ba | |||
| dfb7207001 |
122
CLAUDE.md
122
CLAUDE.md
@ -12,21 +12,37 @@ App web pro casamento de **Stefanie & Leandro**. Convidados escaneiam um QR Code
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. Arquitetura: 3 repositórios / 3 stacks Docker Compose
|
## 2. Arquitetura: um repositório por stack Docker Compose
|
||||||
|
|
||||||
Cada stack é um repositório git separado, com seu próprio `docker-compose.yml` isolado. Os 3 compartilham uma **network Docker externa** chamada `infra-net`.
|
Cada stack é um repositório git separado, com seu próprio compose isolado. Todas compartilham uma **network Docker externa** chamada `infra-net`.
|
||||||
|
|
||||||
```
|
```
|
||||||
lronetto-main/ Postgres + Redis + MinIO + pgAdmin + Caddy (+ orquestrador)
|
lronetto-main/ Postgres + Redis + MinIO + pgAdmin + Caddy (+ orquestrador)
|
||||||
lronetto-gitea/ Gitea + Actions runner
|
lronetto-gitea/ Gitea + Actions runner
|
||||||
lronetto-wedding/ App FastAPI + sidecars de backup (+ deploy CI)
|
lronetto-wedding/ App FastAPI + sidecars de backup (+ deploy CI)
|
||||||
|
lronetto-finance/ App FastAPI (Pluggy / open finance) (+ deploy CI)
|
||||||
|
lronetto-bom-vizinho/ App FastAPI + mobile (bairro/vizinhança) (+ deploy CI)
|
||||||
|
lronetto-claudeweb/ API FastAPI + SPA + workers efêmeros (+ deploy CI)
|
||||||
```
|
```
|
||||||
|
|
||||||
No disco os 3 ficam como **diretórios irmãos** (ex.: `C:\Users\lrone\code\lronetto-*`). O `Makefile` orquestrador (neste repo, `lronetto-main`) referencia os outros dois por caminho relativo (`../lronetto-gitea`, `../lronetto-wedding`) — sobrescrevível via `GITEA_DIR=` / `WEDDING_DIR=`.
|
No disco todos ficam como **diretórios irmãos** (ex.: `C:\Users\lrone\code\lronetto-*`). O `Makefile` orquestrador (neste repo, `lronetto-main`) referencia os outros por caminho relativo — sobrescrevível via `GITEA_DIR=` / `WEDDING_DIR=` / `FINANCE_DIR=` / `BOMVIZINHO_DIR=` / `CLAUDEWEB_DIR=`.
|
||||||
|
|
||||||
|
**Cada repo põe o compose e o `.env` num lugar diferente** — daí os `-f` / `--env-file` explícitos no Makefile orquestrador em vez de um padrão único:
|
||||||
|
|
||||||
|
| Repo | compose | `.env` |
|
||||||
|
|---|---|---|
|
||||||
|
| gitea, wedding, finance | `docker-compose.yml` (raiz) | raiz |
|
||||||
|
| bom-vizinho | `infra/docker-compose.yml` | `infra/.env` |
|
||||||
|
| claudeweb | `deploy/compose.yml` | raiz |
|
||||||
|
|
||||||
|
Mais duas pegadinhas do **claudeweb**, também já tratadas no orquestrador:
|
||||||
|
|
||||||
|
- O `up` dele builda antes a imagem do worker efêmero (`make worker-image`), que **não é serviço do compose** — por isso `up-claudeweb` delega pro Makefile do próprio repo em vez de chamar `docker compose` direto.
|
||||||
|
- Declara uma segunda network external, `claudeweb-workers` (isola os workers efêmeros da `infra-net`). O alvo `network-claudeweb` a cria reusando o `network.sh` via `INFRA_NETWORK=`.
|
||||||
|
|
||||||
**Por que repos separados**: cada stack tem ciclo de vida, histórico e CI próprios. Subir/derrubar ou versionar uma não afeta as outras. Gitea pode ser desativado sem tocar no app.
|
**Por que repos separados**: cada stack tem ciclo de vida, histórico e CI próprios. Subir/derrubar ou versionar uma não afeta as outras. Gitea pode ser desativado sem tocar no app.
|
||||||
|
|
||||||
**`lronetto-main` é o "platform layer"** que os consumidores usam. `gitea` e `wedding` conectam ao Postgres e MinIO de lá pela `infra-net`.
|
**`lronetto-main` é o "platform layer"** que os consumidores usam. `gitea`, `wedding`, `finance`, `bom-vizinho` e `claudeweb` conectam ao Postgres/Redis/MinIO de lá pela `infra-net`, e são expostos pelo Caddy de lá.
|
||||||
|
|
||||||
> Histórico: nasceu como monorepo `wedding-app` (branch `main`) com tudo em `infra/{main,gitea,wedding_photo}/`. Foi dividido em 3 repos (fresh start, sem histórico herdado — o monorepo original fica arquivado como backup).
|
> Histórico: nasceu como monorepo `wedding-app` (branch `main`) com tudo em `infra/{main,gitea,wedding_photo}/`. Foi dividido em 3 repos (fresh start, sem histórico herdado — o monorepo original fica arquivado como backup).
|
||||||
|
|
||||||
@ -63,7 +79,7 @@ Três repos irmãos no mesmo diretório pai:
|
|||||||
```
|
```
|
||||||
lronetto-main/ # PLATFORM LAYER + ORQUESTRADOR (este repo)
|
lronetto-main/ # PLATFORM LAYER + ORQUESTRADOR (este repo)
|
||||||
├── .gitignore
|
├── .gitignore
|
||||||
├── Makefile # Orquestra as 3 stacks (refs ../lronetto-{gitea,wedding})
|
├── Makefile # Orquestra as stacks (refs ../lronetto-{gitea,wedding,finance,claudeweb})
|
||||||
├── network.sh # Cria infra-net (idempotente)
|
├── network.sh # Cria infra-net (idempotente)
|
||||||
├── CLAUDE.md # Este arquivo
|
├── CLAUDE.md # Este arquivo
|
||||||
├── docker-compose.yml
|
├── docker-compose.yml
|
||||||
@ -79,7 +95,7 @@ lronetto-gitea/ # GIT + CI
|
|||||||
├── .env.example
|
├── .env.example
|
||||||
└── runner/Dockerfile # act_runner + docker-cli
|
└── runner/Dockerfile # act_runner + docker-cli
|
||||||
|
|
||||||
lronetto-wedding/ # APLICAÇÃO
|
lronetto-wedding/ # APLICAÇÃO (fotos do casamento)
|
||||||
├── .gitignore
|
├── .gitignore
|
||||||
├── docker-compose.yml # app + postgres-backup + media-backup
|
├── docker-compose.yml # app + postgres-backup + media-backup
|
||||||
├── .env.example
|
├── .env.example
|
||||||
@ -111,25 +127,66 @@ lronetto-wedding/ # APLICAÇÃO
|
|||||||
└── backups/ # destino dos sidecars (gitignored)
|
└── backups/ # destino dos sidecars (gitignored)
|
||||||
├── postgres/
|
├── postgres/
|
||||||
└── media/
|
└── media/
|
||||||
|
|
||||||
|
lronetto-finance/ # APLICAÇÃO (open finance via Pluggy)
|
||||||
|
├── docker-compose.yml # serviço único: finance_app
|
||||||
|
├── Dockerfile, Makefile, .env.example
|
||||||
|
├── .gitea/workflows/ # CI: build + push da imagem, deploy via SSH
|
||||||
|
├── apps/{api,web}/ # FastAPI + Vite/React
|
||||||
|
└── infra-snippets/ # trechos a colar no lronetto-main (Caddy + init do postgres)
|
||||||
|
|
||||||
|
lronetto-bom-vizinho/ # APLICAÇÃO (bairro / vizinhança)
|
||||||
|
├── infra/
|
||||||
|
│ ├── docker-compose.yml # stack "plataforma" (api, plugada na infra-net)
|
||||||
|
│ ├── docker-compose.dev.yml # stack dev standalone (pg+redis+minio próprios)
|
||||||
|
│ └── .env.example # o .env vive AQUI, não na raiz
|
||||||
|
├── Makefile # up/down/deploy + up-dev standalone
|
||||||
|
├── backend/ # FastAPI + alembic (migrations)
|
||||||
|
├── mobile/ # app mobile
|
||||||
|
└── docs/DEPLOY.md # runbook de deploy e pré-requisitos da plataforma
|
||||||
|
|
||||||
|
lronetto-claudeweb/ # APLICAÇÃO (Claude Code via web)
|
||||||
|
├── deploy/
|
||||||
|
│ ├── compose.yml # api + web + worker-proxy (.env fica na RAIZ)
|
||||||
|
│ ├── Caddyfile.snippet # bloco code.lronetto.com p/ o Caddy do main
|
||||||
|
│ └── proxy/ # tinyproxy: egress dos workers
|
||||||
|
├── backend/ # FastAPI (orquestra os workers via docker.sock)
|
||||||
|
├── frontend/ # Vite/React SPA (servida por nginx)
|
||||||
|
├── worker/ # imagem efêmera, fora do compose (make worker-image)
|
||||||
|
└── migrations/ # SQL puro
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 5. Network e roteamento
|
## 5. Network e roteamento
|
||||||
|
|
||||||
### Network
|
### Networks
|
||||||
`infra-net` é **external**. Criada pelo `network.sh` (chamada por `make network`). Containers de stacks diferentes se enxergam por nome via DNS interno do Docker.
|
`infra-net` é **external**. Criada pelo `network.sh` (chamada por `make network`). Containers de stacks diferentes se enxergam por nome via DNS interno do Docker.
|
||||||
|
|
||||||
|
`claudeweb-workers` é uma segunda network external, usada só pelo claudeweb: os workers efêmeros sobem **apenas** nela, isolados da `infra-net` (egress via `worker-proxy`). Criada por `make network-claudeweb`. Os containers da stack main que os workers precisam alcançar (`redis`, `gitea`, `minio`) têm que ser **conectados manualmente** a ela — ver README do claudeweb:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker network connect claudeweb-workers redis
|
||||||
|
docker network connect claudeweb-workers gitea
|
||||||
|
docker network connect claudeweb-workers minio
|
||||||
|
```
|
||||||
|
|
||||||
### Container names fixos
|
### Container names fixos
|
||||||
- `postgres`, `redis`, `minio`, `pgadmin`, `caddy` (stack main)
|
- `postgres`, `redis`, `minio`, `pgadmin`, `caddy` (stack main)
|
||||||
- `gitea`, `gitea_runner` (stack gitea)
|
- `gitea`, `gitea_runner` (stack gitea)
|
||||||
- `wedding_app`, `wedding_pg_backup`, `wedding_media_backup` (stack wedding_photo)
|
- `wedding_app`, `wedding_pg_backup`, `wedding_media_backup` (stack wedding)
|
||||||
|
- `finance_app` (stack finance)
|
||||||
|
- `bomvizinho_api` (stack bom-vizinho)
|
||||||
|
- `claudeweb-api`, `claudeweb-web`, `claudeweb-worker-proxy` (stack claudeweb) — os workers efêmeros sobem e morrem com nome próprio por sessão
|
||||||
|
|
||||||
### URLs (com `DOMAIN_BASE`)
|
### URLs (com `DOMAIN_BASE`)
|
||||||
|
|
||||||
| Hostname | Serve |
|
| Hostname | Serve |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `https://wedding.{DOMAIN_BASE}` | Site dos noivos (uploads + galeria + admin) |
|
| `https://wedding.{DOMAIN_BASE}` | Site dos noivos (uploads + galeria + admin) |
|
||||||
|
| `https://finance.{DOMAIN_BASE}` | App de finanças (Pluggy) — rota Caddy pendente, ver §9 |
|
||||||
|
| `https://api.bomvizinho.{DOMAIN_BASE}` | API do bom-vizinho — rota Caddy pendente, ver §9 |
|
||||||
|
| `https://code.lronetto.com` | claudeweb (API + SPA) — rota Caddy pendente, ver §9 |
|
||||||
| `https://gitea.{DOMAIN_BASE}` | Git hosting + Actions |
|
| `https://gitea.{DOMAIN_BASE}` | Git hosting + Actions |
|
||||||
| `https://pgadmin.{DOMAIN_BASE}` | Web UI dos bancos |
|
| `https://pgadmin.{DOMAIN_BASE}` | Web UI dos bancos |
|
||||||
| `https://minio.{DOMAIN_BASE}` | Console admin do MinIO |
|
| `https://minio.{DOMAIN_BASE}` | Console admin do MinIO |
|
||||||
@ -139,7 +196,7 @@ lronetto-wedding/ # APLICAÇÃO
|
|||||||
### `DOMAIN_BASE`
|
### `DOMAIN_BASE`
|
||||||
- **Dev local**: `localhost` → Caddy emite cert interno automático pra `*.localhost`
|
- **Dev local**: `localhost` → Caddy emite cert interno automático pra `*.localhost`
|
||||||
- **Produção**: domínio real (ex.: `lronetto.com`) → Let's Encrypt automático
|
- **Produção**: domínio real (ex.: `lronetto.com`) → Let's Encrypt automático
|
||||||
- Mudar `DOMAIN_BASE` requer **down + up** das 3 stacks (envs lidos no boot)
|
- Mudar `DOMAIN_BASE` requer **down + up** de todas as stacks (envs lidos no boot)
|
||||||
|
|
||||||
### Hairpin / `extra_hosts`
|
### Hairpin / `extra_hosts`
|
||||||
`wedding_app` tem `extra_hosts: media.{DOMAIN_BASE}:host-gateway` e `wedding.{DOMAIN_BASE}:host-gateway` pra que, mesmo dentro do container, ele resolva esses hostnames pro Docker host gateway → Caddy. Assim assinaturas S3 fecham (signing host == host que o browser usa pra PUT).
|
`wedding_app` tem `extra_hosts: media.{DOMAIN_BASE}:host-gateway` e `wedding.{DOMAIN_BASE}:host-gateway` pra que, mesmo dentro do container, ele resolva esses hostnames pro Docker host gateway → Caddy. Assim assinaturas S3 fecham (signing host == host que o browser usa pra PUT).
|
||||||
@ -149,24 +206,32 @@ lronetto-wedding/ # APLICAÇÃO
|
|||||||
## 6. Comandos
|
## 6. Comandos
|
||||||
|
|
||||||
### Orquestrador (`lronetto-main/Makefile`)
|
### Orquestrador (`lronetto-main/Makefile`)
|
||||||
Sobe/derruba as 3 stacks de uma vez. Precisa que `lronetto-gitea` e
|
Sobe/derruba todas as stacks de uma vez. Precisa que os outros repos estejam
|
||||||
`lronetto-wedding` estejam como diretórios irmãos (ou ajuste `GITEA_DIR=` /
|
como diretórios irmãos (ou ajuste `GITEA_DIR=` / `WEDDING_DIR=` /
|
||||||
`WEDDING_DIR=`).
|
`FINANCE_DIR=` / `CLAUDEWEB_DIR=`).
|
||||||
```bash
|
```bash
|
||||||
make help # lista tudo
|
make help # lista tudo
|
||||||
make up # network + main + gitea + wedding (na ordem)
|
make up # network + main + gitea + wedding + finance + bomvizinho + claudeweb
|
||||||
make down # inverso
|
make down # inverso
|
||||||
make restart # down + up
|
make restart # down + up
|
||||||
make status # ps das 3 stacks
|
make status # ps de todas as stacks
|
||||||
|
|
||||||
make up-main # só infra base (este repo)
|
make up-main # só infra base (este repo)
|
||||||
make up-gitea
|
make up-gitea
|
||||||
make up-wedding # rebuilda imagem do app
|
make up-wedding # rebuilda imagem do app
|
||||||
|
make up-finance # rebuilda imagem do app
|
||||||
|
make up-bomvizinho # rebuilda imagem do app (compose e .env em infra/)
|
||||||
|
make up-claudeweb # delega pro Makefile do repo (builda o worker-image antes)
|
||||||
|
|
||||||
make rebuild-wedding # build --no-cache + up
|
make rebuild-{wedding,finance,bomvizinho,claudeweb} # build --no-cache + up
|
||||||
make down-{main,gitea,wedding}
|
make down-{main,gitea,wedding,finance,bomvizinho,claudeweb}
|
||||||
make logs-{main,gitea,wedding}
|
make logs-{main,gitea,wedding,finance,bomvizinho,claudeweb}
|
||||||
make pull-{main,gitea,wedding}
|
make pull-{main,gitea,wedding,finance,bomvizinho,claudeweb}
|
||||||
|
|
||||||
|
make network # cria infra-net
|
||||||
|
make network-claudeweb # cria claudeweb-workers
|
||||||
|
make clone-claudeweb # clona o repo do claudeweb como irmão
|
||||||
|
make clone-bomvizinho # idem pro bom-vizinho
|
||||||
```
|
```
|
||||||
|
|
||||||
### App wedding (`lronetto-wedding/Makefile`)
|
### App wedding (`lronetto-wedding/Makefile`)
|
||||||
@ -315,6 +380,23 @@ Setup (1ª vez):
|
|||||||
|
|
||||||
## 9. Gotchas conhecidos
|
## 9. Gotchas conhecidos
|
||||||
|
|
||||||
|
### O platform layer ainda não conhece finance, bom-vizinho nem claudeweb (pendente)
|
||||||
|
`caddy/Caddyfile` (neste repo) tem blocos só pra `gitea`, `wedding`, `pgadmin`, `minio` e `media`. E `postgres/init/01-create-databases.sh` cria role/DB só pra wedding e gitea. Falta, por app:
|
||||||
|
|
||||||
|
**finance** — snippets prontos no próprio repo:
|
||||||
|
- `../lronetto-finance/infra-snippets/caddy-finance.snippet` → `caddy/Caddyfile`
|
||||||
|
- `../lronetto-finance/infra-snippets/postgres-finance-db.snippet.sh` → `postgres/init/01-create-databases.sh`
|
||||||
|
|
||||||
|
**claudeweb**:
|
||||||
|
- `../lronetto-claudeweb/deploy/Caddyfile.snippet` → `caddy/Caddyfile`
|
||||||
|
|
||||||
|
**bom-vizinho** — não traz snippet pronto; ver `../lronetto-bom-vizinho/docs/DEPLOY.md`. Precisa de:
|
||||||
|
- bloco `api.bomvizinho.{DOMAIN_BASE}` → `bomvizinho_api:8000` no `caddy/Caddyfile`
|
||||||
|
- role + DB `bomvizinho` **com PostGIS** — e a imagem atual (`postgres:16-alpine`) **não traz PostGIS**: exige trocar por `postgis/postgis:16-x`, o que é troca de imagem com `PGDATA` já populado (fazer com backup na mão)
|
||||||
|
- bucket `bomvizinho-media` no MinIO (`minio/init.sh`)
|
||||||
|
|
||||||
|
Enquanto não forem aplicados, `make up-finance` / `make up-bomvizinho` / `make up-claudeweb` sobem os containers mas eles não ficam acessíveis por HTTPS (e falham ao conectar no banco). Lembre que o init do postgres **só roda com `PGDATA` vazio** — em banco já existente, crie role/DB manualmente (ver abaixo).
|
||||||
|
|
||||||
### Postgres init script só roda na 1ª vez
|
### Postgres init script só roda na 1ª vez
|
||||||
`postgres/init/01-create-databases.sh` (neste repo, `lronetto-main`) é executado pelo entrypoint do postgres **apenas quando `PGDATA` está vazio**. Pra "rerodar":
|
`postgres/init/01-create-databases.sh` (neste repo, `lronetto-main`) é executado pelo entrypoint do postgres **apenas quando `PGDATA` está vazio**. Pra "rerodar":
|
||||||
```bash
|
```bash
|
||||||
@ -388,8 +470,10 @@ O `extra_hosts: host-gateway` pra `media.{DOMAIN_BASE}` faz o container resolver
|
|||||||
6. **Deploy CI + rename main**: workflow Gitea Actions de deploy via SSH; branch renomeada pra `main`.
|
6. **Deploy CI + rename main**: workflow Gitea Actions de deploy via SSH; branch renomeada pra `main`.
|
||||||
7. **Split em 3 repos**: `lronetto-main` + `lronetto-gitea` + `lronetto-wedding` (fresh start). Orquestrador no main, deploy CI no wedding. Monorepo `wedding-app` arquivado.
|
7. **Split em 3 repos**: `lronetto-main` + `lronetto-gitea` + `lronetto-wedding` (fresh start). Orquestrador no main, deploy CI no wedding. Monorepo `wedding-app` arquivado.
|
||||||
|
|
||||||
|
8. **Novas apps na plataforma**: `lronetto-finance` (open finance via Pluggy), `lronetto-bom-vizinho` (bairro/vizinhança, precisa de PostGIS) e `lronetto-claudeweb` (Claude Code via web, com workers efêmeros em rede isolada). As três entraram no Makefile orquestrador; a integração delas com Caddy/Postgres/MinIO deste repo ainda não foi feita (§9).
|
||||||
|
|
||||||
Repos / branches:
|
Repos / branches:
|
||||||
- `lronetto-main`, `lronetto-gitea`, `lronetto-wedding` (atuais; default branch `main`)
|
- `lronetto-main`, `lronetto-gitea`, `lronetto-wedding`, `lronetto-finance`, `lronetto-bom-vizinho`, `lronetto-claudeweb` (atuais; default branch `main`)
|
||||||
- Arquivados no monorepo `wedding-app`: `claude/wedding-qrcode-photos-C0PQt` (Cloudflare original), `claude/docker-vps-migration` (1ª migração Docker Node)
|
- Arquivados no monorepo `wedding-app`: `claude/wedding-qrcode-photos-C0PQt` (Cloudflare original), `claude/docker-vps-migration` (1ª migração Docker Node)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
133
Makefile
133
Makefile
@ -1,27 +1,53 @@
|
|||||||
.PHONY: help network up down restart status \
|
.PHONY: help network network-claudeweb up down restart status \
|
||||||
up-main up-gitea up-wedding \
|
up-main up-gitea up-wedding up-finance up-bomvizinho up-claudeweb \
|
||||||
down-main down-gitea down-wedding \
|
down-main down-gitea down-wedding down-finance down-bomvizinho down-claudeweb \
|
||||||
logs-main logs-gitea logs-wedding \
|
logs-main logs-gitea logs-wedding logs-finance logs-bomvizinho logs-claudeweb \
|
||||||
pull-main pull-gitea pull-wedding \
|
pull-main pull-gitea pull-wedding pull-finance pull-bomvizinho pull-claudeweb \
|
||||||
rebuild-wedding
|
rebuild-wedding rebuild-finance rebuild-bomvizinho rebuild-claudeweb \
|
||||||
|
clone-claudeweb clone-bomvizinho
|
||||||
|
|
||||||
# Orquestrador das 3 stacks. `lronetto-main` é o "platform layer"
|
# Orquestrador das stacks. `lronetto-main` é o "platform layer"
|
||||||
# (postgres + redis + minio + pgadmin + caddy). Os repos lronetto-gitea e
|
# (postgres + redis + minio + pgadmin + caddy). Os demais repos são clonados
|
||||||
# lronetto-wedding são clonados como diretórios IRMÃOS e referenciados aqui.
|
# como diretórios IRMÃOS e referenciados aqui. Ajuste os caminhos abaixo se
|
||||||
# Ajuste os caminhos abaixo se usar outro layout no disco.
|
# usar outro layout no disco.
|
||||||
|
#
|
||||||
|
# lronetto-gitea https://gitea.lronetto.com/lronetto/lronetto-gitea.git
|
||||||
|
# lronetto-wedding https://gitea.lronetto.com/lronetto/lronetto-wedding.git
|
||||||
|
# lronetto-finance https://gitea.lronetto.com/lronetto/lronetto-finance.git
|
||||||
|
# lronetto-bom-vizinho https://gitea.lronetto.com/lronetto/lronetto-bom-vizinho.git
|
||||||
|
# lronetto-claudeweb https://gitea.lronetto.com/lronetto/lronetto-claudeweb.git
|
||||||
|
#
|
||||||
|
# Cada repo põe o compose e o .env num lugar diferente — daí os -f/--env-file
|
||||||
|
# explícitos abaixo em vez de um padrão único.
|
||||||
|
|
||||||
NET := infra-net
|
NET := infra-net
|
||||||
|
# Rede isolada dos workers efêmeros do claudeweb (declarada external no compose dele).
|
||||||
|
NET_WORKERS := claudeweb-workers
|
||||||
|
|
||||||
WEDDING_DIR ?= ../lronetto-wedding
|
WEDDING_DIR ?= ../lronetto-wedding
|
||||||
GITEA_DIR ?= ../lronetto-gitea
|
GITEA_DIR ?= ../lronetto-gitea
|
||||||
|
FINANCE_DIR ?= ../lronetto-finance
|
||||||
|
BOMVIZINHO_DIR ?= ../lronetto-bom-vizinho
|
||||||
|
CLAUDEWEB_DIR ?= ../lronetto-claudeweb
|
||||||
|
|
||||||
|
CLAUDEWEB_REPO ?= https://gitea.lronetto.com/lronetto/lronetto-claudeweb.git
|
||||||
|
BOMVIZINHO_REPO ?= https://gitea.lronetto.com/lronetto/lronetto-bom-vizinho.git
|
||||||
|
|
||||||
DC_MAIN := docker compose -f docker-compose.yml --env-file .env
|
DC_MAIN := docker compose -f docker-compose.yml --env-file .env
|
||||||
DC_GITEA := docker compose -f $(GITEA_DIR)/docker-compose.yml --env-file $(GITEA_DIR)/.env
|
DC_GITEA := docker compose -f $(GITEA_DIR)/docker-compose.yml --env-file $(GITEA_DIR)/.env
|
||||||
DC_WEDDING := docker compose -f $(WEDDING_DIR)/docker-compose.yml --env-file $(WEDDING_DIR)/.env
|
DC_WEDDING := docker compose -f $(WEDDING_DIR)/docker-compose.yml --env-file $(WEDDING_DIR)/.env
|
||||||
|
DC_FINANCE := docker compose -f $(FINANCE_DIR)/docker-compose.yml --env-file $(FINANCE_DIR)/.env
|
||||||
|
# bom-vizinho: compose E .env vivem em infra/.
|
||||||
|
DC_BOMVIZINHO := docker compose -f $(BOMVIZINHO_DIR)/infra/docker-compose.yml --env-file $(BOMVIZINHO_DIR)/infra/.env
|
||||||
|
# claudeweb: compose vive em deploy/compose.yml e o .env fica na RAIZ do repo.
|
||||||
|
DC_CLAUDEWEB := docker compose -f $(CLAUDEWEB_DIR)/deploy/compose.yml --env-file $(CLAUDEWEB_DIR)/.env
|
||||||
|
|
||||||
help:
|
help:
|
||||||
@echo "Stacks: main (este repo) | gitea ($(GITEA_DIR)) | wedding ($(WEDDING_DIR))"
|
@echo "Stacks: main (este repo) | gitea ($(GITEA_DIR)) | wedding ($(WEDDING_DIR))"
|
||||||
|
@echo " finance ($(FINANCE_DIR)) | bomvizinho ($(BOMVIZINHO_DIR))"
|
||||||
|
@echo " claudeweb ($(CLAUDEWEB_DIR))"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo " make up Sobe tudo na ordem (main -> gitea -> wedding)"
|
@echo " make up Sobe tudo (main -> gitea -> wedding -> finance -> bomvizinho -> claudeweb)"
|
||||||
@echo " make down Desce tudo na ordem inversa"
|
@echo " make down Desce tudo na ordem inversa"
|
||||||
@echo " make restart down + up"
|
@echo " make restart down + up"
|
||||||
@echo " make status ps de todas as stacks"
|
@echo " make status ps de todas as stacks"
|
||||||
@ -29,18 +55,27 @@ help:
|
|||||||
@echo " make up-main Sobe só a stack main"
|
@echo " make up-main Sobe só a stack main"
|
||||||
@echo " make up-gitea Sobe só o gitea"
|
@echo " make up-gitea Sobe só o gitea"
|
||||||
@echo " make up-wedding Build + up do app wedding"
|
@echo " make up-wedding Build + up do app wedding"
|
||||||
@echo " make rebuild-wedding Force rebuild do app wedding"
|
@echo " make up-finance Build + up do app finance"
|
||||||
@echo " make down-{main,gitea,wedding}"
|
@echo " make up-bomvizinho Build + up do app bom-vizinho"
|
||||||
@echo " make logs-{main,gitea,wedding}"
|
@echo " make up-claudeweb Build (incl. worker-image) + up do claudeweb"
|
||||||
@echo " make pull-{main,gitea,wedding}"
|
@echo " make rebuild-{wedding,finance,bomvizinho,claudeweb}"
|
||||||
|
@echo " make down-{main,gitea,wedding,finance,bomvizinho,claudeweb}"
|
||||||
|
@echo " make logs-{main,gitea,wedding,finance,bomvizinho,claudeweb}"
|
||||||
|
@echo " make pull-{main,gitea,wedding,finance,bomvizinho,claudeweb}"
|
||||||
|
@echo " make clone-claudeweb Clona $(CLAUDEWEB_REPO)"
|
||||||
|
@echo " make clone-bomvizinho Clona $(BOMVIZINHO_REPO)"
|
||||||
@echo " make network Cria a network external '$(NET)' (idempotente)"
|
@echo " make network Cria a network external '$(NET)' (idempotente)"
|
||||||
|
@echo " make network-claudeweb Cria a network external '$(NET_WORKERS)' (idempotente)"
|
||||||
|
|
||||||
network:
|
network:
|
||||||
@./network.sh
|
@./network.sh
|
||||||
|
|
||||||
up: network up-main up-gitea up-wedding
|
network-claudeweb:
|
||||||
|
@INFRA_NETWORK=$(NET_WORKERS) ./network.sh
|
||||||
|
|
||||||
down: down-wedding down-gitea down-main
|
up: network up-main up-gitea up-wedding up-finance up-bomvizinho up-claudeweb
|
||||||
|
|
||||||
|
down: down-claudeweb down-bomvizinho down-finance down-wedding down-gitea down-main
|
||||||
|
|
||||||
restart: down up
|
restart: down up
|
||||||
|
|
||||||
@ -48,6 +83,9 @@ status:
|
|||||||
@$(DC_MAIN) ps || true
|
@$(DC_MAIN) ps || true
|
||||||
@$(DC_GITEA) ps || true
|
@$(DC_GITEA) ps || true
|
||||||
@$(DC_WEDDING) ps || true
|
@$(DC_WEDDING) ps || true
|
||||||
|
@$(DC_FINANCE) ps || true
|
||||||
|
@$(DC_BOMVIZINHO) ps || true
|
||||||
|
@$(DC_CLAUDEWEB) ps || true
|
||||||
|
|
||||||
up-main: network
|
up-main: network
|
||||||
$(DC_MAIN) up -d
|
$(DC_MAIN) up -d
|
||||||
@ -58,10 +96,34 @@ up-gitea: network
|
|||||||
up-wedding: network
|
up-wedding: network
|
||||||
$(DC_WEDDING) up -d --build
|
$(DC_WEDDING) up -d --build
|
||||||
|
|
||||||
|
up-finance: network
|
||||||
|
$(DC_FINANCE) up -d --build
|
||||||
|
|
||||||
|
up-bomvizinho: network
|
||||||
|
$(DC_BOMVIZINHO) up -d --build
|
||||||
|
|
||||||
|
# Delegado ao Makefile do repo: o `up` de lá builda antes a imagem do worker
|
||||||
|
# efêmero (fora do compose) que o backend instancia.
|
||||||
|
up-claudeweb: network network-claudeweb
|
||||||
|
$(MAKE) -C $(CLAUDEWEB_DIR) up
|
||||||
|
|
||||||
rebuild-wedding: network
|
rebuild-wedding: network
|
||||||
$(DC_WEDDING) build --no-cache
|
$(DC_WEDDING) build --no-cache
|
||||||
$(DC_WEDDING) up -d
|
$(DC_WEDDING) up -d
|
||||||
|
|
||||||
|
rebuild-finance: network
|
||||||
|
$(DC_FINANCE) build --no-cache
|
||||||
|
$(DC_FINANCE) up -d
|
||||||
|
|
||||||
|
rebuild-bomvizinho: network
|
||||||
|
$(DC_BOMVIZINHO) build --no-cache
|
||||||
|
$(DC_BOMVIZINHO) up -d
|
||||||
|
|
||||||
|
rebuild-claudeweb: network network-claudeweb
|
||||||
|
$(MAKE) -C $(CLAUDEWEB_DIR) worker-image
|
||||||
|
$(DC_CLAUDEWEB) build --no-cache
|
||||||
|
$(DC_CLAUDEWEB) up -d
|
||||||
|
|
||||||
down-main:
|
down-main:
|
||||||
$(DC_MAIN) down
|
$(DC_MAIN) down
|
||||||
|
|
||||||
@ -71,6 +133,15 @@ down-gitea:
|
|||||||
down-wedding:
|
down-wedding:
|
||||||
$(DC_WEDDING) down
|
$(DC_WEDDING) down
|
||||||
|
|
||||||
|
down-finance:
|
||||||
|
$(DC_FINANCE) down
|
||||||
|
|
||||||
|
down-bomvizinho:
|
||||||
|
$(DC_BOMVIZINHO) down
|
||||||
|
|
||||||
|
down-claudeweb:
|
||||||
|
$(DC_CLAUDEWEB) down
|
||||||
|
|
||||||
logs-main:
|
logs-main:
|
||||||
$(DC_MAIN) logs -f
|
$(DC_MAIN) logs -f
|
||||||
|
|
||||||
@ -80,6 +151,15 @@ logs-gitea:
|
|||||||
logs-wedding:
|
logs-wedding:
|
||||||
$(DC_WEDDING) logs -f
|
$(DC_WEDDING) logs -f
|
||||||
|
|
||||||
|
logs-finance:
|
||||||
|
$(DC_FINANCE) logs -f
|
||||||
|
|
||||||
|
logs-bomvizinho:
|
||||||
|
$(DC_BOMVIZINHO) logs -f
|
||||||
|
|
||||||
|
logs-claudeweb:
|
||||||
|
$(DC_CLAUDEWEB) logs -f
|
||||||
|
|
||||||
pull-main:
|
pull-main:
|
||||||
$(DC_MAIN) pull
|
$(DC_MAIN) pull
|
||||||
|
|
||||||
@ -88,3 +168,22 @@ pull-gitea:
|
|||||||
|
|
||||||
pull-wedding:
|
pull-wedding:
|
||||||
$(DC_WEDDING) pull
|
$(DC_WEDDING) pull
|
||||||
|
|
||||||
|
pull-finance:
|
||||||
|
$(DC_FINANCE) pull
|
||||||
|
|
||||||
|
pull-bomvizinho:
|
||||||
|
$(DC_BOMVIZINHO) pull
|
||||||
|
|
||||||
|
pull-claudeweb:
|
||||||
|
$(DC_CLAUDEWEB) pull
|
||||||
|
|
||||||
|
clone-claudeweb:
|
||||||
|
@test -d $(CLAUDEWEB_DIR)/.git \
|
||||||
|
&& echo "$(CLAUDEWEB_DIR) já existe" \
|
||||||
|
|| git clone $(CLAUDEWEB_REPO) $(CLAUDEWEB_DIR)
|
||||||
|
|
||||||
|
clone-bomvizinho:
|
||||||
|
@test -d $(BOMVIZINHO_DIR)/.git \
|
||||||
|
&& echo "$(BOMVIZINHO_DIR) já existe" \
|
||||||
|
|| git clone $(BOMVIZINHO_REPO) $(BOMVIZINHO_DIR)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user