feat(deploy): consolidated dev stack with auto-provisioned Zitadel

Single docker-compose stack for local development (Postgres, Zitadel,
RabbitMQ, SeaweedFS + bucket init, Jaeger) plus an optional overlay to run
the .NET apps in Docker. up.ps1 orchestrates the full bootstrap: stack up,
stream-ticket keys, EF Core migrations and Zitadel provisioning.

- Zitadel is provisioned automatically (service-account PAT -> project +
  OIDC app with JWT access token); the generated ClientId is wired into
  Musify.Api user-secrets and .env. No manual console steps.
- ZITADEL_EXTERNAL_DOMAIN=host.docker.internal so token validation works
  both with local apps and full-docker.
- App Dockerfiles copy AppSettings*.json to lowercase so config loads on
  case-sensitive Linux; Worker image ships ffmpeg.
- Scripts split by responsibility (common/stream-keys/migrate/provision);
  apps overlay de-duped via YAML anchors.
- Remove the superseded standalone seaweedfs compose; point docs/development
  at the unified stack.
This commit is contained in:
2026-07-05 20:32:40 +02:00
parent a37dcc1b45
commit c4f5e6754c
16 changed files with 865 additions and 48 deletions
+17 -16
View File
@@ -4,21 +4,21 @@ Cómo levantar todo en local y probarlo.
## Dependencias (Docker)
Todo (PostgreSQL, Zitadel, RabbitMQ, SeaweedFS, Jaeger) vive en un solo stack en
[`deploy/`](../deploy/README.md). Bootstrap completo (levanta + bucket + claves + migraciones):
```powershell
# SeaweedFS (almacenamiento)
docker compose -f deploy\seaweedfs\docker-compose.yml up -d
# PostgreSQL + pgAdmin
docker compose -f "C:\Users\XShin\OneDrive\Desktop\postgresql\docker-compose.yml" up -d
# Zitadel (auth)
docker compose -f "C:\Users\XShin\OneDrive\Pictures\zitadel-compose\docker-compose.yml" up -d
# RabbitMQ (contenedor suelto)
docker start rabbitmq
./deploy/up.ps1
```
> Nota: usa `docker compose up` (no `docker start`) para Postgres/Zitadel: si sus redes se borraron, compose las recrea.
O solo la infraestructura:
```powershell
docker compose -f deploy\docker-compose.yml up -d
```
Config (usuarios/claves/puertos) en `deploy/.env`. Ver [deploy/README.md](../deploy/README.md)
para el detalle y el paso de configuración de Zitadel (crear la app OIDC y copiar el ClientId).
## Aplicaciones (.NET)
@@ -44,14 +44,15 @@ DB: `musify_db`, usuario `postgres`/`postgres`. Bucket S3: `webapi-storage` (cre
## Migraciones
No hay migración automática al arrancar. Para aplicar cambios de esquema:
No hay migración automática al arrancar. `deploy/up.ps1` las aplica en el bootstrap;
para hacerlo a mano tras cambios de esquema:
```powershell
cd MusifyBackend\Infrastructure
dotnet ef database update --context Database
dotnet ef database update --project backend\Musify.Infrastructure --startup-project backend\Musify.Infrastructure --context Database
```
La cadena de conexión para `dotnet ef` se lee de `DesignSettings.json` / user-secrets del proyecto Infrastructure.
La cadena de conexión para `dotnet ef` se lee de `DesignSettings.json` / user-secrets del proyecto Infrastructure
(`up.ps1` la deja en user-secrets automáticamente).
## Stream-tickets (claves RS256)