--- name: deploy-service description: > Deploy de un servicio via SSH a un servidor remoto. Verifica que el servicio este corriendo, hace backup de la version anterior, actualiza el binario, reinicia el servicio y valida que responda correctamente. --- # Deploy Service Skill Esta skill guia el proceso completo de deploy de un servicio a produccion via SSH. ## Prerequisitos - Acceso SSH al servidor de destino - El servicio debe estar configurado como systemd unit - El binario compilado debe estar disponible localmente o via URL ## Proceso de deploy ### 1. Verificar estado del servicio Usa `ssh_command` para verificar el estado actual del servicio: ```bash systemctl status ``` Si el servicio no existe, pregunta al usuario si debe crearlo. ### 2. Crear backup de la version anterior ```bash cp /path/to/service /path/to/service.backup.$(date +%Y%m%d-%H%M%S) ``` ### 3. Detener el servicio ```bash systemctl stop ``` ### 4. Actualizar el binario Opciones: - Si el binario esta local: usa `scp` o `ssh_command` con heredoc - Si el binario esta en URL: usa `ssh_command` con `wget` o `curl` ```bash # Ejemplo con URL wget -O /path/to/service chmod +x /path/to/service ``` ### 5. Reiniciar el servicio ```bash systemctl start ``` ### 6. Verificar que el servicio responde Espera 5 segundos y verifica: ```bash systemctl is-active ``` Si el servicio expone un endpoint HTTP, usa `http_get` para verificar que responde: ```bash curl -f http://localhost:/health ``` ### 7. Rollback en caso de error Si el servicio no arranca o no responde: 1. Detener el servicio 2. Restaurar el backup 3. Reiniciar con la version anterior 4. Notificar al usuario del error ## Parametros requeridos El usuario debe proporcionar: - `host`: servidor de destino (ej: "prod-server-01") - `service_name`: nombre del systemd unit (ej: "myapp.service") - `service_path`: ruta al binario en el servidor (ej: "/usr/local/bin/myapp") - `binary_source`: "local" o URL del binario Parametros opcionales: - `health_endpoint`: endpoint HTTP para verificar salud (ej: "http://localhost:8080/health") - `post_deploy_command`: comando adicional a ejecutar despues del deploy ## Seguridad - Valida que el host este en la allowlist de SSH del agente - Valida que el binario tenga checksum correcto (si se proporciona) - Nunca ejecutes comandos arbitrarios sin validar ## Ejemplo de uso Usuario: "Haz deploy de myapp a prod-server-01" Agente: 1. skill_search("deploy service") 2. skill_load("deploy-service") 3. Preguntar parametros faltantes 4. Ejecutar el proceso paso a paso 5. Reportar resultado