Ir al contenido principal

Cómo desplegar un proyecto desde GitHub a cPanel con Git

Esta guía explica cómo conectar un repositorio de GitHub con tu hosting cPanel, para que puedas actualizar tu sitio con un par de clics cada vez que subas cambios nuevos a GitHub.

Escrito por Diego Rodriguez

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.cl como 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

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.git

    • Repo 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 tasks corre 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 de tasks, la variable se pierde y el despliegue no copia nada (sin mostrar error visible).

  • rsync no siempre está disponibe. Si al probar el comando a mano te da No existe el fichero o el directorio, usa cp -r en 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.php que no se sube a git (agrégalo a .gitignore).

  • Cada entorno (tu computador, el servidor de dominiodeejemplo.cl) tiene su propio database.local.php con sus propias credenciales, creado una sola vez a mano.

  • El .cpanel.yml jamás debe copiar ese archivo — ni siquiera indirectamente copiando toda la carpeta config/ 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:

  1. Haces cambios en tu proyecto localmente y los subes a GitHub (git push).

  2. 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.yml y copia los archivos a la carpeta pública de dominiodeejemplo.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

¿Ha quedado contestada tu pregunta?