hefestoapicontainer

VirtualHost: entornos y certificados https

Hefesto permite gestionar virtual host fácilmente, no tendrás que configurar ningún fichero nginx, ni apache, ni certificados https, etc.

Hay dos tipos de Virtual Host en Hefesto:

Virtual Host público

Es el virtual host sobre el que se despliegan las apis, y el que expone las urls para acceder a esas mismas apis. Tiene asociado una contraseña y un entorno.

Virtual Host de administración

Permite hacer despliegues, y consumir apis no publicadas y otras operaciones de administración sobre cualquier virtual host público de esa instancia de Hefesto. Para ello usa la contraseña del virtual host público.

Por ejemplo, una instancia de Hefesto, podría contener:

Con esa configuración, un desarrollador, podría construir una api llamada “test”, con basepath /test, y con un endpoint /ping.

Luego el desarrollador configurará el virtual host de administración en el cliente, incluyendo en esa configuración los virtual host públicos y sus contraseñas.

A continuación, con el cliente ya configurado, podrá desplegar la api “test” sobre hefesto.delavieja.com y sobre developers-hefesto.delavieja.com. De modo que los siguientes recursos se podrán consumir:

    https://hefesto.delavieja.com/test/ping 
    https://developers-hefesto.delavieja.com/test/ping 

El entorno en los virtual host públicos

Los virtual host públicos, además de tener asociada una contraseña, tienen asociado un entorno, el entorno es sólo un string cualquiera, que permite que una misma api, se comporte de manera diferente dependiendo del virtualHost en que se haya publicado, usando los maps de la API.

hefesto.delavieja.com podría tener asociado el entorno “pro” y developers-hefesto.delavieja.com, el entorno “dev”. La api test podría tener un map, que en dev tenga un valor y en pro tenga otro, de modo que al leer el map de nuestra api en hefesto.delavieja.com, obtengamos un valor y en developers-hefesto.delavieja.com, leyendo el mismo map, obtengamos otro valor.

Por ejemplo, el endpoint /ping de la api, podría hacer una conexión contra un servicio externo, que en dev sea http://mydevservice.com y en pro sea https://myservice.com.

Puedes obtener más información sobre los maps en la sección maps de la documentación.

Configuración de los Virtual Host en local

En local, ya existe el virtual host de administración “localhost”, por lo que no tendrás que crearlo. Sí que tendrás que crear un virtual host público, por ejemplo, myhefesto.com. Para ello ve a la carpeta hefesto-server/scripts y ejecuta:

    ./virtualhost-public-set.sh myhefesto.com dev yourpassword

Luego incluye en tu fichero /etc/hosts el dominio myhefesto.com para que se resuelva de forma local:

    127.0.0.1 myhefesto.com

De forma que el navegador, o cualquier otro cliente http, al hacer una petición contra myhefesto.com vaya contra tu instancia de hefesto, que corre en local.

Posteriormente tendrás que configurar myhefesto.com y su password en el cliente, para poder hacer despliegues sobre myhefesto.com.

Recuerda usar http en local, para cualquier interacción contra cualquier tipo de virtual host de Hefesto.

Configuración de los Virtual Host en un servidor

En un servidor, lo primero es apuntar todos los dominios DNS contra la ip del servidor en que esté corriendo Hefesto. Tanto el dominio de administración, como los públicos. Debemos asegurarnos además de que nuestro servidor tenga abiertos los puertos 80 y 443.

Después tendremos que crear el virtual host de administración, para un dominio como myadmindomain.com iremos al directorio hefesto-server/scripts y ejecutaremos:

    ./virtualhost-admin-set.sh myadmindomain.com generatecert

Al usar el string “generatecert” , se crearán los certificados https para ese dominio, se hará usando letsencrypt, por lo que la primera vez que ejecutemos este comando en una instancia de Hefesto, letsencrypt nos pedirá un email, y nos hará alguna pregunta de registro más.

Después tendrás que crear al menos un virtual host público, por ejemplo, para myhefesto.com, ve a la carpeta hefesto-server/scripts y ejecuta:

    ./virtualhost-public-set.sh myhefesto.com dev yourpassword generatecert

Posteriormente tendrás que configurar myhefesto.com y su password en el cliente, para poder hacer despliegues sobre myhefesto.com.

Recuerda usar https al instalar hefesto en el servidor, para cualquier interacción contra cualquier tipo de virtual host de Hefesto.

Acortar urls mediante un prefijo en el path

Hay veces que en un virtual host sólo se expone una api que sirve htmls, por ejemplo, podrías hacer una api, cuyo basepath fuera /test que expusiera un endpoint con path / y otro endpoint /home. Ambos endpoints devolverían vistas html, en principio las urls serían:

    myvirtualhost.com/test/ 
    myvirtualhost.com/test/home

Estas urls no son muy amigables, no tiene mucho sentido mostrar el basepath /test. Para resolver este problema, puedes hacer que el virtual host, añada un prefijo al path, para ello, al crear el virtual host público deberías hacer lo siguiente:

    ./virtualhost-public-set.sh myvirtualhost.com dev yourpassword generatecert /test

De esta forma cualquier petición que vaya contra myvirtualhost.com añadirá el prefijo /test al path, de modo que las urls expuestas serán:

    myvirtualhost.com
    myvirtualhost.com/home

En local, si no quieres generar el certificado, basta conque en lugar de usar el string generatecert, uses cualquier otro string, como nogeneratecert.

Modificar la configuración de un virtualhost

Los comandos virtualhost-public-set.sh y virtualhost-admin-set.sh sobreescibirán cualquier configuración previa, por lo que si necesitas realizar cualquier modificación en un virtual host, sólo tienes que volver a ejecutar cualquiera de los dos comandos anteriores con la nueva configuración.

Desactivar un virtual host

Puedes desactivar un virtual host de cualquier tipo desde hefesto-server/scripts ejecutando:

    ./virtualhost-delete.sh myvirtualhost.com

Siendo myvirtualhost.com el virtual host que quieras desactivar

Renovar los certificados https

Puedes renovar todos los certificados caducados o a punto de caducar desde hefesto-server/scripts ejecutando:

    ./virtualhost-certs-renew.sh

Es conveniente que ejecutes este comando todos los días una vez, para que nunca llegue a caducar un certificado, para ello añade la ejecución a un cron de esta manera:

    crontab -e

Y luego escribes:

    0 6 * * * /your-hefesto-root-path/hefesto-server/scripts/virtualhost-certs-renew.sh

Puedes usar cualquier otra hora del día.

Ir a la home