¡Hola a todos de nuevo! A partir del tutorial sobre Let's Encrypt y DuckDNS para implementarlos como servicio en nuestro Home Assistant, hoy explicaré cómo hacerlo en Docker, ya que muchos de ustedes me han estado preguntando sobre esto.
Para implementar SSL en nuestro Home Assistant, tenemos dos opciones: la primera es utilizando el método Traefik, y la segunda es mediante el método Dehydrated, pero en este caso nos centraremos en la segunda opción.
En el apartado de duckdns seguiremos los pasos que seguimos en el anterior post.
En el apartado de Lets EnCrypt, Abriremos un terminal ssh logueandonos con el usuario con el que instalamos el docker de home assistant y nos vamos a nuestra carpeta de HA (Imaginemos que lo tenemos en /docker/homeassistant) y pondremos lo siguiente:
1 |
git clone https://github.com/lukas2511/dehydrated.git |
Una vez hemos realizado el paso anterior nos iremos a /docker/homeassistant/dehydrated y crearemos por un lado un archivo domains.txt (nano domains.txt) y pondremos nuestro dominio duckdns y cerramos guardando los cambios:
1 |
midominio.duckdns.org |
A continuación vamos a crear otro archivo llamado config (sin extension, nano config) y ponemos lo siguiente:
1 2 3 4 5 |
# Which challenge should be used? Currently http-01 and dns-01 are supported CHALLENGETYPE="dns-01" # Script to execute the DNS challenge and run after cert generation HOOK="${BASEDIR}/hook.sh" |
Una vez guardemos el archivo generaremos otro llamado hook.sh (nano hook.sh) y copiaremos lo que sigue cambiando la parte domain="mihome" por la parte primera del dominio (midominio) y luego pondremos nuestro token generado en la pagina duckdns en el apartado token="aquinuestrotoken".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#!/usr/bin/env bash set -e set -u set -o pipefail domain="myhome" token="your-duckdns-token" case "$1" in "deploy_challenge") curl "https://www.duckdns.org/update?domains=$domain&token=$token&txt=$4" echo ;; "clean_challenge") curl "https://www.duckdns.org/update?domains=$domain&token=$token&txt=removed&clear=true" echo ;; "deploy_cert") sudo systemctl restart home-assistant@homeassistant.service ;; "unchanged_cert") ;; "startup_hook") ;; "exit_hook") ;; *) echo Unknown hook "${1}" exit 0 ;; esac |
Una vez guardado el archivo le pondremos los permisos adecuados tal que así:
1 |
chmod 755 hook.sh |
Una vez llegados a este punto ahora toca generar los certificados con este comando:
1 |
./dehydrated --register --accept-terms |
Nos tiene que dar todo OK en el apartado anterior, ahora metemos otro comando para que duckdns nos de su aprobado de esos certificados para que los firme:
1 |
./dehydrated -c |
Veremos que al final del todo nos da un pequeño fallo ya que este script esta hecho para que cuando termine nos reinicie el servicio HA solo pero como tenemos docker eso no puede hacerlo, de ahí el fallo.
Nos meteremos en nuestro Cron del sistema y pondremos que nos vaya actualizando nuestros certificados cada cierto tiempo sin tener que tocar nada nosotros:
1 |
sudo crontab -e |
Al final del archivo pondremos lo siguiente:
1 |
0 1 1 * * /docker/homeassistant/dehydrated/dehydrated -c |
Por ultimo nos vamos a nuestro archivo configuration.yaml y rellenamos el apartado http tal que así:
1 2 3 4 |
http: ssl_certificate: /config/dehydrated/certs/myhome.duckdns.org/fullchain.pem ssl_key: /config/dehydrated/certs/myhome.duckdns.org/privkey.pem base_url: https://myhome.duckdns.org:8123 |
Ya para acabar deberemos reiniciar nuestro docker de Home Assistant y ya tendriamos nuestros acceso mediante https://midominio.duckdns.org.