En la actualidad, para gestionar de forma eficiente y segura cualquier proyecto de software se vuelve casi obligatorio el uso de versionadores de código si se trabaja en equipos de dos o más desarrolladores. Existen varias herramientas para esto, sin embargo, una de las alternativas más utilizadas es sin lugar a dudas GIT como herramienta y GitHub como proveedor, por eso en este artículo veremos 2 maneras de cómo realizar un despliegue de GitHub en cPanel aunque no se tenga acceso a Terminal.
Contenido
Cómo realizar un deploy de Github en cPanel
Cuando se utiliza un plan con cPanel para la gestión de hosting, puede parecer que combinar ambos no es tan fácil debido a que requiere una serie de pasos para permitir que cualquier cambio en tu repositorio pueda reflejarse automáticamente en el servidor web, los cuales se explicarán aquí paso a paso de manera sencilla para realizar un despliegue de GitHub en cPanel.
Existen dos maneras de hacer un deploy de Github en cPanel: la primera es permitir que cPanel gestione el despliegue y el segundo método es implementar que GitHub lo haga a través de su servicio GitHub Actions a través de FTP. Sin importar cuál de los dos métodos se elija siempre se debe tener presente que estas tareas pueden eliminar archivos del servidor, por tanto, se debe tener siempre extremo cuidado en la integración.
También hay que tener presente que cada proyecto es un mundo y la implementación depende de cada caso en particular y no todos los sitios son iguales, por ejemplo en diferentes proyectos se tendrá que excluir ciertas carpetas para evitar que sean sobrescritas, así que esta guía solo debe ser usada como referencia para trabajar con Github en cPanel y se deben hacer los cambios y/o ajustes necesarios para evitar perder datos por accidente.
En resumen, si bien la guía no es difícil, tampoco es recomendable para principiantes si se piensa usar en entornos de producción, por eso se recomienda usarla primero en entornos de desarrollo y luego que realmente se esté familiarizado tanto con el proceso como con los ajustes necesarios, recién se podría pensar en probar en producción y solo después tener un respaldo completo de cPanel. El respaldo debe incluir todo, no solo la web, dado que la web, el correo y los archivos de configuración de cPanel comparten el mismo espacio y en caso de error también pueden ser borrados.
Método 1: Gestión desde cPanel
El panel cPanel ya incorpora una herramienta propia para clonar repositorios GIT de forma sencilla, el punto más complicado es la configuración inicial donde se debe crear una llave y configurarla en un archivo dentro de cPanel, se recomienda que el directorio donde se vaya a clonar esté completamente vacío debido a que si existen datos, esa información se perderá.
Un punto importante es que las actualizaciones posteriores del repositorio son manuales, cPanel no actualizará el repositorio automáticamente y se deberá realizar desde la herramienta cada vez que se necesite.
En caso de repositorios públicos no se requiere el siguiente paso para crear una llave por lo que se puede saltar, sin embargo si el repositorio es privado, el primer paso es crear una llave SSH y agregarla al proveedor de GIT, sea GitHub, GitLab u otro.
Crear la llave
Se puede usar tanto una llave existente como una nueva, si no se tiene ninguna llave aún, entonces lo primero será generar una llave SSH, lo cual se puede realizar desde la consola del servidor si se tiene SSH habilitado o desde la terminal del propio PC, ya sea Linux, Mac o Windows usando WSL, el comando para generarlo sería el siguiente:
ssh-keygen -t rsa -f ~/.ssh/llave -b 4096 -C usuario@ejemplo.com
En el caso de que se utilice esta llave recién generada en lugar de una previamente existente, el paso siguiente es dirigirse al proveedor de GIT y agregar la llave pública, por ejemplo, en GitHub se debe hacer desde “Profile” → “Settings” → “SSH keys” → “New SSH key” y agregarla a la cuenta.
El próximo paso es agregar la llave privada en el servidor y para eso se debe crear una carpeta llamada .ssh en la raíz del usuario de cPanel si aún no existe, sin embargo, un detalle importante es que por defecto no se pueden ver los archivos ocultos y eso se puede modificar desde el Administrador de Archivos yendo a “Configuración” y activando la opción para mostrarlos:
El siguiente paso es configurar los permisos de la llave, se debe asignar permisos 600:
El siguiente paso es crear dentro de .ssh un archivo llamado config, es decir crear el archivo ~/.ssh/config con un editor de texto y se añade las siguientes líneas:
Host github.com HostName github.com User git@github.com IdentityFile ~/.ssh/llave
Por último se debe asignar permisos 600 al archivo config de la misma forma que se hizo con la llave, con esto ya se tendrá la configuración necesaria para autenticarse en el proveedor GIT que corresponda, sea GitHub, GitLab u otro.
Agregar repositorio
Para agregare el repositorio en cPanel se debe ir a Git Version Control, hacer clic en Crear y completar el formulario:
En él formulario se debe rellener:
- Clone URL: direccion del repositorio, que debe ser la direccion para SSH y no con HTTP salvo que sea publico
- Repsoitory Path: Se debe indicar el directorio donde se clonara el repositorio, la carpeta debe estar vacia.
- Repository Name: Un nombre descriptivo para el repositorio
Una vez que se hace clic en Crear se clonará el repositorio, dependiendo del tamaño del repositorio puede tardar algunos minutos en completarse, además desde la lista de repositorios se tendrá la opción de Administrar desde la cual se podrá actualizar el repositorio cuando se necesite.
Como podemos ver este es un método simple para realizar un deploy de Github en cPanel, pero como ya decíamos no es el único.
Método 2: GitHub Actions
Otra opción, mucho más moderna y práctica por ser automática, es realizar el despliegue directamente desde GitHub utilizando Actions, resulta una opción interesante ya que basta con hacer un pull request a la rama main para que los cambios sean aplicados, sin embargo hay que tener en cuenta que si bien es cierto que GitHub ofrece una capa gratuita del servicio, lo hace con ciertos límites y una vez superado dicho límite, GitHub facturará por el uso.
Crear los Secretos
Para realizar el despliegue, el primer paso es crear 3 secretos en GitHub, un secreto es simplemente un dato sensible que debe ser manejado con cuidado para que no se hagan públicos por accidente, datos como claves API, contraseñas o tokens de autenticación, los cuales por seguridad nunca deben estar expuestos ni hardcodeados en el código fuente, incluso cuando se trate de repositorios privados.
Para proporcionar una solución segura, GitHub permite guardar los datos sensibles de forma segura en un almacén, manteniéndolos siempre protegidos de la vista e inyectándolos en flujos de trabajo de un action, de forma similar a como funcionan las variables de entorno en un sistema operativo, de esa forma pueden ser utilizados sin estar directamente escritos en el código, permitiendo que las credenciales y datos secretos nunca se expongan de forma accidental cuando el código es revisado, compartido y/o desplegado.
Teniendo claro qué es un secreto, para desplegar en cPanel se requiere crear al menos tres secretos:
- FTP_SERVER
- FTP_USERNAME
- FTP_PASSWORD
La manera de crear estos secretos en un repositorio de GitHub y usarlos en GitHub Actions se debe realizar desde:
- 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
Una vez agregados los secretos, se puede agregar el Actions, para crearlo se debe ir al menú superior y seleccionar 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/FTP-Deploy-Action@4.3.0 with: server: ${{ secrets.FTP_SERVER }} username: ${{ secrets.FTP_USERNAME }} password: ${{ secrets.FTP_PASSWORD }} local-dir: ./ server-dir: /public_html/
Hay que tener presente que siempre se ejecutará automáticamente cada vez que se realicen modificaciones en la rama main o master del repositorio, si los cambios no se reflejan en el sitio, desde la pestaña Actions es posible verificar el estado para comprobar si se realizó el despliegue e incluso ejecutarlo de forma manual si es necesario.
Ejecutar comandos en cPanel sin tener acceso a terminal
Otra tarea que es habitual en los despliegues es la necesidad de ejecutar migraciones de base de datos, correr Composer, Artisan u otro comando, una buena alternativa para realizar estas tareas en un servidor con cPanel al que no se tiene acceso mediante la terminal es hacerlo de la siguiente manera: Cómo Ejecutar Comandos SSH en cPanel sin Terminal
Precaución
Al desplegar desde GitHub en cPanel, siempre hay que tener presente que el proceso puede sobrescribir archivos existentes en el servidor, si el repositorio contiene cambios en archivos críticos o si en el servidor hay ajustes que no fueron incluidos en el repositorio, esos cambios se perderán, por eso, es importante mantener el repositorio sincronizado con la versión más reciente del sitio antes de desplegar.
El despliegue no distingue entre archivos necesarios o innecesarios: si en GitHub se suben configuraciones incorrectas o se eliminan carpetas esenciales, esos cambios se aplicarán en el servidor y podrían causar fallos o, peor aún, pérdida de información, para evitarlo, siempre se debe contar con respaldos antes de desplegar y se debe considerar usar un entorno de prueba para verificar el correcto funcionamiento.
El archivo .gitignore es fundamental para evitar que ciertos archivos o carpetas sean rastreados o sobrescritos, esto ayuda a proteger configuraciones personalizadas, claves API o datos sensibles del servidor, evitando que sean reemplazados por versiones incorrectas o vacías del repositorio.
Conclusión
Implementar un deploy desde GitHub en cPanel puede parecer algo complicado al inicio, pero con práctica se convierte en una herramienta muy interesante, una vez que se domina el proceso, se ahorra tiempo y sobre todo se minimizan errores, sin embargo sin importar el método que se elija, este tipo de automatización no solo optimiza el flujo de trabajo, sino que asegura que tu sitio web se mantenga al día con las últimas actualizaciones de tu código, aún así, es fundamental prestar atención a las rutas y recordar que un despliegue puede eliminar archivos existentes en el servidor, por lo que la configuración debe realizarse con sumo cuidado.