この記事について
前回の記事でローカル環境(Windows 11 / WSL2 / Docker)に構築したn8n × Claude API × Supabaseの訪問介護向けLINE自動応答システムを、Railwayにデプロイして24時間稼働させるまでの実装ログです。
詰まったポイントを中心に記録します。
環境
- n8n(Docker Image:n8nio/n8n)
- Railway(無料枠:月$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のクレジットが無料で付与されます。n8nの軽い利用であれば実質無料で運用できます。
無料の代替サービスとして以下も検討しましたが、今回の用途では不向きでした。
| サービス | 問題点 |
|---|---|
| n8n Cloud | 14日トライアルのみ・無料プランなし |
| Render | 15分無操作でスリープ → Webhookが失敗する |
| Fly.io | 設定が複雑 |
Webhookを使うシステムではスリープが致命的です。Renderの無料プランはリクエストがなければ15分でスリープして、次のWebhookリクエストで起動に数十秒かかります。その間LINEのWebhookが失敗するため使えません。
デプロイ手順
STEP 1:Railwayアカウント作成・プロジェクト作成
https://railway.app で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_TIMEZONE | Asia/Tokyo |
TZ | Asia/Tokyo |
NODE_FUNCTION_ALLOW_BUILTIN | https,http |
NODE_FUNCTION_ALLOW_EXTERNAL | * |
WEBHOOK_URL | https://n8n-production-xxxxx.up.railway.app |
WEBHOOK_URL はSTEP 2で発行したURLをそのままコピーします。末尾のスラッシュは不要です。

STEP 4:ワークフローのインポート
ローカルのn8nからワークフローをエクスポートします。
キャンバス画面 → 右上「...」→「Download」→ workflow.json
RailwayのURL上のn8nにログインしてインポートします。
新規ワークフロー作成 → 右上「...」→「Import from file」→ workflow.json を選択

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のキャンバス画面右上のトグルを「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 を追加するとクラッシュする場合があります。この変数は追加しないでください。
② 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イメージをカスタムしてパーミッション問題を根本解決する予定です。
動作確認
LINEから以下のメッセージを送信します。
訪問介護のサービス内容を教えてください
数秒後にClaude APIが生成した返答がLINEに届けば成功です。
RailwayのExecutionsタブで実行履歴を確認できます。
ローカルとRailwayの使い分け
現在の運用方針は以下の通りです。
開発・デバッグ → ローカル(localhost:5678)
本番稼働 → Railway
ワークフローを変更する場合はローカルで修正・テストしてからRailwayにインポートします。
まとめ
Railwayへのデプロイ自体は30分程度で完了しますが、axiosのモジュール制限・WEBHOOK_URLの形式・ボリュームのパーミッション問題の3点で時間がかかりました。
同じ構成を試す方の参考になれば幸いです。ボリュームのパーミッション問題については引き続き調査中です。解決策が見つかり次第この記事を更新します。

コメント