@@ -222,6 +222,119 @@ $ cd ~/IOTstack
222
222
$ docker-compose up -d
223
223
```
224
224
225
+ ## HTTPS with a valid certificate
226
+
227
+ Some HA integrations (e.g google assistant) require your HA API to be
228
+ accessible via https with a valid certificate. You can configure HA to do this:
229
+ [ docs] ( https://www.home-assistant.io/docs/configuration/remote/ ) /
230
+ [ guide] ( https://www.home-assistant.io/docs/ecosystem/certificates/lets_encrypt/ )
231
+ or use a reverse proxy container, as described below.
232
+
233
+ The linuxserver Secure Web Access Gateway container
234
+ ([ swag] ( https://docs.linuxserver.io/general/swag ) ) ([ Docker hub
235
+ docs] ( https://hub.docker.com/r/linuxserver/swag ) ) will automatically generate a
236
+ SSL-certificate, update the SSL certificate before it expires and act as a
237
+ reverse proxy.
238
+
239
+ 1 . First test your HA is working correctly: ` http://raspberrypi.local:8123/ ` (assuming
240
+ your RPi hostname is raspberrypi)
241
+ 2 . Make sure you have duckdns working.
242
+ 3 . On your internet router, forward public port 443 to the RPi port 443
243
+ 4 . Add swag to ~ /IOTstack/docker-compose.yml beneath the ` services: ` -line:
244
+ ```
245
+ swag:
246
+ image: ghcr.io/linuxserver/swag
247
+ cap_add:
248
+ - NET_ADMIN
249
+ environment:
250
+ - PUID=1000
251
+ - PGID=1000
252
+ - TZ=Etc/UTC
253
+ - URL=<yourdomain>.duckdns.org
254
+ - SUBDOMAINS=wildcard
255
+ - VALIDATION=duckdns
256
+ - DUCKDNSTOKEN=<token>
257
+ - CERTPROVIDER=zerossl
258
+ - EMAIL=<e-mail> # required when using zerossl
259
+ volumes:
260
+ - ./volumes/swag/config:/config
261
+ ports:
262
+ - 443:443
263
+ restart: unless-stopped
264
+ ```
265
+ Replace the bracketed values. Do NOT use any "-characters to enclose the values.
266
+
267
+ 5 . Start the swag container, this creates the file to be edited in the next step:
268
+ ```
269
+ cd ~/IOTstack && docker-compose up -d
270
+ ```
271
+
272
+ Check it starts up OK: ` docker-compose logs -f swag ` . It will take a minute or two before it finally logs "Server ready".
273
+
274
+ 6 . Enable reverse proxy for ` raspberrypi.local ` . ` homassistant.* ` is already by default. and fix homeassistant container name ("upstream_app"):
275
+ ```
276
+ sed -e 's/server_name/server_name *.local/' \
277
+ volumes/swag/config/nginx/proxy-confs/homeassistant.subdomain.conf.sample \
278
+ > volumes/swag/config/nginx/proxy-confs/homeassistant.subdomain.conf
279
+ ```
280
+
281
+ 7. Forward to correct IP when target is a container running in "network_mode:
282
+ host" (like Home Assistant does):
283
+ ```
284
+ cat << 'EOF' | sudo tee volumes/swag/config/custom-cont-init.d/add-host.docker.internal.sh
285
+ #!/bin/sh
286
+ DOCKER_GW=$(ip route | awk 'NR==1 {print $3}')
287
+
288
+ sed -i -e "s/upstream_app .* /upstream_app ${DOCKER_GW};/" \
289
+ /config/nginx/proxy-confs/homeassistant.subdomain.conf
290
+ EOF
291
+ sudo chmod u+x volumes/swag/config/custom-cont-init.d/add-host.docker.internal.sh
292
+ ```
293
+ (This needs to be copy-pasted/entered as-is, ignore any "> "-prefixes printed
294
+ by bash)
295
+
296
+ 8. (optional) Add reverse proxy password protection if you don't want to rely
297
+ on the HA login for security, doesn't affect API-access:
298
+ ```
299
+ sed -i -e 's/#auth_basic/auth_basic/' \
300
+ volumes/swag/config/nginx/proxy-confs/homeassistant.subdomain.conf
301
+ docker-compose exec swag htpasswd -c /config/nginx/.htpasswd anyusername
302
+ ```
303
+ 9. Add `use_x_forwarded_for` and `trusted_proxies` to your homeassistant [http
304
+ config](https://www.home-assistant.io/integrations/http). The configuration
305
+ file is at `volumes/home_assistant/configuration.yaml` For a default install
306
+ the resulting http-section should be:
307
+ ```
308
+ http:
309
+ use_x_forwarded_for: true
310
+ trusted_proxies:
311
+ - 192.168.0.0/16
312
+ - 172.16.0.0/12
313
+ - 10.77.0.0/16
314
+ ```
315
+ 10. Refresh the stack: `cd ~/IOTstack && docker-compose stop && docker-compose
316
+ up -d` (again may take 1-3 minutes for swag to start if it recreates
317
+ certificates)
318
+ 11. Test homeassistant is still working correctly:
319
+ `http://raspberrypi.local:8123/` (assuming your RPi hostname is
320
+ raspberrypi)
321
+ 12. Test the reverse proxy https is working correctly:
322
+ `https://raspberrypi.local/` (browser will issue a warning about wrong
323
+ certificate domain, as the certificate is issued for you duckdns-domain, we
324
+ are just testing)
325
+
326
+ Or from the command line in the RPi:
327
+ ```
328
+ curl --resolve homeassistant.<yourdomain>.duckdns.org:443:127.0.0.1 \
329
+ https://homeassistant.<yourdomain>.duckdns.org/
330
+ ```
331
+ (output should end in `if (!window.latestJS) { }</script></body></html>`)
332
+
333
+ 13. And finally test your router forwards correctly by accessing it from
334
+ outside your LAN(e.g. using a mobile phone):
335
+ `https://homeassistant.<yourdomain>.duckdns.org/` Now the certificate
336
+ should work without any warnings.
337
+
225
338
## Deactivating Hass.io
226
339
227
340
Because Hass.io is independent of IOTstack, you can't deactivate it with any of the commands you normally use for IOTstack.
0 commit comments