En el mundo del desarrollo web, mantener un flujo de trabajo ágil y eficiente es de vital importancia, una de las combinaciones más populares es usar GitHub para el control de versiones y cPanel para la gestión de hosting, sin embargo, combinar ambos no siempre es tal fácil, para integrar estos dos servicios y permitir que cualquier cambio en tu repositorio pueda reflejarse automáticamente en el servidor web, se requiere una serie de pasos, los cuales se explicaran aqui paso a paso, de cómo realizar un despliegue de GitHub en cPanel.
Básicamente, hay dos maneras de hacerlo, la primera es hacer que cPanel gestione el despliegue o segundo hacer que GitHub lo haga a través de GitHub Actions, sin importar cuál de los dos métodos se elija siempre se debe tener en cuenta que estos procesos pueden borrar archivos del servidor, así que sé siempre debe tener sumo cuidado en la implementación, la que por cierto depende de cada caso, no todos los sitios son iguales y cada cual, tendrá que excluir ciertas carpetas diferentes, así que la guía solo debe ser usada como referencia y se debe hacer los cambios y/o ajustes necesarios para evitar perdida de información.
Método 1: Gestión desde cPanel
Crear la llave
Se puede utilizar una llave existente, sin embargo, si no se tiene una aún, entonces lo primero será crear una llave SSH, se puede hacer desde la consola del servidor si se tiene SSH habitado o desde la consola del propio PC, ya sea Linux, Mac o Windows usando WSL, el comando para crearlo sería el siguiente:
ssh-keygen -t rsa -f ~/.ssh/llave -b 4096 -C [email protected]
Si se utiliza esta llave recién generada en lugar de una existente, entonces el siguiente paso es ir a GitHub y desde Profile -> Settings -> SSH keys -> New SSH key agregarla a la cuenta.
Luego en el servidor se debe crear la carpeta .ssh en la raíz del usuario de cPanel, sin embargo, si antes no se puede ver los archivos ocultos, puede configurarse para mostrarlos:
Independiente, si se creó la llave desde el servidor o se subió la que se generó localmente, se debe asignar permisos 600:
Luego se abre o se crea el archivo ~/.ssh/config con un editor de texto y se añade las siguientes líneas:
Host github.com HostName github.com User [email protected] IdentityFile ~/.ssh/llave
Luego se debe asignar permisos 600 al archivo config de la misma manera que se hizo con llave.
Agregar repositorio
Luego desde cPanel yendo a Git Version Control se hace clic en Crear y se completa el formulario:
En él se debe completar:
- Repositorio: que debe copiarse la dirección del repositorio correspondiente a SSH en lugar de HTTP
- Carpeta: Indicar la ruta donde se clonara el repositorio
- Nombre: Un nombre descriptivo para el repositorio
Una vez que se pulsa en Crear se clonara el repositorio, puede demorar algunos minutos en completarse dependiendo del tamaño, además desde la lista de repositorios se tendrá la opción de Administrar.
Metodo 2: GitHub Actions
La segunda opción es realizar el despliegue desde GitHub usando Actions, si bien GitHub ofrece una capa gratuita, al menos en la actualidad, siempre hay que recordar que tiene un límite y una vez pasado, GitHub cobrara por el uso, también hay que tener en cuenta que si bien hoy es gratuito esto puede cambiar.
Crear los Secretos
Lo primero sea crear 3 secretos en GitHub, un secreto en GitHub es una pieza de información sensible, como pueden ser claves API, contraseñas o tókenes de autenticación, los cuales por seguridad, no deben estar expuesta públicamente en el código fuente, incluido en repositores privados, es una mala práctica.
Para solucionar ese problema GitHub permite almacenar estos secretos de manera segura en un almacén, protegiéndolos del acceso no autorizado, estos secretos se utilizan normalmente en flujos de trabajo de GitHub Actions, donde pueden ser utilizados sin estar directamente escritos en el código, asegurando que las credenciales y datos privados no se expongan accidentalmente cuando el código es compartido o desplegado.
Sabiendo que es un secreto, para desplegar en cPanel se deben crear 3:
- FTP_SERVER
- FTP_USERNAME
- FTP_PASSWORD
Para crear los secretos en un repositorio de GitHub y usarlos en un workflow de GitHub Actions, sigue estos pasos:
- Ir al repositorio que al cual pertenecerán los secretos
- Ve a la pestaña de “Settings” (Configuración)
- Selecciona Secrets and variables en el menú de la izquierda
- Luego selecciona Actions.
- Haz clic en el botón New repository secret para agregar un nuevo secreto.
- Añade el nombre y valor del secreto:
- Name: Dale un nombre al secreto. Este es el nombre que usarás en tu workflow, por ejemplo, FTP_SERVER.
- Value: Introduce el valor del secreto.
- Haz clic en el botón Add secret para guardarlo.
- Repite los dos pasos anteriores para crear FTP_USERNAME y FTP_PASSWORD.
- Añade el nombre y valor del secreto:
Agregar el Actions
Para agregar el Actions se realiza desde el menú superior seleccionando Actions y luego en Choose a workflow se selecciona set up a workflow yourself:
Dentro se guarda el siguiente contenido y se pulsa en Commit chagnges:
name: Deploy via FTP on: push: branches: - main jobs: ftp-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: FTP Deploy uses: SamKirkland/[email protected] with: server: ${{ secrets.FTP_SERVER }} username: ${{ secrets.FTP_USERNAME }} password: ${{ secrets.FTP_PASSWORD }} local-dir: ./ server-dir: /public_html/
Luego desde la pantalla principal de Actions se puede ver el estado, si se realizó o no el despliegue e incluso ejecutarlo manualmente, igualmente se ejecutara automáticamente cada vez que se haga un cambio en el main o master del repositorio.
Ejecutar comandos en cPanel sin tener acceso a terminal
Es posible que tras el despliegue sea necesario ejecutar migraciones de base de datos, correr, composer, artisan u cualquier otro comando, la alternativa para hacerlo en un servidor al que no se tiene acceso a terminal es hacerlo de la siguiente manera Ejecutar comandos en cPanel sin tener acceso a terminal
Precaución
Cuando se realiza un despliegue desde GitHub hacia cPanel, es importante tener en cuenta que este proceso puede sobrescribir archivos existentes en el servidor, si el repositorio contiene cambios que afectan archivos críticos o que no están en el repositorio, se podría perder datos importantes, por ejemplo, si se ha realizado ajustes directamente en el servidor sin incluirlos en el repositorio, estos se perderán al realizar el despliegue, es importante asegurarte de que el repositorio esté siempre sincronizado con la versión más reciente del sitio web antes de realizar un despliegue.
Además, el proceso de despliegue no distingue entre archivos que se necesita y archivos que son innecesarios si están en el repositorio, si accidentalmente se sube archivos de configuración incorrectos o se borran carpetas esenciales en GitHub, esos cambios se reflejarán automáticamente en tu servidor, lo que puede causar fallos en tu sitio web, para evitar estos problemas, siempre se debe respaldar el servidor antes de cualquier despliegue y considerar usar un entorno de prueba para verificar que los cambios no afecten la funcionalidad del sitio en producción.
Hay que recordar que el archivo .gitignore es una herramienta muy importante para evitar que ciertos archivos o directorios sean rastreados o sobrescritos durante un despliegue, lo que puede ayudar a prevenir problemas de borrado accidental en el servidor, este archivo permite especificar qué elementos deben ser ignorados por Git al realizar un seguimiento de cambios, lo que significa que esos archivos no serán incluidos en el repositorio ni afectados por los despliegues.
Por ejemplo, si se tiene archivos específicos del entorno del servidor, como configuraciones personalizadas, claves API o datos sensibles, se puede añadirlos al archivo .gitignore, esto garantiza que esos archivos permanezcan seguros en el servidor y no sean reemplazados por versiones incorrectas o vacías desde el repositorio.
Conclusión
Realizar un despliegue desde GitHub en cPanel puede parecer complicado al principio, pero es como aprender a usar una herramienta poderosa: una vez que dominas el proceso, ahorras tiempo y evitas errores manuales, independiente de cuál de los dos métodos elijas, este flujo automatizado no solo mejora la eficiencia, sino que también garantiza que tu sitio web esté siempre actualizado con los últimos cambios en tu código, igualmente hay que tener siempre precaución con las rutas y tener siempre presente que un despliegue puede borrar archivos del servidor por lo que siempre se debe configurar correctamente.
Administrador de Sistemas, Programador, Docente y ahora resulta que también Blogger (peor es ser tictoker). Más de 20 años de experiencia en computación atendiendo nabos y resolviendo problemas, los cuales si no fuera por estos nabos, no habrían ocurrido en primer lugar. Escribo más que nada sobre tecnología y herramientas en general, además de algunos artículos con opiniones tan subjetivas como irrelevantes, así que si no te gustan, mejor madura y superalo.