初心者向け

n8n をローカルで動かす:データはどこにあり、何をバックアップすればいいか

npm で入れた n8n のデータの置き場所、バックアップで見落としがちなファイル、ポートとデータフォルダの変え方を実機で確かめました。n8n が5678だけでなく5679も使っていること、SQLiteのWALを含めないとバックアップが不完全になることを実測しています。

動作確認: — n8n 2.36.8 / Windows 11

n8n をローカルで動かしていると、いずれこの疑問が来ます。

作ったワークフローはどこに保存されているのか。 PCを買い替えるとき、何を持っていけば いいのか。バックアップは何をコピーすればいいのか。

公式ドキュメントには「~/.n8n にある」と書かれています。それは正しいのですが、 そこだけ見てコピーすると足りません。 実際にファイルを見て確かめました。

この記事は npm でインストールした n8n をローカルで動かしている場合の話です。 Docker や n8n Cloud では構成が変わります。

データは1箇所にまとまっている

ワークフロー、認証情報、実行履歴。すべてこのフォルダに入っています。

OS 場所
Windows C:\Users\<ユーザー名>\.n8n\
macOS / Linux ~/.n8n/

実際の中身です。

config                                56
database.sqlite                  2,347,008
database.sqlite-shm                 32,768
database.sqlite-wal              4,136,512
database.sqlite.bak-20260924-114201  1,519,616
n8nEventLog.log                    257,331
nodes/
storage/

データベースは SQLite(1ファイルで完結するデータベース)です。 別途サーバーを立てる必要がないので、ローカルではこれが既定になっています。

.bak- が付いたファイルは、n8n がバージョンアップ時に自動で取ったバックアップです。 勝手に増えるので、容量が気になったら古いものは消して構いません。

いちばん大事なのは 56 バイトのファイル

config を開いてみたところ、入っていたのはキーが1つだけでした。

{ "encryptionKey": "(32文字の文字列)" }

これが認証情報を暗号化している鍵です。

つまり config と database.sqlite はセットです。 どちらか一方では意味がありません。

バックアップで見落とすファイル

ここが本題です。database.sqlite の横に、こんなファイルがあります。

database.sqlite-shm     32,768
database.sqlite-wal  4,136,512

-wal は Write-Ahead Log といって、まだ本体に書き込まれていない変更が入っています。 SQLite は書き込みをいったんここに溜めて、あとでまとめて本体に反映する作りです。

バックアップの取り方は2つです。

確実なのは、n8n を止めてからコピーする方法です。終了時に WAL の内容が本体へ 書き込まれるので、database.sqlite だけで完結します。

# n8n を止めてから、フォルダごとコピーする
cp -r ~/.n8n ~/n8n-backup-20260925

止められない場合は、.n8n フォルダを丸ごとコピーしてください。 -wal と -shm も一緒に持っていく必要があります。

n8n は 5678 だけでなく 5679 も使っている

ポートを変えたくなったとき、ここで詰まりました。

N8N_PORT=5679 にして起動したら、こう言われて落ちました。

n8n Task Broker's port 5679 is already in use.
Do you have another instance of n8n running already?

n8n は起動時に2つのポートを開きます。

ポート 用途 環境変数
5678 画面とAPI N8N_PORT
5679 Task Broker(内部処理用) N8N_RUNNERS_BROKER_PORT

5679 の方は画面に出てこないので、存在に気づきません。 「空いていそう」と思って 5678 の隣を指定すると、自分自身とぶつかります。

2つ目の n8n を同じPCで動かす

ポートを2つとも変えれば、同時に動かせます。検証用と普段使いを分けたいときに使えます。

# 2つ目のインスタンス
N8N_PORT=5680 \
N8N_RUNNERS_BROKER_PORT=5681 \
N8N_USER_FOLDER=/path/to/test-home \
n8n start

実際にこの設定で起動し、5678 と 5680 の2つが同時に動くこと、 互いのデータに干渉しないことを確認しました。 元のインスタンスの database.sqlite はサイズも変わっていません。

データの置き場所を変える

N8N_USER_FOLDER で変えられます。ただし挙動に癖があります。

新規に作られたのは、この4ファイルだけでした。

config                56
database.sqlite   1,519,616
database.sqlite-shm  32,768
database.sqlite-wal 4,136,512

database.sqlite が1.5MBあるのは、データが無くてもテーブルの定義が入っているためです。 起動時に大量のマイグレーション(テーブル構成の更新)が流れるのが、ログから見えます。

タイムゾーンを設定する

これは Schedule Trigger を使うなら必須です。

GENERIC_TIMEZONE = Asia/Tokyo

Windows ならユーザー環境変数に設定します。設定を変えたら n8n を再起動してください。

環境変数のまとめ

実際に設定して動作を確認したものだけ挙げます。

環境変数 用途 既定値
N8N_PORT 画面とAPIのポート 5678
N8N_RUNNERS_BROKER_PORT Task Broker のポート 5679
N8N_USER_FOLDER データを置く親フォルダ ホームディレクトリ
GENERIC_TIMEZONE 既定のタイムゾーン システム依存

検証していないこと

  • Docker では検証していません。 npm でグローバルインストールした構成だけです。 Docker の場合はボリュームのマウント先が別の話になります
  • PostgreSQL への切り替えは試していません。 SQLite 以外を使う場合の手順は 確認していません
  • 実際に別のPCへ移して復元するところまではやっていません。 config が無いと 認証情報が復号できないというのは、暗号化キーがそこにしかないことから述べています。 移行して壊れるところまでは確かめていません
  • N8N_RUNNERS_BROKER_PORT の既定値 5679 は、インストール済みの n8n のコードで確認し、 実際に変更して動くことも確かめました。ただし公式ドキュメントとの突き合わせはしていません
  • nodes/ と storage/ の中身は空だったため、何が入るかは確認していません

まとめると、.n8n フォルダを丸ごとコピーしておけば大丈夫です。 その中で一番失いたくないのは、56バイトの config です。