Files
fn_registry/bash/functions/infra/docker_compose_remote_deploy.md
T
egutierrez ee4e86ee2e feat: funcion docker_compose_remote_deploy bash
Funcion bash que despliega un stack Docker Compose en un host remoto via SSH.
Flujo: verificar SSH → git pull → docker-compose pull → docker-compose up -d → listar containers.
Soporta compose files adicionales y retorna JSON con status, containers y duracion.
2026-04-13 01:17:14 +02:00

3.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
docker_compose_remote_deploy function bash infra 1.0.0 impure docker_compose_remote_deploy(host: string, remote_dir: string, branch: string, compose_files: string) -> json Despliega un stack Docker Compose en un host remoto via SSH. Verifica conectividad, hace git pull del branch indicado, actualiza imagenes con docker-compose pull y levanta/recrea los servicios modificados con docker-compose up -d. Soporta compose files adicionales. Retorna JSON con status, containers corriendo y duracion.
docker
compose
deploy
ssh
remote
git
infra
cicd
false error_go_core
name desc
host alias SSH del host remoto definido en ~/.ssh/config (ej: prod-server)
name desc
remote_dir ruta absoluta en el host donde esta el repo con docker-compose.yml (ej: /opt/apps/element)
name desc
branch branch de git a hacer pull; default 'main'
name desc
compose_files archivos compose adicionales separados por coma (ej: 'docker-compose.livekit.yml,docker-compose.monitoring.yml'); si vacio usa solo docker-compose.yml
JSON con status ('ok'), host, remote_dir, branch, containers (array de nombres corriendo tras el deploy), duration_ms false
bash/functions/infra/docker_compose_remote_deploy.sh

Ejemplo

source bash/functions/infra/docker_compose_remote_deploy.sh

# Deploy basico (solo docker-compose.yml, branch main)
result=$(docker_compose_remote_deploy "prod-server" "/opt/apps/element")
echo "$result"
# {"status":"ok","host":"prod-server","remote_dir":"/opt/apps/element","branch":"main","containers":["element-web","synapse","postgres"],"duration_ms":4200}

# Deploy con compose files adicionales y branch especifico
result=$(docker_compose_remote_deploy "prod-server" "/opt/apps/element" "release" "docker-compose.livekit.yml,docker-compose.monitoring.yml")
echo "$result"
# {"status":"ok","host":"prod-server","remote_dir":"/opt/apps/element","branch":"release","containers":[...],"duration_ms":8100}

# Uso desde un pipeline CI/CD
source bash/functions/infra/docker_compose_remote_deploy.sh
docker_compose_remote_deploy "$SSH_HOST" "$REMOTE_DIR" "$GIT_BRANCH" "$EXTRA_COMPOSE" || exit 1

Notas

  • Flujo: verificar SSH → git pull → docker-compose pull → docker-compose up -d → listar containers.
  • La verificacion SSH usa -o BatchMode=yes -o ConnectTimeout=5 para fallar rapido sin pedir password.
  • Los compose files adicionales se pasan como -f file1.yml -f file2.yml a todos los subcomandos compose.
  • docker-compose up -d solo recrea los servicios cuya imagen o config cambio (comportamiento nativo de compose).
  • La lista de containers al final incluye TODOS los containers corriendo en el host, no solo los del stack.
  • Requiere jq instalado en el host remoto para serializar la lista de containers. Si no esta, containers sera [].
  • Los mensajes de progreso van a stderr; el JSON final va a stdout.
  • Exit code 1 en cualquier fallo (SSH, git pull, compose pull, compose up); el JSON de error NO se emite — el caller debe manejar el exit code.
  • El host se resuelve con ~/.ssh/config incluyendo host, user, identityfile y puerto.
  • Diferencia con rsync_deploy: este flujo asume que el codigo ya esta en el remoto (via git) y usa compose. rsync_deploy sube archivos locales sin git.