🎯 آموزش گام‌به‌گام از صفر

از صفر تا n8n با آدرس HTTPS واقعی — روی ویندوز، با PowerShell

تا آخر این صفحه، n8n روی همین کامپیوتر خودت (پشت روتر خانه) اجرا می‌شود و از هر جای دنیا — با گوشی، با هر اینترنتی — با یک آدرس واقعی مثل https://n8n.yourdomain.com و قفل معتبر HTTPS بازش می‌کنی.

⏱️ حدود ۹۰ دقیقه (بیشترش صبر برای دانلود است) 🎚️ سطح: از صفر، بدون دانش قبلی 🧩 ۸ مرحله 🎁 خروجی: n8n در حال اجرا روی آدرس HTTPS دائمی خودت

👋 قبل از شروع

این آموزش برای کسی است که تا امروز اصلاً با Docker یا خط فرمان (PowerShell) کار نکرده، ولی می‌خواهد n8n را روی کامپیوتر خودش اجرا کند و یک آدرس اینترنتی واقعی و امن به آن بدهد که از گوشی یا از هر جای دنیا باز شود. در پایان، یک n8n واقعی داری که پشت رمز عبور است و آدرس دائمی HTTPS خودش را دارد.

🧰 چه چیزهایی لازم داری؟
  • یک کامپیوتر ویندوزی (۱۰ یا ۱۱، نسخهٔ ۶۴بیتی) که رویش دسترسی مدیر (Administrator) داشته باشی — بدون آن نصب Docker ممکن نیست.
  • یک اینترنت معمولی؛ دانلود Docker Desktop حدود ۵۰۰ مگابایت است.
  • یک دامنه (domain) که مالکش باشی. اگر نداری، در مرحلهٔ ۵ می‌گوییم چطور ارزان بخری — چیزی حدود چند صد هزار تومان تا چند دلار در سال، بسته به پسوند دامنه.
📌 فرض‌های ما
  • ویندوز ۱۰ یا ۱۱ داری (نسخهٔ خانگی هم مشکلی ندارد) و هیچ دانش قبلی از Docker یا برنامه‌نویسی لازم نیست.
  • این کامپیوتر «سرور خانگی» توست، یعنی معمولاً روشن می‌ماند؛ اگر خاموشش کنی، آدرس n8n هم موقتاً در دسترس نخواهد بود.
۱

بررسی و آماده‌سازی ویندوز

⏱️ ۱۰ دقیقه🎯 مطمئن می‌شویم کامپیوترت آمادهٔ نصب است
🧠 اول تصویر ذهنی

PowerShell را مثل یک دستیار متنی تصور کن: به‌جای کلیک روی دکمه‌ها، به او یک جملهٔ دستوری می‌نویسی و او فوری انجامش می‌دهد — با این تفاوت که اگر جمله را اشتباه بنویسی، فقط یک پیغام خطا می‌بینی، نه اینکه چیزی خراب شود. پس امتحان‌کردن این‌جا خطرناک نیست.

  1. دکمهٔ Start را باز کن، تایپ کن PowerShell، روی نتیجه راست‌کلیک کن و «Run as administrator» را بزن.

    پنجرهٔ آبی‌رنگ PowerShell به‌عنوان مدیر باز می‌شود؛ نصب Docker و WSL2 بدون این حالت انجام نمی‌شود.

  2. تایپ کن winver و Enter بزن.

    یک پنجرهٔ کوچک با شمارهٔ نسخه و build ویندوزت باز می‌شود؛ برای این آموزش ویندوز ۱۰ (نسخهٔ ۲۰۰۴ به بعد) یا هر نسخهٔ ویندوز ۱۱ کافی است.

  3. تایپ کن Get-ComputerInfo | Select-Object HyperVRequirementVirtualizationFirmwareEnabled و Enter بزن.

    باید جلویش True ببینی؛ یعنی مجازی‌سازی (Virtualization) در سخت‌افزارت فعال است — چیزی که Docker برایش لازم دارد.

⚠️ اگر جواب False بود

باید یک‌بار کامپیوتر را خاموش/روشن کنی و همان لحظهٔ روشن‌شدن (قبل از ورود به ویندوز) وارد تنظیمات BIOS/UEFI شوی و گزینه‌ای با نام تقریبی Virtualization یا Intel VT-x / AMD-V را فعال کنی. کلید ورود به این تنظیمات بسته به برند فرق می‌کند (معمولاً Del، F2 یا F10).

همین اول وضعیت را تشخیص بده، نه وسط نصب

به‌جای اینکه مستقیم بروی سراغ نصب Docker و وسط کار با یک خطای مبهم گیر کنی، همین الان با یک خط PowerShell چک کن مجازی‌سازی فعال است یا نه.

⚡ جلوگیری از حدود ۲۰ دقیقه سردرگمی وسط مرحلهٔ نصب
🔬 برای کنجکاوها: چرا اصلاً باید مدیر (Administrator) باشی؟

نصب چیزهایی مثل WSL2 و Docker نیاز دارد به بخش‌های حساس ویندوز (درایورها و هستهٔ سیستم) دست بزند. ویندوز برای جلوگیری از تغییرات ناخواسته یا مخرب، این کار را فقط به حساب‌های مدیر اجازه می‌دهد. یک کاربر عادی می‌تواند برنامه‌های معمولی را اجرا کند، ولی نمی‌تواند رفتار کل سیستم را تغییر دهد.

✅ ایست بازرسی

پنجرهٔ About Windows شمارهٔ نسخه را نشان داد، و جلوی HyperVRequirementVirtualizationFirmwareEnabled کلمهٔ True دیدی — نه پیغام قرمز خطا. اگر ندیدی، برو به رفع اشکال.

۲

فعال‌سازی WSL2

⏱️ ۱۵ دقیقه🎯 زیرساخت لازم برای اجرای داکر روی ویندوز آماده می‌شود
🧠 اول تصویر ذهنی

به این سامانه می‌گویند «سامانهٔ فرعی لینوکس ویندوز» (WSL2) — مثل این است که یک اتاق کوچک لینوکسی داخل خانهٔ ویندوزی‌ات بسازی. خودت این اتاق را نمی‌بینی، ولی Docker از همان اتاق برای اجرای کانتینرهایش استفاده می‌کند؛ با این تفاوت که این اتاق خودش را کاملاً پنهان از دید تو مدیریت می‌کند.

  1. در همان PowerShell (مدیر)، تایپ کن wsl --install و Enter بزن.

    ویندوز به‌طور خودکار WSL2 و یک توزیع پیش‌فرض لینوکس (Ubuntu) را دانلود و نصب می‌کند.

  2. صبر کن نصب تمام شود (چند دقیقه)، بعد کامپیوتر را با Restart-Computer یا از منوی Start ری‌استارت کن.

    این ری‌استارت اختیاری نیست: WSL یک ویژگی سطح سیستم‌عامل است و بدون راه‌اندازی مجدد کامل فعال نمی‌شود.

  3. بعد از روشن‌شدن دوباره، PowerShell را باز کن و تایپ کن wsl --status.

    باید جلوی Default Version عدد 2 را ببینی.

  4. تایپ کن wsl -l -v.

    باید حداقل یک خط با نام Ubuntu ببینی که ستون VERSIONـش برابر 2 است.

ری‌استارت را جدی بگیر

خیلی‌ها بعد از wsl --install ری‌استارت را فراموش می‌کنند و بعد نمی‌فهمند چرا Docker Desktop در مرحلهٔ بعد بالا نمی‌آید؛ این ری‌استارت اجباری است، نه اختیاری.

⚡ جلوگیری از نیم ساعت گیج‌شدن سر یک خطای بی‌ربط در مرحلهٔ بعد
🔬 برای کنجکاوها: WSL1 و WSL2 چه فرقی دارند؟

WSL1 فقط دستورهای لینوکسی را «ترجمه» می‌کرد تا روی ویندوز اجرا شوند. WSL2 یک هستهٔ لینوکس واقعی و کامل را داخل یک ماشین مجازی سبک اجرا می‌کند — به همین دلیل سریع‌تر است و سازگاری کامل با ابزارهایی مثل Docker دارد که خودشان روی هستهٔ لینوکس ساخته شده‌اند.

✅ ایست بازرسی

wsl --status بدون خطا اجرا شد و Default Version برابر 2 بود؛ wsl -l -v هم یک توزیع نصب‌شده با VERSION برابر 2 نشان داد.

۳

نصب Docker Desktop

⏱️ ۱۵ دقیقه🎯 ابزار اصلی اجرای کانتینرها روی کامپیوترت نصب می‌شود
🧠 اول تصویر ذهنی

Docker را مثل یک سری ظرف غذای آماده و کاملاً بسته‌بندی‌شده تصور کن: هر «کانتینر» یک برنامه به‌همراه همهٔ چیزهایی است که برای اجرا لازم دارد، توی یک بسته. دیگر لازم نیست نگران باشی فلان نرم‌افزار درست روی کامپیوترت نصب شده یا نه — با این تفاوت که این ظرف‌ها، برخلاف غذای واقعی، هر بار دقیقاً همان طعم اول را می‌دهند.

  1. در PowerShell (این‌بار لازم نیست مدیر باشد)، تایپ کن winget install -e --id Docker.DockerDesktop و Enter بزن.

    winget مدیر بستهٔ خود ویندوز است (شبیه یک فروشگاه اپلیکیشن، ولی از طریق خط فرمان) و این دستور مستقیم از منبع رسمی Docker دانلود و نصب می‌کند.

  2. صبر کن نصب تمام شود (۲ تا ۱۰ دقیقه بسته به سرعت اینترنت)، بعد از منوی Start، Docker Desktop را باز کن.

    اولین بار قوانین استفاده (Service Agreement) را قبول کن و صبر کن آیکون نهنگ 🐳 پایین صفحه (کنار ساعت ویندوز) ثابت و سبز شود.

  3. یک پنجرهٔ PowerShell جدید و عادی باز کن و تایپ کن docker --version.

    باید یک خط شبیه Docker version 2X.X.X ببینی، نه پیغام خطا.

  4. تست واقعی: تایپ کن docker run hello-world.

    این دستور یک کانتینر خیلی کوچک را دانلود و اجرا می‌کند که فقط یک پیغام خوش‌آمدگویی چاپ می‌کند.

همین اول مطمئن شو موتور درست انتخاب شده

در Docker Desktop برو به Settings ⚙️ → General و چک‌باکس «Use the WSL 2 based engine» را ببین تیک خورده باشد؛ در نسخه‌های جدید پیش‌فرض است، ولی چک‌کردنش ضرر ندارد.

⚡ کانتینرها چند برابر سریع‌تر بالا می‌آیند
🔬 برای کنجکاوها: وقتی docker run hello-world را زدی، واقعاً چه اتفاقی افتاد؟

Docker اول دنبال این «ایمیج» (image — یعنی نسخهٔ بسته‌بندی‌شدهٔ آن برنامه) روی خود کامپیوترت گشت. چون پیدا نکرد، از اینترنت (از یک انبار عمومی به اسم Docker Hub) دانلودش کرد و بعد یک کانتینر از رویش ساخت و اجرا کرد. دفعهٔ بعد که همین ایمیج را بخواهی، دیگر دانلود نمی‌شود چون از قبل ذخیره شده.

✅ ایست بازرسی

docker --version یک شمارهٔ نسخه نشان داد، و docker run hello-world پاراگرافی چاپ کرد که با Hello from Docker! شروع می‌شود.

۴

اولین اجرای n8n

⏱️ ۵ دقیقه🎯 اولین موفقیت سریع: n8n واقعی روی کامپیوترت اجرا می‌شود
🧠 اول تصویر ذهنی

n8n را مثل یک دستیار خودکار تصور کن: وقتی به او بگویی «هر وقت فلان اتفاق افتاد، این کارها را انجام بده»، خودش بی‌وقفه گوش می‌دهد و طبق دستور عمل می‌کند — بدون این‌که لازم باشد برنامه‌نویس باشی.

  1. یک پوشهٔ مخصوص این پروژه بساز و واردش شو: New-Item -ItemType Directory -Path "$HOME\n8n-docker"; Set-Location "$HOME\n8n-docker"

  2. برای یک تست سریع، تایپ کن: docker run -it --rm --name n8n-test -p 5678:5678 docker.n8n.io/n8nio/n8n

    -p 5678:5678 یعنی پورت ۵۶۷۸ داخل کانتینر را به همان پورت روی خود ویندوزت وصل کن.

  3. مرورگرت را باز کن و برو به http://localhost:5678.

    بار اول ممکن است ۱ تا ۳ دقیقه طول بکشد چون ایمیج باید دانلود شود.

  4. برگرد به پنجرهٔ PowerShell و با Ctrl + C این تست را متوقف کن.

همیشه اول با --rm تست کن

وقتی داری یک کانتینر جدید را فقط برای امتحان اجرا می‌کنی، پرچم --rm را اضافه کن؛ همین که Ctrl+C بزنی، کانتینر کامل پاک می‌شود و هیچ ردی روی کامپیوترت جا نمی‌گذارد.

⚡ کامپیوترت از کانتینرهای تستِ فراموش‌شده شلوغ نمی‌شود
🔬 برای کنجکاوها: چرا هنوز کسی از بیرون خانه نمی‌تواند این آدرس را باز کند؟

localhost یعنی «همین کامپیوتر»؛ پورت ۵۶۷۸ فقط روی شبکهٔ داخلی خودت باز است و روتر خانه‌ات هم آن را پشت یک آدرس خصوصی پنهان کرده. مرحله‌های ۵ تا ۷ دقیقاً همین را حل می‌کنند.

✅ ایست بازرسی

در مرورگر، http://localhost:5678 صفحهٔ n8n با فرم «Set up owner account» را نشان داد — یعنی همین الان n8n واقعی روی کامپیوترت اجرا شده، فقط هنوز فقط خودت می‌توانی ببینیش.

۵

آماده‌سازی دامنه در Cloudflare

⏱️ ۱۵ دقیقه (و کمی صبر)🎯 دامنه‌ات آمادهٔ گرفتن HTTPS می‌شود
🧠 اول تصویر ذهنی

یک دامنه (domain) مثل اسم روی یک مغازه است؛ DNS هم مثل دفترچه‌راهنمای شهر است که می‌گوید فلان اسم مغازه دقیقاً کجاست. Cloudflare این‌جا هم صاحب آن دفترچه‌راهنماست، هم کسی که جلوی مغازه‌ات یک نگهبان امن (HTTPS) می‌گذارد — با این تفاوت که این نگهبان کاملاً رایگان است.

  1. اگر دامنه نداری، از یک فروشندهٔ دامنه (مثلاً همان Cloudflare Registrar یا هر رجیستراری مثل Namecheap) یک دامنه بخر.

    برای یک پروژهٔ شخصی، پسوندهایی مثل .xyz یا .site معمولاً چندین برابر ارزان‌تر از .com هستند.

  2. برو به dash.cloudflare.com و یک حساب رایگان بساز (یا وارد شو اگر داری).

  3. «Add a Site» را بزن، دامنه‌ات را تایپ کن، و پلن Free را انتخاب کن.

  4. Cloudflare دو آدرس Nameserver نشانت می‌دهد (چیزی شبیه xxx.ns.cloudflare.com)؛ آن‌ها را کپی کن و در پنل همان رجیستراری که دامنه را خریدی، بخش Nameservers را پیدا کن و جایگزین‌شان کن.

  5. صبر کن (چند دقیقه تا گاهی ۲۴ ساعت) تا در داشبورد Cloudflare وضعیت دامنه از Pending به Active تغییر کند.

قبل از رفتن سراغ تونل، صبر کن دامنه فعال شود

قبل از رفتن سراغ ساخت تونل (مرحلهٔ بعد)، حتماً صبر کن وضعیت دامنه در Cloudflare سبز و Active شود؛ اگر زودتر بروی، دامنه‌ات اصلاً در لیست گزینه‌های مرحلهٔ بعد نشان داده نمی‌شود.

⚡ جلوگیری از برگشتن و گیج‌شدن وسط مرحلهٔ بعد
💡 نکتهٔ هزینه

ساختن حساب Cloudflare و استفاده از تونل کاملاً رایگان است؛ تنها هزینه، همان خرید سالانهٔ خود دامنه از رجیسترار است.

✅ ایست بازرسی

در داشبورد Cloudflare، جلوی اسم دامنه‌ات به‌جای Pending Nameserver Update، نوشتهٔ Active با یک تیک سبز می‌بینی.

۶

ساخت تونل امن

⏱️ ۱۰ دقیقه🎯 یک راه ورودی امن به n8nـت می‌سازیم، بدون باز کردن پورت روی روتر
🧠 اول تصویر ذهنی

به‌جای اینکه در جلوی خانه‌ات (روتر) را باز بگذاری تا هرکسی بتواند بیاید تو — که خطرناک است — یک لولهٔ خصوصی و رمزنگاری‌شده از داخل خانه به سمت یک ایستگاه امن بیرون (Cloudflare) می‌کشی. کسی که از بیرون می‌آید، اول به آن ایستگاه می‌رسد، نه مستقیم به در خانه‌ات؛ به این می‌گویند «تونل» (Tunnel).

  1. در داشبورد Cloudflare، از منوی سمت چپ برو به بخش Zero Trust و اگر اولین بار است، پلن رایگان (Free) را تایید کن.

  2. مسیر NetworksTunnels را باز کن و روی Create a tunnel بزن.

  3. نوع Cloudflared را انتخاب کن، یک اسم بگذار (مثلاً n8n-home)، و Save کن.

  4. در صفحهٔ بعد، زیر یک دستور نصب، یک رشتهٔ طولانی به اسم Token می‌بینی. فقط همان رشتهٔ توکن را کپی کن و موقتاً یک جای امن (مثلاً یک Notepad باز) نگه دار.

  5. پایین‌تر همان صفحه، بخش Public Hostname را پر کن: زیر Subdomain بنویس n8n، زیر Domain دامنهٔ خودت را انتخاب کن، Type را روی HTTP بگذار، و زیر URL بنویس n8n:5678 — نه localhost، چون داخل شبکهٔ داکر، n8n اسم سرویس است، نه خود کامپیوترت.

⚠️ توکن را مثل رمز عبور نگه دار

هرکسی این توکن را داشته باشد می‌تواند به‌جای تو به این تونل وصل شود. آن را در پیام یا فایل عمومی قرار نده.

این قابلیت واقعاً رایگان و بدون محدودیت است

خیلی‌ها برای گرفتن HTTPS و دسترسی بیرونی سراغ سرورهای اختصاصی (VPS) یا VPN پولی می‌روند؛ برای این کاربرد، Cloudflare Tunnel دقیقاً همان کار را کاملاً مجانی انجام می‌دهد.

⚡ صرفه‌جویی در هزینهٔ ماهانهٔ یک VPS یا VPN
✅ ایست بازرسی

در لیست Tunnels داشبورد Zero Trust، تونلی با اسمی که انتخاب کردی می‌بینی. وضعیتش فعلاً ممکن است خاکستری (Inactive) باشد — طبیعی است، چون هنوز سمت کامپیوترت چیزی روشن نکرده‌ایم؛ مرحلهٔ بعد همین را حل می‌کند.

۷

اتصال نهایی و HTTPS واقعی

⏱️ ۲۰ دقیقه🎯 n8n و تونل با هم، به‌طور دائمی، روشن می‌شوند
🧠 اول تصویر ذهنی

فایل docker-compose.yml مثل یک دستور غذای چندمرحله‌ای است که می‌گوید کدام ظرف‌های غذا (کانتینرها) باید کنار هم روی میز باشند و چطور به هم وصل باشند — به‌جای اینکه هر بار دستی هر ظرف را جدا سِرو کنی.

  1. در همان پوشهٔ n8n-docker، تایپ کن notepad docker-compose.yml و Enter بزن؛ به سؤال ساخت فایل جدید، بله را بزن.

  2. محتوای کادر اول زیر همین مرحله را کامل کپی و در Notepad پیست کن، بعد با Ctrl+S ذخیره و پنجره را ببند.

  3. دوباره تایپ کن notepad .env، محتوای کادر دوم را پیست کن.

    قبل از ذخیره، سه مقدار را با اطلاعات واقعی خودت جایگزین کن: N8N_HOST (همان n8n.دامنه‌اتCLOUDFLARE_TUNNEL_TOKEN (همان توکن مرحلهٔ قبل) و یک رمز قوی برای N8N_BASIC_AUTH_PASSWORD.

  4. برای ساختن یک کلید رمزنگاری تصادفی، در PowerShell تایپ کن: -join ((48..57)+(97..102)|Get-Random -Count 32|%{[char]$_})

    یک رشتهٔ ۳۲‌کاراکتری تصادفی چاپ می‌شود؛ آن را کپی کن و در .env جای CHANGE_ME_TO_A_RANDOM_LONG_STRING بگذار، ذخیره و ببند.

  5. تایپ کن docker compose up -d.

    هم n8n و هم cloudflared با هم، در پس‌زمینه (-d)، روشن می‌شوند.

  6. تایپ کن docker compose logs -f cloudflared و دنبال خطی بگرد که در آن عبارت Registered tunnel connection باشد.

    برای خروج از حالت دنبال‌کردن لاگ، Ctrl+C بزن.

📄 محتوای docker-compose.yml
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    environment:
      - N8N_HOST=${N8N_HOST}
      - N8N_PROTOCOL=https
      - N8N_PORT=5678
      - WEBHOOK_URL=https://${N8N_HOST}/
      - N8N_EDITOR_BASE_URL=https://${N8N_HOST}/
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
      - N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
    volumes:
      - n8n_data:/home/node/.n8n
    networks:
      - n8n_net
    # به‌عمد هیچ ports تعریف نشده — دسترسی فقط از مسیر cloudflared باشد

  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    restart: unless-stopped
    command: tunnel run
    environment:
      - TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
    depends_on:
      - n8n
    networks:
      - n8n_net

networks:
  n8n_net:
    driver: bridge

volumes:
  n8n_data:
    driver: local
📄 محتوای .env (قبل از ذخیره، سه مقدار بالا را عوض کن)
N8N_HOST=n8n.yourdomain.com
GENERIC_TIMEZONE=Asia/Tehran
N8N_ENCRYPTION_KEY=CHANGE_ME_TO_A_RANDOM_LONG_STRING
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=CHANGE_ME_TO_A_STRONG_PASSWORD
CLOUDFLARE_TUNNEL_TOKEN=PASTE_YOUR_TUNNEL_TOKEN_HERE
با لاگ تونل، مشکل را تشخیص بده، حدس نزن

docker compose logs -f cloudflared دقیقاً نشانت می‌دهد تونل وصل شده یا نه؛ خط Registered tunnel connection یعنی وصل است، پر بودن از خطای قرمز یعنی توکن یا تنظیمات Public Hostname ایراد دارد.

⚡ به‌جای حدس زدن، در چند ثانیه دقیقاً می‌فهمی مشکل کجاست
همیشه با -d اجرا کن

به‌جای اینکه هر بار docker compose up را بدون -d بزنی و پنجره را باز نگه داری، همیشه با -d اجرا کن تا در پس‌زمینه بماند و بتوانی PowerShell را ببندی.

⚡ نیازی به باز نگه‌داشتن یک پنجرهٔ ترمینال شبانه‌روزی نیست
🔬 برای کنجکاوها: چرا در docker-compose.yml برای n8n هیچ portsـی تعریف نکردیم؟

در آموزش‌های معمولی Docker معمولاً یک پورت را با ports: به بیرون کانتینر وصل می‌کنند. این‌جا عمداً این کار را نکردیم؛ چون می‌خواهیم تنها مسیر رسیدن به n8n، همان تونل Cloudflare باشد، نه یک پورت باز روی خود ویندوز که می‌تواند مستقیماً هدف حمله قرار بگیرد. برای تمرین، می‌توانی عمداً یک کاراکتر از توکن داخل .env را پاک کنی، docker compose up -d بزنی، و در لاگ cloudflared خط خطا را ببینی — این دقیقاً همان چیزی است که اگر یک روز واقعاً توکن اشتباه شد، می‌بینی؛ بعد توکن درست را برگردان.

✅ ایست بازرسی

docker compose logs -f cloudflared خط Registered tunnel connection را نشان داد، و در یک پنجرهٔ جدید PowerShell، دستور docker ps دو کانتینر روشن (n8n و cloudflared) را با وضعیت Up نشان داد.

۸

امنیت، تست و بک‌آپ

⏱️ ۱۰ دقیقه🎯 مطمئن می‌شویم همه‌چیز واقعاً از بیرون کار می‌کند و امن است
🧠 اول تصویر ذهنی

همان‌طور که یک مغازه هم یک در ورودی دارد (که هرکسی می‌تواند بیاید تو) و هم می‌تواند یک نگهبان دم در بگذارد که فقط افراد خاصی را راه بدهد، اینجا هم می‌توانی روی همان تونل یک لایهٔ نگهبانی اضافه کنی.

  1. گوشیت را از وای‌فای خانه جدا کن (اینترنت موبایل/دیتا را روشن کن) تا از یک شبکهٔ کاملاً متفاوت تست کنی.

  2. در مرورگر گوشی برو به https://n8n.دامنه‌ات (همانی که در .env گذاشتی).

    باید اول یک فرم ورود (Basic Auth) با نام‌کاربری و رمزی که در .env گذاشتی ببینی، و بعد صفحهٔ n8n با یک قفل HTTPS معتبر کنار آدرس.

  3. (پیشنهادی) برای یک لایهٔ امنیتی اضافه، به Zero TrustAccessApplicationsAdd an applicationSelf-hosted برو، دامنهٔ n8n.دامنه‌ات را انتخاب کن، و یک Policy بساز که فقط ایمیل خودت اجازهٔ ورود داشته باشد.

    Cloudflare قبل از رسیدن به صفحهٔ n8n، یک کد تایید به همان ایمیل می‌فرستد.

  4. برای بک‌آپ‌گرفتن از دیتای n8n (workflowها و credentialها)، در همان پوشهٔ پروژه تایپ کن: docker run --rm -v n8n-docker_n8n_data:/data -v "${PWD}:/backup" alpine tar czf /backup/n8n-backup.tar.gz -C /data .

    یک فایل n8n-backup.tar.gz در همان پوشه ساخته می‌شود.

برای متوقف‌کردن، از down بدون -v استفاده کن

وقتی می‌خواهی موقتاً n8n را خاموش کنی، فقط docker compose down بزن؛ هرگز docker compose down -v نزن، چون -v یعنی حذف کامل volume، یعنی همهٔ workflowها و credentialها.

⚡ جلوگیری از پاک‌شدن همیشگی همهٔ workflowهات با یک دستور اشتباه
اسم پوشهٔ پروژه را از همان اول درست انتخاب کن

داکر خودش جلوی اسم volume و شبکه، اسم پوشه را می‌گذارد (مثلاً n8n-docker_n8n_data)؛ اگر بعداً اسم پوشه را عوض کنی، داکر فکر می‌کند یک پروژهٔ کاملاً جدید است و دیتای قبلی‌ات را گم می‌کنی.

⚡ جلوگیری از گم‌شدن کامل workflowها فقط به‌خاطر تغییر اسم یک پوشه
💡 این الگو فقط برای n8n نیست

دقیقاً همین ترکیب — Docker + Cloudflare Tunnel — را خیلی از پروژه‌های خودمیزبان (self-hosted) دیگر هم مثل Nextcloud یا Home Assistant استفاده می‌کنند؛ وقتی سرور اختصاصی نداری ولی می‌خواهی از بیرون به یک سرویس روی کامپیوتر خودت برسی.

✅ ایست بازرسی

از روی اینترنت گوشی (نه وای‌فای خانه)، آدرس https://n8n.دامنه‌ات را باز کردی، رمز Basic Auth را زدی، و صفحهٔ اصلی n8n را با قفل HTTPS سبز دیدی — یعنی از صفر تا صد این آموزش تمام شد.

🧠 آزمونک

ببین چقدر یاد گرفتی. اشتباه کردن هم بخشی از یادگیری است.

📇 برگهٔ تقلب

این بخش را چاپ کن یا نگه دار؛ خلاصهٔ همه‌چیز این‌جاست.

روشن‌کردن همه‌چیز

docker compose up -d

خاموش‌کردن (بدون پاک‌کردن دیتا)

docker compose down

دیدن وضعیت کانتینرها

docker ps

دیدن لاگ تونل

docker compose logs -f cloudflared

دیدن لاگ n8n

docker compose logs -f n8n

ساخت و ورود به پوشهٔ پروژه

New-Item -ItemType Directory -Path X; Set-Location X

ساخت/ویرایش فایل تنظیمات

notepad .env

بک‌آپ‌گرفتن از دیتا

docker run --rm -v n8n-docker_n8n_data:/data -v "${PWD}:/backup" alpine tar czf /backup/n8n-backup.tar.gz -C /data .

بررسی نسخهٔ داکر

docker --version

🔧 رفع اشکال

چه می‌بینی؟چرا؟چه کار کنی؟
docker یا wsl شناخته نمی‌شود (not recognized)پنجرهٔ PowerShell بعد از نصب دوباره باز نشده، یا نصب کامل نشدهیک پنجرهٔ PowerShell جدید باز کن؛ اگر بازهم نبود، Docker Desktop را ببند و دوباره باز کن، یا کامپیوتر را ری‌استارت کن.
Docker Desktop بالا نمی‌آید و پیام دربارهٔ WSL می‌دهدمعمولاً یعنی WSL2 درست نصب یا فعال نشدهدر PowerShell (مدیر) بزن wsl --update و بعد wsl --set-default-version 2، و یک ری‌استارت دیگر بزن.
http://localhost:5678 باز نمی‌شودیا کانتینر n8n روشن نیست، یا پورت قبلاً توسط برنامهٔ دیگری گرفته شدهبزن docker ps و ببین n8n در لیست با وضعیت Up هست؛ اگر پورت اشغال بود، برنامهٔ دیگر (مثلاً یک n8n قبلی) را ببند.
https://n8n.دامنه‌ات از بیرون باز نمی‌شود، ولی localhost:5678 کار می‌کندتونل Cloudflare درست وصل نشده یا Public Hostname اشتباه تنظیم شدهبزن docker compose logs -f cloudflared و دنبال خط قرمز بگرد؛ چک کن مقدار URL در تنظیمات Public Hostname دقیقاً n8n:5678 باشد، نه localhost:5678.
مرورگر می‌گوید گواهی (Certificate) نامعتبر استدامنه هنوز کامل روی Cloudflare فعال نشدهچند دقیقه صبر کن و دوباره امتحان کن؛ در داشبورد Cloudflare چک کن وضعیت دامنه Active باشد.
بعد از ری‌استارت کامپیوتر، n8n دیگر اجرا نمی‌شودکانتینرها به‌طور خودکار بعد از ری‌استارت بالا نیامده‌انددر پوشهٔ پروژه بزن docker compose up -d؛ برای اینکه دیگر لازم نباشد دستی بزنی، در Docker DesktopSettingsGeneral گزینهٔ Start Docker Desktop when you log in را فعال کن.
نام‌کاربری یا رمز Basic Auth یادت رفتهدر فایل .env گم شده یا عوض شدهnotepad .env را باز کن، مقدارهای N8N_BASIC_AUTH_USER و N8N_BASIC_AUTH_PASSWORD را ببین؛ بعد از هر تغییر در .env حتماً یک بار docker compose up -d بزن تا اعمال شود.

🎉 تمام شد!

حالا تو بلدی n8n را روی ویندوز خودت با Docker اجرا کنی و یک آدرس HTTPS واقعی و امن، از بیرون خانه، رویش داشته باشی.

🥉 شروع‌کننده 🥈 نیمهٔ راه 🥇 استاد کار

🗺️ سه‌جا که همین الان به کارت می‌آید

وصل‌کردن webhook تلگرام یا فرم سایتت به همین آدرس؛ باز‌کردن n8nـت از موبایل وقتی بیرون از خانه‌ای؛ نشان‌دادن یک دموی زنده به یک همکار یا مشتری، بدون توضیح‌دادن تنظیمات شبکه.

🚀 قدم بعدی: یک workflow ساده بساز — مثلاً هر روز ساعت ۹ صبح یک ایمیل یادآوری بفرستد — و مطمئن شو از گوشی‌ات هم می‌توانی واردش شوی و ببینیش.