Integrar Docker en VestaCp o HestiaCP, para hacer accesibles tus sitios dockerizados

Como integrar Docker en VestaCp en menos de 20 minutos y no morir en el intento, con esta sencilla guía. 😀

VestaCp o su nuevo fork HestiaCP tiene como base la exposición pública de cada dominio/site, usando los mismos mecanismos para cada uno de ellos.
Excepto aquellos que usan plantillas distintas del default, y de esto voy a hablar para poder «puentear» el listening con un site que funciona dentro de un Docker.

El mecanismo por defecto es, recibir las visitas desde nginx (si está instalado y activado en el site), y redirigirlo a apache. Y este es quien se encarga de procesar los datos con php o el lenguaje que sea.

La forma rápida, o a bocajarro, es, configurar desde consola el virtual-server de apache, para que haga de proxy reverso (previo paso a activar el proxy en apache), y este dirija el tráfico al puerto público del sitio dockerizado.

Si bien esto puede ser entretenido, ni es la mejor forma de hacerlo en VestaCp, ni tampoco será permanente.
¿Porque?
Pues porque al reiniciar VestaCp perderemos esta configuración personalizada. (Porque VestaCp reescribe los ficheros de configuración)

Solución, integrar Docker en VestaCp, usando las plantillas nginx para que él mismo fabrique las configuraciones acorde a la necesidad de cada site.

Si no sabes lo que es docker pasate por aquí: Docker y Docker-compose

La documentación oficial de VestaCp está en https://vestacp.com/docs/, pero no te explican como crear una plantilla, sólamente lo mencionan.

Ejemplo de como integrar Docker en VestaCp, y de como se está usando este WordPress con una instancia de Docker (Si, este blog funciona virtualmente desde Docker)

integrar Docker en VestaCp desde plantilla Nginx

Como crear las plantillas de nginx para VestaCp o HestiaCp.
Muy sencillo.
En /usr/local/vesta/data/templates/web/nginx
(en mi caso como hestiaCp en la ruta no pone vesta, pero es casi lo mismo)

Observa el aspecto de los ficheros.
Por cada plantilla hay 2 ficheros, un fichero con extensión «tpl», y otro fichero con extensión «stpl»

listado de plantillas nginx

Vayamos al contenido de cada uno de ellos

Fichero tpl:

server {
    listen      %ip%:%proxy_port%;
    server_name %domain_idn% %alias_idn%;
        
    include %home%/%user%/conf/web/%domain%/nginx.forcessl.conf*;

    location / {
        proxy_pass      http://%ip%:[DOCKER-PORT];
        location ~* ^.+\.(%proxy_extentions%)$ {
            root           %docroot%/[FOLDER-SITE];
            access_log     /var/log/%web_system%/domains/%domain%.log combined;
            access_log     /var/log/%web_system%/domains/%domain%.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }

    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }

    location @fallback {
        proxy_pass      http://%ip%:[DOCKER-PORT];
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}

    include %home%/%user%/conf/web/%domain%/nginx.conf_*;
}

Fichero stpl:

server {
    listen      %ip%:%proxy_ssl_port% ssl http2;
    server_name %domain_idn% %alias_idn%;
    ssl_certificate      %ssl_pem%;
    ssl_certificate_key  %ssl_key%;
    ssl_stapling on;
    ssl_stapling_verify on;
    error_log  /var/log/%web_system%/domains/%domain%.error.log error;

    include %home%/%user%/conf/web/%domain%/nginx.hsts.conf*;

    location / {
        proxy_pass      http://%ip%:[DOCKER-PORT];
        location ~* ^.+\.(%proxy_extentions%)$ {
            root           %sdocroot%/[FOLDER-SITE];
            access_log     /var/log/%web_system%/domains/%domain%.log combined;
            access_log     /var/log/%web_system%/domains/%domain%.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }

    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }

    location @fallback {
        proxy_pass      http://%ip%:[DOCKER-PORT];
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}

    include %home%/%user%/conf/web/%domain%/nginx.ssl.conf_*;
}

En ambos ficheros hemos de cambiar:
[DOCKER-PORT]: El puerto de nuestro docker esperando el tráfico
[FOLDER-SITE]: La carpeta web que ha creado VestaCp o HestiaCp

Después de esto reiniciamos el servicio de vestacp y nginx.
Y al volver al panel de control de VestaCP o HestiaCP, al editar el sitio, en Nginx Template deberemos de ver en la lista nuestra nueva plantilla.

Si te a parecido interesante y has conseguido integrar correctamente los dominios conectados con docker, te sugiero los siguientes automatismos para crear los siguientes entornos:
Prestashop en Docker
WordPress en Docker
Odoo en Docker

Acerca de Pedro Reina

Más de 15 años de experiencia en programación Php, python, Mysql, Hml, css, y algunos frameworks. Webmaster aprendiendo SEO. Entusiasta de la informática y la electrónica, pequeño emprendedor y fabricante de ideas.

Deja una respuesta