Ubuntuサーバーで Home Assistant を構築して n8n と連携する完全ガイド

サブドメイン構成・Docker・nginx・Let’s Encrypt対応版


🔰 はじめに

この記事では、Ubuntuサーバー上に n8n(自動化ワークフロー) をすでに運用している環境を前提に、
同じサーバー上へ Home Assistant(HA) を追加し、
ha.example.com というサブドメインで HTTPS 公開するまでの手順を解説する。

Home Assistant はスマートホーム機器を統合管理できるプラットフォーム。
n8n は外部サービスをつなげる自動化ツール。
両者を組み合わせることで「家の中のセンサー情報でDiscordを通知」や
「スケジュールに応じて家電を操作」といった高度な自動化が実現できる。


🧱 システム構成概要

サービスサブドメイン使用ポート役割
n8nn8n.example.com内部:5678 → 外部:443ワークフロー自動化
Home Assistantha.example.com内部:8123 → 外部:443スマートホーム基盤
nginx(共通)80,443リバースプロキシ・SSL終端
Let’s Encrypt無料証明書管理
DNSサービスexample.comAレコード・動的DNS管理

⚙️ 手順1:DNS設定(MyDNSなどのDNSサービス)

  1. 管理画面でサブドメイン ha.example.com を追加
  2. Aレコード を Ubuntu サーバーのグローバルIPに設定
  3. 反映確認: dig +short ha.example.com → サーバーのIPが返ればOK

🐳 手順2:DockerでHome Assistantを起動

n8nとはフォルダを分離して管理。

mkdir -p ~/homeassistant
cd ~/homeassistant
sudo nano docker-compose.yml

内容:

services:
  homeassistant:
    image: ghcr.io/home-assistant/home-assistant:stable
    container_name: homeassistant
    restart: unless-stopped
    network_mode: host
    environment:
      - TZ=Asia/Tokyo
    volumes:
      - ./config:/config
      - /etc/localtime:/etc/localtime:ro

起動:

sudo docker compose up -d

確認:

sudo docker ps

ブラウザで
http://<サーバーIP>:8123
を開き、初期セットアップ画面が出れば成功。


🌐 手順3:nginxでサブドメイン設定

新規仮想ホストファイル作成:

sudo nano /etc/nginx/sites-available/ha.example.com.conf

初期(HTTPのみ)

server {
  listen 80;
  server_name ha.example.com;

  proxy_set_header Host              $host;
  proxy_set_header X-Real-IP         $remote_addr;
  proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_http_version 1.1;
  proxy_set_header Upgrade           $http_upgrade;
  proxy_set_header Connection        "upgrade";
  proxy_read_timeout 3600;

  location / {
    proxy_pass http://127.0.0.1:8123;
  }
}

有効化:

sudo ln -s /etc/nginx/sites-available/ha.example.com.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

これで http://ha.example.com にアクセス可能になる。


🔒 手順4:Let’s EncryptでHTTPS化

sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d ha.example.com

設定例:

  • メール → 登録
  • 規約 → 同意
  • HTTPSリダイレクト → Yes

certbotが自動で443設定を追加し、証明書も発行される。

確認:

sudo nginx -t
sudo systemctl reload nginx

ブラウザで https://ha.example.com を開き、鍵マーク付きで表示されれば成功。


🧾 手順5:Home Assistantのリバースプロキシ設定

~/homeassistant/config/configuration.yaml に追記:

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 127.0.0.1
    - ::1

homeassistant:
  external_url: "https://ha.example.com"

反映:

cd ~/homeassistant
sudo docker compose restart homeassistant

🧩 手順6:動作確認

1️⃣ ローカルで確認

curl -sS -D- http://127.0.0.1:8123/ | head

HTTP/1.1 200 OK が返ればHAは動作中。

2️⃣ リバースプロキシ経由

curl -I https://ha.example.com

HTTP/2 200 または 302(リダイレクト)でOK。

3️⃣ 初期セットアップ完了

https://ha.example.com/onboarding.html にアクセスしてユーザー登録を済ませる。


🔑 手順7:APIテスト(n8n連携準備)

  1. Home Assistant のプロフィール(右下)から
    「Long-Lived Access Token」を発行。
  2. 以下コマンドでAPI疎通確認:
curl -sS https://ha.example.com/api/ \
  -H "Authorization: Bearer <YOUR_LONG_LIVED_TOKEN>"

{"message": "API running."} が返れば成功。


🤖 手順8:n8nから接続

n8nのWeb画面(例:https://n8n.example.com)で以下の設定を作成。

項目設定値
ノードHTTP Request
MethodGET
URLhttps://ha.example.com/api/
Header KeyAuthorization
Header ValueBearer <YOUR_LONG_LIVED_TOKEN>

実行結果に "API running." が表示されれば接続成功。


🌉 連携応用例

シナリオ内容
🔔 センサー検知でDiscord通知Home Assistant のオートメーション → n8n Webhook → Discord送信
🌤 天気連動家電制御n8nが天気API取得 → HAのclimate.turn_on 呼び出し
📊 毎日自動レポートn8nがHAの温湿度データを取得 → Google Sheetsに記録

🧱 トラブルシューティング

症状原因対処法
400 Bad Requesttrusted_proxies未設定configuration.yamlに追加して再起動
405 Method Not AllowedHEADリクエストによる確認curl でGETを使用
証明書エラーcertbot未実行 or DNS未反映certbotを再実行、DNS確認
WebSocket切断nginxヘッダ不足Upgrade/Connectionヘッダとread_timeout追加
Cloudflare経由で発行失敗ProxyモードONでHTTP検証失敗一時的にOFFで発行後ONに戻す

🔄 運用コマンド集

操作コマンド
Home Assistant起動sudo docker compose -f ~/homeassistant/docker-compose.yml up -d
停止sudo docker compose -f ~/homeassistant/docker-compose.yml down
再起動sudo docker compose -f ~/homeassistant/docker-compose.yml restart
ログ確認sudo docker logs -f homeassistant
nginx再起動sudo systemctl reload nginx
証明書更新確認sudo certbot renew --dry-run

✅ まとめ

項目状況
Home Assistant✅ 稼働中(Docker / port 8123)
nginxリバースプロキシ✅ HTTPS(443)で動作確認
DNSサブドメイン✅ ha.example.com 設定済み
Let’s Encrypt証明書✅ 自動更新設定完了
API疎通✅ Bearerトークンで確認済み
n8n連携✅ HTTP Requestノードで通信成功

💡 今後の拡張案

  • HA → n8n Webhook通知:センサー変化をRESTでn8nへ送信
  • MQTT統合:n8nのMQTTノードと連携してリアルタイム制御
  • VPN/Tunnelで安全運用:Cloudflare Tunnel や Tailscale利用
  • 自動化レポート:n8nで毎朝HAデータを集計してチャット通知

🎯 結論

Ubuntuサーバー上に

  • n8n.example.com:外部連携自動化基盤
  • ha.example.com:スマートホーム統合基盤

を安全に共存させ、
Docker + nginx + Let’s Encrypt + サブドメイン構成 で運用できた。

この構成をベースに、
Home Assistantで得たセンサーデータを n8n で通知・記録・制御することで、
クラウドにも閉じた安全な自動化環境を構築できる。

コメント

タイトルとURLをコピーしました