Desarrollo y bases de datos

Clonado y deploy desde repositorio remoto privado

Revisado el 6 min de lectura git github despliegues

Importante: Actualmente dispones de la herramienta Deploy, un sistema avanzado y sencillo de usar que se integra con tu repositorio de GitHub. Tienes más información en Deploy, herramienta de despliegue automático desde GitHub.

En otros artículos hemos hablado de las estrategias de deploy, como crear o clonar un repositorio desde cPanel e incluso aplicar cambios desde dicha interfaz.

No obstante hoy trataremos un método diferente ya que el uso de la interfaz de cPanel no suele ser la mejor opción cuando se trabaja con un repositorio remoto que es privado.

En el siguiente ejemplo clonaremos un repositorio privado alojado en GitHub, y tomaremos los cambios desde el mismo cuando sea necesario.

Requisitos

Ten en cuenta que trabajaremos con la terminal, por lo que es esencial que tengas un mínimo de conocimientos de su uso así como habilites el acceso SSH en tu servicio de hosting.

Una vez dentro, crea una clave Ed25519 dedicada únicamente a este repositorio. Si el nombre del archivo ya existe, elige otro; no sobrescribas una identidad en uso:

umask 077
mkdir -p ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/github_repositorio_deploy -C "deploy repositorio cpanel"
chmod 600 ~/.ssh/github_repositorio_deploy
chmod 644 ~/.ssh/github_repositorio_deploy.pub

Usa una frase de paso y un agente SSH cuando el proceso admita interacción. Si necesitas ejecutar un pull desatendido, la clave puede quedar sin frase de paso, pero debe permanecer fuera de public_html, con permisos 600, sin reutilizarse y con acceso de solo lectura a un único repositorio. Muestra la clave pública con:

cat ~/.ssh/github_repositorio_deploy.pub

Dando permisos desde GitHub

Ahora debemos permitir el acceso desde nuestro servidor al repositorio privado, en el caso de GitHub, accede al repositorio en cuestión:

  • Haz clic en Settings dentro del repositorio concreto.
  • En el menú lateral, abre Deploy keys.
  • Pulsa Add deploy key, pega la clave pública y asigna un título identificable.
  • No actives permisos de escritura si el hosting solo necesita clonar y actualizar el código.

Configura un alias para obligar a Git a usar esa identidad:

Host github-repositorio
    HostName github.com
    User git
    IdentityFile ~/.ssh/github_repositorio_deploy
    IdentitiesOnly yes

Guarda el bloque en ~/.ssh/config, aplica chmod 600 ~/.ssh/config y verifica previamente la huella de GitHub por un canal independiente.

Para comprobar que todo está correcto, ejecuta vía SSH en tu cuenta:

ssh -T git@github-repositorio

Si recibes una salida tipo:

Hi usuario/repositorio! You've successfully authenticated, but GitHub does not provide shell access.

Significa que la autenticación es correcta y podemos continuar los pasos.

Si por el contrario recibes Permission denied (publickey). significa que no tienes permisos, revisa el proceso de nuevo ya que debe haber algún paso no realizado correctamente.

Estos pasos son para GitHub, no obstante otras plataformas tipo Bitbucket tendrán un proceso similar por medio de autenticación por claves SSH.

Clonando el repositorio privado

Copia la URL del repositorio desde el botón Code, pestaña SSH, y sustituye github.com por el alias github-repositorio configurado antes.

Clona el repositorio fuera del directorio público:

mkdir -p ~/repositories
git clone git@github-repositorio:usuario/repositorio.git ~/repositories/repositorio

No clones directamente dentro de public_html: expondrías el directorio .git si el servidor web no lo bloquea. Publica solo los ficheros necesarios mediante la herramienta Deploy, .cpanel.yml o una estrategia de releases y enlaces simbólicos.

Obtener los cambios

Clonar o actualizar Git no instala dependencias ni publica automáticamente una web. Para actualizar el clon, comprueba primero su estado:

cd "$HOME/repositories/repositorio" || exit 1
git status --short
git branch --show-current

Si hay cambios locales o la rama no es la esperada, detente y revisa su origen. Para la rama main, una actualización que no cree una fusión automáticamente sería:

git pull --ff-only origin main

Adapta la rama y ejecuta después el procedimiento de despliegue del proyecto. No uses git reset --hard para ocultar una divergencia sin revisar lo que perderías.

La clave de lectura de este ejemplo no permite git push. Si necesitas recuperar un cambio hecho en el hosting, revísalo y trasládalo a tu flujo de desarrollo sin ampliar por comodidad el permiso de la clave de despliegue.

Consideraciones

Git en nuestro sistema funciona como en tu equipo local. Si quieres prescindir de GitHub, puedes crear un repositorio privado fuera de public_html y conectar tu equipo a ese remoto. Mantén también fuera del directorio público cualquier clon de trabajo y publica en public_html solo los ficheros necesarios mediante Deploy, .cpanel.yml o una estrategia de releases. La interfaz Git de cPanel permite gestionar este flujo.

La prueba ssh -T de GitHub puede terminar con código 1 aunque confirme la autenticación, porque no ofrece una shell interactiva. Comprueba el mensaje y el repositorio autorizado, no solo el código de salida.

También te puede ayudar

¿Algo no cuadra o ha cambiado? Cuéntanoslo y lo revisamos.