Héberger un serveur Home Assistant privé avec Tailscale
Hébergez Home Assistant sur un Droplet avec HTTPS privé via Tailscale, sans ports publics. Vérifiez les sauvegardes et les limites des appareils de la maison.
Héberger un tableau de bord privé
Vous pouvez héberger un serveur Home Assistant privé sur un Droplet DigitalOcean et le joindre par Tailscale sans ouvrir son interface à Internet. Ce guide reprend la configuration SSH privée précédente. Nous utiliserons Home Assistant Container, un tunnel SSH pour l’accueil initial, une écoute locale pour le serveur HTTP et une adresse HTTPS privée réservée à certains utilisateurs.
Le serveur sera dans un centre de données. Il ne peut pas utiliser directement la clé USB Zigbee près de votre routeur, capter vos appareils Bluetooth ou découvrir votre réseau domestique comme s’il partageait votre Wi-Fi. Commencez avec un tableau de bord sans conséquence et une intégration cloud connue. Ne déplacez pas les serrures, le chauffage ou des automatisations essentielles avant d’avoir testé les pannes de bout en bout.
Je garderais Home Assistant à domicile pour un foyer qui dépend de nombreuses radios locales. Un Droplet convient mieux à l’apprentissage ou à quelques services cloud si vous souhaitez déjà administrer Linux. Faites ce choix avant de créer un serveur payant.
Choisir le cloud pour un usage adapté
Home Assistant OS est l’installation recommandée pour la plupart des utilisateurs. Il prend en charge davantage de maintenance et les apps, anciennement appelées add-ons. Avec Home Assistant Container, vous gérez le système, Docker et les services complémentaires. Ce tutoriel utilise Container. Il n’installe pas Supervisor et ne promet pas de boutique d’apps sur Ubuntu.
Un Droplet évite de laisser un ordinateur supplémentaire allumé à domicile. En contrepartie, il faut administrer la VM et dépendre d’Internet pour joindre les appareils de la maison. Tailscale fournit une route privée, mais ne rend pas ces appareils locaux. Si votre besoin est simplement l’accès distant, Home Assistant OS chez vous avec une méthode d’accès adaptée demande généralement moins de travail.
Faites défiler horizontalement pour voir toutes les colonnes.
| Option | Usage adapté | Limite |
|---|---|---|
| Home Assistant OS à domicile | Radios USB et automatisations locales | Matériel et accès distant à prévoir |
| Container sur un Droplet | Apprentissage et intégrations cloud | Maintenance Linux, ni apps ni radios locales |
| Container à domicile | Opérateurs Linux avec appareils locaux | Maintenance Docker et permissions matérielles |
Prévoir le budget et terminer SSH privé
Prévoyez environ deux heures pour la première installation et davantage pour répéter une restauration. Utilisez un Droplet Ubuntu 24.04 LTS neuf avec assez de mémoire pour les intégrations prévues. Une machine de 2 Go est une estimation de départ pour un petit laboratoire, pas une capacité mesurée garantie. La vidéo, les historiques volumineux et les services supplémentaires peuvent demander beaucoup plus. Examinez mémoire et disque après chaque ajout.
Vérifiez le plafond mensuel et le tarif horaire sélectionnés dans DigitalOcean avant la création. Ajoutez le stockage, les sauvegardes et le transfert sortant au budget. Home Assistant Container est open source. Le Droplet est une infrastructure payante et l’usage personnel admissible de Tailscale possède ses propres conditions. Cette route privée ne demande pas d’abonnement Home Assistant Cloud.
Terminez d’abord le guide précédent. Il faut une clé SSH operator testée, un accès Recovery Console, aucune règle cloud entrante, une connexion sortante et la politique SSH seule. Gardez une session privée ouverte. Ne commencez pas avec un proxy public existant, une politique Tailscale ouverte ou une configuration Home Assistant de production.
Installer Docker et examiner le compagnon
Depuis la session privée operator, suivez les instructions officielles du dépôt apt Docker pour Ubuntu indiquées ci-dessous. Installez Docker Engine et son plugin Compose depuis cette même source. Utilisez sudo pour les commandes Docker plutôt que d’ajouter des utilisateurs ordinaires au groupe Docker. Le contrôle du démon donne pratiquement le contrôle de l’hôte.
Exécutez sudo docker version et sudo docker compose version pour vérifier les outils. Clonez le compagnon dans le dossier personnel operator, puis entrez dans le dépôt. Lisez compose.yaml avant de démarrer. Il sélectionne Home Assistant 2026.9.1 pour ne pas suivre silencieusement le tag stable. Consultez les notes de version avant toute mise à jour. Ce choix facilite la reproduction, mais ne garantit pas une sécurité indéfinie.
Compose utilise le réseau de l’hôte Linux et conserve les données dans ./config. Il n’accorde ni mode privileged, ni périphériques USB, ni D-Bus, car cet exemple cloud n’utilise pas de matériel local. Cette réduction est volontaire par rapport à l’exemple général orienté matériel. Une intégration qui demande ces capacités doit être étudiée séparément.
git clone https://github.com/TylorMayfield/private-droplet-tailscale.git
cd private-droplet-tailscaleservices:
homeassistant:
image: ghcr.io/home-assistant/home-assistant:2026.9.1
network_mode: host
restart: unless-stopped
stop_grace_period: 60s
environment:
TZ: Etc/UTC
volumes:
- ./config:/config
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
Démarrer derrière les pare-feu existants
Conservez la politique Tailscale initiale limitée à SSH. Home Assistant écoute d’abord sur les interfaces disponibles. Le refus des entrées cloud et de TCP 8123 dans Tailscale est donc indispensable avant ce premier démarrage. Le réseau hôte signifie qu’aucun mappage de port Docker ne masque le service. N’ajoutez pas de règle 8123 aux pare-feu.
Dans le dépôt compagnon, créez le dossier privé avec mkdir -m 700 config. Ce nouveau dossier doit être vide. Remplacez TZ dans compose.yaml par votre fuseau IANA pour les journaux du conteneur si nécessaire. Vérifiez la configuration et démarrez avec les commandes ci-dessous. Le téléchargement de l’image et l’initialisation peuvent prendre quelques minutes.
Si le conteneur redémarre en boucle, examinez les journaux. Un processus actif ne prouve ni que l’interface est prête, ni qu’elle est privée. Attendez une réponse HTTP à l’adresse locale. Ne publiez pas de configuration ou de journaux complets contenant des jetons. Partagez uniquement un court extrait d’erreur expurgé.
Avant de continuer : Utilisez le nouveau Droplet du guide et gardez un secours testé. Lisez le point de contrôle précédent.
sudo docker compose config --quiet
sudo docker compose pull
sudo docker compose up -d
sudo docker compose logs --tail=80 homeassistantcurl --max-time 10 -I http://127.0.0.1:8123/Passer l’accueil initial par un tunnel SSH local
Sur votre ordinateur, ouvrez un terminal dédié et lancez la commande de tunnel ci-dessous. Remplacez TAILSCALE_IP par l’adresse privée du Droplet. La commande reste volontairement au premier plan. Gardez-la active et ouvrez http://127.0.0.1:18123 dans le navigateur de ce même ordinateur. Ce port local passe par SSH vers le port 8123 du serveur.
Créez le compte propriétaire avec un mot de passe unique et enregistrez-le dans votre gestionnaire. Choisissez correctement le lieu, les unités et le fuseau horaire, qui influencent les automatisations. Utilisez une entrée auxiliaire sans conséquence, par exemple un interrupteur virtuel, pour le premier test. N’attendez pas la découverte automatique des appareils domestiques sur cette VM distante.
Si le navigateur ne se connecte pas, vérifiez que le tunnel fonctionne encore et que le port local 18123 est libre. Si SSH indique que le transfert est interdit, examinez la valeur effective AllowTcpForwarding du serveur. N’ouvrez pas le tableau de bord publiquement pour contourner une erreur de tunnel.
- Remplacez chaque valeur surlignée avant d’exécuter la commande.
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:18123:127.0.0.1:8123 operator@TAILSCALE_IP
Limiter l’écoute dans les paramètres HTTP actuels
Dans Home Assistant 2026.9, ouvrez Paramètres > Système > Réseau et trouvez le serveur HTTP. Définissez les adresses d’écoute sur 127.0.0.1 uniquement et conservez le port 8123. Activez la confiance dans X-Forwarded-For et indiquez uniquement 127.0.0.1 comme proxy de confiance. Enregistrez, reconnectez-vous par le tunnel et confirmez dans les cinq minutes. Sans confirmation, les réglages précédents reviennent.
Ces instructions utilisent l’interface introduite en 2026.8. Ne collez pas un ancien exemple YAML http: dans une installation neuve. Le proxy fonctionnera sur l’hôte et utilisera cette adresse IPv4 locale exacte. Il n’est pas nécessaire de faire confiance à toutes les adresses privées, à tout Tailscale ou à 0.0.0.0/0.
Sur le Droplet, lancez la vérification d’écoute ci-dessous. Le service TCP Home Assistant doit être sur 127.0.0.1:8123, sans 0.0.0.0:8123, [::]:8123 ni adresse publique. Si l’écoute reste large, retournez dans le tunnel pour corriger et confirmer les paramètres avant d’ajouter HTTPS. Conservez les restrictions cloud et Tailscale pendant toute cette opération.
sudo ss -lntp 'sport = :8123'Ajouter HTTPS privé avec Tailscale Serve
Activez MagicDNS et les certificats HTTPS du réseau Tailscale si nécessaire. Choisissez un nom de machine neutre, par exemple ha-lab, avant la demande de certificat. Les journaux Certificate Transparency peuvent révéler le nom du certificat. Un service privé n’a pas forcément un nom secret. Utilisez l’adresse HTTPS exacte affichée par Serve sans créer d’enregistrement DNS public.
Sur le Droplet, démarrez Tailscale Serve avec la commande ci-dessous. L’option de fonctionnement en arrière-plan conserve le service après redémarrage. Serve termine HTTPS et transmet à l’adresse IPv4 locale. Tailscale Funnel est une fonction distincte de partage public. Ne l’activez pas ici et vérifiez qu’une ancienne expérience n’a pas laissé un partage public actif.
Adaptez home-assistant.json dans l’éditeur de politique. Gardez TCP 22 pour operator et ajoutez TCP 443 pour les opérateurs et les résidents choisis. Remplacez les identités d’exemple par des utilisateurs inscrits. Les tests autorisent 443 aux résidents et leur refusent SSH et 8123. Retirez les autorisations générales qui se chevauchent, validez et testez avant d’inviter quelqu’un.
Ouvrez l’adresse HTTPS affichée depuis un client Tailscale autorisé. Connectez-vous à Home Assistant et actionnez l’interrupteur virtuel. Chaque résident doit disposer d’un compte Home Assistant distinct sans droits administrateur. La permission réseau mène à la page de connexion. L’authentification Home Assistant contrôle ensuite l’accès à l’application.
Avant de continuer : Utilisez le nouveau Droplet du guide et gardez un secours testé. Lisez le point de contrôle précédent.
sudo tailscale serve --bg http://127.0.0.1:8123sudo tailscale serve status
sudo tailscale funnel statusVérifier le téléphone et les connexions refusées
Installez Tailscale sur le téléphone et connectez-vous comme résident autorisé. Coupez le Wi-Fi pour utiliser le réseau mobile, gardez Tailscale connecté et ouvrez l’URL HTTPS privée. Saisissez cette même adresse dans l’application Home Assistant. Vérifiez l’interrupteur virtuel et la reconnexion après fermeture de l’application. Vous testez ainsi le réseau utilisé hors du domicile.
Une fois Tailscale déconnecté, l’adresse privée ne doit plus fonctionner. Avec un autre utilisateur inscrit hors des groupes autorisés, HTTPS doit échouer. Depuis un appareil extérieur au réseau Tailscale, testez les adresses publiques IPv4 et IPv6 du Droplet sur TCP 22, 443 et 8123. Aucune session ne doit s’établir. Une page de connexion publique est un échec, même protégée par mot de passe.
Redémarrez le Droplet et répétez les vérifications HTTPS privées et les refus publics. En cas d’erreur de proxy, examinez l’écoute locale, les journaux et l’adresse du proxy de confiance avant les règles réseau. Si le Wi-Fi fonctionne mais pas le réseau mobile, contrôlez le VPN du téléphone. Notez les résultats avant de connecter des appareils réels.
curl --connect-timeout 5 --max-time 10 http://PUBLIC_IP:8123/Étudier la route vers les appareils domestiques
Une intégration cloud qui appelle une API fournisseur peut fonctionner sans route vers votre domicile. Un appareil limité au réseau local demande une adresse joignable, une intégration compatible et une route retour. Un routeur de sous-réseau Tailscale sur un appareil domestique toujours allumé peut annoncer certaines adresses. Approuvez cette route et limitez le tag du Droplet aux adresses et ports nécessaires. Les clients Linux doivent aussi accepter les routes annoncées.
Traitez cette extension comme un projet réseau distinct. Évitez les sous-réseaux domestiques et cloud qui se chevauchent. Configurez les intégrations avec des IP explicites lorsque c’est possible au lieu d’attendre la découverte multicast à travers le VPN. Le routage IP ne supprime pas les contraintes USB, Bluetooth, Matter ou Thread. Étudiez chaque intégration avant de choisir le cloud.
Testez la panne de la connexion Internet domestique ou du routeur Tailscale. Gardez les commandes essentielles utilisables localement. Un capteur déconnecté doit apparaître indisponible plutôt que vous laisser dépendre d’anciennes données. Si plusieurs intégrations essentielles demandent un routage complexe, gardez Home Assistant chez vous et utilisez Tailscale pour l’accès distant.
Sauvegarder, restaurer puis mettre à jour
Activez l’authentification multifacteur du propriétaire et gardez les résidents sans droits administrateur. Créez une sauvegarde dans Paramètres > Système > Sauvegardes. Téléchargez-la hors du Droplet et conservez séparément le kit d’urgence ou la clé de chiffrement. Une sauvegarde limitée à ./config disparaît avec le disque qu’elle doit protéger.
Répétez une restauration sur une instance de test isolée avant de compter dessus. Utilisez le fichier téléchargé pendant l’accueil initial. Empêchez cette machine de joindre les appareils réels et les services fournisseurs afin de ne pas exécuter les automatisations deux fois. Vérifiez l’interrupteur virtuel, le tableau de bord et la configuration, puis détruisez le test après avoir noté le résultat.
Avant une mise à jour, créez une nouvelle sauvegarde et notez le tag actuel. Lisez les notes de la version cible, changez l’image dans compose.yaml, téléchargez-la et recréez le conteneur. Vérifiez ensuite l’écoute locale enregistrée, l’URL privée et les refus publics. Gardez l’ancienne sauvegarde, car revenir à une image précédente ne restaure pas forcément une base migrée.
Maintenez aussi Ubuntu, Docker et Tailscale. Examinez régulièrement le disque et les sauvegardes téléchargées. Pour arrêter définitivement le service, stoppez le conteneur, vérifiez la sauvegarde hors ligne, retirez Serve et le nœud Tailscale, puis détruisez le Droplet exact. Le guide décrit la route privée et la restauration. Les tests réels établissent si votre propre installation respecte cette conception.
Un Droplet peut-il utiliser ma clé USB Zigbee ?
Il n’existe pas de connexion USB directe entre votre domicile et la VM cloud. Gardez Home Assistant chez vous pour les radios locales ou étudiez une passerelle réseau prise en charge par l’intégration. Une route Tailscale seule ne transporte pas USB et ne fournit pas la découverte Bluetooth.
Dois-je ouvrir le port 8123 ?
Aucune règle publique 8123 n’est nécessaire. L’accueil passe par un tunnel SSH. Ensuite, le serveur HTTP écoute sur 127.0.0.1 et Tailscale Serve fournit HTTPS privé. Vérifiez les deux familles d’IP publiques et la politique Tailscale plutôt que de considérer la page de connexion comme une protection réseau.
Ma famille peut-elle se connecter sans Tailscale ?
Pas par cette adresse privée. Chaque appareil distant demande une connexion Tailscale autorisée et son propre compte Home Assistant. Si le client VPN ne convient pas, étudiez une autre solution prise en charge, comme Home Assistant Cloud avec une installation locale, au lieu d’activer Funnel par erreur.
Puis-je installer des apps Home Assistant ?
Home Assistant Container ne fournit pas les apps gérées par Supervisor. Vous pouvez exploiter des services distincts, mais chacun demande sa maintenance et ses restrictions d’accès. Home Assistant OS convient généralement mieux pour une expérience intégrée avec des apps.
HTTPS privé remplace-t-il les mots de passe ?
Non. Les grants Tailscale contrôlent la joignabilité réseau et Serve fournit HTTPS. Gardez l’authentification Home Assistant, des comptes distincts et l’authentification multifacteur du propriétaire. Un appareil autorisé compromis peut toujours joindre la page de connexion. Limitez les permissions de chaque compte.
Vérifier le résultat
- Résultat attendu
- Les connexions privées autorisées fonctionnent après redémarrage. Les autres sont refusées.
- Arrêter si
- Arrêtez si une adresse publique ou un utilisateur non autorisé atteint le service. Rétablissez la configuration par la voie de secours.
- Étape suivante
- Notez un test de redémarrage et de récupération avant un usage réel.