Después de tener algun problema con las ultimas actualizaciones de Traefik me decidí a pasar el proxy inverso a Caddy , para ello lo primero será agregarlo en nuestro dockercompose
caddy
container_name caddy
image caddy 2.6.4-alpine
domainname xxxxxx.duckdns.org
restart always
networks
traefik
default
ports
"80:80"
"443:443"
"443:443/udp"
"2019:2019"
volumes
$ DOCKERDIR /caddy/Caddyfile:/etc/caddy/Caddyfile
$ DOCKERDIR /caddy/data:/data
$ DOCKERDIR /caddy/config:/config
$ DOCKERDIR /caddy/log:/var/log/
$ DOCKERDIR /wordpress/data/html:/var/www/html
environment
TZ=$ TZ
DUCKDNS_TOKEN=$ DUCKDNS_TOKEN
CF_API_EMAIL=$ CLOUDFARE_EMAIL
CF_DNS_API_TOKEN=$ CLOUDFARE_DNS_API_TOKEN
logging
driver"json-file"
options
max-file"10"
max-size"200k"
Usaremos la versión alpine mas ligera y con menor tamaño , esta linea es totalmente opcional , pero luego veremos que puede ser necesaria en caso de contener paginas con iframe
xxxxxxxxxx
$ DOCKERDIR /wordpress/data/html:/var/www/html
Indicaremos la ubicación de nuestro fichero Caddyfile que será el fichero de configuración de todo el tinglado
xxxxxxxxxx
$ DOCKERDIR /caddy/Caddyfile:/etc/caddy/Caddyfile
Una vez levantado el docker empezaremos a darle funcionalidades a nuestro Caddy
La primera parte es la sección global , donde de momento indicaremos nuestro email y si por el puerto 2019 se podrá acceder a la API de Caddy
xxxxxxxxxx
# Configuración global para todos los sitios
email xxxxxx.yyyyyy@gmail.com
#Activar dashboard
admin :2019
Pasaremos a las secciones de configuración de los subdominios , en este caso podemos poner uno o varios subdominios separados por un espacio , Caddy se encargara si todo es correcto de obtener y crear los certificados digitales de cada uno de ellos.
En este ejemplo al ser una pagina que quiero que este protegida con usuario y contraseña al acceder desde el exterior usaremos el middleware basicauth que nos permite evitar el acceso a un servicio si no te has autenticado correctamente
El siguiente bloque define como se van a procesar los logs de Caddy y sus parámetros de configuración
xxxxxxxxxx
############################################################
subdominio1.xxxxxxxxxxxx.duckdns.org subdominio2.xxxxxxxxxxxx.duckdns.org
basicauth
usuario1 $2y$10$3BSnrRuD9c.O9erererereej6NqipuLYVxI7g6GpSubk9pNDIjXDVa
usuario2 $2y$10$MAreregdojC.Lyy8ShgdgdjFL8egdgd9JylMLG9JbwxS/j6ULAy
reverse_proxy http://192.168.1.20:480
log
output file /var/log/caddy/subdominio1.xxxxxxxxxxxx.duckdns.org.access.log
roll_size 10mb
roll_keep 20
roll_keep_for 720h
############################################################
subdominio1.rivas.cloud subdominio2.rivas.cloud
basicauth
usuario1 $2y$10$3BSnrRuD9c.O9erererereej6NqipuLYVxI7g6GpSubk9pNDIjXDVa
usuario2 $2y$10$MAreregdojC.Lyy8ShgdgdjFL8egdgd9JylMLG9JbwxS/j6ULAy
reverse_proxy http://192.168.1.20:480
log
output file /var/log/caddy/subdominio1.rivas.cloud.access.log
roll_size 10mb
roll_keep 20
roll_keep_for 720h
Tengo una serie de paginas con datos meteorológicos dentro del servidor web a las que se accede con un path , para que no aparezca el path en el navegador y solo aparezca el subdominio lo resolví modificando la ruta y luego llamando a servicio web , de esta forma el visitante no vera el path de la pagina
xxxxxxxxxx
############################################################
meteo-xxxxx.antrivas.duckdns.org
handle *
rewrite * /xxxxx uri
reverse_proxy http://192.168.1.20:9080
log
output file /var/log/caddy/meteo-xxxxx.antrivas.duckdns.org.access.log
roll_size 10mb
roll_keep 20
roll_keep_for 720h
Esta seria la forma de hacer una redirección de www a non www totalmente transparente
xxxxxxxxxx
#Redireccion www a non www
www.rivas.cloud
redir https://rivas.cloud uri
Y después llamar a WordPress , así tanto www como no www llamaran a WordPress
xxxxxxxxxx
############################################################
rivas.cloud
reverse_proxy http://rivas.cloud
log
output file /var/log/caddy/global.rivas.cloud.access.log
roll_size 10mb
roll_keep 20
roll_keep_for 720h
En el dominio duckdns preferia enviar al visitante a una pagina en construcción , aplicamos la misma técnica anterior y modificamos la url para que sea transparente y apunte a la pagina de “en construcción”
xxxxxxxxxx
############################################################
# Redireccion a pagina en construccion
xxxxxxxx.duckdns.org
handle *
rewrite * /contruccion/index.php uri
reverse_proxy http://rivas.cloud
log
output file /var/log/caddy/xxxxxxxx.duckdns.org.access.log
roll_size 10mb
roll_keep 20
roll_keep_for 720h
Después de todo ello me encontre que Grafana me estaba dando problemas al visualizar los dashboards , con el error este tan místico que puede ser casi cualquier cosa , ¡¡¡ gracias Grafana por dar tantas pistas !!!

Para ver de donde viene el error ahora nos vendrá muy bien esta linea del dockercompose
xxxxxxxxxx
$ DOCKERDIR /wordpress/data/html:/var/www/html
Crearemos una pagina en ese directorio llamada aire.html con este contenido , donde pondremos el iframe a pantalla completa
xxxxxxxxxx
<!doctype html>
<html lang=''>
<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="CSS/styles.css">
<style>
#contenedor {
width 700px;
#cabecera {
#menu {
float left;
width 225px;
#contenido {
float left;
width 470px;
#pie {
clear both;
**// prueba
.contenedor-responsive
position relative;
padding-bottom 56.25%;
padding-top 30px;
height 0;
overflow hidden;
.contenedor-responsive iframe,
.contenedor-responsive object,
.contenedor-responsive embed
position absolute;
top 0;
left 0;
width 100%;
height 100%;
</style>
</head>
<body>
<div id="contenedor">
<div id="cabecera">
</div>
<div id="menu">
<div id='cssmenu'>
</div>
</div>
<div id="contenido" class="contenedor-responsive">
<iframe frameborder="0" allowfullscreen="" src="http://xxxxxxxxx.rivas.cloud/d/7zvlpJD4z/contaminacion?orgId=1&theme=dark&kiosk" width="100px" height="600px" id="theIframe" name="pagina" >El navegador no soporta iframes</iframe>
</div>
<div id="pie">
</div>
</div>
</body>
</html>
La probamos para ver que funciona correctamente y vemos el dashboard de Grafana alojado en nuestro servidor
Una vez comprobado vamos a hacer que sea Caddy quien nos sirva el HTML de forma directa sin acceder a ninguna pagina , para ello lo primero será bajarle el tamaño , podemos usar una herramienta del estilo https://www.willpeavy.com/tools/minifier/ para ello , una vez obtenido el código reducido cambiaremos la comillas dobles por comillas sencillas.
Y el código para este subdominio quedaria mas o menos así , en el indicamos el tipo de respuesta y el contenido de la respuesta que es nuestro HTML pero de forma embebida.
xxxxxxxxxx
############################################################
# Redireccion a pagina
yyyyyyyyyy.rivas.cloud
handle *
header Content-Type text/html
respond "<!doctype html><html lang=''><head> <meta charset='utf-8'> <meta http-equiv='X-UA-Compatible' content='IE=edge'> <meta name='viewport' content='width=device-width, initial-scale=1'> <link rel='stylesheet' href='CSS/styles.css'> <style>#contenedor{width: 700px;}#cabecera{}#menu{float: left; width: 225px;}#contenido{float: left; width: 470px;}#pie{clear: both;}**// prueba.contenedor-responsive{position: relative; padding-bottom: 56.25%; padding-top: 30px; height: 0; overflow: hidden;}.contenedor-responsive iframe,.contenedor-responsive object,.contenedor-responsive embed{position: absolute; top: 0; left: 0; width: 100%; height: 100%;}</style></head><body><div id='contenedor'> <div id='cabecera'> </div><div id='menu'> <div id='cssmenu'></div></div><div id='contenido' class='contenedor-responsive'><iframe frameborder='0' allowfullscreen='' src='https://xxxxxxxxxx.rivas.cloud/d/7zvlpJD4z/contaminacion?orgId=1&theme=dark&kiosk' width='100px' height='600px' id='theIframe' name='pagina' >El navegador no soporta iframes</iframe> </div><div id='pie'> </div></div></body></html>"
log
output file /var/log/caddy/aire.rivas.cloud.access.log
roll_size 10mb
roll_keep 20
roll_keep_for 720h
Y probarlo se hizo la magia ……

La otra forma de hacer lo mismo pero con ficheros locales seria la siguiente

Añadiremos en nuestro directorio HTML un directorio con su pagina index.html con el código anterior
Añadiremos el path y llamaremos a WordPress , quedando de esta manera
xxxxxxxxxx
############################################################
# Redireccion a pagina
xxxxxxxx.rivas.cloud
# Añadir '/aire'
handle *
rewrite * /aire uri
reverse_proxy http://rivas.cloud
log
output file /var/log/caddy/xxxxxxxxxxxx.rivas.cloud.access.log
roll_size 10mb
roll_keep 20
roll_keep_for 720h
Y veremos que al igual que en el caso anterior nuestra pagina con iframe es mostrada correctamente

Y con esto y un bizcocho