Antes de empezar
Tu hosting debe tener cPanel con la herramienta "Git™ Version Control" disponible (Herramientas → busca "Git").
Necesitas acceso a Terminal dentro de cPanel (Herramientas → "Terminal"). Si no la ves, contáctanos para habilitarla.
Tu proyecto debe estar subido a un repositorio de GitHub (público o privado).
En esta guía usamos
dominiodeejemplo.clcomo dominio de ejemplo — reemplázalo por el tuyo en cada comando.
Paso 1: Si tu repositorio es privado, prepara una llave SSH
Si tu repositorio es público, puedes saltar directo al Paso 2 usando la URL HTTPS normal (https://github.com/tu-usuario/nombre-repo.git).
Si es privado, cPanel necesita una forma de autenticarse contra GitHub. No uses una URL con usuario/contraseña o token — cPanel la rechaza por seguridad ("The clone URL cannot include a password"). El método correcto es una llave SSH (Deploy Key).
1.1 Genera la llave por Terminal (no por el formulario web)
El formulario de "SSH Access" en cPanel a veces exige una contraseña fuerte para la llave, pero una llave con contraseña no sirve para que cPanel haga pull automático sin intervención. La solución es generarla por línea de comandos, sin passphrase:
Abre Terminal en cPanel y ejecuta:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github -N "" -C "deploy-key-dominiodeejemplo.cl"
Esto crea dos archivos: id_ed25519_github (privada, nunca se comparte) e id_ed25519_github.pub (pública).
1.2 Copia la llave pública
cat ~/.ssh/id_ed25519_github.pub
Copia la línea completa que empieza con ssh-ed25519 ....
1.3 Agrégala como Deploy Key en GitHub
En GitHub, ve a tu repositorio → Settings → Deploy keys → Add deploy key:
Pega la llave pública
No marques "Allow write access" (solo necesita leer)
Guarda
1.4 Indícale al servidor que use esa llave para GitHub
cat >> ~/.ssh/config << 'EOF'
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes
EOF
chmod 600 ~/.ssh/config
1.5 Prueba la conexión
ssh -T [email protected]
La primera vez te va a preguntar si confías en el host — responde yes. Si todo está bien, verás:
Hi tu-usuario/nombre-repo! You've successfully authenticated, but GitHub does not provide shell access.
Ese mensaje es normal, no es un error.
Paso 2: Crea el repositorio en cPanel
En cPanel → Git™ Version Control → Create:
Clone URL:
Repo privado:
[email protected]:tu-usuario/nombre-repo.gitRepo público:
https://github.com/tu-usuario/nombre-repo.git
Repository Path: usa una carpeta fuera de la raíz pública del sitio, por ejemplo
repositories/dominiodeejemplo.cl. (cPanel asi lo interpreta igual). Así el código clonado queda separado de los archivos que ya están en producción (backups, configuraciones con contraseñas reales, etc.), y controlas exactamente qué se copia y cuándo.
Click Create.
Paso 3: Configura el despliegue automático (.cpanel.yml)
Crea un archivo llamado .cpanel.yml en la raíz de tu repositorio (en tu computador, antes de subirlo a GitHub) con este contenido, adaptado a tu caso:
---
deployment:
tasks:
- export DEPLOYPATH=/home/usuario_cpanel/dominiodeejemplo.cl/ && /bin/cp -r carpeta1 carpeta2 archivo.php $DEPLOYPATH
Puntos importantes que suelen fallar:
Cada línea de
taskscorre en un proceso nuevo e independiente. Si necesitas usar una variable (export DEPLOYPATH=...) en el mismo comando que la usa, únelas con&&en la misma línea. Si las separas en dos líneas detasks, la variable se pierde y el despliegue no copia nada (sin mostrar error visible).
rsyncno siempre está disponibe. Si al probar el comando a mano te daNo existe el fichero o el directorio, usacp -ren su lugar.
Prueba el comando a mano por Terminal primero, antes de confiar en el botón de la interfaz — así ves el error real si algo falla.
Protege tus archivos de configuración con credenciales
Nunca incluyas en el despliegue el archivo que contiene la contraseña real de tu base de datos (ej. config/database). Si el despliegue lo sobrescribe con una versión de otro entorno, tu sitio se cae al instante (error de conexión a la base de datos) y no hay forma de recuperar la contraseña salvo por backup.
Patrón recomendado:
El código de tu app lee las credenciales desde un archivo
config/database.local.phpque no se sube a git (agrégalo a.gitignore).
Cada entorno (tu computador, el servidor de
dominiodeejemplo.cl) tiene su propiodatabase.local.phpcon sus propias credenciales, creado una sola vez a mano.
El
.cpanel.ymljamás debe copiar ese archivo — ni siquiera indirectamente copiando toda la carpetaconfig/completa.
Paso 4: Sube tu .cpanel.yml a GitHub
git add .cpanel.yml
git commit -m "Agregar script de despliegue para cPanel"
git push origin main
Paso 5: Flujo de trabajo del día a día
Una vez configurado todo lo anterior, actualizar el sitio en producción es simple:
Haces cambios en tu proyecto localmente y los subes a GitHub (
git push).En cPanel → Git Version Control → tu repositorio → pestaña "Pull or Deploy":
"Update from Remote" — trae los commits nuevos de GitHub.
"Deploy HEAD Commit" — corre el script de
.cpanel.ymly copia los archivos a la carpeta pública dedominiodeejemplo.cl.
Nota: si tu cambio agrega o modifica tablas en la base de datos, eso no es automático — hay que correr el SQL a mano en phpMyAdmin en el hosting.
🤝 ¿Necesitas ayuda adicional?
En V2Networks, estamos comprometidos con la estabilidad y seguridad de tu sitio web. Si necesitas asistencia adicional, no dudes en contactarnos a través de nuestro Centro de Soporte

