Runbook de operaciones: SSH, git pull seguro y despliegue en producción

admin · 2 min

Este runbook recoge los procedimientos que hay que seguir para operar el servidor sin perder cambios ni romper el stack. Está basado en incidencias reales ocurridas durante el despliegue inicial.

SSH multi-cuenta en GitHub

El problema original: git push por HTTPS devolvía 403 y SSH autenticaba con la cuenta incorrecta porque había varias claves configuradas sin IdentitiesOnly yes.

La solución: un alias en ~/.ssh/config que fuerza la clave correcta:

Host github-kfra
  HostName github.com
  User git
  IdentityFile ~/.ssh/fra_general
  IdentitiesOnly yes
  AddKeysToAgent yes
  UseKeychain yes
# Verificación
ssh -T git@github-kfra
# Hi fraenigmiaes! You've successfully authenticated...

# Uso habitual
git remote set-url origin git@github-kfra:fraenigmiaes/K_FRA.git
git push origin main

Git pull seguro cuando hay cambios locales en el servidor

Cuando el servidor tiene ajustes manuales sobre archivos que también cambiaron en el repo, git pull falla. La secuencia segura:

cd /root/K_FRA
# 1. Guardar los cambios locales
git stash push -m "server-local-before-pull" 01-infra.yml 02-data.yml 03-app.yml

# 2. Actualizar
git pull --ff-only

# 3. Comparar: si el diff está vacío, el stash ya no aporta nada
git diff stash@{0} -- 01-infra.yml 02-data.yml 03-app.yml

# 4. Descartar si coincide
git stash drop stash@{0}

Secuencia de despliegue

cd /root/K_FRA

# Stack principal (infra + data + app + ops)
make prod ENV_FILE=.env.prod

# Superset — debe arrancarse aparte
docker compose --env-file .env.prod -f 04-bi.yml up -d

make prod no incluye 04-bi.yml. Si se arranca Superset antes que el resto del stack, puede aparecer un segundo Traefik que intente ocupar el puerto 80 y falle con Bind for 0.0.0.0:80 failed: port is already allocated. La solución es bajarlo primero y luego seguir la secuencia correcta.

Verificación del estado del stack

# Estado general
docker ps --format 'table {{.Names}}	{{.Status}}	{{.Ports}}'

# Certificados TLS
docker exec infra-traefik-1 sh -lc 'wc -c /letsencrypt/acme.json'

# Fizzy SMTP
docker exec app-fizzy-1 env | grep -E '^SMTP_|^MAILER_'

# Logs de Authentik
docker logs --tail=100 infra-authentik-server-1
admin

Editor en D4R.