قراره چی یاد بگیریم؟
از صفرِ صفر و بدون هیچ پیشنیاز اضافه: یک حساب ngrok میسازیم،
کلید NGROK_AUTHTOKEN را میگیریم، یک آدرس ثابت
NGROK_DOMAIN رزرو میکنیم و آن را طوری به
n8n داخل داکر وصل میکنیم که آدرس عمومی
https://${NGROK_DOMAIN} واقعاً باز شود و وبهوکها کار کنند.
یک مثال ساده تا خیالت راحت شود که چرا این آموزش لازم است.
فرض کن n8n را روی کامپیوتر خودت با داکر بالا آوردهای و در مرورگر با آدرس
http://localhost:5678 بازش میکنی. تا وقتی فقط خودت با آن کار میکنی همهچیز خوب است.
اما وقتی میخواهی یک سرویس بیرونی (مثل تلگرام، اسلک، یا یک فروشگاه) به n8n تو
پیام بفرستد، آن سرویس هیچ راهی برای رسیدن به کامپیوتر تو ندارد.
پانویس ۱ — «localhost» یعنی چه؟ localhost یعنی «همین کامپیوترِ خودم». آدرسی است که فقط از داخل همین دستگاه در دسترس است؛
مثل تلفن داخلیِ یک ساختمان که از بیرونِ ساختمان نمیشود آن را گرفت.
پانویس ۲ — «وبهوک» (Webhook) یعنی چه؟
وبهوک مثل یک زنگِ در است. تو یک آدرس به یک سرویس بیرونی میدهی و میگویی «هر وقت اتفاقی افتاد، این زنگ را بزن».
اما زنگ باید روی درِ خانهای باشد که از بیرون پیدا شود؛ و localhost از بیرون پیدا نیست.
راهحل: یک ابزار به اسم ngrok یک تونل امن میسازد و به کامپیوترِ تو یک
آدرس عمومیِ اینترنتی (با قفل HTTPS) میدهد. هر کس آن آدرس را باز کند،
ngrok پشتپرده او را به n8n داخل کامپیوترِ تو وصل میکند.
سرویس بیرونیتلگرام / اسلک
→
https://${NGROK_DOMAIN}آدرس عمومی و ثابت
→
ngrok tunnelتونل امن
→
n8nروی کامپیوتر تو
پانویس ۳ — «تونل» (Tunnel) یعنی چه؟
یک مسیرِ امن و رمزگذاریشده بین آدرس عمومیِ ngrok و کامپیوتر تو.
انگار یک لولهٔ نامرئی از اینترنت مستقیم وصل میشود به برنامهٔ روی دستگاهت.
پیشنیازها ✅ (اول اینها را چک کن)
این آموزش فرض میکند داکر و n8n را از قبل داری؛ اگر نداری، مسیرِ رسیدن به آنها را پایین گفتهایم.
کامپیوتر با اینترنت — ویندوز، مک یا لینوکس فرقی ندارد.
داکر نصبشده و روشن — همان که در ایستگاه «داکر و n8n» گراول یاد گرفتی.
بلد باشی ترمینال باز کنی — در ویندوز PowerShell یا CMD، در مک/لینوکس Terminal.
برای مطمئنشدن از نصب بودن داکر، این دستور را در ترمینال بزن:
docker --version
✅ ایست بازرسی
اگر چیزی شبیه Docker version 27.x.x دیدی، عالی است.
اگر پیام خطا دیدی یا دستور شناخته نشد، هنوز داکر نصب یا روشن نیست؛ اول آن را درست کن.
📖 نداری؟ اشکالی ندارد
اگر هنوز داکر یا n8n نداری، اول آموزش
«داکر و n8n» در گراول را کامل کن و بعد به این آموزش برگرد. این آموزش دقیقاً از همانجا شروع میشود.
مرحله ۱ از ۸
۱
ساخت حساب رایگان ngrok
⏱️ حدود ۵ دقیقه
مرورگر را باز کن و به این آدرس برو:
https://dashboard.ngrok.com/signup
یکی از راههای ثبتنام را انتخاب کن: با Google، با GitHub، یا با ایمیل و رمز.
اگر با ایمیل ثبتنام کردی، به صندوق ایمیلت برو و روی لینک تأیید کلیک کن.
حالا وارد داشبورد ngrok میشوی — همان صفحهٔ اصلی مدیریت حساب.
💡 نکته
حساب رایگان برای این آموزش کاملاً کافی است و کارت بانکی نمیخواهد. با همین حساب رایگان
یک دامنهٔ ثابت هم میگیری.
✅ ایست بازرسی
الان باید داخل صفحهای به اسم Dashboard باشی و منویی سمت صفحه ببینی که گزینههایی مثل
Domains و Your Authtoken دارد.
اگر هنوز در صفحهٔ ورود گیر کردهای، به بخش رفع اشکال برو.
مرحله ۲ از ۸
۲
گرفتن کلید NGROK_AUTHTOKEN
⏱️ حدود ۳ دقیقه
این کلید مثل کارت شناسایی توست؛ به ngrok ثابت میکند که این تونل مالِ توست.
یک رشتهٔ بلندِ تصادفی میبینی (چیزی شبیه 2Xy...aBcD). این همان authtoken است.
روی دکمهٔ Copy کنار آن بزن تا کامل کپی شود.
موقتاً آن را در یک فایل متنی یا جای امن نگه دار؛ چند مرحله بعد به آن نیاز داریم.
پانویس ۴ — «authtoken» یعنی چه؟
کوتاهشدهٔ authentication token یعنی «نشانهٔ احراز هویت». مثل یک رمزِ یکبارنمایش که ثابت میکند تو مجازی از این سرویس استفاده کنی.
⚠️ مواظب باش
این کلید مثل رمز عبور است. آن را در عکس، پیام عمومی، یا فایلی که روی گیتهاب public میگذاری قرار نده.
هر کس آن را داشته باشد میتواند از حساب تو تونل بسازد.
✅ ایست بازرسی
باید یک رشتهٔ بلند را کپی کرده و جایی امن ذخیره کرده باشی. اگر یادت رفت کجا بود، همیشه میتوانی به همین صفحه برگردی.
مرحله ۳ از ۸
۳
رزرو دامنهٔ ثابت NGROK_DOMAIN
⏱️ حدود ۵ دقیقه
اگر دامنهٔ ثابت نگیری، هر بار که ngrok را دوباره روشن کنی آدرست عوض میشود و باید همهجا آدرس جدید را بروزرسانی کنی.
خوشبختانه حساب رایگان یک دامنهٔ ثابت به تو میدهد که همیشه یکی میماند.
در داشبورد به بخش Domains برو:
https://dashboard.ngrok.com/domains
روی دکمهٔ New + (یا Create Domain) بزن.
ngrok یک دامنهٔ ثابتِ رایگان به تو پیشنهاد میدهد؛ چیزی شبیه:
happy-panda-1234.ngrok.app
آن را تأیید و کپی کن. این همان NGROK_DOMAIN ماست.
📖 آدرس کاملِ سایتت این میشود
اگر دامنهات happy-panda-1234.ngrok.app باشد، آدرس عمومیِ نهایی که در مرورگر باز میشود میشود:
https://happy-panda-1234.ngrok.app
یعنی همان الگوی https://${NGROK_DOMAIN} که در عنوان این آموزش دیدی.
پانویس ۵ — چرا «دامنهٔ ثابت» مهم است؟
وبهوکها را یک بار در سرویسهای بیرونی ثبت میکنی. اگر آدرست هر بار عوض شود، همهٔ آن ثبتها خراب میشوند.
دامنهٔ ثابت یعنی یک بار تنظیم، برای همیشه.
✅ ایست بازرسی
الان باید سه چیز داشته باشی و کنار هم یادداشت کرده باشی:
کلید NGROK_AUTHTOKEN، دامنهٔ NGROK_DOMAIN، و بدانی آدرس نهایی
https://${NGROK_DOMAIN} است.
مرحله ۴ از ۸
۴
ساخت فایل .env (جای نگهداری تنظیمات)
⏱️ حدود ۷ دقیقه
یک پوشهٔ خالی بساز (مثلاً روی دسکتاپ اسمش را n8n-ngrok بگذار). همهٔ کارها را داخل همین پوشه انجام میدهیم.
داخل این پوشه یک فایل جدید بساز و اسمش را دقیقاً بگذار .env (با یک نقطه در ابتدا، بدون هیچ پسوند دیگری).
این محتوا را داخلش بریز و مقدارها را با مقدار خودت جایگزین کن:
⚠️ مهمترین اشتباه رایج این آموزش
داخل فایل .env، جلوی WEBHOOK_URL و N8N_HOST
باید خودِ دامنه را کامل تایپ کنی؛ اینجا نوشتنِ ${NGROK_DOMAIN} کار نمیکند،
چون فایل .env متغیرها را داخل خودش جایگزین نمیکند.
الگوی ${NGROK_DOMAIN} فقط در فایل بعدی (docker-compose.yaml) معنا دارد.
💡 دو نکتهٔ ریز ولی مهم
• دور و برِ علامت = فاصله نگذار (بنویس TZ=Asia/Tehran نه TZ = Asia/Tehran).
• آدرس WEBHOOK_URL باید با https:// شروع شود و به یک / ختم شود.
پانویس ۶ — «فایل .env» یعنی چه؟
یک فایل متنی ساده که «تنظیمات» را نگه میدارد تا مجبور نباشی آنها را وسط دستورها تکرار کنی.
داکر خودش این فایل را میخواند. env کوتاهشدهٔ environment (محیط) است.
پانویس ۷ — چرا WEBHOOK_URL لازم است؟
اگر این را ست نکنی، n8n آدرسِ وبهوکها را با localhost میسازد و سرویسهای بیرونی نمیتوانند به آن برسند.
با ستکردنِ آن روی دامنهٔ عمومی، آدرس وبهوک درست و قابلدسترسی میشود.
✅ ایست بازرسی
باید یک فایل به اسم .env داخل پوشهات داشته باشی که ۴ مقدار مهمش (دامنه، توکن، هاست، آدرس وبهوک) با مقدار واقعیِ خودت پر شده باشد.
مرحله ۵ از ۸
۵
ساخت فایل docker-compose.yaml
⏱️ حدود ۸ دقیقه
این فایل به داکر میگوید «دو تا برنامه را با هم بالا بیاور»: یکی n8n و یکی ngrok.
داخل همان پوشه یک فایل جدید بساز و اسمش را بگذار docker-compose.yaml. این محتوا را داخلش بریز:
⚠️ نکتهٔ طلایی: چرا n8n:5678 و نه localhost:5678؟
داخل داکر، وقتی یک ظرف (container) میخواهد با ظرف دیگر حرف بزند، localhost اشتباه است؛
چون localhost برای هر ظرف یعنی «خودِ همان ظرف». برای اینکه ظرفِ ngrok
به ظرفِ n8n برسد، باید از اسم سرویس یعنی n8n استفاده کنی.
داکر خودش این اسم را به آدرس درست وصل میکند.
پانویس ۸ — «ظرف / container» یعنی چه؟
هر برنامه در داکر داخل یک «جعبهٔ جدا» به اسم container اجرا میشود. این جعبهها همسایهاند ولی هرکدام دنیای خودشان را دارند.
پانویس ۹ — این خطها یعنی چه؟
• image: کدام برنامه را دانلود و اجرا کند.
• ports: کدام درگاه (port) باز باشد؛ مثلاً 5678 درگاهِ n8n است.
• volumes: جایی که اطلاعاتِ n8n ذخیره میشود تا با خاموششدن پاک نشود.
• command: دستوری که به ngrok میگوید تونلِ HTTP روی دامنهٔ تو به سمت n8n بساز.
✅ ایست بازرسی
حالا باید داخل پوشهات دو فایل کنار هم باشند: .env و docker-compose.yaml.
مرحله ۶ از ۸
۶
اجرا با یک دستور
⏱️ حدود ۴ دقیقه
ترمینال را باز کن و با دستور cd برو داخل همان پوشه. مثلاً اگر روی دسکتاپ است:
cd Desktop/n8n-ngrok
این دستور را بزن تا هر دو برنامه با هم بالا بیایند:
docker compose up -d
پانویس ۱۰ — این -d ته دستور چیست؟
یعنی «در پسزمینه اجرا کن» تا ترمینال آزاد بماند. اگر آن را نگذاری، همهچیز کار میکند ولی ترمینال مشغول میماند و پیامها را زنده میبینی
(برای بستن باید Ctrl + C بزنی).
برای دیدن اینکه همهچیز روشن است، این را بزن:
docker compose ps
✅ ایست بازرسی
در خروجی باید دو ردیف ببینی — یکی برای n8n و یکی برای ngrok — که وضعیتشان
running یا Up باشد. اگر یکی Exited بود، به
رفع اشکال برو.
مرحله ۷ از ۸
۷
تست آدرس عمومی و پنل ngrok
⏱️ حدود ۵ دقیقه
مرورگر را باز کن و آدرس عمومیِ خودت را برو (همان دامنهٔ مرحله ۳):
https://happy-panda-1234.ngrok.app
باید صفحهٔ خوشآمدِ n8n باز شود و از تو بخواهد یک حساب مدیر بسازی. همانجا نام، ایمیل و رمز بده.
برای دیدن ترافیکِ زنده، پنل داخلیِ ngrok را هم باز کن:
http://localhost:4040
پانویس ۱۱ — پنل 4040 چیست؟
یک صفحهٔ بازرسی که هر درخواستی که به تونلت میرسد را نشان میدهد. وقتی وبهوک کار نکرد، اینجا اولین جایی است که سر میزنی
تا ببینی درخواست اصلاً رسیده یا نه.
✅ ایست بازرسی
اگر با آدرس https://${NGROK_DOMAIN} صفحهٔ n8n باز شد، تونل کار میکند 🎉.
میتوانی همین آدرس را روی گوشیِ خودت هم باز کنی؛ چیزی که با localhost ممکن نبود.
مرحله ۸ از ۸
۸
تست یک وبهوک واقعی
⏱️ حدود ۶ دقیقه
حالا بیایید ثابت کنیم که وبهوکها هم درست شدهاند.
در n8n یک Workflow جدید بساز.
یک گره (Node) از نوع Webhook اضافه کن.
در تنظیمات آن گره، آدرسِ Test URL یا Production URL را نگاه کن؛ باید حالا با دامنهٔ ngrok تو شروع شود، مثل:
https://happy-panda-1234.ngrok.app/webhook/....
روی Listen for test event بزن.
آن آدرس وبهوک را در یک تب دیگرِ مرورگر باز کن (یا با Postman صدا بزن).
پانویس ۱۲ — «گره / Node» یعنی چه؟
در n8n هر کار یک «گره» است؛ مثل قطعههای لِگو که کنار هم میچینی تا یک اتوماسیون کامل بسازی.
✅ ایست بازرسی نهایی
اگر بعد از صدا زدنِ آن آدرس، در n8n پیام موفقیت دیدی و درخواست در پنل
localhost:4040 ثبت شد، یعنی همهچیز کامل کار میکند و n8n تو آمادهٔ اتصال به سرویسهای بیرونی است.
💡 قدم بعدی طبیعی
حالا که وبهوک عمومی داری، میتوانی n8n را به تلگرام، اسلک یا سرویسهای دیگر وصل کنی —
همه به این آدرسِ ثابتِ عمومی زنگ میزنند و اتوماسیونت اجرا میشود.
🔒 (اختیاری) قفلِ اضافه روی درِ خانه
آدرست حالا عمومی است؛ اگر خواستی امنترش کنی، این دو راه ساده هست.
۱) فقط اجازه به IP خودت. میتوانی به ngrok بگویی فقط اینترنتِ خودت اجازهٔ باز کردنِ پنل n8n را داشته باشد.
اول IP عمومیات را از این ابزار بگیر:
⚠️ حواست باشد
اگر IP خودت را محدود کنی و بعداً بخواهی از یک سرویس بیرونی وبهوک بگیری، آن سرویس دیگر اجازه ندارد.
در آن حالت باید مسیرِ /webhook/ را از محدودیت IP جدا کنی (سیاست کاملترش در مستندات رسمی ngrok هست).
پانویس ۱۳ — «IP عمومی» یعنی چه؟
شمارهٔ خانهٔ تو در اینترنت. هر اتصالِ اینترنتی یک IP عمومی دارد که او را از بقیه جدا میکند.
🔧 رفع اشکال — اگر جایی گیر کردی
پرتکرارترین مشکلها و راهحلِ سادهشان.
نشانه (چه میبینی؟)
علت
راهحل
آدرس عمومی باز نمیشود و خطای ERR_NGROK میبینی
authtoken اشتباه یا جاافتاده
مقدار NGROK_AUTHTOKEN در فایل .env را دوباره از داشبورد کپی کن؛ فاصلهٔ اضافه نباشد. بعد docker compose down و دوباره up -d.
ظرف ngrok بالا میآید ولی سریع Exited میشود
دامنه اشتباه تایپ شده یا قبلاً جای دیگری استفاده شده
مقدار NGROK_DOMAIN را عیناً با چیزی که در بخش Domains رزرو کردی مطابقت بده (بدون https://).
صفحهٔ n8n باز میشود ولی وبهوک آدرسِ localhost میدهد
WEBHOOK_URL ست نشده یا اشتباه است
در .env مطمئن شو WEBHOOK_URL با https:// شروع و به / ختم میشود؛ سپس کانتینرها را ریاستارت کن.
خطای port is already allocated
درگاه 5678 یا 4040 را برنامهٔ دیگری گرفته
آن برنامه را ببند، یا سمت چپِ نگاشتِ درگاه را عوض کن (مثلاً 5679:5678).
وبهوک از بیرون به n8n نمیرسد
یا محدودیت IP فعال است، یا درخواست اصلاً نرسیده
اول در پنل localhost:4040 ببین درخواست ثبت شده یا نه. اگر نه، محدودیت IP یا فایروال را چک کن.
docker compose up میگوید فایل پیدا نشد
در پوشهٔ اشتباه هستی
با cd برو داخل همان پوشهای که دو فایل در آن است، بعد دستور را بزن.
📚 واژهنامهٔ کوتاه
tunnel (تونل)
مسیر امنی که کامپیوترِ تو را از راهِ یک آدرس عمومی به اینترنت وصل میکند.
authtoken
کلید شناساییِ تو نزد ngrok؛ مثل رمز عبور، محرمانه نگهش دار.
NGROK_DOMAIN
دامنهٔ ثابتِ رایگانِ تو، مثل happy-panda-1234.ngrok.app.
webhook (وبهوک)
آدرسی که به سرویس بیرونی میدهی تا هر وقت اتفاقی افتاد به تو خبر بدهد.
container (ظرف)
جعبهٔ جدا و مستقلی که یک برنامه داخل داکر در آن اجرا میشود.
localhost
«همین کامپیوترِ خودم»؛ از بیرونِ دستگاه در دسترس نیست.
docker compose
ابزاری برای بالا آوردنِ چند برنامه با هم، با یک فایل تنظیمات.
.env
فایل سادهای که تنظیمات (دامنه، توکن و…) را نگه میدارد.
🎉 تمام شد! حالا تو بلدی…
یک حساب ngrok بسازی و کلید NGROK_AUTHTOKEN بگیری.
یک دامنهٔ ثابتِ رایگان NGROK_DOMAIN رزرو کنی.
با فایلهای .env و docker-compose.yaml، n8n و ngrok را با هم بالا بیاوری.
آدرس عمومیِ https://${NGROK_DOMAIN} را باز کنی و وبهوک واقعی تست کنی.
🧭 قدم بعدیِ پیشنهادی: حالا که n8n تو یک آدرس عمومیِ ثابت دارد، آمادهای که آن را به یک
ربات تلگرام یا یک جریانِ «تلگرام → هوش مصنوعی» وصل کنی. اگر بخواهی، آموزش گراولِ آن را هم برایت میسازم.
| بازگشت به فهرست گراول.