Dokploy 環境における n8n のデプロイからバックアップまで:完全セットアップガイド

近年、低コード開発ツールの n8n が注目を集めており、制限された無料枠を超えて自前でのホスティングを検討するユーザーが増加しています。従来のコンテナ管理は複雑になりがちですが、Dokploy を利用することでインフラ構築のプロセスを劇的に簡略化できます。

1. サービステンプレートの初期化

Dokploy ダッシュボードより新規サービスを作成します。利用可能なテンプレートリストから n8n を選択し、プロビジョニングを開始してください。

2. インスタンスのデプロイ実行

n8n テンプレートを選択後、即座に `Deploy` ボタンを押下することで、コンテナの起動プロセスが開始されます。

3. カスタムドメインの設定

デフォルトのエンドポイントではなく、独自ドメインへの接続を確立するには、Domains セクションにて設定を行います。

まず、DNS 管理画面(Cloudflare など)にてサブドメイン(例:workflow.example.com)の A レコードまたは CNAME レコードを設定します。続いて Dokploy の Domain 登録欄に同一情報を追加し、環境変数 `N8N_HOST` に割り当てられた値をカスタムドメイン名へ上書きください。

設定完了後、サービスを更新 (Reload) し、指定したドメイン URL よりアクセステストを実施します。

4. 認証機能の有効化

公開状態ではアクセス制御が脆弱になるため、基本認証情報の付与が必要です。Environment 設定項目にて以下のパラメータを追加・定義します。

N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=YOUR_ADMIN_NAME
N8N_BASIC_AUTH_PASSWORD=SECURE_PASSPHRASE_01

変更内容は保存後に Reload 操作を行うことで有効化されます。

5. イメージバージョンの更新

デフォルトで指定されているイメージタグはセキュリティパッチ適用が遅れる場合があります。最新の安定版への変更には、Compose ファイル内の画像参照を更新します。

`image: n8nio/n8n:latest` または特定のバージョンタグ(例:`1.98.1`)を指定し、Deploy 処理を再発行することでロールアウトされます。

ブラウザのキャッシュをクリアすることで、最新版の UI にて確認が可能です。

6. クラウドバックアップ基盤の構築

Dokploy 標準の Snapshot 機能を利用する場合、S3 互換ストレージへの宛先登録が必要です。Version 要件を満たしているか確認の上、Destinations 設定よりオブジェクトストレージ(Cloudflare R2 など)との連携を行います。

構成要素推奨設定
ストレージプロバイダS3 Compatible
認証情報AccessKey / SecretKey
バケット名dokploy-vol-snap
リージョンauto または該当リージョン

以下のように設定画面より登録を完了させます。

7. スクリプトベースの自律型バックアップ

より柔軟な管理を目的とし、ローカルデータのアーカイブ生成と R2 への転送を自動化するシェルスクリプトを採用します。本手法により、データディレクトリ `/var/lib/dokploy/n8n` の圧縮およびクラウド同期を毎日凌晨 2 時に実行可能です。

前提として、ボリュームマウントパスが既定値である必要があります。変更済みの場合は Compose 定義にて `/home/node/.n8n` 等への永続化を確認してください。

Step 1: rclone ツールの導入と設定

まず、クラウドストレージクライアントとなる rclone をインストールします。

# インストールスクリプトの実行
curl https://rclone.org/install.sh | sudo bash

# 対話形式によるリモート設定
rclone config
# リモート名を入力 → name> r2_backup
# プロバイダ選択 → s3
# 各キー情報を提示 → Access Key, Secret Key
# エンドポイント設定 → https://ACCOUNT_ID.r2.cloudflarestorage.com

接続検証は以下のコマンドで行います。

rclone lsd r2_backup:dokploy-backups

Step 2: バックアップ用シェルスクリプト作成

エディタを開き、次の処理を組み込みます。変数名を変更してオリジナル性と可読性を高めています。

#!/usr/bin/env bash
set -euo pipefail

# パラメータ定義
TARGET_DIR="/var/lib/dokploy/n8n"
BACKUP_ID=$(date +"%Y%m%d_%H%M%S")
ARCHIVE_LOC="/tmp/n8n_archive_${BACKUP_ID}.tar.gz"
CLOUD_DEST="r2_backup:dokploy-backups"
RETENTION_DAYS=7

echo "[INFO] Starting backup process..."

# データ圧縮
tar -czf "${ARCHIVE_LOC}" -C "${TARGET_DIR}" .

# クラウド転送
rclone copy "${ARCHIVE_LOC}" "${CLOUD_DEST}"

# ローカルクリーンアップ(7 日超過分削除)
find /tmp -maxdepth 1 -name 'n8n_archive_*.tar.gz' -mtime +${RETENTION_DAYS} -delete

# クラウドサイドの維持期間ポリシー適用
rclone --min-age ${RETENTION_DAYS}d delete "${CLOUD_DEST}"

echo "[SUCCESS] Backup completed at ${BACKUP_ID}" >> /var/log/n8n_daily.log

スクリプトに実行権限を付与します。

chmod +x /usr/local/bin/n8n_autobackup.sh

Step 3: Cron によるスケジュール登録

システムタイマーに登録し、周期性を保証します。

sudo crontab -e

末尾に以下を追記。

0 2 * * * /usr/local/bin/n8n_autobackup.sh >> /var/log/cron_backup.log 2>&1

Step 4: リストア手順の確認

障害発生時の復旧フローを事前に理解しておくことが重要です。

# ① バックアップファイルの取得
rclone copy r2_backup:dokploy-backups/n8n_archive_YYYYMMDD_HHMMSS.tar.gz /tmp/

# ② 稼働中のコンテナ停止
docker compose stop n8n_service || dokploy stop n8n

# ③ マウント先の全消去と展開
rm -rf /var/lib/dokploy/n8n/*
tar -xzf /tmp/n8n_archive_YYYYMMDD_HHMMSS.tar.gz -C /var/lib/dokploy/n8n

# ④ システム再起動
docker compose up -d n8n_service || dokploy start n8n

このプロセスにより、設定やワークフロー履歴を含めた完全な状態復元が可能となります。

Volume オブジェクトを利用している場合のみ、ソースパスを検出する動的ロジックにスクリプトを適応させても構いません。

タグ: dokploy n8n Docker cloudflare-r2 bash-script

7月15日 20:25 投稿