はじめに
dockerでn8nをセルフホスティングしている場合に、slackに通知を送るノードは問題なく利用できるのですが、slackから通知を受け取る場合には、用意されているノードのみでは利用できないです。数時間悩み、もしかしたらと考え、セルフホスティングが原因かとChatGPTに聞いたところ、ngrokを利用すれば解決できるよと回答を貰い、またn8nとは別ですが、セルフホスティングでngrokを使って解決した例を見つけ、実施してみたところ解決しました。まったくn8nに関する記事が無いため、投稿しました。
※この記事はAIを利用して作成されました。
n8n を Docker + ngrok で Slack Trigger 対応する手順
1. 前提条件
- Docker が利用可能な環境
- n8n コンテナがポート
5678
で稼働可能 - ngrok アカウント登録済み(https://ngrok.com/)
- ngrok の Authtoken を取得済み
(※セキュリティのため公開しないこと)
2. n8n コンテナ起動
既にn8nをコンテナを起動している場合にはスキップしてOKです。ちなみに--add-host
の部分はollamaのコンテナをn8nのノードから利用できるように追加してあります。
docker run -d \
--name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
--add-host=host.docker.internal:host-gateway \
docker.n8n.io/n8nio/n8n
3. ngrok コンテナ起動(ログ出力あり)
<YOUR_NEW_TOKEN>
は取得したトークンを入れてください。
docker run -d \
--name ngrok \
--link n8n \
-e NGROK_AUTHTOKEN=<YOUR_NEW_TOKEN> \
ngrok/ngrok:latest \
http --log=stdout --log-level=info http://n8n:5678
4. 公開 URL の確認
docker logs -f ngrok
出力例:
t=... lvl=info msg="started tunnel" obj=tunnels name=command_line addr=http://n8n:5678 url=https://abc.ngrok-free.app
➡ https://abc.ngrok-free.app
が公開URL
5. Slack 側の設定
基本的な設定は以下を参考にしてください。
-
n8n の Slack Trigger ノードを有効化(Activate)
-
Production Webhook URL をコピー
例:http://localhost:5678/webhook/123/webhook
-
http://localhost:5678
を ngrok の HTTPS URL に置換
例:https://abc.ngrok-free.app/webhook/123/webhook
-
Slack App → Event Subscriptions → Request URL に貼り付け → Verify
7. 注意点
- ngrok の無料版 URL は再起動ごとに変わる(固定ドメインは有料プラン)
- Slack の Verify は 3 秒以内応答必須
- n8n ワークフローが未有効化だと 404 エラーになる
- ngrok トークンが漏れた場合は 即ローテーション