🧩 Ubuntu Serverで「n8n.example.com」を構築する完全ガイド

未分類

~ MyDNS + Docker + Nginx + Let’s Encrypt で無料・常時SSL運用 ~


🔷 はじめに

この記事では、Raspberry PiやVPS上のUbuntu Serverで、
自分専用の自動化ツール n8n(エヌ・エイト・エヌ)「n8n.tairoh.com」 というサブドメインで公開するまでの手順を、
完全無料・安全・干渉なし の形で構築していきます。

💡n8nとは:
ノーコードでワークフローを自動化できるツール。
Google Sheets、Discord、LINE、APIなどを簡単に連携可能。
有料クラウドもあるが、自分でホストすれば無料で使える。


⚙️ 構成概要

全体のイメージ図

インターネット
    ↓
 ┌──────────────┐
 │ MyDNS(Aレコード)│
 │ n8n.tairoh.com → グローバルIP │
 └──────────────┘
    ↓
ルーター
(80/443をUbuntuサーバーへフォワード)
    ↓
Ubuntu Server (Raspberry Piなど)
 ├── Nginx(既存Webサーバー)
 │     ├─ tairoh.com(メインサイト)
 │     └─ n8n.tairoh.com(n8n用リバースプロキシ)
 └── Dockerコンテナ
       └─ n8n(127.0.0.1:5678で待受)

この構成の特徴

項目説明
💰 完全無料VPS不要。既存サーバー上で完結。
🔒 常時SSLLet’s Encrypt + Nginxで自動証明書更新。
🧱 干渉なしWebサーバー・ACサーバーとはポート分離。
🔐 安全設計n8nは127.0.0.1で動作。外部に直接晒さない。

🪄 ステップ① MyDNSでサブドメイン設定

  1. MyDNSログイン → 「ホスト登録」へ
  2. 以下のように設定:
設定項目
ホスト名n8n
タイプA
現在のグローバルIP(例:123.45.67.89)
TTL300〜600 推奨
  1. 設定反映を確認:
dig +short n8n.tairoh.com A

→ グローバルIPが表示されればOK。

⚠️IPv6を使っている場合はAAAAレコードも登録。ただしIPv6はポート開放が必要になるため、まずIPv4運用から始めるのがおすすめ。


🐳 ステップ② Docker環境を用意

Ubuntu Serverにログインし、DockerとComposeを導入します。

sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
 | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
 "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
 https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) stable" \
 | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker

📂 ステップ③ n8n用フォルダと暗号鍵を作成

mkdir -p ~/n8n/{data,logs}
cd ~/n8n
openssl rand -hex 32 > ./N8N_ENCRYPTION_KEY

🔑 N8N_ENCRYPTION_KEY はワークフローの暗号化に使われる重要ファイル。
必ずバックアップを取り、紛失しないように注意。


🧰 ステップ④ Docker Composeでn8nを起動

~/n8n/docker-compose.yml を作成:

services:
  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    environment:
      - N8N_HOST=n8n.tairoh.com
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.tairoh.com/
      - TZ=Asia/Tokyo
      - GENERIC_TIMEZONE=Asia/Tokyo
      - N8N_SECURE_COOKIE=true
      - N8N_ENCRYPTION_KEY_FILE=/home/node/.n8n/N8N_ENCRYPTION_KEY
      - NODE_ENV=production
    volumes:
      - ./data:/home/node/.n8n
      - ./N8N_ENCRYPTION_KEY:/home/node/.n8n/N8N_ENCRYPTION_KEY:ro
    ports:
      - "127.0.0.1:5678:5678"

起動コマンド:

cd ~/n8n
docker compose up -d

動作確認:

docker compose ps

127.0.0.1:5678 でLISTENしていればOK。


🌐 ステップ⑤ Nginxでリバースプロキシ設定

既存のNginxを利用し、n8n専用の仮想ホストを追加します。

sudo nano /etc/nginx/sites-available/n8n.conf

以下を記述:

server {
    listen 80;
    listen [::]:80;
    server_name n8n.tairoh.com;

    location / {
        proxy_pass http://127.0.0.1:5678/;
        proxy_http_version 1.1;
        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;
        client_max_body_size 20m;
        proxy_read_timeout 300;
    }
}

有効化:

sudo ln -s /etc/nginx/sites-available/n8n.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

💡これで既存のtairoh.comと並行運用可能。
server_nameが異なるため、同じ80/443でも干渉しません。


🔒 ステップ⑥ Let’s EncryptでHTTPS化

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d n8n.tairoh.com -m you@example.com --agree-tos --redirect

成功すると自動的にSSL証明書が適用され、
https://n8n.tairoh.com でアクセス可能になります。

証明書は自動更新されるため、放置でOKです。


🧑‍💻 ステップ⑦ n8n初期設定

ブラウザで https://n8n.tairoh.com にアクセスし、
初回ユーザー登録(オーナー)を行います。

ログイン後は:

  • 「Settings → Security」で2FAを有効化
  • 「Settings → User Management」で他ユーザーを制限
  • Webhookを使う場合は https://n8n.tairoh.com/webhook/... を使用

🛡️ ステップ⑧ セキュリティ強化(任意)

1️⃣ アクセス制限(IPやBasic認証)

/etc/nginx/sites-available/n8n.conf に以下を追加:

location / {
    allow 192.168.1.0/24; # 社内LANだけ許可
    deny all;
    proxy_pass http://127.0.0.1:5678/;
    ...
}

2️⃣ バックアップ

毎晩データを保存する例:

tar czf /var/backups/n8n-$(date +%F).tgz -C ~/n8n data N8N_ENCRYPTION_KEY

🧱 ステップ⑨ 既存サーバーとの共存確認

サービスポート干渉リスク対応
Web (Nginx / tairoh.com)80 / 443なしサーバーブロックで分離
n8n5678 (内部のみ)なしローカルループバックのみ
Assetto Corsa ServerUDP 9600–9700なしUDP別系統なので独立

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

症状原因と対処
n8n.tairoh.com が開かないMyDNSのAレコード未反映。digで確認。
証明書エラーcertbotのHTTP認証が失敗。ポート80を外部公開する。
Webhookが動かないWEBHOOK_URL とNginx設定のヘッダを再確認。
413エラーclient_max_body_size を増やす。

🎉 完成!

これで、
https://n8n.tairoh.com
からn8nを常時SSLで安全に利用できるようになりました。

  • 既存のtairoh.comやACサーバーとは完全独立
  • VPS不要で無料運用
  • LAN内でも、外部からでも安定アクセス
  • 自動化フロー(Discord連携やGoogle Sheets操作など)を自由に構築可能

🧾 まとめ

項目内容
DNS設定MyDNSでAレコード登録(n8n.tairoh.com)
ポート外部→Ubuntu (80/443)、内部n8nは5678のみ
WebサーバーNginxリバースプロキシでHTTPS化
n8n実行環境Docker + Compose
セキュリティHTTPS+ローカル限定+バックアップ

🚀 応用編(今後やりたい人向け)

  • Nginxで/api/などを別サブドメインに統合
  • Cloudflare Tunnelを使ってHTTPS公開(ポート開放不要)
  • WebhookでDiscord BotやGoogle Sheets自動更新

🧰 おわりに

この手順で構築すれば、
**「自宅サーバー上で完全無料・常時SSL・安全運用のn8n環境」**が手に入ります。

ルーター・Nginx・Dockerの設定がきちんと分離されているため、
他のサービス(tairoh.com や Assetto Corsaサーバー)に一切干渉せず共存可能です。

コメント

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