中級向け

ConoHa VPSにn8nを入れる

ConoHa VPS の申し込み画面で選べるテンプレートを使うと、n8n が自動で入ります。ただし入れ終わった時点では n8n が止まっていて、時刻はニューヨーク時間です。1GB のプランを実際に借りて、申し込みから、アカウントの作り方の順番、時刻、https、バックアップまでを確かめました。

動作確認: — n8n 2.41.6 / ConoHa VPS 1GB / Ubuntu 24.04

n8n を VPS で動かすと、パソコンを閉じても止まらず、LINE の通知やスマホの承認ボタンのように、外から呼ばれる仕組みも動かせます。 ConoHa VPS(PR) には、申し込み画面でテンプレートを選ぶと n8n を自動で入れてくれる機能があります。

実際に借りて試したところ、テンプレートだけでは終わりませんでした。

  • 入れ終わった時点で、n8n は止まっている(自分で起動する)
  • n8n の時刻がニューヨーク時間になっている
  • 順番を間違えると、他人が先にアカウントを作れてしまう

この記事は、申し込みから、これらを直して外から使えるようにするまでの手順です。 VPS・自分のパソコン・n8n Cloud のどれを選ぶかは n8nはどこで動かすか に書いています。 この記事は、VPS にすると決めた人向けです。

操作には、黒い画面(コマンド)を使います。ConoHa の画面での操作と、コピーして貼る行だけで進められますが、 初めてなら少し時間がかかります。

1 申し込む。セキュリティグループは SSH だけ。オプションでテンプレートの n8n を選ぶ2 SSH で入り、n8n を起動する(テンプレートは、最後に n8n を止めて終わる)3 手元のパソコンからつなぎ(SSH トンネル)、オーナーアカウントを作る。まだ外には開けない4 時刻の設定を2行足して、n8n を起動し直す。サーバーを一度再起動する5 セキュリティグループに Web を足す。数分で https の証明書が自動で付くアカウントを作る前に外へ開けると、最初にアクセスした人がオーナーになれてしまう
3 と 5 の順番が肝。この順なら、アカウントを作るまで n8n は外から見えない。

申し込む:選ぶものと、選ばないもの

申し込みはこちらから:ConoHa VPS の申し込みページ(PR・広告リンク)

申し込み画面で、次のように選びました。

項目 選んだもの 補足
料金のタイプ 時間課金 最低の期間がなく、いつでも解約できる。1か月動かし続けても、1GB は 1,064円(税込) が上限
メモリ 1GB 普段の業務の自動化なら足りた(数字は別の記事)
OS Ubuntu 24.04 「アプリケーション」のタブに n8n は無い。選ばなくてよい
認証 SSH Key(新規作成) 鍵のファイル(.pem)が保存される。無くすと入れなくなるので、安全な場所に置く
オプション スタートアップスクリプト → テンプレート → n8n n8n はアプリケーションではなく、ここにある
セキュリティグループ IPv4v6-SSH だけ Web はまだ付けない(理由は「手元のパソコンからつないで、オーナーアカウントを作る」の節)

申し込むと、サーバーが作られて起動します。 テンプレートの n8n の自動構築は、その中で走ります(終わるまでの時間は測っていません)。

サーバーに入って、n8n を起動する

手元のパソコンのターミナル(Windows なら PowerShell)から、保存した鍵で入ります。

ssh -i <鍵のファイルの場所> root@<サーバーの IP アドレス>

IP アドレスは、ConoHa のサーバーの詳細に出ています。 サーバーを作った直後は、まだ入れないことがあります。拒否されたら、少し待ってからもう一度試してください。

入れたら、n8n を起動します。

/root/n8n-manage.sh start

画面に、n8n のアドレス(https://v160-...cnode.jp のような形)が出ます。 このアドレスは、テンプレートが IP アドレスの逆引き名から作ったものです。自分のドメインではありません。

この方法で入ったのは、n8n 2.41.6(Docker の latest のイメージ)でした。 バージョンは固定されていません(後で書きます)。

手元のパソコンからつないで、オーナーアカウントを作る

n8n は、最初にアクセスした人が、オーナーのアカウントを作る作りです。 外に開く前に、自分で作ってしまいます。

セキュリティグループが IPv4v6-SSH だけのうちは、n8n の画面は、ブラウザから直接は開けません。 そこで、サーバーに入るときに使っている SSH の通り道を借りて、手元のパソコンの「15678番」を、サーバーの中の n8n(5678番)につなぎます。 これを SSH トンネルと呼びます。つないでいる間だけ、自分のパソコンからだけ見える専用の通路ができて、ほかの人には見えません。

(LINE の記事で使った「トンネル」は、逆向きです。あれは、外から手元の n8n へ届けるためのものでした。)

手元のターミナルで、次を実行して、そのまま開いておきます(閉じると通路が消えます)。何も表示されなくて正常です。

ssh -i <鍵のファイルの場所> -N -L 15678:localhost:5678 root@<サーバーの IP アドレス>

-L 15678:localhost:5678 が「手元の15678番を、サーバーの5678番につなぐ」、-N が「サーバーでは何も実行せず、通路だけ作る」という意味です。

ブラウザで http://localhost:15678 を開くと、アカウントの作成画面が出ます。 メールアドレスと名前、パスワードを入れて作ります。

  • 手元のパソコンでも n8n を動かしているなら、ポートが 5678 だとぶつかるので、15678 のように別の番号にする
  • 画面の左下にバージョンが出ます(このとき 2.41.6)。2.41 の設定画面には「About n8n」の項目はありませんでした
  • パスワードは、パスワード管理のアプリなどに保存してください。忘れたときの直し方は、最後に書きます

時刻を日本時間にして、サーバーを再起動する

n8n の時刻は、何もしないとニューヨーク時間

テンプレートで入れた n8n は、時刻をニューヨーク時間として扱っていました。 「毎朝9時」の定時実行を作ると、日本時間の夜22時(冬は23時)に動きます。

サーバーの設定ファイル /home/n8n-user/n8n/docker-compose.yml の environment: に、次の2行を足します。

      - GENERIC_TIMEZONE=Asia/Tokyo
      - TZ=Asia/Tokyo

足したら、同じ場所で n8n を作り直します。

cd /home/n8n-user/n8n
docker compose up -d

直したあと、「毎日 9時38分」の定時実行を作って、9時38分15秒(日本時間)に動いたことまで確かめました。 ワークフロー内の日時は $now で日本時間になりました。

設定の考え方は Schedule Triggerの使い方 にも書いています。

一度、サーバーを再起動する

テンプレートの構築が終わった直後、サーバーにはメモリ不足を補う仕組み(スワップ)が有効になっていませんでした。 サーバーを一度再起動したら、2GB のスワップ(/var/spool/swap/swapfile)が有効になっていました。 理由までは調べていません。

1GB のサーバーでは、スワップがあるかどうかで、大きめの処理が落ちるかどうかが変わります。 ConoHa のパネルから再起動するか、サーバーの中で reboot を実行してください。 再起動したら、/root/n8n-manage.sh start で n8n を起動します。再起動のあと n8n が自動で起動するかは、確かめていません。

外に開いて、https で使えるようにする

アカウントを作り、時刻を直したら、外に開きます。

ConoHa のパネルで、このサーバーのセキュリティグループを編集します。 IPv4v6-SSH は残したまま、IPv4v6-Web を追加して保存します。

数分待つと、https の証明書(鍵)が自動で取得されます。こちらでする操作はありません。 Caddy が、外から確認できるようになるまで取得を何度かやり直していました。

確かめたことは、次のとおりです。

  • https://<テンプレートが作ったアドレス>/ が外から開く。http は https に自動で切り替わる
  • n8n に直接入る入口(ポート 5678)は、外からは届かない。外から守っているのは、ConoHa のセキュリティグループです
  • Wi-Fi を切ったスマホ(モバイル回線)で、承認ボタンを押せた。 手元のパソコンの n8n では localhost を向いていたリンクが、外から開ける https のリンクになる(Send and Wait の使い方)

バックアップは「丸ごと」取る

データは、Docker のボリューム n8n_n8n_data に入っています。取り方で、戻せるものが違いました。

取り方 ワークフロー 認証情報 ログイン
書き出し(n8n export:workflow と export:credentials) 戻る 戻らない(読めなくなる) 戻らない
ボリュームを丸ごと保存 戻る 戻る 戻る(MCP の接続も)

書き出しで認証情報が戻らないのは、暗号の鍵が別のファイル(ボリュームの中の config)にあるためです。 書き出しで済ませるなら、鍵も一緒に保存するか、N8N_ENCRYPTION_KEY を固定しておく必要があります。

丸ごとの取り方です。n8n を止めている時間は 10秒、ファイルは 6MB(元のデータベースは 46MB)でした。

cd /home/n8n-user/n8n
docker compose stop
tar czf /root/backups/n8n-volume-$(date +%Y%m%d-%H%M).tar.gz \
  -C "$(docker volume inspect -f '{{.Mountpoint}}' n8n_n8n_data)" .
docker compose start

データを全部消してから戻す手順です。このとおりに戻して、ログイン・ワークフロー・認証情報が元に戻るところまで確かめました。

docker compose down -v
docker volume create n8n_n8n_data
tar xzf /root/backups/<保存したファイル> \
  -C "$(docker volume inspect -f '{{.Mountpoint}}' n8n_n8n_data)"
chown -R 1000:1000 "$(docker volume inspect -f '{{.Mountpoint}}' n8n_n8n_data)"
docker compose up -d

困ったとき

パスワードを忘れた

ログイン画面の「Forgot my password」は、メールの設定がないと、メールが届きません。このテンプレートには設定がありません。 サーバーに入って、アカウントを作り直せる状態に戻します(ワークフローは残りました)。

docker exec -e N8N_RUNNERS_BROKER_PORT=5699 n8n-n8n-1 n8n user-management:reset
cd /home/n8n-user/n8n && docker compose restart

N8N_RUNNERS_BROKER_PORT は、動いている n8n と番号がぶつかるのを避けるために付けています。

n8n が落ちた

大きなデータ(約200MB)を一度に処理したら、JavaScript heap out of memory で落ちて、自動で起動し直しました(結果は失われます)。 1GB で扱えた量や、重い処理の間はほかのワークフローも返事をしないことは、n8nはどこで動かすかに書いています。

料金

時間課金なので、基本は動かした分です。 止めている間も課金されるかは、確かめられませんでした。 初版では「止めている間の料金は、ほとんど増えていなかった(利用額3円)」と書いていましたが、誤りでした。料金の画面の「今月の利用金額」は前日までの分で、止めていた時間が入っていなかったためです。 止めるときは、サーバーの中で shutdown -h now を実行するか、パネルから停止します。 使い終わったら、削除すれば確実に止まります。

確認していないこと

  • n8n のバージョンを上げる手順は試していません。 テンプレートは latest のイメージを使っていて、docker compose pull をしたとき、どのバージョンに上がるかは決まりません。 バージョンを固定するなら、設定ファイルの image: の latest をバージョン番号に変える方法がありますが、この環境では試していません
  • 自分のドメインを使うことは試していません。テンプレートが作った、IP アドレスの逆引き名のままです
  • 何日も動かし続けたときの様子(メモリの増え方、実行の記録の溜まり方)は、まだ見ていません
  • ConoHa の有料の自動バックアップは試していません
  • 1GB のプランだけです。2GB 以上は試していません。ほかの VPS 会社も試していません

次に読む

次に読む