サブドメイン構成・Docker・nginx・Let’s Encrypt対応版
🔰 はじめに
この記事では、Ubuntuサーバー上に n8n(自動化ワークフロー) をすでに運用している環境を前提に、
同じサーバー上へ Home Assistant(HA) を追加し、ha.example.com というサブドメインで HTTPS 公開するまでの手順を解説する。
Home Assistant はスマートホーム機器を統合管理できるプラットフォーム。
n8n は外部サービスをつなげる自動化ツール。
両者を組み合わせることで「家の中のセンサー情報でDiscordを通知」や
「スケジュールに応じて家電を操作」といった高度な自動化が実現できる。
🧱 システム構成概要
| サービス | サブドメイン | 使用ポート | 役割 |
|---|---|---|---|
| n8n | n8n.example.com | 内部:5678 → 外部:443 | ワークフロー自動化 |
| Home Assistant | ha.example.com | 内部:8123 → 外部:443 | スマートホーム基盤 |
| nginx | (共通) | 80,443 | リバースプロキシ・SSL終端 |
| Let’s Encrypt | – | – | 無料証明書管理 |
| DNSサービス | example.com | – | Aレコード・動的DNS管理 |
⚙️ 手順1:DNS設定(MyDNSなどのDNSサービス)
- 管理画面でサブドメイン
ha.example.comを追加 - Aレコード を Ubuntu サーバーのグローバルIPに設定
- 反映確認:
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連携準備)
- Home Assistant のプロフィール(右下)から
「Long-Lived Access Token」を発行。 - 以下コマンドで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 |
| Method | GET |
| URL | https://ha.example.com/api/ |
| Header Key | Authorization |
| Header Value | Bearer <YOUR_LONG_LIVED_TOKEN> |
実行結果に "API running." が表示されれば接続成功。
🌉 連携応用例
| シナリオ | 内容 |
|---|---|
| 🔔 センサー検知でDiscord通知 | Home Assistant のオートメーション → n8n Webhook → Discord送信 |
| 🌤 天気連動家電制御 | n8nが天気API取得 → HAのclimate.turn_on 呼び出し |
| 📊 毎日自動レポート | n8nがHAの温湿度データを取得 → Google Sheetsに記録 |
🧱 トラブルシューティング
| 症状 | 原因 | 対処法 |
|---|---|---|
| 400 Bad Request | trusted_proxies未設定 | configuration.yamlに追加して再起動 |
| 405 Method Not Allowed | HEADリクエストによる確認 | 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 で通知・記録・制御することで、
クラウドにも閉じた安全な自動化環境を構築できる。


コメント