Hetzner CloudでのセルフホストによるN8N:Docker完全セットアップチュートリアル
ワークフロー自動化は現代のビジネスに不可欠ですが、チームの拡大に伴いSaaSソリューションのコストは増大しがちです。月額5ユーロ未満でHetzner Cloud上に独自のn8nインスタンスをセットアップする方法をご紹介します。無制限のワークフローと自動化プラットフォームの完全なコントロールを手に入れましょう。
構築内容
このチュートリアルを終えると、以下を実現できます:
- ✅ HTTPSを備えた完全機能のn8nインストール
- ✅ Let’s Encryptによる自動SSL証明書
- ✅ ユーザーアカウント用メール統合
- ✅ サーバー再起動後の自動起動
- ✅ 本番環境対応のプロフェッショナルセットアップ
月額コスト:4.51ユーロ(CX11サーバー)+ドメイン費用
前提条件
- サーバーIPを指すドメイン名
- 基本的なコマンドライン知識
- Hetzner Cloudアカウント
ステップ1:サーバーセットアップ
Hetzner Cloudサーバーの作成
- Hetzner Cloud Consoleにログイン
- 新規プロジェクトの作成
- 以下の仕様でサーバーを追加:
- イメージ: Ubuntu 24.04 LTS
- タイプ: CX11(vCPU 1基、RAM 4GB、ディスク 20GB)
- ロケーション: ユーザーに最も近い場所を選択
- SSHキー: 公開鍵を追加
初期サーバー設定
サーバーに接続します:
ssh root@YOUR_SERVER_IP
システムを更新します:
apt update && apt upgrade -y
ステップ2:Dockerのインストール
DockerおよびDocker Composeをインストールします:
# Install dependencies
apt install apt-transport-https ca-certificates curl software-properties-common gnupg -y
# Add Docker GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Add Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker
apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# Create Docker network for our services
docker network create proxy
Dockerのインストールを確認します:
docker --version
docker compose version
ステップ3:Traefikリバースプロキシの設定
ディレクトリ構造を作成します:
mkdir -p /opt/traefik/data
cd /opt/traefik
Traefik設定ファイルを作成します:
nano /opt/traefik/data/traefik.yml
以下の設定を追加します:
api:
dashboard: false
entryPoints:
http:
address: ":80"
http:
redirections:
entryPoint:
to: https
scheme: https
https:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
certificatesResolvers:
letsencrypt:
acme:
email: your-email@example.com # Change this!
storage: acme.json
httpChallenge:
entryPoint: http
SSL証明書用のacme.jsonファイルを作成します:
touch /opt/traefik/data/acme.json
chmod 600 /opt/traefik/data/acme.json
Traefik Docker Composeファイルを作成します:
nano /opt/traefik/docker-compose.yml
以下の設定を追加します:
version: '3'
services:
traefik:
image: traefik:latest
container_name: traefik
restart: always
ports:
- "80:80"
- "443:443"
networks:
- proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/traefik.yml:/etc/traefik/traefik.yml
- ./data/acme.json:/acme.json
labels:
- "traefik.enable=true"
networks:
proxy:
external: true
ステップ4:SMTPリレーのセットアップ(推奨・任意)
メールサーバーディレクトリを作成します:
mkdir -p /opt/mailserver
cd /opt/mailserver
Docker Composeファイルを作成します:
nano /opt/mailserver/docker-compose.yml
以下の設定を追加します:
version: '3'
services:
mailserver:
image: bytemark/smtp
restart: always
networks:
- proxy
environment:
- RELAY_HOST=smtp.gmail.com # Change to your SMTP provider
- RELAY_PORT=587
- RELAY_USERNAME=your-email@gmail.com # Change this
- RELAY_PASSWORD=your-app-password # Change this
- MAIL_DOMAIN=yourdomain.com # Change this
ports:
- "25:25"
networks:
proxy:
external: true
注意: Gmailの場合は以下が必要です:
- 2段階認証を有効化
- アプリパスワードを生成
- 通常のパスワードではなくアプリパスワードを使用
ステップ5:n8nの設定
n8nディレクトリを作成します:
mkdir -p /opt/n8n
cd /opt/n8n
Docker Composeファイルを作成します:
nano /opt/n8n/docker-compose.yml
以下の設定を追加します:
version: '3'
services:
n8n:
image: n8nio/n8n:latest
restart: always
environment:
- N8N_HOST=n8n.yourdomain.com # Change this!
- NODE_ENV=production
- N8N_PROTOCOL=https
- N8N_PORT=5678
- N8N_EDITOR_BASE_URL=https://n8n.yourdomain.com # Change this!
# Email configuration
- N8N_EMAIL_MODE=smtp
- N8N_SMTP_HOST=mailserver
- N8N_SMTP_PORT=25
- N8N_SMTP_SSL=false
- N8N_SMTP_USER=
- N8N_SMTP_PASS=
- N8N_SMTP_SENDER=noreply@yourdomain.com # Change this!
# Important fixes for proxy setup
- N8N_TRUST_PROXY_HEADER=true
- N8N_RUNNERS_ENABLED=true
volumes:
- ./data:/home/node/.n8n
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`n8n.yourdomain.com`)" # Change this!
- "traefik.http.routers.n8n.entrypoints=https"
- "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
networks:
proxy:
external: true
ステップ6:自動起動用Systemdサービスの作成
Traefikサービス
nano /etc/systemd/system/traefik-docker.service
以下の設定を追加します:
[Unit]
Description=Traefik Docker Compose
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/traefik
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
[Install]
WantedBy=multi-user.target
メールサーバーサービス
nano /etc/systemd/system/mailserver-docker.service
以下の設定を追加します:
[Unit]
Description=Mailserver Docker Compose
Requires=docker.service
After=docker.service
Before=n8n-docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/mailserver
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
[Install]
WantedBy=multi-user.target
n8nサービス
nano /etc/systemd/system/n8n-docker.service
以下の設定を追加します:
[Unit]
Description=n8n Docker Compose
Requires=docker.service
After=docker.service traefik-docker.service mailserver-docker.service
Wants=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/n8n
ExecStartPre=/bin/bash -c 'until docker container inspect traefik > /dev/null 2>&1; do sleep 2; done'
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
Restart=on-failure
RestartSec=30
TimeoutStartSec=180
[Install]
WantedBy=multi-user.target
サービスの有効化と起動
# Reload systemd daemon
systemctl daemon-reload
# Enable services to start on boot
systemctl enable traefik-docker.service
systemctl enable mailserver-docker.service
systemctl enable n8n-docker.service
# Start services
systemctl start traefik-docker.service
sleep 10
systemctl start mailserver-docker.service
sleep 10
systemctl start n8n-docker.service
ステップ7:DNS設定
ドメインをサーバーに向けます:
- ドメインレジストラ/DNSプロバイダーにアクセス
- Aレコードを作成:
- 名前: n8n
- タイプ: A
- 値: YOUR_SERVER_IP
- TTL: 300(または許可される最小値)
DNS伝播を待ちます(最大24時間かかることがありますが、通常はより速く完了します)。
ステップ8:インストールのテスト
サービスが稼働中か確認します:
docker ps
traefik、mailserver、n8nの3つのコンテナが稼働していることを確認してください。
n8nインスタンスにアクセスします:
https://n8n.yourdomain.com
n8nのセットアップページと緑のロックアイコン(HTTPS動作中)が表示されるはずです。
よくある問題のトラブルシューティング
SSL証明書が機能しない場合
Traefikのログを確認します:
docker logs traefik
主な原因:
- DNSがサーバーを指していない
- ファイアウォールがポート80/443をブロックしている
- 設定内のドメインが誤っている
n8nにアクセスできない場合
n8nのログを確認します:
docker logs n8n-n8n-1
主な対処法:
- すべてのファイルでドメイン設定が一致していることを確認
- すべてのコンテナが同じネットワーク上にあることを確認
メールが機能しない場合
メールサーバーのログを確認します:
docker logs mailserver-mailserver-1
SMTPの認証情報と設定を確認してください。
再起動後にサービスが起動しない場合
サービスの状態を確認します:
systemctl status traefik-docker.service
systemctl status n8n-docker.service
必要に応じて再起動します:
systemctl restart traefik-docker.service
systemctl restart n8n-docker.service
メンテナンスとアップデート
定期メンテナンス
週次チェック:
# Check container status
docker ps
# Check disk space
df -h
# Check logs for errors
docker logs n8n-n8n-1 | grep -i error
月次アップデート:
# Update container images
cd /opt/n8n && docker compose pull && docker compose up -d
cd /opt/traefik && docker compose pull && docker compose up -d
cd /opt/mailserver && docker compose pull && docker compose up -d
# Clean up old images
docker system prune -f
データのバックアップ
バックアップスクリプトを作成します:
nano /opt/backup-n8n.sh
以下の内容を追加します:
#!/bin/bash
mkdir -p /opt/backups
tar -czf /opt/backups/n8n-backup-$(date +%Y%m%d).tar.gz /opt/n8n/data
find /opt/backups -name "n8n-backup-*.tar.gz" -mtime +30 -delete
実行権限を付与してcronに追加します:
chmod +x /opt/backup-n8n.sh
# Add to crontab (daily backup at 2 AM)
crontab -e
# Add this line:
0 2 * * * /opt/backup-n8n.sh
セキュリティ強化
ファイアウォールの設定
# Install UFW
apt install ufw
# Set defaults
ufw default deny incoming
ufw default allow outgoing
# Allow SSH
ufw allow 22
# Allow HTTP/HTTPS
ufw allow 80
ufw allow 443
# Enable firewall
ufw enable
SSHのセキュリティ強化
SSH設定を編集します:
nano /etc/ssh/sshd_config
以下の変更を加えます:
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
SSHを再起動します:
systemctl restart ssh
Fail2Banの設定
apt install fail2ban
# Copy default configuration
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Enable and start
systemctl enable fail2ban
systemctl start fail2ban
コスト内訳
月額コスト:
- Hetzner CX11サーバー:4.51ユーロ
- ドメイン(年間、変動あり):年間約10〜15ユーロ
- 合計:月額約5〜6ユーロ
n8n Cloudとの比較:
- n8n Starter:月額20ドル
- n8n Pro:月額50ドル
- 年間節約額:180〜540ドル
セットアップのスケールアップ
複数のn8nインスタンス
異なるチーム向けに複数の独立したn8nインスタンスを実行できます:
/opt/n8n-team2/docker-compose.yml を作成します:
version: '3'
services:
n8n-team2:
image: n8nio/n8n:latest
restart: always
environment:
- N8N_HOST=team2.yourdomain.com
# ... rest of configuration
volumes:
- ./data:/home/node/.n8n
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n-team2.rule=Host(`team2.yourdomain.com`)"
- "traefik.http.routers.n8n-team2.entrypoints=https"
- "traefik.http.routers.n8n-team2.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n-team2.loadbalancer.server.port=5678"
networks:
proxy:
external: true
サーバーリソースのアップグレード
より高い性能が必要な場合は、Hetznerサーバーをアップグレードしてください:
- CX21:vCPU 2基、RAM 8GB(月額8.46ユーロ)
- CX31:vCPU 2基、RAM 16GB(月額16.07ユーロ)
まとめ
ホスティングソリューションのほんの一部のコストで、本番環境対応のn8nインストールが完成しました。完全なコントロールを維持しながら、自動HTTPS、メール機能、堅牢なサービス管理を備えたセットアップです。
このアプローチの主なメリット:
- コスト効率:年間数百ドルの節約
- 完全なコントロール:使用制限や制約なし
- プライバシー:データは自社インフラ上に保持
- カスタマイズ性:必要に応じて変更・拡張可能
この設定は本番環境でテスト済みであり、コストの一部でエンタープライズグレードの信頼性を提供します。
tvaについて
tvaは、データベースシステム、クラウド環境、グローバルサプライチェーンの包括的なインフラ管理を提供しています。厳格なセキュリティプロトコルとパフォーマンス最適化を組み合わせた体系的なアプローチにより、戦略的アドバイザリーサービスでデジタル能力と物理資産の両方を精密に調整し、あらゆる業務において最高水準の卓越した運用とコンプライアンスを維持しています。
サービスの詳細については tva.sg をご覧ください。