Deployment
Guía de despliegue de servicios
Flujo de Deployment
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Commit │ --> │ CI (GitHub │ --> │ CD (Webhook │
│ a main │ │ Actions) │ │ + Pull) │
└──────────────┘ └──────────────┘ └──────────────┘
│ │
v v
┌──────────────┐ ┌──────────────┐
│ Tests + │ │ systemctl │
│ Linting │ │ restart │
└──────────────┘ └──────────────┘
Métodos de Deploy
1. Manual (SSH)
ssh vps-deploy
cd /srv/projects/PROYECTO
git pull origin main
sudo systemctl restart PROYECTO.service2. Automatizado (GitHub Actions)
El CD pipeline: 1. Push a main con cambios en app/** o deploy/** 2. GitHub Action envía webhook al servidor 3. El servidor hace git pull y reinicia el servicio
Secrets requeridos: - DEPLOY_HOOK_URL - URL del webhook - DEPLOY_TOKEN - Token de autenticación
Crear Nuevo Servicio
Opción A: Scaffold Automatizado
python /srv/projects/infra-tools/new_project.py \
--slug mi-proyecto \
--port 8105 \
--domain mi-proyecto.illanes00.cl \
--register-monitorOpción B: Manual
- Crear estructura:
mkdir -p /srv/projects/mi-proyecto
cd /srv/projects/mi-proyecto
python3 -m venv venv- Crear systemd service:
# /etc/systemd/system/mi-proyecto.service
[Unit]
Description=Mi Proyecto
After=network-online.target
[Service]
Type=simple
User=illanes00
WorkingDirectory=/srv/projects/mi-proyecto
EnvironmentFile=-/srv/projects/mi-proyecto/.env
ExecStart=/srv/projects/mi-proyecto/venv/bin/python run.py
Restart=on-failure
[Install]
WantedBy=multi-user.target- Habilitar y arrancar:
sudo systemctl daemon-reload
sudo systemctl enable --now mi-proyecto.service- Configurar Caddy:
# /srv/projects/mi-proyecto/deploy/caddy.caddy
mi-proyecto.illanes00.cl {
import tls_cf
reverse_proxy localhost:8105
encode gzip
}
Verificar Deployment
# Estado del servicio
systemctl status mi-proyecto.service
# Logs en tiempo real
journalctl -u mi-proyecto.service -f -n 50
# Verificar endpoint
curl -s http://localhost:8105/healthzRollback
# Ver commits anteriores
git log --oneline -10
# Volver a versión anterior
git checkout <commit-sha>
sudo systemctl restart mi-proyecto.service
# O volver a main después
git checkout mainMás Información
- systemd Guide - Detalles de servicios
- GitHub Actions - CI/CD pipelines
- Troubleshooting - Depuración