Día a día (VPS)
En instalaciones de cliente el layout es el bundle: /opt/sis. El env real es /opt/sis/.env. /opt/sis/infra/.env no es el env file — son comentarios.
La única forma de levantar o recrear
# En el VPS, desde /opt/sis:
tools/ops/prod-up.sh <servicio> [servicio...]
# equivale a:
containers compose --env-file .env \
-f infra/containers-compose.yml -f infra/containers-compose.prod.yml \
up -d --force-recreate <servicio>
Los nombres son service-keys del compose (agents-host-operaciones, society-graph-ui), no siempre el container_name (society-agents-host-operaciones). Búscalos con:
grep -nB6 'container_name: <nombre>' infra/containers-compose.yml
Nunca
containers start <container>sobre uno caído: revive sin red orquestador de contenedores (Networks={}) → no resuelvepg, no publica puertos (502 público), y puede quedar «Up (healthy)» por dentro. Verificado 2026-07-13.containers compose upsin--env-file .envo sin el overlay prod → password por defecto →InvalidPasswordErrorcontra elpg-datareal.- Config de canales en
infra/(se pierde en el próximo deploy). Va en el.envdel profile.
El overlay prod hace pg_PASSWORD obligatoria (${pg_PASSWORD:?}). Sin él, manda el default del compose base.
Bind: SOCIETY_BIND_IP=0.0.0.0 + firewall containers-USER (sis-firewall.sh). Acceso legítimo: malla privada o proxy de entrada en el host. Un puerto SIS nuevo sin re-ejecutar el firewall queda abierto a internet. El patrón del firewall cubre ^(society|copilot|sis-).
proxy de entradafile: bind mount por inodo. mv / sed -i dejan al container pegado al fichero viejo y edge-proxy reload dice config is unchanged sin error. Escribir con truncado (cat nuevo > edge-proxyfile) o recrear. edge-proxy validate antes de instalar.
canal de mensajería (solo cliente de referencia): no recrear agents-host-operaciones a la ligera; la sesión no se reproduce. Skill actualiza-legaldesign y runbook 23 § canal de mensajería.
Health: tools/ops/prod-healthcheck.sh cada 5 min en ambos VPS.