From 18b9a967cf96c2475b918e537911eda813be2775 Mon Sep 17 00:00:00 2001 From: Amirhossein Khalili Date: Sat, 5 Sep 2026 22:33:11 +0800 Subject: [PATCH] feat: add chapter 12-deployment-and-shipping specs --- .../00-lesson-chapter-goals/spec.md | 84 ++++++++++++ .../spec.md | 119 +++++++++++++++++ .../spec.md | 107 +++++++++++++++ .../spec.md | 99 ++++++++++++++ .../spec.md | 124 ++++++++++++++++++ .../spec.md | 102 ++++++++++++++ .../spec.md | 111 ++++++++++++++++ 7 files changed, 746 insertions(+) create mode 100644 chapters/12-deployment-and-shipping/00-lesson-chapter-goals/spec.md create mode 100644 chapters/12-deployment-and-shipping/01-lesson-environments-dev-staging-prod/spec.md create mode 100644 chapters/12-deployment-and-shipping/02-lesson-web-basics-domain-dns-ssl-cdn/spec.md create mode 100644 chapters/12-deployment-and-shipping/03-lesson-choosing-paas-deployment-models/spec.md create mode 100644 chapters/12-deployment-and-shipping/04-lesson-deploying-with-liara-and-vercel/spec.md create mode 100644 chapters/12-deployment-and-shipping/05-lesson-production-environment-variables/spec.md create mode 100644 chapters/12-deployment-and-shipping/06-lesson-custom-domains-dns-and-ssl/spec.md diff --git a/chapters/12-deployment-and-shipping/00-lesson-chapter-goals/spec.md b/chapters/12-deployment-and-shipping/00-lesson-chapter-goals/spec.md new file mode 100644 index 0000000..ead1838 --- /dev/null +++ b/chapters/12-deployment-and-shipping/00-lesson-chapter-goals/spec.md @@ -0,0 +1,84 @@ +# مشخصات درس‌نامه: اهداف فصل دوازدهم (Chapter Goals) +- **شناسه در سیلابس:** `L12.1` +- **فصل:** فصل ۱۲: انتشار روی اینترنت (Ch 12) +- **نوع محتوا:** 📘 درس‌نامه متنی +- **زمان تقریبی مطالعه:** ۵ دقیقه +- **پیش‌نیازهای مستقیم:** `L11.9` (هزینه، مالکیت و اخلاق حرفه‌ای) + +--- + +## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) +دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: +- [ ] **درک کند (Understand):** چرا تا زمانی که یک وب‌سایت روی اینترنت عمومی منتشر نشده باشد، تنها یک فایل تفننی روی کامپیوتر شخصی است و دیپلوی کردن (Shipping) نقطه تولد واقعی محصول است. +- [ ] **درک کند (Understand):** نقشه راه ۷ درس‌نامه تخصصی فصل دوازدهم شامل: تمایز محیط‌های توسعه و تولید (Dev vs Staging vs Prod)، مفاهیم پایه وب (Domain, DNS, SSL, CDN)، انتخاب پلتفرم ابری (PaaS)، استقرار عملی با لیارا (Liara) و ورسل (Vercel)، پیکربندی متغیرهای محیطی پروداکشن، و اتصال دامنه اختصاصی به همراه ابر آروان و Cloudflare را بشناسد. +- [ ] **تحلیل/ارزیابی کند (Evaluate):** رویکرد دوگانه میزبانی (پلتفرم داخلی لیارا برای دسترس‌پذیری پایدار ملی در برابر Vercel برای استانداردهای جهانی) را ارزیابی کند. +- [ ] **به‌کار ببندد (Apply):** پورتفولیوی شخصی، پنل ادمین، دیتابیس Supabase، و تمام یکپارچه‌سازی‌های پیامک، ایمیل و هوش مصنوعی را به صورت زنده و با پروتکل امن HTTPS روی یک دامنه اینترنتی واقعی مستقر سازد. + +--- + +## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) + +### آنچه باید پوشش داده شود (In-Scope): +1. **ورود به نقطه اوج دوره: انتشار به سوی جهان (Shipping):** + * تبدیل کدها از `localhost:3000` به یک آدرس اینترنتی معتبر که هر کسی در دنیا با موبایل یا لپ‌تاپ بتواند آن را باز کند. +2. **مرور سرفصل‌های تخصصی فصل ۱۲:** + * درس ۱۲.۲: محیط‌های توسعه و تولید؛ تفاوت Development، Staging و Production و نحوه کار کامپایلر بیلد (`npm run build`). + * درس ۱۲.۳: الفبای وب برای انتشار؛ دامین، هاست، سرورهای نام (DNS)، گواهی امنیتی SSL/TLS، و شبکه توزیع محتوا (CDN). + * درس ۱۲.۴: انتخاب مدل میزبانی مدرن؛ چرا دور دوران هاست‌های سنتی سی‌پنل گذشته و پلتفرم‌های ابری (PaaS) حکومت می‌کنند؟ + * درس ۱۲.۵: استقرار عملی پروژه؛ دیپلوی خودکار مبتنی بر گیت با لیارا (Liara) و ورسل (Vercel) و اتصال دیتابیس پروداکشن. + * درس ۱۲.۶: تنظیمات محیط واقعی؛ تزریق متغیرهای محیطی محرمانه در داشبورد ابری و تفاوت آدرس‌های Localhost با Production URL. + * درس ۱۲.۷: اتصال دامنه اختصاصی؛ تنظیم رکوردهای A و CNAME، فعال‌سازی SSL رایگان و استفاده از Cloudflare و ابر آروان. +3. **تمرکز بر پروژه پورتفولیو:** + * انتشار ویترین رزومه شخصی به همراه چت‌بات آنلاین، درگاه پرداخت و پنل ادمین با دامنه اختصاصی دانشجو. +4. **دستورات چندسکویی برای نصب CLIهای استقرار:** + * منوهای کشویی ویندوز، مک و لینوکس برای نصب ابزارهای خط فرمان لیارا و ورسل. +5. **کال‌اوت‌های کوئرا:** + * کال‌اوت سبز (`
`): انگیزه و شعف حاصل از ارسال اولین لینک عمومی به دوستان و کارفرمایان. + +### آنچه نباید وارد آن شویم (Out-of-Scope): +- مانیتورینگ بلادرنگ، لاگین ارورها با Sentry و تحلیل رفتار کاربر (فصل ۱۳). +- کانفیگ دستی کانتینرهای داکر روی سرورهای خام مجازی لینوکس (VPS با دستورات کرنل). + +--- + +## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) + +| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | +| :--- | :--- | :--- | +| Deployment (Shipping) | استقرار / انتشار نهایی | فرآیند بارگذاری، کامپایل و اجرای برنامه روی سرورهای ابری برای دسترسی همگانی کاربران اینترنت | +| PaaS (Platform as a Service) | پلتفرم به عنوان سرویس | سرویس‌های ابری مدرن که مدیریت سرور، لینوکس و امنیت را بر عهده گرفته و شما فقط کد را تحویل می‌دهید | +| Production Environment | محیط تولید / پروداکشن | محیط واقعی و آنلاین اجرای نرم‌افزار که کاربران و مشتریان واقعی از آن استفاده می‌کنند | +| DNS (Domain Name System) | سامانه نام دامنه | دفترچه تلفن اینترنت که نام‌های متنی خوانا (مثل سایت شما) را به آدرس‌های عددی سرور (IP) تبدیل می‌کند | +| CDN (Content Delivery Network) | شبکه توزیع محتوا | شبکه‌ای از سرورهای جهانی که فایل‌های سایت را در نزدیک‌ترین شهر به کاربر کپی و با حداکثر سرعت تحویل می‌دهند | + +--- + +## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) +> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: + +1. **تصویر کاور درس:** `images/cover.png` + * **موضوع:** موشک نئونی مدرن که از روی کیبورد لپ‌تاپ به سمت کره زمین دیجیتال پرتاب می‌شود و آدرس دامنه اینترنتی را به آسمان متصل می‌کند. +2. **نقشه راه جامع فصل ۱۲:** `images/chapter-12-roadmap.png` + * **موضوع:** اینفوگرافیک ۷ مرحله‌ای فصل ۱۲ با نمادهای محیط‌ها، DNS، ورسل/لیارا، بیلد، متغیرهای ابری، و ابر آروان/کلودفلر. +3. **گذار از لوکال‌هاست به اینترنت جهانی:** `images/localhost-to-global-web.png` + * **موضوع:** تصویر مقایسه‌ای: لپ‌تاپ شخصی در خانه با برچسب localhost:3000 در برابر شبکه سرورهای ابری پروداکشن با نماد قفل سبز HTTPS. + +--- + +## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) + +1. **تیتر اصلی:** `# اهداف فصل دوازدهم: انتشار روی اینترنت؛ تولد رسمی محصول شما در جهان وب` +2. **مقدمه کوتاه:** چرا تا زمانی که پروژه‌تان آدرس اینترنتی ندارد، انگار وجود خارجی ندارد؟ +3. **جدول کاور درس** +4. **سرفصل‌های طلایی فصل در یک نگاه:** مرور ۷ ایستگاه استقرار و پرواز محصول. +5. **جدول نقشه راه یادگیری فصل** +6. **معرفی پلتفرم‌های میزبان این فصل:** لیارا برای سرعت و دسترسی پایدار داخلی، و Vercel برای استانداردهای بین‌المللی. +7. **پورتفولیوی شخصی در جهان واقعی:** داشتن یک لینک اختصاصی با دامنه شخصی برای درج در رزومه و پروفایل لینکدین. +8. **کال‌اوت هیجان‌انگیز Quera (`
`):** آماده‌سازی برای فشردن دکمه پرتاب؛ پروژه‌ای که از ایده خام شروع شد، اکنون به دروازه اینترنت رسیده است! + +--- + +## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) +- [ ] اهداف کلان فصل ۱۲ و اهمیت استقرار عمومی (Shipping) به شکل الهام‌بخش تبیین شود. +- [ ] سرفصل‌های ۷ درس‌نامه بعدی با ذکر ابزارهای مصوب (لیارا، ورسل، کلودفلر، ابر آروان) معرفی گردند. +- [ ] مفاهیم بنیادین میزبانی ابری و رویکرد دوگانه به صورت روان تشریح شوند. diff --git a/chapters/12-deployment-and-shipping/01-lesson-environments-dev-staging-prod/spec.md b/chapters/12-deployment-and-shipping/01-lesson-environments-dev-staging-prod/spec.md new file mode 100644 index 0000000..d3fc52b --- /dev/null +++ b/chapters/12-deployment-and-shipping/01-lesson-environments-dev-staging-prod/spec.md @@ -0,0 +1,119 @@ +# مشخصات درس‌نامه: محیط‌های توسعه، پیش‌نمایش و تولید (Dev, Staging, Prod) و جادوی Build +- **شناسه در سیلابس:** `L12.2` +- **فصل:** فصل ۱۲: انتشار روی اینترنت (Ch 12) +- **نوع محتوا:** 📘 درس‌نامه متنی +- **زمان تقریبی مطالعه:** ۱۵ دقیقه +- **پیش‌نیازهای مستقیم:** `L12.1` (اهداف فصل دوازدهم) + +--- + +## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) +دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: +- [ ] **درک کند (Understand):** تفاوت‌های کلیدی میان سه محیط کاری نرم‌افزار شامل محیط توسعه محلی (Development)، محیط پیش‌نمایش یا آزمایشی (Staging/Preview) و محیط زنده نهایی (Production) را شرح دهد. +- [ ] **تحلیل/ارزیابی کند (Evaluate):** چرا اجرای سرور توسعه (`npm run dev`) روی سرورهای واقعی پروداکشن یک فاجعه عملکردی و امنیتی است و کامپایلر بیلد (`npm run build`) چه تحولی در فشرده‌سازی کدها ایجاد می‌کند. +- [ ] **به‌کار ببندد (Apply):** پروژه پورتفولیو را در حالت تولید محلی با دو دستور متوالی `npm run build` و `npm run start` اجرا کرده و سرعت و رفتار آن را مقایسه نماید. +- [ ] **ایجاد کند (Create):** خطاهای زمان کامپایل (Compile-time Type Errors) را پیش از ارسال به سرور شناسایی کرده و کدهای آماده استقرار تولید کند. + +--- + +## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) + +### آنچه باید پوشش داده شود (In-Scope): +1. **داستان ۳ صحنه اجرای تئاتر: اتاق تمرین، اجرای بازبینی، و شب افتتاحیه:** + * توسعه (Development): اتاق تمرین با شلختگی، تغییرات لحظه‌ای و بازخورد سریع به بازیگران. + * پیش‌نمایش (Staging): اجرای آزمایشی با گریم و دکور برای منتقدان و دوستان. + * تولید (Production): سالن پر از تماشاگران واقعی با بلیت خریداری‌شده که هیچ خطایی در آن بخشیده نمی‌شود. +2. **پشت پرده فرآیند بیلد (`npm run build`) در Next.js:** + * ممیزی تایپ‌اسکریپت: کامپایلر تمام فایل‌ها را چک می‌کند؛ وجود حتی یک خطای تایپ، بیلد را متوقف می‌کند تا باگ به کاربران نرسد. + * بهینه‌سازی درخت کد (Tree-shaking): حذف تمام کدهای اضافه و توابعی که استفاده نشده‌اند. + * فشرده‌سازی و کوچک‌سازی (Minification): حذف فاصله‌ها و کوتاه‌سازی متغیرها برای تبدیل فایل‌های مگابایتی به چند کیلوبایت. + * پیش‌رندر استاتیک (Static Generation): ساخت صفحات HTML از قبل برای بارگذاری برق‌آسا. +3. **شبیه‌سازی محیط پروداکشن روی کامپیوتر شخصی:** + * اجرای `npm run build` و سپس `npm run start`. + * مشاهده حذف پرده‌های قرمز خطای توسعه و تجربه سرعت شگفت‌انگیز لود صفحات. +4. **دستورات چندسکویی برای بیلد و تست سرور پروداکشن:** + * دستورات در منوهای کشویی ویندوز، مک و لینوکس: + - `npm run build` + - `npm run start` +5. **کال‌اوت‌های آموزشی و هشدار کوئرا:** + * کال‌اوت بنفش (`
`): مفهوم استقرار پیش‌نمایش (Preview Deployments) بر روی هر شاخه گیت (Pull Request). + * کال‌اوت سبز (`
`): احساس سبک‌بالی وقتی `npm run build` با تمام صفحات سبزرنگ با موفقیت به پایان می‌رسد. + * کال‌اوت قرمز (`
`): اشتباه مرگبار؛ هرگز روی سرورهای ابری واقعی دستور `npm run dev` را ران نکنید (مصرف سرسام‌آور رم و سی‌پی‌یو و افشای سورس‌مپ‌ها). + +### آنچه نباید وارد آن شویم (Out-of-Scope): +- خطوط لوله پیچیده CI/CD در GitHub Actions با پایپ‌لاین‌های چندمرحله‌ای (فصل ۱۳). +- کانفیگ دستی وبهوک‌های گیت‌لب یا سرورهای Jenkins. + +--- + +## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) + +| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | +| :--- | :--- | :--- | +| Development Mode | حالت توسعه | محیط کاری اولیه با قابلیت بارگذاری آنی تغییرات (Hot Reload) و لاگ‌های مفصل برای راحتی کدنویسی | +| Production Mode | حالت تولید و بهره‌برداری | نسخه نهایی و کاملاً بهینه‌شده، فشرده، امن و سریع نرم‌افزار برای کاربران نهایی | +| Staging / Preview | محیط پیش‌نمایش و آزمایشی | کپی یک‌به‌یک از محیط واقعی با دامنه موقت برای تست پیش از ادغام نهایی تغییرات | +| Build Process | فرآیند ساخت و کامپایل | تبدیل کدهای توسعه انسانی (JSX, TS) به بسته‌های فوق‌فشرده، مینیمایز شده و بهینه برای مرورگر | +| Tree Shaking | شاخه‌تکانی کد | تکنیک هوشمند حذف خودکار کدهای بی‌استفاده کتابخانه‌ها برای کاهش حجم نهایی فایل‌ها | +| Minification | کوچک‌سازی کد | فرآیند فشرده‌سازی متن کد با حذف فاصله‌ها و کوتاه کردن نام متغیرها بدون تغییر در منطق برنامه | + +--- + +## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) +> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: + +1. **تصویر کاور درس:** `images/cover.png` + * **موضوع:** سه مانیتور در کنار هم با نورپردازی‌های متفاوت: زرد (اتاق کدنویسی Dev)، آبی (محیط تست Staging)، و سبز نئونی درخشان (محیط زنده Prod). +2. **چرخه ارتقای کد در ۳ محیط کاری:** `images/dev-staging-prod-pipeline.png` + * **موضوع:** فلوچارت انتقال: لوکال‌هاست توسعه $\rightarrow$ بیلد موفق $\rightarrow$ استقرار پیش‌نمایش تستی $\rightarrow$ تایید نهایی $\rightarrow$ استقرار پروداکشن برای عموم. +3. **کالبدشکافی فرآیند بیلد در ترمینال:** `images/nextjs-build-output-anatomy.png` + * **موضوع:** اسکرین‌شات از خروجی رنگی `npm run build` با علائم دایره سبز (Static Pages) و علامت لامپ (Server-rendered Pages) و حجم هر صفحه. +4. **تفاوت سرعت و حجم کد توسعه در برابر کد بیلدشده:** `images/minification-and-tree-shaking.png` + * **موضوع:** اینفوگرافیک مقایسه‌ای: فایل‌های حجیم خوانای انسانی ۵ مگابایتی در برابر فایل فشرده مینیفای‌شده ۲۰۰ کیلوبایتی پرسرعت. + +--- + +## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) + +1. **تیتر اصلی:** `# محیط‌های توسعه، پیش‌نمایش و تولید (Dev, Staging, Prod) و جادوی Build` +2. **مقدمه:** چرا کدی که روی لپ‌تاپ شما با `npm run dev` کار می‌کند، نباید با همان دستور به روی صحنه پروداکشن برود؟ +3. **جدول کاور درس** +4. **استعاره خیاطی و لباس مجلسی:** + * در کارگاه خیاطی سوزن و اضافه پارچه‌ها روی زمین است (Dev)، اما مشتری لباس پرو شده و اتوکشیده شیک تحویل می‌گیرد (Prod). +5. **معرفی سه‌گانه مقدس محیط‌های نرم‌افزار:** + * Development: سرعت بالا، لاگ‌های پر سر و صدا. + * Staging: زمین تمرین شبیه‌سازی شده بدون دسترسی عموم. + * Production: استانداردهای سخت، قفل‌های محکم و بالاترین سرعت ممکن. +6. **موتورخانه بیلد (`npm run build`)؛ چه اتفاقی پشت صحنه می‌افتد؟** + * کامپایل تایپ‌ها، شاخه‌تکانی کدهای زاید، مینیفای کردن استایل‌ها و بهینه‌سازی تصاویر. +7. **کالبدشکافی جدول خروجی بیلد Next.js:** + * شناخت صفحات استاتیک (دایره‌های توپر) و صفحات پویا (علامت لامپ `f`). +8. **آزمایش شبیه‌سازی پروداکشن با `npm run start`:** + * دستورات چندسکویی برای بیلد و ران کردن در ویندوز، مک و لینوکس: + - Windows (PowerShell): + ```powershell + npm run build + npm run start + ``` + - macOS (Terminal): + ```bash + npm run build + npm run start + ``` + - Linux (Bash): + ```bash + npm run build + npm run start + ``` +9. **باکس نکته Quera (`
`):** چرایی اهمیت شکست بیلد (Build Error)؛ متوقف شدن بیلد بخاطر خطای تایپ یک لطف بزرگ از طرف کامپایلر است، نه یک مانع! +10. **باکس هشدار Quera (`
`):** هرگز از ابزارهایی مثل `ignoreBuildErrors: true` در `next.config.js` به عنوان راه فرار استفاده نکنید؛ باگ‌های پنهان محصول را نابود می‌کنند. +11. **باکس رضایت‌بخش Quera (`
`):** حس فوق‌العاده باز کردن پورت ۳۰۰۰ در حالت start و لمس سرعت خیره‌کننده سایت بدون کوچک‌ترین تاخیر. +12. **جمع‌بندی درس‌نامه:** شناخت کامل فاز بیلد و محیط‌ها؛ ورود به الفبای بنیادین وب برای انتشار (دامنه، DNS، SSL و CDN) در درس بعدی. + +--- + +## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) +- [ ] تفاوت‌های سه‌گانه Dev، Staging و Production با مثال‌های ملموس شرح داده شود. +- [ ] مراحل فرآیند بیلد (Tree-shaking, Minification, SSG) به روشنی تشریح گردد. +- [ ] شیوه اجرای تست پروداکشن محلی (`npm run start`) به صورت چندسکویی ارائه شود. +- [ ] کال‌اوت‌های هشداری درباره ممنوعیت اجرای Dev روی سرور واقعی لحاظ شود. diff --git a/chapters/12-deployment-and-shipping/02-lesson-web-basics-domain-dns-ssl-cdn/spec.md b/chapters/12-deployment-and-shipping/02-lesson-web-basics-domain-dns-ssl-cdn/spec.md new file mode 100644 index 0000000..dd63f3f --- /dev/null +++ b/chapters/12-deployment-and-shipping/02-lesson-web-basics-domain-dns-ssl-cdn/spec.md @@ -0,0 +1,107 @@ +# مشخصات درس‌نامه: الفبای وب برای انتشار؛ دامین، هاست، DNS، گواهی SSL و شبکه CDN +- **شناسه در سیلابس:** `L12.3` +- **فصل:** فصل ۱۲: انتشار روی اینترنت (Ch 12) +- **نوع محتوا:** 📘 درس‌نامه متنی +- **زمان تقریبی مطالعه:** ۱۸ دقیقه +- **پیش‌نیازهای مستقیم:** `L12.2` (محیط‌های توسعه و تولید) + +--- + +## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) +دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: +- [ ] **درک کند (Understand):** نقش ۵ رکن بنیادین شبکه جهانی وب شامل دامنه (Domain)، سرور میزبان (Host/Server)، سامانه نام دامنه (DNS)، گواهی امنیتی (SSL/TLS)، و شبکه توزیع محتوا (CDN) را در تحویل صفحات وب شرح دهد. +- [ ] **تحلیل/ارزیابی کند (Evaluate):** ساختار انواع رکوردهای پرکاربرد DNS شامل رکوردهای A، CNAME، TXT و NS را تحلیل کرده و تفاوت آدرس‌دهی مستقیم IP با نام مستعار را تمیز دهد. +- [ ] **به‌کار ببندد (Apply):** نحوه کارکرد رمزنگاری ترافیک با گواهی SSL و چرخه صدور خودکار آن را درک کرده و خطای محتوای ترکیبی (Mixed Content) را در پروژه برطرف کند. +- [ ] **ایجاد کند (Create):** یک جدول نگاشت ذهنی از رکوردهای مورد نیاز پورتفولیو (اتصال به سرور لیارا/ورسل، اعتبارسنجی مالکیت دامنه، و تنظیمات ساب‌دامین‌ها) تدوین کند. + +--- + +## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) + +### آنچه باید پوشش داده شود (In-Scope): +1. **استعاره آدرس پستی، خانه فیزیکی و دفترچه تلفن ۱۱۸:** + * هاست/سرور: خانه فیزیکی با موقعیت جغرافیایی ثابت (IP). + * دامنه: آدرس سرراست و خوانای خانه (خیابان ولیعصر، پلاک ۴). + * سامانه DNS: سامانه ۱۱۸ اینترنت که وقتی نام را می‌گویید، شماره تماس (IP) را تحویل می‌دهد. +2. **کالبدشکافی ساختار یک دامنه اینترنتی (Domain Anatomy):** + * پسوند مرتبه‌اول (TLD: Top-Level Domain): دامنه‌های عمومی (`.com`, `.net`)، دامنه‌های تخصصی فنی (`.dev`, `.io`)، و دامنه‌های ملی (`.ir`). + * نام اصلی دامنه (SLD): برند یا نام شما (مانند `alireza-dev`). + * زیردامنه (Subdomain): پیشوندها برای تفکیک بخش‌های پروژه (مانند `admin.mysite.ir` یا `api.mysite.ir`). +3. **جعبه ابزار رکوردهای حیاتی DNS:** + * رکورد `A` (Address): اتصال مستقیم نام دامنه به یک آدرس عددی IPv4 (مثل `185.143.232.10`). + * رکورد `CNAME` (Canonical Name): اتصال یک نام به نام دامنه دیگر (مانند وصل کردن `www` یا ساب‌دامین به سرورهای لیارا یا ورسل). + * رکورد `TXT`: ثبت کدهای تایید متنی برای اثبات مالکیت سایت به سرچ کنسول گوگل یا فعال‌سازی ارسال ایمیل (SPF/DKIM). + * رکورد `NS` (Name Server): تعیین اینکه کدام سرور مدیریت رکوردهای دامنه شما را در دست دارد (ابر آروان یا کلودفلر). +4. **گواهی SSL/TLS و قفل سبز امنیتی:** + * چرا مرورگرها به سایت‌های `http://` برچسب «ناامن» (Not Secure) می‌زنند و داده‌ها را رمزنگاری نمی‌کنند؟ + * گواهی‌های رایگان Let's Encrypt و صدور خودکار SSL توسط پلتفرم‌های ابری مدرن بدون نیاز به پرداخت حتی یک ریال. +5. **شبکه توزیع محتوا (CDN - Content Delivery Network):** + * چرا وقتی کاربر در شیراز یا تبریز یا آلمان سایت را باز می‌کند، باید عکس‌ها را از نزدیک‌ترین دیتاسنتر دریافت کند؟ + * کاهش تاخیر، صرفه‌جویی در پهنای باند و مقاومت در برابر قطعی‌های موضعی اینترنت. +6. **کال‌اوت‌های آموزشی و هشدار کوئرا:** + * کال‌اوت بنفش (`
`): پدیده انتشار DNS (DNS Propagation) و مفهوم زمان انقضا (TTL)؛ چرا اعمال تغییرات DNS گاهی از چند دقیقه تا چند ساعت زمان می‌برد. + * کال‌اوت سبز (`
`): ابزارهای آنلاین رایگان مثل DNSChecker.org برای بررسی جهانی انتشار رکوردهای دامنه. + * کال‌اوت قرمز (`
`): خطای محتوای ترکیبی (Mixed Content)؛ اگر سایتی با HTTPS لود شود اما عکسی را با آدرس `http://` فراخوانی کند، قفل امنیتی سبز می‌شکند! + +### آنچه نباید وارد آن شویم (Out-of-Scope): +- پیکربندی پروتکل‌های مسیریابی لایه زیرساخت نظیر BGP و Anycast. +- خرید گواهی‌های گران‌قیمت سازمانی EV (Extended Validation) با تاییدیه مدارک شرکتی. + +--- + +## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) + +| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | +| :--- | :--- | :--- | +| DNS Record | رکورد دی‌ان‌اس | یک خط تنظیم دستوری در سرور نام که نحوه هدایت ترافیک دامنه به سرویس‌ها را مشخص می‌کند | +| A Record | رکورد نشانی آی‌پی | رکورد پایه‌ای DNS که نام دامنه را مستقیماً به آدرس IPv4 سرور متصل می‌نماید | +| CNAME Record | رکورد نام مستعار | رکوردی که یک دامنه را به عنوان مستعاری از یک آدرس دامنه اینترنتی دیگر تعریف می‌کند | +| SSL/TLS Certificate | گواهی امنیت ارتباطات | سند دیجیتال رمزنگاری که امنیت و محرمانگی تبادل داده میان مرورگر و سرور را تضمین می‌کند | +| Mixed Content | محتوای ترکیبی ناامن | وضعیت بارگذاری برخی منابع (عکس، فونت) با پروتکل ناامن HTTP در یک صفحه امن HTTPS | +| TTL (Time to Live) | زمان ماندگاری کش | مدت زمانی به ثانیه که سرورهای اینترنت مجاز به ذخیره و بازخوانی نتایج یک رکورد DNS هستند | + +--- + +## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) +> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: + +1. **تصویر کاور درس:** `images/cover.png` + * **موضوع:** شبکه نوری نقشه جهانی وب که کابل‌های فیبر نوری، سرورها، آیکون قفل سبز HTTPS و دامنه‌های متصل را نشان می‌دهد. +2. **سفر یک درخواست از تایپ آدرس تا نمایش صفحه:** `images/dns-resolution-flow.png` + * **موضوع:** اینفوگرافیک گام‌به‌گام: کاربر آدرس را تایپ می‌کند $\rightarrow$ استعلام از DNS سرور $\rightarrow$ دریافت IP $\rightarrow$ سرور ابری $\rightarrow$ پاسخ رمزنگاری‌شده HTTPS $\rightarrow$ نمایش صفحه. +3. **کالبدشکافی انواع رکوردهای پرکاربرد DNS:** `images/dns-records-infographic.png` + * **موضوع:** تصویر گرافیکی مقایسه‌ای: رکورد A (فلش مستقیم به IP)، رکورد CNAME (فلش به نام دامنه سرور ابری)، و رکورد TXT (متن تایید مالکیت). +4. **نحوه کارکرد شبکه توزیع محتوا (CDN):** `images/cdn-edge-caching-diagram.png` + * **موضوع:** دیاگرام کره زمین: سرور اصلی در تهران یا فرانکفورت، و سرورهای لبه CDN در شهرهای مختلف که عکس‌ها را بلافاصله به کاربر محلی تحویل می‌دهند. + +--- + +## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) + +1. **تیتر اصلی:** `# الفبای وب برای انتشار؛ دامین، هاست، DNS، گواهی SSL و شبکه CDN` +2. **مقدمه:** وقتی آدرس سایت خود را در مرورگر تایپ می‌کنید، در آن کسری از ثانیه پشت صحنه چه اتفاق شگفت‌انگیزی در کابل‌های زیر اقیانوس‌ها می‌افتد؟ +3. **جدول کاور درس** +4. **استعاره ارسال یک بسته پستی از آن سوی دنیا:** + * نام گیرنده (دامنه)، کد پستی عددی (IP)، اداره پست محلی (DNS)، کامیون پلمپ‌شده (SSL)، و انبارهای پخش محلی (CDN). +5. **ساختار دامنه: چگونه یک نام حرفه‌ای برای پورتفولیو انتخاب کنیم؟** + * تفاوت دامنه‌های ملی (`.ir`) با دامنه‌های بین‌المللی (`.com`, `.dev`). + * ساب‌دامین‌ها و کاربرد آن‌ها در معماری سایت. +6. **سامانه نام دامنه (DNS)؛ دفترچه تلفن نامرئی اینترنت:** + * کالبدشکافی رکوردهای A، CNAME، TXT و NS. +7. **گواهی امنیتی SSL/TLS: پایان دوران برچسب قرمز «ناامن»:** + * چرا گوگل سایت‌های بدون HTTPS را جریمه می‌کند؟ + * صدور خودکار گواهی در پلتفرم‌های مدرن با پروتکل ACME. +8. **شبکه توزیع محتوا (CDN)؛ سرعت موشکی در هر نقطه جغرافیایی:** + * کش کردن فایل‌های استاتیک و سپرهای محافظتی در برابر حملات خرابکارانه. +9. **باکس نکته Quera (`
`):** مفهوم پدیده انتشار DNS (Propagation)؛ چرا بعد از تغییر رکوردها باید کمی صبور باشید و چطور وضعیت جهانی را در DNSChecker چک کنید. +10. **باکس هشدار Quera (`
`):** خطای Mixed Content؛ اطمینان حاصل کنید تمام لینک‌های فونت، عکس و اسکریپت‌ها با `https://` فراخوانی می‌شوند. +11. **باکس رضایت‌بخش Quera (`
`):** اکنون شما به زبان بین‌المللی زیرساخت وب مسلط شده‌اید و آماده انتخاب پلتفرم ابری در درس بعدی هستید. +12. **جمع‌بندی درس‌نامه:** تسلط بر مفاهیم بنیادین وب؛ ورود به درس هیجان‌انگیز انتخاب مدل استقرار و پلتفرم‌های ابری (PaaS) در درس بعدی. + +--- + +## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) +- [ ] ارکان پنج‌گانه وب (دامین، هاست، DNS، SSL و CDN) با استعاره‌های ملموس تبیین گردند. +- [ ] چهار رکورد حیاتی DNS (A, CNAME, TXT, NS) و کاربرد هر یک به صورت دقیق شرح داده شود. +- [ ] اهمیت گواهی امنیتی HTTPS و خطای Mixed Content تشریح شود. +- [ ] مفهوم انتشار DNS و ابزارهای اعتبارسنجی آنلاین معرفی شوند. diff --git a/chapters/12-deployment-and-shipping/03-lesson-choosing-paas-deployment-models/spec.md b/chapters/12-deployment-and-shipping/03-lesson-choosing-paas-deployment-models/spec.md new file mode 100644 index 0000000..4a86dcb --- /dev/null +++ b/chapters/12-deployment-and-shipping/03-lesson-choosing-paas-deployment-models/spec.md @@ -0,0 +1,99 @@ +# مشخصات درس‌نامه: تکامل میزبانی وب؛ چرا PaaS و استقرار مبتنی بر گیت (Git-based Deploy) برنده شد؟ +- **شناسه در سیلابس:** `L12.4` +- **فصل:** فصل ۱۲: انتشار روی اینترنت (Ch 12) +- **نوع محتوا:** 📘 درس‌نامه متنی +- **زمان تقریبی مطالعه:** ۱۶ دقیقه +- **پیش‌نیازهای مستقیم:** `L12.3` (الفبای وب برای انتشار) + +--- + +## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) +دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: +- [ ] **درک کند (Understand):** سیر تکامل هاستینگ وب از هاست‌های اشتراکی سی‌پنل (cPanel) تا سرورهای مجازی (VPS) و انقلاب نهایی پلتفرم به عنوان سرویس (PaaS) را شرح دهد. +- [ ] **تحلیل/ارزیابی کند (Evaluate):** هزینه‌های پنهان نگهداری سرور شخصی (کانفیگ Nginx، لینوکس، مدیریت پورت‌ها، فایروال و اسکریپت‌های تجدید SSL) را در برابر سادگی استقرار خودکار PaaS مقایسه کند. +- [ ] **درک کند (Understand):** جادوی استقرار مبتنی بر گیت (Git-based Deployment) را بشناسد که در آن هر دستور `git push` به شاخه اصلی، مستقیماً به نسخه جدید سایت زنده تبدیل می‌شود. +- [ ] **به‌کار ببندد (Apply):** ماتریس تصمیم‌گیری انتخاب پلتفرم ابری مناسب برای پروژه پورتفولیو و استارتاپ‌های آینده را با ارزیابی پلن‌های رایگان (Free Tier) تحلیل و انتخاب نماید. + +--- + +## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) + +### آنچه باید پوشش داده شود (In-Scope): +1. **داستان دردناک برنامه‌نویسان در گذشته در برابر بهشت امروز وایب کدرها:** + * دوران هاست‌های cPanel و آپلود دستی فایل‌ها با FileZilla و درگیری با ارورهای عجیب PHP. + * دوران سرور مجازی (VPS): نصف وقت صرف کدنویسی و نصف دیگر صرف کانفیگ سرور اوبونتو، دستورات SSH، تنظیم رورس پروکسی Nginx و سر و کله زدن با حافظه رم! +2. **پلتفرم به عنوان سرویس (PaaS)؛ جادوی استقرار در ۶۰ ثانیه:** + * پلتفرم‌های مدرن مثل Vercel، Liara، Netlify و Railway چه کاری انجام می‌دهند؟ + * شما فقط مخزن گیت‌هاب را متصل می‌کنید؛ پلتفرم خودش Next.js را تشخیص می‌دهد، پکیج‌ها را نصب می‌کند، بیلد می‌گیرد و در ده‌ها سرور ابری توزیع می‌کند. +3. **چرخه استقرار مبتنی بر گیت (Git-based Deployment Loop):** + * کامیت تغییرات در شاخه اصلی (`main`) $\rightarrow$ ارسال به گیت‌هاب با `git push` $\rightarrow$ وب‌هوک خودکار به سرور ابری $\rightarrow$ اجرای بیلد در کانتینر ایزوله $\rightarrow$ تعویض نسخه بدون حتی یک ثانیه قطعی (Zero-Downtime Deployment). +4. **پلن‌های رایگان و اقتصادی توسعه‌دهندگان (Free Tier & Fair Use):** + * پلن Hobby در Vercel: کاملاً رایگان برای پروژه‌های شخصی و پورتفولیو با پهنای باند سخاوتمندانه. + * پلتفرم بومی لیارا: ارائه اعتبار هدیه تست و پلن‌های مقیاس‌پذیر اقتصادی با پرداخت ریالی برای تضمین سرعت بالا درون شبکه ملی. +5. **جدول مقایسه‌ای ۳ مدل میزبانی:** + * مقایسه cPanel vs VPS vs PaaS از منظر: سرعت راه‌اندازی، مهارت‌های لینوکس مورد نیاز، مقیاس‌پذیری خودکار، هزینه زمانی و هزینه مالی. +6. **کال‌اوت‌های آموزشی و هشدار کوئرا:** + * کال‌اوت بنفش (`
`): پدیده شروع سرد (Cold Start) در توابع سرورلس و نحوه برطرف شدن آن در نسل جدید پلتفرم‌های لبه (Edge). + * کال‌اوت سبز (`
`): تمرکز ۱۰۰٪ روی خلق ویژگی‌های محصول به جای تبدیل شدن به یک متخصص سرور و DevOps. + * کال‌اوت قرمز (`
`): شرایط استفاده جوانمردانه (Fair Use Policy) در ورسل؛ پورتفولیوی شخصی و رزومه مجاز است، اما پروژه‌های پردرآمد تجاری بزرگ نیازمند پلن Pro هستند. + +### آنچه نباید وارد آن شویم (Out-of-Scope): +- مباحث ارکستراسیون کانتینرها با کوبرنتیز (Kubernetes) سازمانی. +- خطوط لوله پیچیده Jenkins و Terraform. + +--- + +## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) + +| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | +| :--- | :--- | :--- | +| Git-based Deployment | استقرار مبتنی بر گیت | انتشار خودکار نسخه جدید نرم‌افزار به محض ارسال کامیت‌های جدید به مخزن گیت‌هاب | +| Zero-Downtime Deploy | استقرار بدون قطعی | جابجایی ترافیک از نسخه قدیمی به نسخه جدید تنها پس از اطمینان کامل از موفقیت بیلد جدید | +| Shared Hosting | هاست اشتراکی | میزبانی وب سنتی با منابع مشترک و محدودیت شدید که برای وب مدرن منسوخ شده است | +| VPS (Virtual Private Server) | سرور مجازی اختصاصی | یک ماشین مجازی لینوکس با سیستم‌عامل اختصاصی که نیازمند مدیریت فنی کامل توسط کاربر است | +| Serverless Architecture | معماری بدون سرور | مدل ابری که در آن منابع پردازشی به صورت آنی بر اساس تقاضا اجرا و سپس خاموش می‌شوند | +| Cold Start | راه‌اندازی اولیه سرد | تاخیر ناچیز چندصد میلی‌ثانیه‌ای در اولین اجرای یک تابع بدون سرور که پس از مدتی بی‌کاری بیدار می‌شود | + +--- + +## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) +> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: + +1. **تصویر کاور درس:** `images/cover.png` + * **موضوع:** تقابل یک سرور فیزیکی غبارگرفته با سیم‌پیچی‌های پیچیده در برابر پلتفرم ابری مدرن و صیقلی با دکمه درخشان Deploy. +2. **سیر تحول میزبانی وب از گذشته تا امروز:** `images/hosting-evolution-timeline.png` + * **موضوع:** اینفوگرافیک تاریخی: دهه ۲۰۰۰: هاست اشتراکی cPanel $\rightarrow$ دهه ۲۰۱۰: سرورهای مجازی VPS $\rightarrow$ دهه ۲۰۲۰: پلتفرم‌های ابری PaaS مبتنی بر گیت. +3. **چرخه استقرار خودکار با Git Push:** `images/git-push-to-deploy-flow.png` + * **موضوع:** دیاگرام فرآیند: گیت‌پوش از ادیتور $\rightarrow$ گیت‌هاب $\rightarrow$ وب‌هوک خودکار $\rightarrow$ کانتینر بیلد پلتفرم $\rightarrow$ انتشار زنده بدون قطعی روی آدرس دامنه. +4. **جدول ماتریس مقایسه‌ای cPanel در برابر VPS و PaaS:** `images/cpanel-vs-vps-vs-paas-matrix.png` + * **موضوع:** جدول مقایسه‌ای رنگی با ستون‌های زمان استقرار، پیچیدگی فنی، و سهولت استفاده برای وایب کدرها. + +--- + +## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) + +1. **تیتر اصلی:** `# تکامل میزبانی وب؛ چرا PaaS و استقرار مبتنی بر گیت (Git-based Deploy) برنده شد؟` +2. **مقدمه:** چرا به عنوان یک وایب کدر مدرن هرگز نباید ثانیه‌ای از وقت باارزش خود را صرف دستورات خسته‌کننده سرورهای لینوکس کنید؟ +3. **جدول کاور درس** +4. **استعاره اجاره خودرو با راننده در برابر ساخت دستی موتور اتومبیل:** + * شما می‌خواهید به مقصد برسید (انتشار محصول)، پس چرا باید مکانیکی دیزل بخوانید؟ +5. **تاریخچه کوتاه هاستینگ وب: از فاجعه cPanel تا آزادی با PaaS:** + * چرا هاست‌های ارزان قدیمی پروژه‌های Next.js و React را خفه می‌کنند؟ +6. **معماری پلتفرم‌های ابری مدرن (PaaS):** + * کانتینرهای خودکار، توابع سرورلس، و شبکه جهانی Edge. +7. **جادوی استقرار با گیت (Git-based Deployment):** + * یک دستور `git push` ساده و مشاهده فرآیند ساخت زنده در داشبورد ابری. +8. **بررسی دو قهرمان دوره: لیارا (بومی پایدار) و Vercel (استاندارد جهانی):** + * کدام را کی انتخاب کنیم؟ استراتژی دوگانه هوشمندانه. +9. **باکس نکته Quera (`
`):** مفهوم استقرار پیش‌نمایش موقت (Ephemeral Environments)؛ امکان مشاهده تغییرات هر برنچ قبل از اعمال روی سایت اصلی. +10. **باکس هشدار Quera (`
`):** گول هاست‌های اشتراکی ارزان را نخورید؛ Next.js یک اپلیکیشن تمام‌عیار Node.js است و روی هاست‌های ارزان PHP اجرا نمی‌شود. +11. **باکس انرژی‌بخش Quera (`
`):** به دنیای مدرن توسعه وب خوش آمدید؛ جایی که دکمه دیپلوی لذت‌بخش‌ترین دکمه کیبورد شماست. +12. **جمع‌بندی درس‌نامه:** انتخاب مدل میزبانی؛ ورود به اجرای عملی استقرار روی لیارا و ورسل در درس بعدی. + +--- + +## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) +- [ ] تکامل مدل‌های میزبانی و دلایل برتری PaaS برای توسعه‌دهندگان مدرن تبیین شود. +- [ ] مکانیسم استقرار مبتنی بر گیت (Git-based Deploy) با فلوچارت گرافیکی تشریح گردد. +- [ ] مقایسه شفاف میان پلتفرم‌های بومی (لیارا) و بین‌المللی (ورسل) ارائه شود. +- [ ] جدول ماتریس مقایسه‌ای cPanel vs VPS vs PaaS در متن گنجانده شود. diff --git a/chapters/12-deployment-and-shipping/04-lesson-deploying-with-liara-and-vercel/spec.md b/chapters/12-deployment-and-shipping/04-lesson-deploying-with-liara-and-vercel/spec.md new file mode 100644 index 0000000..bd29c52 --- /dev/null +++ b/chapters/12-deployment-and-shipping/04-lesson-deploying-with-liara-and-vercel/spec.md @@ -0,0 +1,124 @@ +# مشخصات درس‌نامه: استقرار عملی پروژه پورتفولیو در لیارا (Liara) و ورسل (Vercel) +- **شناسه در سیلابس:** `L12.5` +- **فصل:** فصل ۱۲: انتشار روی اینترنت (Ch 12) +- **نوع محتوا:** 📘 درس‌نامه متنی +- **زمان تقریبی مطالعه:** ۲۰ دقیقه +- **پیش‌نیازهای مستقیم:** `L12.4` (تکامل میزبانی وب و انتخاب PaaS) + +--- + +## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) +دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: +- [ ] **درک کند (Understand):** فرآیند کامل دیپلوی پروژه Next.js به همراه پکیج‌ها و وابستگی‌ها را در دو پلتفرم محبوب لیارا (بومی) و Vercel (بین‌المللی) گام‌به‌گام پیاده کند. +- [ ] **تحلیل/ارزیابی کند (Evaluate):** لاگ‌های زنده زمان ساخت (Build Logs) در داشبورد ابری را بازبینی کرده و خطاهای احتمالی زمان استقرار را تشخیص دهد. +- [ ] **به‌کار ببندد (Apply):** پایگاه داده ابری Supabase را به پروژه مستقرشده متصل کرده و دامنه‌های مجاز بازگشت (Redirect URLs) را در کنسول احراز هویت سوپابیس ثبت نماید. +- [ ] **ایجاد کند (Create):** یک پایپ‌لاین انتشار خودکار از طریق گیت‌هاب ایجاد کند که با هر کامیت، نسخه زنده پورتفولیو به صورت خودکار به‌روزرسانی شود. + +--- + +## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) + +### آنچه باید پوشش داده شود (In-Scope): +1. **لحظه تاریخی: دیدن پروژه روی یک آدرس عمومی اینترنت!** + * تبدیل کدهای داخل ادیتور به یک سایت زنده اینترنتی که با هر گوشی و لپ‌تاپی باز می‌شود. +2. **مسیر اول: استقرار روی پلتفرم ابری بومی لیارا (Liara.ir):** + * ساخت یک برنامه از نوع Next.js در کنسول لیارا با انتخاب ریجن ایران. + * استقرار با ابزار خط فرمان لیارا (Liara CLI) یا اتصال مستقیم به مخزن گیت‌هاب. + * پیکربندی بهینه‌ساز کانتینر در `next.config.js` با ویژگی `output: 'standalone'` برای کاهش شگفت‌انگیز حجم بیلد. + * دریافت زیردامنه رایگان و پایدار (مانند `my-portfolio.liara.run`). +3. **مسیر دوم: استقرار روی پلتفرم بین‌المللی Vercel:** + * ورود به vercel.com با حساب گیت‌هاب، انتخاب مخزن پورتفولیو و زدن دکمه Deploy. + * رصد انیمیشن زنده بیلد کدهای Next.js و دریافت آدرس اختصاصی `*.vercel.app`. +4. **تکمیل زنجیره اتصال به پایگاه داده Supabase:** + * چرا بعد از دیپلوی لاگین با گوگل/گیت‌هاب کار نمی‌کند؟ + * حل قطعی: ثبت آدرس پروداکشن در بخش Authentication $\rightarrow$ URL Configuration $\rightarrow$ Redirect URLs در داشبورد Supabase. +5. **قابلیت نجات‌بخش بازگشت آنی (Instant Rollback):** + * اگر تغییری منتشر شد که باگ داشت، چطور با یک کلیک در پنل نسخه قبلی را بدون نیاز به بیلد مجدد برگردانیم. +6. **دستورات چندسکویی نصب ابزارهای خط فرمان لیارا و ورسل:** + * نصب در منوهای کشویی ویندوز، مک و لینوکس: + - نصب Liara CLI: `npm install -g @liara/cli` + - نصب Vercel CLI: `npm install -g vercel` +7. **کال‌اوت‌های آموزشی و هشدار کوئرا:** + * کال‌اوت بنفش (`
`): ویژگی `output: 'standalone'` در Next.js که فایل‌های `node_modules` چندصد مگابایتی را به چند مگابایت خالص تبدیل می‌کند. + * کال‌اوت سبز (`
`): لذت مشاهده اولین پیام موفقیت سبز «Deployment Completed» در داشبورد ابری. + * کال‌اوت قرمز (`
`): تله آدرس Redirect سوپابیس؛ فراموشی ثبت دامنه جدید در تنظیمات Supabase مانع ورود کاربران به پنل ادمین می‌شود. + +### آنچه نباید وارد آن شویم (Out-of-Scope): +- پیکربندی متغیرهای محیطی با جزییات کامل (در درس بعدی، ۱۲.۶، به صورت اختصاصی پوشش داده می‌شود). +- خرید و اتصال دامنه اختصاصی شخصی (در درس ۱۲.۷ بررسی می‌شود). + +--- + +## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) + +| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | +| :--- | :--- | :--- | +| Standalone Output | خروجی مستقل سرور | قابلیت Next.js برای بسته‌بندی تنها کدهای ضروری در یک فایل سبک و بهینه برای کانتینرها | +| Build Logs | لاگ‌های فرآیند ساخت | پیام‌های متنی زنده در پنل ابری که جزئیات دانلود پکیج‌ها و کامپایل کدها را نمایش می‌دهند | +| Instant Rollback | بازگشت آنی به نسخه قبل | امکان سوییچ فوری به نسخه پایدار قبلی سایت در عرض یک ثانیه در صورت بروز مشکل در بیلد جدید | +| Liara CLI | ابزار خط فرمان لیارا | رابط متنی ترمینال برای ارسال مستقیم فایل‌های پروژه به سرورهای ابری لیارا | +| Redirect URL Whitelist | لیست سفید آدرس‌های مجاز بازگشت | تنظیمات امنیتی سوپابیس برای ممانعت از بازگشت توکن‌های لاگین به دامنه‌های ناشناس و مشکوک | + +--- + +## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) +> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: + +1. **تصویر کاور درس:** `images/cover.png` + * **موضوع:** نمایش دو سفینه فضایی نئونی مدرن با لوگوهای لیارا و ورسل که کدهای پروژه را به اوج آسمان ابری هدایت می‌کنند. +2. **مراحل استقرار در داشبورد لیارا:** `images/liara-deployment-steps.png` + * **موضوع:** اسکرین‌شات از مراحل انتخاب پلتفرم Next.js، ساخت برنامه و مشاهده لاگ‌های بیلد موفق در کنسول لیارا. +3. **فرآیند Import مخزن در داشبورد Vercel:** `images/vercel-import-repo-screen.png` + * **موضوع:** اسکرین‌شات از صفحه اتصال مخزن پورتفولیو از گیت‌هاب در ورسل و زدن دکمه Deploy با جشن پرتاب کاغذهای رنگی (Confetti). +4. **تنظیم Redirect URL در کنسول Supabase:** `images/supabase-redirect-url-setting.png` + * **موضوع:** اسکرین‌شات از داشبورد Supabase Auth با اضافه شدن آدرس‌های دامنه پروداکشن در فیلد Redirect URLs. + +--- + +## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) + +1. **تیتر اصلی:** `# استقرار عملی پروژه پورتفولیو در لیارا (Liara) و ورسل (Vercel)` +2. **مقدمه:** لحظه‌ای که ماه‌ها برایش تلاش کرده‌اید؛ پورتفولیوی شما آماده تماشای جهان است! +3. **جدول کاور درس** +4. **آماده‌سازی پروژه برای استقرار سرورلس:** + * فعال‌سازی ویژگی طلایی `output: 'standalone'` در `next.config.js`. +5. **آموزش عملی استقرار در لیارا (میزبانی پایدار بومی):** + * گام ۱: ساخت اکانت در Liara.ir و ورود به پنل. + * گام ۲: ساخت برنامه جدید از نوع Next.js. + * گام ۳: استقرار با کامند `liara deploy` در ترمینال یا اتصال اتوماتیک گیت‌هاب. + * گام ۴: مشاهده لاگ‌های اجرای کانتینر و دریافت لینک اختصاصی `*.liara.run`. +6. **آموزش عملی استقرار در Vercel (استاندارد جهانی):** + * ورود با گیت‌هاب، انتخاب ریپازیتوری، زدن دکمه Deploy و تماشای بیلد خودکار. +7. **هماهنگ‌سازی پایگاه داده Supabase با آدرس پروداکشن جدید:** + * ثبت نشانی جدید سایت در لیست سفید Redirect URLs کنسول سوپابیس برای کارکرد بی‌نقص ورود ادمین. +8. **جعبه ابزار خروج اضطراری: قابلیت Instant Rollback:** + * چگونه در کمتر از ۵ ثانیه اشتباهات ناخواسته را در پنل به نسخه سالم قبلی برگردانیم. +9. **دستورات چندسکویی نصب و ورود به CLIهای لیارا و ورسل:** + * منوی کشویی سه‌گانه برای ویندوز، مک و لینوکس: + - Windows (PowerShell): + ```powershell + npm install -g @liara/cli vercel + liara login + ``` + - macOS (Terminal): + ```bash + npm install -g @liara/cli vercel + liara login + ``` + - Linux (Bash): + ```bash + npm install -g @liara/cli vercel + liara login + ``` +10. **باکس نکته Quera (`
`):** اهمیت ممیزی حافظه رم اختصاص‌یافته در پلن‌های لیارا (پلن پایه ۲۵۶ مگابایت یا ۵۱۲ مگابایت برای Next.js). +11. **باکس هشدار Quera (`
`):** عدم تعریف متغیرهای محیطی در پنل ابری منجر به خطای ۵۰۰ یا صفحه سفید در پروداکشن می‌شود (موضوع درس بعد). +12. **باکس رضایت‌بخش Quera (`
`):** تست باز کردن آدرس عمومی سایت روی گوشی موبایل خارج از شبکه وای‌فای خانه و مشاهده کارکرد بدون نقص آن. +13. **جمع‌بندی درس‌نامه:** اجرای موفق اولین دیپلوی زنده؛ ورود به مبحث حیاتی تنظیم متغیرهای محیطی پروداکشن در پنل‌های ابری در درس بعدی. + +--- + +## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) +- [ ] مراحل استقرار گام‌به‌گام در هر دو پلتفرم لیارا و ورسل به صورت تصویری و متنی شرح داده شود. +- [ ] تنظیم کلیدی `output: 'standalone'` در فایل کانفیگ Next.js آموزش داده شود. +- [ ] رفع باگ رایج Redirect URL در احراز هویت Supabase به طور عملی گنجانده شود. +- [ ] دستورات خط فرمان Liara CLI در قالب منوهای چندسکویی ارائه گردد. diff --git a/chapters/12-deployment-and-shipping/05-lesson-production-environment-variables/spec.md b/chapters/12-deployment-and-shipping/05-lesson-production-environment-variables/spec.md new file mode 100644 index 0000000..9f603ea --- /dev/null +++ b/chapters/12-deployment-and-shipping/05-lesson-production-environment-variables/spec.md @@ -0,0 +1,102 @@ +# مشخصات درس‌نامه: پیکربندی متغیرهای محیطی پروداکشن در پنل‌های ابری (Environment Variables) +- **شناسه در سیلابس:** `L12.6` +- **فصل:** فصل ۱۲: انتشار روی اینترنت (Ch 12) +- **نوع محتوا:** 📘 درس‌نامه متنی +- **زمان تقریبی مطالعه:** ۱۶ دقیقه +- **پیش‌نیازهای مستقیم:** `L12.5` (استقرار عملی پروژه پورتفولیو در لیارا و ورسل) + +--- + +## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) +دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: +- [ ] **درک کند (Understand):** چرا ۹۵٪ خطاهای ناگهانی صفحه سفید یا کرش سرور پس از استقرار اولیه (خطای ۵۰۰)، ناشی از غیبت متغیرهای محیطی در سرور ابری است و چرا فایل `.env.local` هرگز به همراه کدها به سرور فرستاده نمی‌شود. +- [ ] **تحلیل/ارزیابی کند (Evaluate):** تفاوت‌های حیاتی میان مقادیر متغیرها در محیط لوکال و محیط واقعی (به‌ویژه متغیر `NEXT_PUBLIC_APP_URL` برای آدرس‌های بازگشت زرین‌پال و اوت‌اوت گوگل) را ارزیابی کند. +- [ ] **به‌کار ببندد (Apply):** تمام متغیرهای محیطی پروژه پورتفولیو (کلیدهای سوپابیس، کاوه‌نگار، لیارا SMTP، زرین‌پال، Upstash و OpenRouter) را در بخش تنظیمات متغیرهای کنسول لیارا و Vercel تزریق نماید. +- [ ] **ایجاد کند (Create):** چرخه بازاستقرار (Trigger Redeploy) را پس از ذخیره متغیرها اجرا کرده و پایداری کامل برنامه در محیط پروداکشن را راستی‌آزمایی کند. + +--- + +## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) + +### آنچه باید پوشش داده شود (In-Scope): +1. **معمای سرور گیج: «من کلیدها را از کجا بخوانم؟»:** + * شما به درستی `.env.local` را در `.gitignore` گذاشتید تا فاش نشود؛ در نتیجه سرور ابری پروژه‌ای خالی از کلید دریافت کرده است! +2. **کالبدشکافی تزریق متغیرها در داشبورد لیارا:** + * ورود به برنامه پورتفولیو در پنل Liara.ir $\rightarrow$ بخش «تنظیمات» $\rightarrow$ تب «متغیرها». + * امکان افزودن تکی یا پیست کردن دسته‌ای (Bulk Paste) تمام خطوط `.env`. + * راه‌اندازی مجدد (Restart) برنامه برای خوانده شدن متغیرهای جدید توسط کانتینر. +3. **کالبدشکافی تزریق متغیرها در داشبورد Vercel:** + * ورود به پروژه در Vercel $\rightarrow$ تب Settings $\rightarrow$ انتخاب Environment Variables. + * تفکیک محیط‌ها: Production، Preview و Development. + * لزوم زدن دکمه Redeploy برای اعمال متغیرها در مرحله بیلد. +4. **تغییرات کلیدی متغیرها از لوکال به پروداکشن:** + * متغیر شماره یک: `NEXT_PUBLIC_APP_URL` + - در لوکال: `http://localhost:3000` + - در پروداکشن: `https://my-portfolio.liara.run` یا دامنه شخصی شما. + - چرا این متغیر حیاتی است؟ زرین‌پال کاربر را بعد از پرداخت به این آدرس برمی‌گرداند؛ تگ‌های Open Graph عکس‌های شبکه‌های اجتماعی را از این آدرس می‌خوانند! +5. **بررسی چک‌لیست کامل متغیرهای پروژه پورتفولیو:** + * جدول جامع تمام متغیرها: `NEXT_PUBLIC_SUPABASE_URL`, `NEXT_PUBLIC_SUPABASE_ANON_KEY`, `KAVENEGAR_API_KEY`, `SMTP_HOST`, `ZARINPAL_MERCHANT_ID`, `UPSTASH_REDIS_REST_URL`, `OPENROUTER_API_KEY`, `ADMIN_EMAIL`. +6. **کال‌اوت‌های آموزشی و هشدار کوئرا:** + * کال‌اوت بنفش (`
`): مفهوم تزریق در زمان بیلد (Build-time Inlining) برای متغیرهای با پیشوند `NEXT_PUBLIC_` و چرایی نیاز به بیلد مجدد پس از تغییر آن‌ها. + * کال‌اوت سبز (`
`): قابلیت کپی-پیست یکجای کل محتوای فایل `.env` در پنل متغیرهای لیارا در ۲ ثانیه. + * کال‌اوت قرمز (`
`): تله راه‌اندازی مجدد نکردن؛ تغییر متغیرها بدون ری‌استارت برنامه در پنل ابری هیچ اثری نخواهد داشت. + +### آنچه نباید وارد آن شویم (Out-of-Scope): +- استفاده از سرویس‌های مدیریت متغیرهای توزیع‌شده بین‌سازمانی (Doppler یا Infisical). +- رمزنگاری کلیدها با کلیدهای نامتقارن PGP در خط فرمان. + +--- + +## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) + +| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | +| :--- | :--- | :--- | +| Production Environment Variable | متغیر محیطی پروداکشن | تنظیمات پیکربندی و کلیدهای حساسی که مستقیماً در پنل هاست ابری برای سرور واقعی تعریف می‌شوند | +| Build-time Inlining | جایگذاری در زمان بیلد | فرآیندی که در آن کامپایلر Next.js مقادیر عمومی (NEXT_PUBLIC_) را در هنگام بیلد داخل کدهای فرانت‌اند حک می‌کند | +| Bulk Import | بارگذاری یکپارچه دسته‌ای | امکان کپی کردن همزمان تمام خطوط فایل تنظیمات در پنل ابری بدون نیاز به ثبت دانه به دانه | +| App Restart / Redeploy | راه‌اندازی مجدد / استقرار دوباره | متوقف کردن و اجرای مجدد کانتینر سرور به منظور بارگذاری مقادیر جدید متغیرهای محیطی در حافظه | +| Root URL Dynamic Mapping | نگاشت پویای آدرس ریشه | تنظیم هوشمند آدرس اصلی سایت به گونه‌ای که لینک‌های بازگشتی با دامنه واقعی محیط همگام باشند | + +--- + +## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) +> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: + +1. **تصویر کاور درس:** `images/cover.png` + * **موضوع:** نمایش پنل تنظیمات دیجیتال مدرن با فیلدهای کلیدهای رمزی و دکمه‌های سوئیچ سبز در داشبورد سرور ابری. +2. **مسیر تزریق متغیرها در کنسول لیارا:** `images/liara-environment-variables-panel.png` + * **موضوع:** اسکرین‌شات از تب متغیرها در پنل لیارا با دکمه بارگذاری دسته‌ای و لیست کلیدهای سوپابیس و کاوه‌نگار. +3. **تنظیم متغیرها در داشبورد Vercel با انتخاب محیط:** `images/vercel-environment-variables-setup.png` + * **موضوع:** اسکرین‌شات از بخش Settings ورسل با تیک‌باکس‌های Production و Preview برای هر متغیر. +4. **اثر حیاتی متغیر `NEXT_PUBLIC_APP_URL` بر درگاه پرداخت و سئو:** `images/app-url-importance-flow.png` + * **موضوع:** اینفوگرافیک مقایسه‌ای: مقدار اشتباه (هدایت کاربر بانک به صفحه خراب localhost:3000) در برابر مقدار صحیح (هدایت کاربر به دامنه زنده پورتفولیو). + +--- + +## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) + +1. **تیتر اصلی:** `# پیکربندی متغیرهای محیطی پروداکشن در پنل‌های ابری (Environment Variables)` +2. **مقدمه:** سایت بالا آمد اما به محض کلیک روی دکمه‌ها ارور ۵۰۰ می‌دهد؟ نفس عمیق بکشید؛ این طبیعی‌ترین اتفاق بعد از اولین دیپلوی است! +3. **جدول کاور درس** +4. **چرا فایل `.env.local` شما در سرور ابری وجود ندارد؟** + * یادآوری امنیت گیت؛ ما عمداً کلیدها را به گیت‌هاب نفرستادیم تا هک نشویم، اکنون باید آن‌ها را دستی به سرور برسانیم. +5. **آموزش تصویری تزریق متغیرها در پنل لیارا (Liara):** + * رفتن به تنظیمات $\rightarrow$ بخش متغیرها $\rightarrow$ کپی کردن محتوای تمیز `.env` $\rightarrow$ ذخیره و راه‌اندازی مجدد. +6. **آموزش تزریق متغیرها در پنل Vercel:** + * انتخاب Environment Variables $\rightarrow$ تنظیم اسکوپ Production $\rightarrow$ زدن دکمه Redeploy. +7. **شاه‌کلید تمام آدرس‌های بازگشتی: تنظیم `NEXT_PUBLIC_APP_URL`:** + * چرا این متغیر را باید با آدرس واقعی سایت (دامنه لیارا، ورسل یا دامنه اختصاصی) پر کنید. +8. **جدول چک‌لیست نهایی تمام متغیرهای پروژه پورتفولیو:** + * مروری بر ۸ متغیر ضروری: Supabase, Kavenegar, Liara SMTP, ZarinPal, Upstash, OpenRouter, Admin Email. +9. **باکس نکته Quera (`
`):** چرا تغییر متغیرهای عمومی کلاینتی حتماً نیازمند بیلد دوباره (Redeploy) است در حالی که متغیرهای سروری با یک Restart ساده اعمال می‌شوند. +10. **باکس هشدار Quera (`
`):** هرگز فاصله‌های اضافی (Space) قبل یا بعد از کلیدها در کادر پنل نگذارید؛ این خطای پنهان ساعت‌ها وقت شما را می‌گیرد! +11. **باکس رضایت‌بخش Quera (`
`):** رفرش کردن سایت زنده پس از تنظیم متغیرها و مشاهده لود شدن آنی پروژه‌ها از دیتابیس Supabase و سلامت کامل سیستم. +12. **جمع‌بندی درس‌نامه:** تثبیت کامل مغز متغیرهای ابری؛ ورود به گام باشکوه پایانی فصل: ثبت و اتصال دامنه اختصاصی، DNS و CDN در درس بعدی. + +--- + +## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) +- [ ] علت بروز خطاهای پس از دیپلوی ناشی از نبود متغیرهای محیطی به زبان ساده تبیین شود. +- [ ] شیوه تزریق متغیرها در هر دو پنل لیارا و ورسل به صورت گام‌به‌گام تشریح گردد. +- [ ] اهمیت تغییر متغیر `NEXT_PUBLIC_APP_URL` از لوکال به دامنه واقعی پروداکشن تحلیل شود. +- [ ] جدول چک‌لیست تمام کلیدهای مورد نیاز پروژه پورتفولیو در متن ارائه گردد. diff --git a/chapters/12-deployment-and-shipping/06-lesson-custom-domains-dns-and-ssl/spec.md b/chapters/12-deployment-and-shipping/06-lesson-custom-domains-dns-and-ssl/spec.md new file mode 100644 index 0000000..6a10b2a --- /dev/null +++ b/chapters/12-deployment-and-shipping/06-lesson-custom-domains-dns-and-ssl/spec.md @@ -0,0 +1,111 @@ +# مشخصات درس‌نامه: اتصال دامنه اختصاصی، مدیریت DNS با ابر آروان و Cloudflare و فعال‌سازی SSL +- **شناسه در سیلابس:** `L12.7` +- **فصل:** فصل ۱۲: انتشار روی اینترنت (Ch 12) +- **نوع محتوا:** 📘 درس‌نامه متنی +- **زمان تقریبی مطالعه:** ۲۰ دقیقه +- **پیش‌نیازهای مستقیم:** `L12.6` (پیکربندی متغیرهای محیطی پروداکشن) + +--- + +## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) +دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: +- [ ] **درک کند (Understand):** اهمیت اعتبار حرفه‌ای داشتن یک دامنه اختصاصی شخصی (نظیر `.ir` یا `.dev`) در نگاه کارفرمایان و مصاحبه‌کنندگان شغلی را درک کند. +- [ ] **تحلیل/ارزیابی کند (Evaluate):** کاربرد سرویس‌های مدیریت توزیع محتوا و DNS شامل **ابر آروان (ArvanCloud)** (بهینه‌سازی برای شبکه و سرورهای ایران) و **Cloudflare** (استاندارد جهانی اینترنت) را مقایسه کند. +- [ ] **به‌کار ببندد (Apply):** رکوردهای کارگزار نام (NameServers) را در پنل ثبت دامنه تغییر داده و رکوردهای A و CNAME را برای اتصال دامنه به پلتفرم‌های لیارا و ورسل تنظیم نماید. +- [ ] **ایجاد کند (Create):** گواهی امنیتی SSL رایگان را به همراه هدایت خودکار همگانی به پروتکل امن HTTPS و فعال‌سازی شبکه CDN لبه برای پورتفولیو راه‌اندازی کند. + +--- + +## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) + +### آنچه باید پوشش داده شود (In-Scope): +1. **پایان کار با زیردامنه‌های عمومی و ورود به باشگاه حرفه‌ای‌ها:** + * ارسال لینک `alireza-dev.ir` به جای یک ساب‌دامین طولانی و موقت، نماد هویت و تعهد کاری شماست. +2. **ثبت دامنه ملی و بین‌المللی:** + * دامنه‌های ملی (`.ir`): ثبت اقتصادی از طریق کارگزاران رسمی ایرنیک. + * دامنه‌های بین‌المللی (`.com`, `.dev`, `.me`): ثبت از طریق شرکت‌های معتبر داخلی هاستینگ. +3. **گام اول: انتقال مدیریت DNS به ابر آروان یا Cloudflare:** + * ثبت نام رایگان و اضافه کردن دامنه. + * کپی کردن دو سرور نام اختصاصی (مانند `ns1.arvancloud.ir` یا سرورهای Cloudflare). + * جایگزینی NSها در پنل کارگزار دامنه و انتظار برای اتصال. +4. **گام دوم: تنظیم رکوردهای DNS برای اتصال به لیارا یا Vercel:** + * رکورد ریشه (`@`): اتصال به آی‌پی یا رکورد CNAME سرور ابری. + * رکورد زیردامنه (`www`): رکورد CNAME با مقدار آدرس برنامه (مثلاً `my-portfolio.liara.run` یا `cname.vercel-dns.com`). + * فعال‌سازی حالت پروکسی ابری (ابر روشن در آروان / ابر نارنجی در کلودفلر) برای بهره‌مندی از CDN و فایروال. +5. **گام سوم: فعال‌سازی رمزنگاری SSL/TLS و ریدایرکت خودکار HTTPS:** + * انتخاب حالت رمزنگاری Full / Strict برای امنیت سرتاسری. + * روشن کردن گزینه «Always Use HTTPS» برای هدایت خودکار تمام بازدیدکنندگان به آدرس امن با قفل سبز. +6. **گام چهارم: تایید دامنه در داشبورد لیارا / Vercel:** + * ثبت نام دامنه در بخش دامنه‌های برنامه در کنسول لیارا یا Settings $\rightarrow$ Domains در ورسل. + * مشاهده سبز شدن تیک اعتبارسنجی دامنه و صدور گواهی امنیتی. +7. **آزمایش نهایی انتشار جهانی با DNSChecker:** + * سرچ کردن آدرس در ابزار DNSChecker و دیدن سبز شدن تیک‌های تمام قاره‌های جهان. +8. **کال‌اوت‌های آموزشی و هشدار کوئرا:** + * کال‌اوت بنفش (`
`): مفهوم CNAME Flattening در DNS مدرن که اجازه می‌دهد رکورد CNAME مستقیماً روی دامنه اصلی بدون www اعمال شود. + * کال‌اوت سبز (`
`): گواهی امنیتی SSL مادام‌العمر رایگان که بدون دخالت شما توسط آروان/کلودفلر خودکار تمدید می‌شود. + * کال‌اوت قرمز (`
`): تله حلقه ریدایرکت بی‌پایان (Redirect Loop Error / ERR_TOO_MANY_REDIRECTS)؛ پرهیز از انتخاب حالت Flexible در تنظیمات SSL کلودفلر. + +### آنچه نباید وارد آن شویم (Out-of-Scope): +- انتقال مالکیت حقوقی دامنه در سامانه ایرنیک با ارسال تعهدنامه‌های رسمی. +- پیکربندی‌های پیشرفته رول‌های فایروال WAF اختصاصی در پلن‌های Enterprise کلودفلر. + +--- + +## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) + +| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | +| :--- | :--- | :--- | +| Custom Domain | دامنه اختصاصی شخصی | نام اینترنتی منحصربه‌فردی که شما مالک آن هستید و سایت روی آن لود می‌شود | +| NameServer (NS) | کارگزار نام دامنه | سرورهای مرجع اینترنت که پایگاه اصلی میزبانی تمام رکوردهای DNS دامنه شما هستند | +| Cloudflare | کلودفلر | بزرگ‌ترین شبکه توزیع محتوا، امنیت ابری و مدیریت سریع DNS در جهان | +| ArvanCloud | ابر آروان | اکوسیستم ابری بومی ایران ارائه‌دهنده سرویس‌های CDN، DNS ابری و امنیت لبه | +| HTTPS Redirect | هدایت اجباری به ارتباط امن | سازوکاری که کاربر را در صورت تایپ http:// به صورت خودکار به نسخه رمزنگاری‌شده https:// منتقل می‌کند | +| CNAME Flattening | مسطح‌سازی رکورد سی‌نیم | قابلیت مدرن سرورهای DNS برای اجازه دادن به استفاده از رکورد CNAME روی ریشه دامنه بدون www | + +--- + +## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) +> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: + +1. **تصویر کاور درس:** `images/cover.png` + * **موضوع:** نمایش نئونی آدرس دامنه شخصی شیک با نماد قفل سبز درخشان HTTPS و نقشه سرورهای لبه شبکه CDN در سراسر جهان. +2. **تنظیم رکوردهای NS در پنل کارگزار دامنه:** `images/nameserver-configuration-panel.png` + * **موضوع:** اسکرین‌شات از پنل ثبت دامنه با فیلدهای NS پر شده با مقادیر سرورهای ابر آروان یا کلودفلر. +3. **تعریف رکوردهای A و CNAME در ابر آروان / کلودفلر:** `images/dns-records-setup-screen.png` + * **موضوع:** اسکرین‌شات از جدول رکوردهای DNS با ابرهای روشن فعال برای ریشه دامنه و رکورد www متصل به پلتفرم هاستینگ. +4. **تایید نهایی دامنه اختصاصی در کنسول لیارا:** `images/liara-domain-active-badge.png` + * **موضوع:** اسکرین‌شات از داشبورد لیارا با بج سبز رنگ «دامنه فعال است و گواهی SSL با موفقیت صادر شد». + +--- + +## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) + +1. **تیتر اصلی:** `# اتصال دامنه اختصاصی، مدیریت DNS با ابر آروان و Cloudflare و فعال‌سازی SSL` +2. **مقدمه:** پرچم شما بر فراز اینترنت به اهتزاز درآمد! چگونه دامنه اختصاصی خود را متصل کنیم و به محصولمان هویت رسمی ببخشیم؟ +3. **جدول کاور درس** +4. **چرا داشتن دامنه اختصاصی بازی را عوض می‌کند؟** + * حس اعتماد، ماندگاری برند شخصی و افزایش شانس استخدام در نگاه کارفرمایان. +5. **گام اول: ثبت دامنه ملی یا بین‌المللی:** + * معرفی سامانه‌های ثبت و نکات انتخاب نام دامنه کوتاه و به‌یادماندنی. +6. **گام دوم: معرفی دامنه به ابر آروان یا Cloudflare:** + * ساخت حساب رایگان و تغییر NameServerها در کارگزاری دامنه. +7. **گام سوم: تعریف رکوردهای طلایی اتصال به لیارا یا ورسل:** + * ثبت رکورد CNAME و A به همراه فعال‌سازی ابر پراکسی برای سرعت موشکی CDN. +8. **گام چهارم: روشن کردن قفل سبز امنیتی HTTPS:** + * فعال‌سازی گواهی رایگان و سوییچ «Always Use HTTPS». +9. **گام پنجم: اضافه کردن دامنه در پنل لیارا یا Vercel:** + * مشاهده استعلام لحظه‌ای و سبز شدن نشانگر اتصال دامنه. +10. **جشن بزرگ انتشار: تست نهایی با ابزار DNSChecker:** + * دیدن پرچم‌های سبز در تمام دیتاسنترهای جهان و باز کردن سایت با آدرس نهایی روی گوشی. +11. **باکس نکته Quera (`
`):** ماجرای CNAME Flattening؛ چرا نیازی نیست حتماً اول آدرس سایتتان www بگذارید. +12. **باکس هشدار Quera (`
`):** خطای حلقه ریدایرکت (ERR_TOO_MANY_REDIRECTS)؛ همیشه حالت SSL کلودفلر را روی Full یا Strict بگذارید، نه Flexible! +13. **باکس رضایت‌بخش Quera (`
`):** پیام تبریک صمیمانه کوئرا کالج؛ پورتفولیوی واقعی شما اکنون زنده، پایدار، دارای دیتابیس، پرداخت آنلاین، پیامک و هوش مصنوعی روی اینترنت در دسترس تمام مردم دنیاست! +14. **جمع‌بندی فصل دوازدهم و پیش‌نمایش فصل سیزدهم:** پایان شکوهمند استقرار و انتشار؛ ورود به فصل سیزدهم: نگهداری محصول (مانیتورینگ، لاگ‌ها، سئو تکنیکال و تحلیل رفتار کاربر). + +--- + +## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) +- [ ] مراحل اتصال دامنه از ثبت تا تنظیم NameServerها به صورت گام‌به‌گام تشریح شود. +- [ ] نحوه کار با پنل‌های ابر آروان و Cloudflare به صورت کاربردی ارائه گردد. +- [ ] رکوردهای DNS لازم برای اتصال به لیارا و ورسل آموزش داده شود. +- [ ] فعال‌سازی گواهی رایگان SSL و ریدایرکت HTTPS با کال‌اوت‌های پیشگیری از ارور گنجانده شود.