初心者向け
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 です。
- 認証情報の考え方は n8n 用語集 に
- 定時実行とタイムゾーンは Schedule Trigger の使い方 に
- 本番実行でしか動かない仕組みは n8n のエラー通知は、手動実行では飛ばない に