من ازDevOps, URL و network چی میدونم؟

فهرست مطالب


مقدمه

سلام. من متین هستم و این اولین پست منه!

توی این نوشته قراره هرچیزی رو که از URL و DevOps یادگرفتم و میدونم بنویسم؛

لازمه که بگم من خودم هنوز درحال یادگیری هستم. پس اگر اشتباه تکنیکال و یا هرنوع اشتباه دیگه ای دیدین، بدونین که یه برنامه نویس سنیور این پست رو ننوشته و من هنوز در حال یادگیری هستم.🙂💙


چیشد که تصمیم گرفتم این پست رو بنویسم؟

همه چیز از دیشب شروع میشه. من داشتم با یکی از مهمترین و عزیزترین انسان های زندگیم، که استاد من هم هستن صحبت میکردم؛ بحث راجب Deploy بود که یهویی ازم یه سوال چالشی پرسیدن:

اگه بهت بگن همین پروداکت رو روی یه سرور لینوکسی دِپلوی کن چیکار میکنی و فکر میکنی کانسپتش چجوریه؟!

از خودم یچیزایی سر هم کردم و جواب دادم و با انبوهی دیگه از سوالات رو به رو شدم T_T

ایشون بهم تایم ریسرچ دادن و من تونستم جواب سوالات رو بدم. این پست رو هم به پیشنهاد ایشون دارم مینویسم.

خب در ادامه سعی میکنم همه چیز رو راجب چیزایی که یادگرفتم بنویسم.


ساختار نوشته ها

اول از همه نیازه که بدونین این پست چجوری نوشته شده و چجوری باید اون رو بخونین.

هر تایتل یه توضیح پیشین کلی داره که پیشنهاد میشه اول اون رو بخونین و بعد از اون مطالب مربوط به اون رو بخونین!💙


مطالب مرتبط با دواپس

توی این بخش تمام مطالبی و مفاهیمی که از دواپس یادگرفتم رو پوشش میدم. از دپلوی گرفته تا ابزار های CI/CD و خیلی چیزای دیگه!👨‍💻

مفهوم دپلوی

قبل از اینکه دریافت خودم رو از مفهوم دپلوی(Deploy) بگم، بیاین یه نگاهی به تعریف GPT از این مفهوم بندازیم.

دپلوی: منتشر کردن پروژه روی یک محیط قابل دسترسی، معمولاً اینترنت.

تعریف خودم از دپلوی

به زبان ساده، دپلوی یعنی پروژه ای رو که روی سیستم شخصی خودت ساختی و نگهداری میکنی و اون رو به صورت local اجرا میکنی، حالا بیای و اون رو روی یک سرور یا یک سرویس هاستینگ قرار بدی، تا همه بتونن به اون دسترسی داشته باشن.

مثلا شما یک پروژه با ReactJS دارین و برای ران کردن اون از npm run dev استفاده میکنین و با همچین آدرسی میتونین به صورت لوکال روی کامپیوتر خودتون به پروژه دسترسی داشته باشین: localhost:5173

اما بنظرتون بقیه میتونن با این آدرس به پروژه ی شما دسترسی داشته باشن؟! مسلما نه. حتی شما اگه خوتونم ترمینال رو ببندین باید با پروژه خدافظی کنین.😁

پس راه حل چیه که همه بتونن به صورت آنلاین و 24/7 به پروژه شما دسترسی داشته باشن؟ باید پروژه خودتون رو روی یک سرور و یا سرویس هاستینگ دپلوی کنین!😃


دپلوی روی سرویس های هاستینگ و لینوکس سرور

دپلوی روی سرویس های هاستینگ

یکی از ساده‌ترین روش‌های Deploy کردن پروژه، استفاده از سرویس‌های Hosting هست. سرویس‌هایی مثل Vercel، Cloudflare Pages و GitHub Pages خیلی از کارهای مربوط به Server رو خودشون انجام میدن. معمولاً پروژه رو به سرویس وصل می‌کنیم و بعد از هر تغییر، پروژه Build و Deploy میشه و یک آدرس برای دسترسی به اون در اختیارمون قرار می‌گیره.

یه مثال از Github Pages میزنم که کانسپتش دستتون بیاد. تصور کنین که یه وبسایت با HTML, CSS و جاوااسکریپت ساختین. یک ریپازیتوری گیتهاب میسازین و فایل های پروژه رو در اون قرار میدین و مراحل زیر رو دنبال میکنین.

وارد تب Settings میشین, تب Pages, Source رو روی main Branch و /root قرار میدیم و Save روی Save کلیک میکنیم. و بوم! پروژه شما دپلوی شده و الان آنلاینه.

اما چجوری بهش دسترسی داشته باشیم؟! برای مثال یوزرنیم من در گیتهاب BunnyMat و ریپو من Website هستش. لینک پیجز همچین چیزی خواهد شد.

https://BunnyMat.github.io/Website/

نحوه دپلوی کردن با استفاده از سرویس های مختلف رو بعدا توی یه پست جدا مفصل راجبش صحبت میکنم. اما اگر دوست دارین که بیشتر بدونین من توی چنل تلگرامم یه پست راجب دپلوی کردن پروژه با استفاده از Github Pages گذاشتم که اگر دوست داشتین میتونین یه نگاهی بهش بندازین.

دپلوی روی سرور لینوکسی

در این روش، خودمون یک Linux Server مثل VPS داریم و کنترل بیشتری روی محیط اجرا داریم. می‌تونیم با SSH به Server وصل بشیم، پروژه رو روی اون قرار بدیم، وابستگی‌ها رو نصب کنیم و برنامه رو اجرا کنیم. بعد می‌تونیم با ابزارهایی مثل Nginx درخواست‌های کاربران رو به برنامه منتقل کنیم و در صورت نیاز Domain و HTTPS هم تنظیم کنیم.

تفاوت اصلی این دو روش اینه که در Hosting Services بیشتر تنظیمات Server توسط سرویس انجام میشه، اما در Linux Server بخش زیادی از مدیریت و تنظیمات رو خودمون انجام میدیم.


سرور

ما توی بحث دپلوی زیاد راجب سرور ها صحبت کردیم اما سرور چیه و چیکار میکنه؟ چند نوع سرور داریم؟

همه چیز رو راجبشون توضیح میدم!

سرور چیه؟

سرور (Server) در اصل یک کامپیوتر قدرتمندِ متصل به شبکه‌ست که برای ذخیره‌سازی، پردازش و ارائه‌ی داده‌ها و سرویس‌ها به کاربران استفاده میشه. سرورها معمولاً طوری طراحی میشن که بتونن به درخواست‌های تعداد زیادی کاربر پاسخ بدن و برای مدت طولانی در دسترس بمونن.

مثلاً وقتی آدرس یک وب‌سایت رو در مرورگرتون وارد می‌کنین، دستگاه شما به‌عنوان Client یک درخواست به سرور می‌فرسته. سرور درخواست رو پردازش می‌کنه و داده‌ی موردنیاز، مثل فایل‌های سایت، صفحه‌ی وب یا اطلاعات یک اپلیکیشن رو برای دستگاه شما ارسال می‌کنه. به این ارتباط، مدل Client-Server گفته میشه.

سرورها فقط برای وب‌سایت‌ها استفاده نمیشن. میشه از اون‌ها برای اجرای اپلیکیشن‌ها، ذخیره و مدیریت فایل‌ها، پایگاه‌داده، ایمیل، بازی‌های آنلاین و سرویس‌های مختلف شبکه هم استفاده کرد.

از نظر زیرساخت هم یک سرور می‌تونه به شکل فیزیکی وجود داشته باشه یا با استفاده از مجازی‌سازی به چند سرور مجازی (VPS) تقسیم بشه. در سرورهای ابری هم منابع می‌تونن بین چند سرور فیزیکی توزیع بشن.

به زبان خیلی ساده:

Client -> Request -> Server -> Process -> Response -> Client

انواع سرورها

سرورها بر اساس نوع کاربرد و نحوه‌ی ارائه‌ی منابع، انواع مختلفی دارن. بعضی از رایج‌ترین انواع سرور عبارت‌اند از:

۱. وب سرور

وب‌سرور وظیفه‌ی میزبانی و ارائه‌ی صفحات وب رو بر عهده داره. وقتی آدرس یک سایت رو وارد می‌کنین، وب‌سرور درخواست مرورگر رو دریافت می‌کنه و محتوای موردنیاز رو برمی‌گردونه.

مثال: Nginx و Apache

۲. کلاد سرور

سرور ابری از منابع چند سرور فیزیکی در زیرساخت ابری استفاده می‌کنه و امکان افزایش یا کاهش منابع رو فراهم می‌کنه. این نوع سرور برای پروژه‌هایی که نیاز به مقیاس‌پذیری دارن کاربرد زیادی داره.

۳. سرور Dedicated

سرور اختصاصی یک سرور فیزیکی با منابع اختصاصی برای یک کاربر یا سازمانه. در این حالت منابع سرور با کاربران دیگه به اشتراک گذاشته نمیشن و کنترل بیشتری روی محیط سرور وجود داره.

۴. سرور VPS

سرور مجازی یا VPS با استفاده از مجازی‌سازی روی یک سرور فیزیکی ایجاد میشه. چند VPS می‌تونن روی یک سرور فیزیکی قرار داشته باشن، ولی هرکدوم به‌صورت مستقل کار می‌کنن.

۵. سرور Mail

میل‌سرور برای ارسال، دریافت و ذخیره‌ی ایمیل‌ها استفاده میشه. سازمان‌ها می‌تونن از اون برای مدیریت سرویس ایمیل خودشون استفاده کنن.

۶. دیتابیس سرور

سرور دیتابیس برای ذخیره، مدیریت و پردازش داده‌های پایگاه‌داده استفاده میشه. دیتابیس‌هایی مثل MySQL، PostgreSQL و SQL Server می‌تونن روی چنین سرورهایی اجرا بشن.

۷. اپلیکیشن سرور

سرور اپلیکیشن محیطی برای اجرای برنامه‌ها و سرویس‌های سمت سروره. این سرورها درخواست‌های کاربران رو دریافت و پردازش می‌کنن.

۸. فایل سرور

فایل‌سرور برای ذخیره، مدیریت و اشتراک‌گذاری فایل‌ها بین کاربران و دستگاه‌های یک شبکه استفاده میشه.

۹. سرور دی‌ان‌اس

‌سرور دی ان اس نام دامنه‌ها رو به آدرس IP تبدیل می‌کنه. مثلاً وقتی یک دامنه رو وارد مرورگر می‌کنین، DNS کمک می‌کنه مشخص بشه درخواست باید به کدوم IP ارسال بشه.

۱۰. سرور پراکسی

پروکسی‌سرور بین کاربر و مقصد قرار می‌گیره و درخواست‌ها رو دریافت و به مقصد ارسال می‌کنه. از پروکسی میشه برای کنترل دسترسی، کش کردن داده‌ها و بعضی کاربردهای امنیتی استفاده کرد.

۱۱. سرور FTP

سرور FTP برای انتقال فایل بین سیستم‌ها از طریق پروتکل FTP استفاده میشه و می‌تونه برای آپلود و دانلود فایل‌ها مورد استفاده قرار بگیره.

۱۲. سرور Monitoring

سرور مانیتورینگ برای بررسی وضعیت، سلامت و عملکرد سرورها، شبکه‌ها و سرویس‌های دیگه استفاده میشه و می‌تونه در صورت ایجاد مشکل هشدار بده.

۱۳. سرور Compute

سرور محاسباتی برای پردازش‌های سنگین استفاده میشه؛ مثلاً تحلیل داده‌های بزرگ، شبیه‌سازی‌های علمی و بعضی پردازش‌های یادگیری ماشین.

خلاصه

در نتیجه، اسم «سرور» به‌تنهایی نوع خاصی از سرور رو مشخص نمی‌کنه. یک سرور می‌تونه بر اساس کاری که انجام میده، مثل Web Server، Database Server یا Mail Server شناخته بشه و از طرف دیگه بر اساس نوع زیرساخت، مثل VPS، Dedicated یا Cloud Server دسته‌بندی بشه.


ابزارهای مرتبط با دِواپس

رسیدیم به پارت باحال ابزارها! توی این پارت، قراره با مفهوم CI/CD آشنا بشیم و ببیینم که چیه و چه کاربردی داره.

این CI چیه؟

خب CI مخفف Continuous Integration هست.

در واقع CI یعنی هر بار که Developer تغییراتش رو وارد پروژه می‌کنه، سیستم به‌صورت خودکار کد رو Build و Test می‌کنه تا مطمئن بشه تغییر جدید چیزی رو خراب نکرده.

Code -> Push -> Build -> Test -> Deploy

یعنی به صورت خیلی ساده میتونیم بگیم که CI یعنی تست اینکه آیا کد سالمه؟!

اونوقت CD چیه؟

خب CD مخفف Continuous Delivery / Deployment هست.

شاید توی ذهنتون الان این سوال به وجود اومده باشه که چرا CD دوتا معنی داره؟ الان جوابتون رو میگیرین!

معنی اول: Continuous Delivery

کد به‌صورت خودکار آماده انتشار می‌شه، اما انتشار نهایی ممکنه نیاز به تأیید دستی داشته باشه.

Code -> Test -> Build -> Approval -> Ready to Deploy -> Production

معنی دوم: Continuous Deployment

اگر همه‌چیز درست باشه، کد بدون تأیید دستی مستقیماً در Production منتشر می‌شه.

Code -> Test -> Build -> Deploy -> Production

ساده بخوام بگم Delivery میگه که آیا کد آماده انتشار هست و Deployment کد رو منتشر میکنه.

اینجا، اسم چندتا از ابزار هایی که توی دواپس‌از اونا استفاده میشه رو آوردم.

داکر، گیتهاب اکشنز، گیت‌لب، کوبرنتیز، Jenkins.


این URL چیه؟

خب خب خب! مطالب مرتبط با دواپس بلاخره تموم شدن و الان قراره به URL بپردازیم.

URL همون آدرسیه که باهاش به یک صفحه، عکس، فایل یا سرویس اینترنتی می‌رسیم.

برای مثال ادرس زیر رو نگاه کنین.

https://www.example.com/articles/url

۱. بخش اول https://

به این بخش که اول URL هم میاد میگن Protocol. در واقع اینجا مشخص میکنه که Browser با چه پروتکلی به وبسایت وصل بشه. پروتکل HTTPS نسخه امن‌تر HTTP هست و بین مرورگر و سایت رمزنگاری انجام میده.

۲. بخش دوم Domain

دامین همون www.example.com هست. توی بخش نتورک میگم که دامین چیه و کامل توضیح میدمش.

۳. بخش سوم /articles/url1

این قسمت Path یا مسیر هست و مشخص می‌کنه دقیقاً کدوم صفحه یا منبع رو می‌خوای.

به صورت کلی URL ها خیلی گسترده تر هستن و Fragment و هاست و Query و خیلی چیزای دیگه دارن که اینجا بهشون اشاره نمیکنم؛ اما توی چنل تلگرامم راجبشون مینویسم.


غول مرحله آخر نتورک!

بله بله. رسیدیم به بخش پایانی یعنی نتورک! اینجا هم مثل URL فقط یه بخشی از نتورک رو کاور میکنم چون که URL و نتورک و دواپس، مطالب وحشتناک زیادی دارن که اینجا نمیتونم به همشون اشاره کنم.

چرا؟ چون اول از همه من خودم بیشترشون رو نمیدونم و آشنایی خاصی باهاشون ندارم. دوم اینکه پست خیلی طولانی میشه و چشمای قشنگتون خسته میشه🙂

و سوم اینه که پست خیلی خیلی خیلی تکنیکال میشه(که من اینو نمیخوام و میخوام که همه چیز ساده و قابل فهم باشه.) و آره، بریم سراغ نتورک!

نتورک چیه؟

نتورک یا شبکه یعنی ارتباط بین دستگاه‌ها برای جابه‌جایی اطلاعات. وب‌سایت‌ها هم برای ارتباط بین مرورگر کاربر و سرور، از مفاهیم شبکه استفاده می‌کنن.


مفاهیم نتورک

خب اینجا به چندتا مفهوم محدود که به نتورک مرتبط هستن رو توضیح میدم؛ و گفتم که چرا محدود. چون که واقعا نتورک یه مفهوم گسترده هستش و نمیشه اون رو توی چند خط پست جمع کرد.

بزنین بریم!


آدرس IP

آدرس IP آدرس یک دستگاه یا سرور در شبکه‌ست. مثلاً سرور یک سایت یک IP داره تا دستگاه‌های دیگه بتونن پیداش کنن.

دامین

دامین همون آدرس قابل‌خواندن سایته، مثل google.com. به‌جای حفظ کردن IP، از یک اسم ساده استفاده می‌کنیم

بزارین یه مثال ساده بزنم. فرض کنین IP گوگل این هست 10.80.81.31.

شما به جای حفظ کردن این اعداد، میاین و از Google.com استفاده میکنین. خب طبیعتا دومی راحت تره دیگه! پس دامین برای راحتی کار ما استفاده میشه.

دی‌ان‌اس

دی‌ان‌اس دامنه رو به IP تبدیل می‌کنه.

example.com → 93.184.216.34

در واقع به مرورگر، سرور وبسایت تارگت رو نشون میده.

پورت

پورت مشخص می‌کنه درخواست باید به کدوم سرویس روی یک سرور برسه. مثلاً 443 معمولاً برای HTTPS استفاده می‌شه.

پروتکل HTTP / HTTPS

در واقع HTTP پروتکل ارتباط بین مرورگر و سروره. HTTPS نسخه امن‌ترشه که ارتباط رو با TLS رمزنگاری می‌کنه.

⚠️ پنیک نکن بابا TLS رو پایینتر توضیح دادم.

ریکوست(درخواست) و پاسخ(respond)

مرورگر یک Request به سرور می‌فرسته و سرور یک Response برمی‌گردونه.

برای مثال شما وقتی توی سرچ بار مرورگرتون تایپ میکنین google.com با کلاینت خودتون به سرور گوگل یک ریکوست دادین و اگر همه چیز در حالت نرمال و درست باشه یک جواب از سرور برمیگرده(همون respond.)

سرور

سرور سیستمیه که سایت یا سرویس روی اون اجرا می‌شه و درخواست کاربران رو پردازش می‌کنه.

توی بخش دواپس راجب سرور، کاربرد و انواع اون کامل توضیح دادم!

مفهوم TLS

خب TLS ارتباط بین مرورگر و سرور رو رمزنگاری می‌کنه تا اطلاعات در مسیر به‌سادگی قابل خواندن یا تغییر نباشه.

مفهوم CDN

در واقع CDN نسخه‌هایی از فایل‌های سایت رو در سرورهای مختلف قرار می‌ده تا کاربران بتونن محتوا رو از یک سرور نزدیک‌تر دریافت کنن.

پراکسی / ریورس پراکسی

اول Proxy واسطه بین کاربر و مقصد می‌شه. Reverse Proxy جلوی سرور قرار می‌گیره و درخواست‌های کاربران رو به سرویس مناسب هدایت می‌کنه.

فایروال

فایروال ترافیک شبکه رو طبق قوانین بررسی می‌کنه و می‌تونه ارتباطات غیرمجاز یا ناخواسته رو مسدود کنه.

پایان بخش نتورک

خب خب خب، بخش آخر یعنی نتورک هم به پایان رسید!


حرفای آخر

درنهایت از تویی که وقت گذاشتی و این نوشته رو خوندی خیلییی خیلی ممنونم.💙💫

و یک تشکر ویژه به جناب یزدان، استاد عزیزم که توی نوشتن و آموزش و دپلوی کردن وبسایت، بهم کمک کردن بدهکارم. امیدوارم در آینده ای نه چندان دور بتونم حداقل ذره ای از این محبت هارو جبران کنم!

مرسی که این نوشته رو خوندین،

لاو بر شما💋


رفرنس ها

داکیومنت MDN

جی‌پی‌تی

گراک