🚀 Cómo Configurar Auto-Update con GitHub en tu Servidor Linux (Deploy Automático)

¿Querés que tu proyecto se actualice automáticamente cada vez que hacés push a GitHub? En esta guía completa te enseño cómo configurar un deploy automático en tu servidor Linux usando GitHub y Webhooks. Ideal para proyectos en producción, APIs, apps SaaS o servidores personales que deben estar siempre actualizados.
🧩 ¿Qué es un Auto Update con GitHub?
Un sistema de auto update permite que tu servidor se sincronice automáticamente con tu repositorio de GitHub sin tener que hacer git pull
manualmente. Cada vez que empujás un commit (push), GitHub notifica al servidor y este se actualiza al instante.
✅ Beneficios del Deploy Automático
- 🔄 Evitás hacer
git pull
manualmente - 🧠 Menos errores humanos
- ⚡ Actualizaciones instantáneas tras cada push
- 🔐 Compatible con PM2, Docker, Systemd, etc.
🔧 Requisitos Previos
- Servidor Linux (Ubuntu, Debian, etc.)
- Git instalado →
sudo apt install git
- Repositorio en GitHub
- (Opcional) Web server con PHP, Node, o Python para manejar el webhook
- (Opcional) Docker, PM2 o algún proceso que deba reiniciarse
🧪 Paso 1: Cloná tu Proyecto desde GitHub
bashCopiarEditarcd /var/www/
git clone https://github.com/usuario/tu-proyecto.git
cd tu-proyecto
🔔 Paso 2: Crear un Webhook en GitHub
- En tu repo →
Settings > Webhooks > Add webhook
- Payload URL:
https://tu-dominio.com/github-update
- Content type:
application/json
- Secret (opcional pero recomendado):
clave_super_segura
- Evento:
Just the push event
🧰 Paso 3: Código del Endpoint Webhook
✅ Opción PHP (rápida y simple)
phpCopiarEditar<?php
$secret = 'clave_super_segura';
$payload = file_get_contents('php://input');
$headers = getallheaders();
if (!isset($headers['X-Hub-Signature-256'])) {
http_response_code(403); exit;
}
$signature = 'sha256=' . hash_hmac('sha256', $payload, $secret);
if (!hash_equals($signature, $headers['X-Hub-Signature-256'])) {
http_response_code(403); exit;
}
exec("cd /var/www/tu-proyecto && git pull origin main >> update.log 2>&1 &");
http_response_code(200);
echo "OK";
⚠️ Importante: Configurá el archivo en /var/www/github-update.php
y permití acceso desde GitHub.
🔄 Paso 4 (Opcional): Reiniciar Servicios Automáticamente
Si necesitás que el sistema se reinicie tras cada pull:
🔧 Con Docker:
bashCopiarEditardocker-compose down && docker-compose up -d
⚙️ Con PM2:
bashCopiarEditarpm2 restart all
🧷 Con Systemd:
bashCopiarEditarsudo systemctl restart tu-servicio
🔐 Paso 5: Seguridad del Webhook
- ✅ Usá
SECRET
y validalo - ✅ Permití solo
POST
- ✅ Filtrá por IP si querés más seguridad (GitHub IPs: https://api.github.com/meta)
🕑 Alternativa: Git Pull Automático con Cron (sin Webhook)
bashCopiarEditarcrontab -e
Y agregá:
bashCopiarEditar*/5 * * * * cd /var/www/tu-proyecto && git pull origin main >> update.log 2>&1
📌 Conclusión
Tener tu servidor siempre actualizado con GitHub es clave para proyectos modernos. Esta guía te permite implementar un deploy automático seguro, estable y sin depender de plataformas externas.