jueves, 31 de julio de 2025

馃殌 C贸mo Desplegar Proyectos de GitHub en tu Hosting cPanel (Gu铆a Completa 2025)

Si eres desarrollador web, seguramente sabes lo tedioso que puede ser subir archivos manualmente por FTP cada vez que realizas cambios en tu proyecto. Hoy en d铆a, GitHub y cPanel son dos herramientas clave para automatizar este proceso y trabajar de manera profesional.

En este art铆culo aprender谩s, paso a paso, c贸mo desplegar tus proyectos directamente desde GitHub a tu hosting con cPanel, optimizando tu flujo de trabajo y asegurando actualizaciones r谩pidas y seguras. Adem谩s, te presentaremos el Hosting de PortalPBX, una soluci贸n pensada para desarrolladores que buscan rendimiento, seguridad y automatizaci贸n con integraci贸n GitHub incluida.


馃敼 1. ¿Por qu茅 desplegar tus proyectos con GitHub y cPanel?

Cuando trabajas en desarrollo web, el tiempo y la fiabilidad son esenciales. Conectar GitHub a tu hosting trae ventajas clave:

  • Despliegues r谩pidos: cada vez que hagas un git push en tu repositorio, tu sitio puede actualizarse en segundos.
  • Control total de versiones: vuelve a versiones anteriores en caso de errores o problemas en producci贸n.
  • Menos errores manuales: evitas subir archivos por FTP y olvidar cambios importantes.
  • Profesionalismo y escalabilidad: ideal para proyectos Laravel, PHP, WordPress, aplicaciones Node.js y m谩s.
  • Integraci贸n continua: facilidad para automatizar pruebas y despliegues sin intervenci贸n manual.

馃敼 2. Beneficios de usar el Hosting Optimizado de PortalPBX

Si bien puedes usar cualquier hosting con cPanel, el Hosting de PortalPBX est谩 dise帽ado especialmente para desarrolladores y empresas que necesitan entornos estables, seguros y con soporte t茅cnico experto en Git y Laravel.

✅ Ventajas exclusivas de PortalPBX Hosting:

  • Soporte para Git nativo y conexi贸n SSH segura.
  • Compatibilidad con PHP 8.2, Composer y Node.js.
  • Alto rendimiento gracias a servidores optimizados para aplicaciones modernas.
  • Certificado SSL gratuito y protecci贸n avanzada contra ataques.
  • Planes escalables para proyectos personales, empresariales y multisitio.
  • Soporte t茅cnico especializado en Laravel, Migraciones y despliegues autom谩ticos.

馃巵 Promoci贸n limitada: Si contratas tu plan de Hosting PortalPBX hoy, obtienes:

  • 馃敼 20% de descuento en tu primer a帽o de servicio.
  • 馃敼 Configuraci贸n gratuita de despliegue autom谩tico GitHub → cPanel.
  • 馃敼 Asesor铆a personalizada para optimizar tu proyecto y mejorar el tiempo de carga.

馃憠 Haz clic aqu铆 para contratar Hosting PortalPBX y activar tu descuento


馃敼 3. Requisitos previos para desplegar desde GitHub

Antes de comenzar, aseg煤rate de contar con lo siguiente:

  • Un hosting con cPanel y acceso SSH (PortalPBX recomendado).
  • Un repositorio en GitHub (puede ser p煤blico o privado).
  • Git instalado en el servidor (PortalPBX ya lo incluye).
  • Composer y/o Node.js si tu proyecto requiere dependencias.
  • Un dominio o subdominio apuntando a tu hosting.

馃敼 4. Pasos para desplegar tu proyecto desde GitHub en cPanel

馃搶 4.1 Con茅ctate al servidor v铆a SSH

ssh usuario@tudominio.com

Esto te permitir谩 ejecutar comandos directamente en tu hosting.

馃搶 4.2 Clona tu repositorio

cd public_html
git clone https://github.com/usuario/mi-proyecto.git

Si tu repositorio es privado, deber谩s configurar llaves SSH para autenticarte sin pedir credenciales en cada actualizaci贸n.

馃搶 4.3 Configura la rama principal

cd mi-proyecto
git checkout main

Aseg煤rate de estar en la rama de producci贸n (por ejemplo, main o master).

馃搶 4.4 Actualiza tu proyecto

git pull origin main

Con este comando obtendr谩s los 煤ltimos cambios del repositorio.

馃搶 4.5 Instala dependencias

Si es un proyecto Laravel o PHP con Composer:

composer install --no-dev --optimize-autoloader

Para proyectos con Node.js:

npm install
npm run build

馃搶 4.6 Configura permisos de archivos

chmod -R 755 storage bootstrap/cache

Esto evita errores de escritura en Laravel y otros frameworks PHP.

馃搶 4.7 Configura tu dominio

Desde el panel de cPanel, apunta tu dominio a la carpeta public de tu proyecto para que tu aplicaci贸n sea accesible.


馃敼 5. Automatizaci贸n con Webhooks de GitHub

Para no conectarte manualmente cada vez que hagas un cambio, puedes usar Webhooks en GitHub:

  1. En tu repositorio, ve a Settings → Webhooks.
  2. Agrega una URL hacia tu hosting (por ejemplo https://tudominio.com/deploy.php).
  3. Crea un archivo deploy.php en tu servidor con el siguiente contenido:
<?php
shell_exec('cd /home/usuario/public_html/mi-proyecto && git pull origin main 2>&1');
echo "✅ Despliegue completado";
?>

As铆, cada vez que hagas un push a GitHub, tu proyecto se actualizar谩 autom谩ticamente.


馃幆 Oferta Especial de PortalPBX

Con el Hosting de PortalPBX tendr谩s:

  • 馃殌 Despliegue autom谩tico desde GitHub sin configuraciones complejas.
  • 馃攼 Certificados SSL y seguridad avanzada incluidos.
  • ⚡ Servidores optimizados para m谩xima velocidad y rendimiento.
  • 馃摓 Soporte t茅cnico 24/7 especializado en Laravel, PHP y VoIP.
  • 馃捀 20% de descuento por tiempo limitado + instalaci贸n gratuita del flujo GitHub → cPanel.

馃挕 Tip: Si contratas tu plan hoy mismo, nuestro equipo se encarga de todo el proceso de configuraci贸n inicial, dej谩ndote tu proyecto funcionando sin esfuerzo.

馃敟 Contrata tu Hosting PortalPBX con 20% de Descuento


馃搶 Conclusi贸n

Integrar GitHub con tu hosting cPanel es una de las mejores decisiones para trabajar de manera profesional, r谩pida y sin errores. Si adem谩s lo combinas con Hosting PortalPBX, no solo automatizas tu flujo de trabajo, sino que aseguras rendimiento, seguridad y soporte experto a un precio promocional.

Ya no pierdas tiempo con subidas manuales. ¡P谩sate a un sistema de despliegue moderno y lleva tu proyecto al siguiente nivel!

jueves, 17 de julio de 2025

馃洝️ C贸mo usar Wrappers en C para gestionar Asterisk, Servidores de Correo e Inteligencia Artificial desde la Web

馃洝️ C贸mo usar Wrappers en C para gestionar Asterisk, Servidores de Correo e Inteligencia Artificial desde la Web

Cuando desarrollamos sistemas que necesitan interactuar con Asterisk (PBX), servidores de correo como Postfix/Dovecot, o incluso ejecutar modelos de inteligencia artificial, muchas veces nos encontramos con una limitaci贸n importante:

馃敀 PHP o tu app web no puede ejecutar comandos privilegiados directamente.

Por temas de seguridad, el usuario www-data de Apache/Nginx no tiene permisos para borrar correos, reiniciar servicios o ejecutar modelos de IA desde el sistema. ¿La soluci贸n? ➤ Un wrapper en C controlado con sudo.

馃З ¿Qu茅 es un wrapper en este contexto?

Un wrapper es un programa en C (o Bash/Python) que act煤a como intermediario seguro entre tu aplicaci贸n web y el sistema operativo. Lo usas para:

  • Borrar buzones de forma segura
  • Ejecutar comandos como postmap, dovecot reload, etc.
  • Recargar configuraciones de Asterisk (module reload, dialplan reload)
  • Ejecutar modelos de IA (como un clasificador en Python o C++)

馃洜️ Proyecto completo: sistema_wrapper.c

Este wrapper m谩s avanzado permite ejecutar diferentes operaciones del sistema de forma controlada:

馃摝 Funcionalidades del wrapper:

  • ✅ Eliminar un buz贸n de correo
  • ✅ Recargar Asterisk
  • ✅ Ejecutar un modelo IA
  • ✅ Registrar todo en un log seguro
  • ✅ Validar argumentos
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>

const char *LOG_PATH = "/var/log/sistema_wrapper.log";

void registrar_log(const char *operacion, const char *detalle) {
    FILE *log = fopen(LOG_PATH, "a");
    if (log) {
        time_t ahora = time(NULL);
        char *tiempo = ctime(&ahora);
        tiempo[strcspn(tiempo, "\n")] = 0;
        fprintf(log, "[%s] [%s] %s\n", tiempo, operacion, detalle);
        fclose(log);
    }
}

void eliminar_buzon(const char *email) {
    if (strstr(email, "..") || strchr(email, ';')) {
        registrar_log("ERROR", "Entrada maliciosa en email");
        printf("Entrada inv谩lida.\n");
        return;
    }

    char comando[512];
    snprintf(comando, sizeof(comando), "rm -rf /var/mail/vhosts/%s", email);

    int r = system(comando);
    if (r == 0) {
        registrar_log("BUZON", email);
        printf("Buz贸n %s eliminado.\n", email);
    } else {
        registrar_log("ERROR", "Fallo al eliminar buz贸n.");
        printf("Error al eliminar buz贸n.\n");
    }
}

void recargar_asterisk() {
    int r = system("asterisk -rx 'module reload'");
    if (r == 0) {
        registrar_log("ASTERISK", "Recarga de m贸dulos completada");
        printf("Asterisk recargado.\n");
    } else {
        registrar_log("ERROR", "Fallo al recargar Asterisk");
        printf("Error recargando Asterisk.\n");
    }
}

void ejecutar_modelo_ia() {
    int r = system("python3 /opt/ia/clasificador.py /tmp/mensaje.txt >> /tmp/resultado.txt");
    if (r == 0) {
        registrar_log("IA", "Modelo ejecutado con 茅xito");
        printf("Modelo IA ejecutado.\n");
    } else {
        registrar_log("ERROR", "Fallo al ejecutar IA");
        printf("Error en ejecuci贸n de IA.\n");
    }
}

void mostrar_uso() {
    printf("Uso: sistema_wrapper [comando] [argumento]\n");
    printf("Comandos:\n");
    printf("  eliminar-buzon email@dominio.com\n");
    printf("  recargar-asterisk\n");
    printf("  ejecutar-ia\n");
}

int main(int argc, char *argv[]) {
    if (argc < 2) {
        mostrar_uso();
        return 1;
    }

    if (strcmp(argv[1], "eliminar-buzon") == 0 && argc == 3) {
        eliminar_buzon(argv[2]);
    } else if (strcmp(argv[1], "recargar-asterisk") == 0) {
        recargar_asterisk();
    } else if (strcmp(argv[1], "ejecutar-ia") == 0) {
        ejecutar_modelo_ia();
    } else {
        mostrar_uso();
        return 1;
    }

    return 0;
}

⚙️ Compilaci贸n y permisos

gcc -o /usr/local/bin/sistema_wrapper sistema_wrapper.c
chmod +x /usr/local/bin/sistema_wrapper

馃攼 Seguridad v铆a sudoers

sudo visudo

Agrega esta l铆nea:

www-data ALL=(ALL) NOPASSWD: /usr/local/bin/sistema_wrapper

馃寪 Llamada desde Laravel o PHP

// Eliminar buz贸n
shell_exec("sudo /usr/local/bin/sistema_wrapper eliminar-buzon jose@midominio.com");

// Recargar Asterisk
shell_exec("sudo /usr/local/bin/sistema_wrapper recargar-asterisk");

// Ejecutar modelo IA
shell_exec("sudo /usr/local/bin/sistema_wrapper ejecutar-ia");

馃搳 Log generado

Contenido t铆pico en /var/log/sistema_wrapper.log:

[2025-07-17 10:23:44] [BUZON] jose@midominio.com
[2025-07-17 10:24:01] [ASTERISK] Recarga de m贸dulos completada
[2025-07-17 10:25:05] [IA] Modelo ejecutado con 茅xito

馃殌 Conclusi贸n

Los wrappers en C son herramientas extremadamente 煤tiles para permitir que tu sistema web realice tareas privilegiadas de forma controlada, segura y auditada. Ya sea para administrar Asterisk, Postfix o ejecutar modelos IA, puedes confiar en este enfoque cuando los permisos o la seguridad del sistema sean una prioridad.