046d21e721
Nuevo sistema para mantener datos no regenerables (proposals, apps, projects, analysis, vaults, pc_locations) sincronizados entre múltiples máquinas via una API HTTP central desplegada en organic-machine.com. - Migración 011: tabla pc_locations (mapa de ubicaciones por PC) - registry/models.go: struct PcLocation - registry/store.go: CRUD PcLocation + helpers de sync - cmd/fn/sync.go: subcomando fn sync (push+pull, status, locations) - bash/functions/infra/setup_registry_api: pipeline de deploy Docker+Traefik - CLAUDE.md: documentación de sync y pc_locations Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4.4 KiB
4.4 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| setup_registry_api | pipeline | bash | infra | 1.0.0 | impure | setup_registry_api(ssh_host: string, api_token: string, basic_auth_user: string, basic_auth_pass: string) -> json | Deploy completo de registry_api en VPS con Docker + Traefik (Coolify proxy). Sincroniza el repo via rsync, genera el hash bcrypt para basicAuth, sube el traefik-dynamic.yml, crea el .env con el token, hace docker compose build+up y verifica el health check. |
|
|
false | error_go_core |
|
JSON con status (ok|error), url del servicio, http_code del health check, duration_ms, ssh_host y remote_dir. Exit code 1 si algún paso falla. | false | bash/functions/infra/setup_registry_api.sh |
Requisitos previos
htpasswdinstalado localmente (apt install apache2-utils)rsyncinstalado localmente- SSH alias
organic-machine.com(o el host indicado) configurado en~/.ssh/config - El usuario SSH debe tener
sudosin password paramkdir -p /data/coolify/proxy/dynamic/yteeen esa ruta - Red Docker
coolifyexistente en el VPS (se crea automáticamente si no existe) - Traefik corriendo con file watcher en
/data/coolify/proxy/dynamic/(Coolify proxy estándar)
Ejemplo
# Forma directa como script
bash bash/functions/infra/setup_registry_api.sh \
organic-machine.com \
"mi-token-secreto" \
lucas \
"mi-password"
# Como función sourced
source bash/functions/infra/setup_registry_api.sh
result=$(setup_registry_api \
"organic-machine.com" \
"mi-token-secreto" \
"lucas" \
"mi-password")
echo "$result"
# {"status":"ok","url":"https://registry.organic-machine.com/api/status","http_code":"200","duration_ms":45231,"ssh_host":"organic-machine.com","remote_dir":"/opt/fn-registry-build/apps/registry_api"}
# Via variables de entorno
export REGISTRY_API_TOKEN="mi-token-secreto"
export BASIC_AUTH_PASS="mi-password"
bash bash/functions/infra/setup_registry_api.sh
Pasos del pipeline
- Verificar SSH —
ssh -o BatchMode=yes -o ConnectTimeout=10para confirmar acceso al VPS - Generar hash bcrypt —
htpasswd -nB -C 10localmente, escapar$a$$para Traefik - rsync del repo — sube el repo completo a
/opt/fn-registry-build/en el VPS (el Dockerfile necesita el contexto raíz) - Subir traefik-dynamic.yml — reemplaza el placeholder del hash en el template local y lo sube a
/data/coolify/proxy/dynamic/registry-api-organic-machine-com.ymlviasudo tee - Crear .env — escribe
REGISTRY_API_TOKEN=...enapps/registry_api/.enven el VPS - docker compose build && up -d — construye la imagen (multi-stage, CGO+FTS5) y levanta el container con la red
coolify - Health check — polling a
https://registry.organic-machine.com/api/statuscada 10s, máximo 12 intentos (2 minutos)
Notas
- El
docker-compose.ymlde la app usacontext: ../../para incluirregistry/,functions/,cmd/yapps/registry_api/en el build. Por eso se sincroniza el repo completo y no solo la app. - El Dockerfile genera el binario
registry_apiconCGO_ENABLED=1 -tags fts5(SQLite + FTS5). Elregistry.dbse genera en el primer arranque viafn indexdentro del container, o puede montarse externamente via el volumen/data. - Traefik detecta el cambio en
/data/coolify/proxy/dynamic/automáticamente (file provider con file watcher), sin necesidad de reiniciar Traefik. - Para re-deploys: ejecutar el mismo script — rsync es idempotente y
docker compose up -drecrea el container si la imagen cambió. - Si
REGISTRY_API_TOKENestá vacío, la API arranca sin autenticación (solo basicAuth de Traefik protege el acceso).