n8n×LINE自動応答をRailwayで24時間稼働させた記録|Dockerイメージでデプロイ


目次

この記事について

前回の記事でローカル環境(Windows 11 / WSL2 / Docker)に構築したn8n × Claude API × Supabaseの訪問介護向けLINE自動応答システムを、Railwayにデプロイして24時間稼働させるまでの実装ログです。

詰まったポイントを中心に記録します。

環境

  • n8n(Docker Image:n8nio/n8n)
  • Railway(24時間稼働はHobbyプラン:月5ドル)
  • LINE Messaging API
  • Windows 11 / ブラウザ操作のみ

前回の記事 → n8n × Claude API × Supabaseで訪問介護向けLINE自動応答を作った話


ローカル環境との違い

ローカル(ngrok)
PCを閉じる → n8n停止 → LINEに返信できない
ngrokを再起動 → URLが変わる → LINE設定も変更必要

Railway
PCを閉じる → n8nは動き続ける
URLは固定 → LINE設定の変更不要

ngrokのローカル環境では「PCを起動してngrokを立ち上げてURLをLINEに設定し直す」という手順が毎回必要でした。Railwayに移行することでこの問題が解消されます。


Railwayの料金について

Railwayの無料分は、新規登録時の5ドル(30日間・1回限りのトライアル)と、その後の月1ドル分のFreeプラン(メモリ0.5GB)です。24時間動かすなら、Hobbyプラン(月5ドル・5ドル分の利用込み)を前提にしてください。実装した2026年4月当時、当社は「毎月5ドル分が無料で付く」と考えて使い始めましたが、今の料金は上のとおりです。

無料の代替サービスとして以下も検討しましたが、今回の用途では不向きでした。

サービス問題点
n8n Cloud14日トライアルのみ・無料プランなし
Render15分無操作でスリープ → Webhookが失敗する
Fly.io設定が複雑

Webhookを使うシステムではスリープが致命的です。Renderの無料プランはリクエストがなければ15分でスリープして、次のWebhookリクエストで起動に数十秒かかります。その間LINEのWebhookが失敗するため使えません。


デプロイ手順

STEP 1:Railwayアカウント作成・プロジェクト作成

https://railway.app でGitHubアカウントでサインアップします。GitHubで認証しないと、外部への通信が制限されたトライアルになります。

「New Project」→「Empty project」→「Add a service」→「Docker Image」を選択して以下を入力します。

n8nio/n8n

STEP 2:ドメインの発行

「Settings」タブ → 「Networking」→「Generate Domain」をクリックします。

ポート番号の入力欄が表示されるので以下を入力します。

5678

発行されるURLの形式は以下です。

https://n8n-production-xxxxx.up.railway.app

注意点:URLの形式は xxxxx.up.railway.app です。up の前後にドットが入ります。後で WEBHOOK_URL に設定する際にこの形式を正確にコピーしてください。形式が違うと Invalid URL エラーが発生します。

STEP 3:環境変数の設定

「Variables」タブで以下を設定します。

変数名値
N8N_BASIC_AUTH_ACTIVE設定しない(実装時は true)
N8N_BASIC_AUTH_USER設定しない(実装時は admin)
N8N_BASIC_AUTH_PASSWORD設定しない(実装時は任意の強いパスワード)
GENERIC_TIMEZONEAsia/Tokyo
TZAsia/Tokyo
NODE_FUNCTION_ALLOW_BUILTINhttps,http
NODE_FUNCTION_ALLOW_EXTERNAL*
WEBHOOK_URLhttps://n8n-production-xxxxx.up.railway.app

WEBHOOK_URL はSTEP 2で発行したURLをそのままコピーします。末尾のスラッシュは不要です。

表の N8N_BASIC_AUTH_ で始まる3行は、実装時には入れていましたが、n8n 1.0以降は効きません。今は、初めてn8nの画面を開いたときにオーナーアカウントを作ります。

この画面は2026年4月の実装時のものです。今の画面とは表示が異なる場合があります。

STEP 4:ワークフローのインポート

ローカルのn8nからワークフローをエクスポートします。

キャンバス画面 → 右上「...」→「Download」→ workflow.json

RailwayのURL上のn8nにログインしてインポートします。

新規ワークフロー作成 → 右上「...」→「Import from file」→ workflow.json を選択
この画面は2026年4月の実装時のものです。今の画面とは表示が異なる場合があります。

STEP 5:LINE DevelopersのWebhook URLを更新

変更前:https://xxxx.ngrok-free.app/webhook/line
変更後:https://n8n-production-xxxxx.up.railway.app/webhook/line

「検証」ボタンで成功を確認します。

STEP 6:ワークフローをActivate

n8nのキャンバス画面上部の「Publish」ボタンを押します。実装した当時は、画面右上のトグルを「Active」にする方式でした。


詰まったポイントと解決策

① axiosが使えない(Module ‘axios’ is disallowed)

エラー内容

Error: Module 'axios' is disallowed [line 16]

原因

n8n 2.16.1から導入された「Task Runner」機能がCodeノードでの外部モジュール利用を制限しています。

解決策

環境変数に以下を追加します。

NODE_FUNCTION_ALLOW_EXTERNAL = *
NODE_FUNCTION_ALLOW_BUILTIN  = https,http

* はすべての外部モジュールを許可する設定です。

注意:N8N_RUNNERS_ENABLED=false を追加するとクラッシュする場合があります。この変数は追加しないでください。今のn8nでは、Task Runnerは2.0から標準の仕組みになっており、N8N_RUNNERS_ENABLED は設定不要(非推奨)です。

ランナーを別のコンテナで動かす構成にした場合は、NODE_FUNCTION_ALLOW_EXTERNAL などをランナー側に設定します。


② WEBHOOK_URLのInvalid URLエラー

エラー内容

TypeError: Invalid URL

原因

WEBHOOK_URL の値が正しくない形式になっていました。

よくある間違い

# NG:httpsがない
n8n-production-xxxxx.up.railway.app

# NG:末尾にスラッシュがある
https://n8n-production-xxxxx.up.railway.app/

# NG:upの前後のドットが抜けている
https://n8n-production-xxxxx.railway.app

正しい形式

https://n8n-production-xxxxx.up.railway.app

RailwayのSettingsタブ → Networkingセクションに表示されているURLをそのままコピーするのが確実です。


③ ボリュームのパーミッションエラー(EACCES)

エラー内容

Error: EACCES: permission denied, open '/home/node/.n8n/config'

原因

Railwayのボリュームをマウントすると、n8nのDockerイメージが /home/node/.n8n に書き込もうとしますが、ボリュームの所有者権限の問題で書き込めません。

試みた解決策(いずれも効果なし)

  • Mount Pathを /data に変更 → 同じエラーが発生
  • N8N_USER_FOLDER=/data を設定 → 同じエラーが発生
  • N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false を設定 → 効果なし
  • N8N_RUNNERS_ENABLED=false を設定 → クラッシュした

現在の対処法

ボリュームなしで運用しています。Railwayが再起動するとワークフローが消えるため、workflow.json をGitHubで管理しておき、再起動後に手動でインポートします。

再起動の頻度は低く、復旧は5分以内で完了します。

今後の対応

n8nのDockerイメージをカスタムしてパーミッション問題を根本解決する予定です。

今は、Railwayの公式ドキュメントで、環境変数 RAILWAY_RUN_UID=0 を設定する方法が案内されています。ボリュームを付ければ、再起動のたびにワークフローを入れ直す必要はありません。


動作確認

LINEから以下のメッセージを送信します。

訪問介護のサービス内容を教えてください

数秒後にClaude APIが生成した返答がLINEに届けば成功です。

RailwayのExecutionsタブで実行履歴を確認できます。


ローカルとRailwayの使い分け

現在の運用方針は以下の通りです。

開発・デバッグ → ローカル(localhost:5678)
本番稼働      → Railway

ワークフローを変更する場合はローカルで修正・テストしてからRailwayにインポートします。


まとめ

Railwayへのデプロイ自体は30分程度で完了しますが、axiosのモジュール制限・WEBHOOK_URLの形式・ボリュームのパーミッション問題の3点で時間がかかりました。

同じ構成を試す方の参考になれば幸いです。ボリュームのパーミッション問題は、今はRailwayの公式ドキュメントに、環境変数 RAILWAY_RUN_UID=0 を設定する対処が載っています。

この記事は2026年9月に、料金・環境変数・手順を今の版に合わせて見直しました。


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

1981年生まれ、名古屋出身。株式会社ニューロシンク代表。

2008年に渡独し、ベルリンで約18年間エンジニアとして活動。ドイツの国家資格である職業訓練プログラム「アプリケーション開発専門IT技術者」を修了後、医療系の自社開発企業でデスクトップ・Webアプリケーションの開発に4年間従事しました。2022年からはドイツの大手SIer「Adesso SE」で、フルスタックエンジニアとしてリードポジションを務めました。

2026年に日本へ帰国し、同年9月に株式会社ニューロシンクを設立。愛知・岐阜・三重の町工場を主な対象に、AI導入と業務システムの改善を支援しています。提案だけで終わらせず、工場に足を運んで一緒に手を動かす。そんな現場に立つAIエンジニアでありたいと考えています。

著書「AI時代の海外移住戦略」

目次