Ninja Learn | نینجا لرن
1.26K subscribers
96 photos
36 videos
11 files
307 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

📄 Send me post: https://t.me/NoronChat_bot?start=sec-fdggghgebe

👥 ɢʀᴏᴜᴘ: https://t.me/+td1EcO_YfSphNTlk
Download Telegram
🚀 معرفی Kubernetes 🚀

امروز می‌خوایم درباره Kubernetes صحبت کنیم که یکی از ابزارهای دنیای کانتینرهاست.

حالا Kubernetes چیه؟ 🤔
خب Kubernetes که به اختصار به K8s هم معروفه، یه پلتفرم متن‌باز برای مدیریت کانتینرهاست. این یعنی اگه اپلیکیشن‌هات رو داخل کانتینرها راه‌اندازی کردی، Kubernetes میاد و بهت کمک می‌کنه که این کانتینرها رو به بهترین شکل مدیریت کنی.

چطور کار می‌کنه؟ 💡
خب Kubernetes به شما اجازه میده تا:

1⃣ مقیاس‌پذیری:
تعداد کانتینرها رو براساس نیاز افزایش یا کاهش بدی. مثلاً اگه بار ترافیکی زیاد بشه، K8s می‌تونه به طور خودکار کانتینرهای جدید بسازه. 💪

2⃣ توزیع بار:
به طور هوشمند بار رو بین کانتینرها تقسیم می‌کنه تا هیچ کانتینری تحت فشار قرار نگیره و همه چیز به خوبی کار کنه.

3⃣ مدیریت آسان:
اگه یکی از کانتینرها کرش کنه، K8s خودش اون رو دوباره راه‌اندازی می‌کنه. یعنی نگرانی از بابت قطعی‌ها نداری 🔧

4⃣؛ Rolling Updates:
می‌تونی اپلیکیشن‌هات رو به راحتی آپدیت کنی بدون اینکه داون‌تایم داشته باشی. این یعنی کاربرانت هیچ اختلالی احساس نمی‌کنن.

چرا باید از Kubernetes استفاده کنی؟ 🌟

1⃣ سازگاری:
با هر محیطی مثل AWS، Google Cloud و حتی دیتاسنتر خودت کار می‌کنه.

2⃣ قابلیت گسترش:
با توجه به نیازت می‌تونی از K8s در پروژه‌های کوچک تا بزرگ‌ترین پروژه‌ها استفاده کنی.

3⃣ جامعه بزرگ:
به خاطر متن‌باز بودنش، جامعه کاربری و منابع آموزشی زیادی داره.

جمع‌بندی 🎯
فهمیدیم Kubernetes یکی از بهترین ابزارها برای مدیریت کانتینرهاست. اگه به دنبال بهینه‌سازی اپلیکیشن‌هات و مدیریت بهتر منابع هستی، K8s بهترین انتخابه.

امیدوارم مفید بوده باشه :)

#devops #kubernetes #contanier


@ninja_learn_ir
🔥32👍1👌1
آیا لازمه به‌عنوان یه بک‌اند دولوپر، DevOps بلد باشیم؟ 🤔

این سوال خیلی از بچه‌هایی که تو زمینه بک‌اند کار می‌کنن هست که "آیا لازمه DevOps هم یاد بگیریم یا نه؟".
خب جواب ساده‌اش اینه:
بله، ولی بستگی داره چقدر! بیایید یه نگاه دقیق‌تر بندازیم.

چرا DevOps؟

خب DevOps یه فرایند برای اینه که فاصله بین توسعه‌دهنده‌ها (مثل ما که کد می‌زنیم) و تیم‌های عملیات (کسایی که کد رو روی سرورها اجرا می‌کنن) کمتر بشه.
اگه شما به‌عنوان یه بک‌اند دولوپر، کمی از DevOps سر دربیاری، این به معنیه که می‌تونی توی مراحل دیپلویمنت و مدیریت پروژه نقش فعال‌تری داشته باشی و کدت رو با خیال راحت‌تری بیاری بالا. این یعنی کمتر وابسته به تیم‌های دیگه‌ای و سریع‌تر مشکلات رو هندل می‌کنی.


چقدر باید بلد باشیم؟ 📚

حالا سوال مهم اینه: چقدر باید DevOps بلد باشیم؟
نمی‌خواد یه متخصص کامل DevOps باشی، ولی دونستن چند تا موضوع پایه‌ای کمک زیادی بهت می‌کنه:

1⃣ کار با Git و CI/CD: دونستن نحوه کار با ابزارهای CI/CD (مثل Jenkins یا GitLab CI) خیلی ضروریه. چون کدایی که می‌نویسی باید خودکار تست و دیپلوی بشن.

مثال: فرض کن شما کدت رو نوشتی و از طریق یه لوله CI/CD خودکار تست می‌شه و اگر همه چی اوکی باشه، روی سرور دیپلوی می‌شه. با این کار خیالت راحت‌تره که چیزی خراب نشده.

2⃣ آشنایی با Docker: دیگه این روزا کار کردن بدون Docker سخته. بهتره بدونی چطور اپت رو داخل کانتینرهای Docker ببری و اجرا کنی.

مثال: اگه بخوای برنامه‌ات رو سریع روی چندتا سیستم مختلف بدون مشکل اجرا کنی، Docker می‌تونه مثل یه قهرمان کمکت کنه.

3⃣ کار با سرورها: حداقل باید با محیط‌های Linux و مدیریت سرورهای ساده آشنا باشی. مثلاً بدونی چطور سرویس‌ها رو استارت کنی، لاگ‌ها رو بخونی و یه سری دستورات پایه‌ای رو بزنی.

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

4⃣ مدیریت کانفیگ‌ها: ابزارهایی مثل Ansible یا Terraform برای مدیریت و اتوماسیون کانفیگ سرورها کمک بزرگی هستن. ولی اگه تو محیط‌های کوچیک کار می‌کنی، حتی آشنایی با دستورای ساده Bash هم کافیه.


جمع بندی 🎯

در نهایت، اگه بک‌اند دولوپری هستی، دونستن مباحث DevOps بهت کمک می‌کنه مستقل‌تر و قوی‌تر عمل کنی. لازم نیست همه‌چیز رو فول باشی، اما آشنایی با اصول و ابزارهای پایه‌ای مثل Docker، Git، CI/CD و مدیریت سرورهای لینوکسی کارتو راحت‌تر می‌کنه.

هر چی بیشتر بلد باشی، هم برای خودت بهتره، هم توی تیم می‌درخشی. 😎

امید وارم مفید بوده باشه :)

#backend #devops


@ninja_learn_ir
1👍245
تا حالا کلی مطالب خفن و کاربردی تو کانال NinjaLearn براتون آماده کردیم و الان صدها مطلب مختلف و جذاب داریم.

از اونجایی که مطالب کانال خیلی متنوع و زیاد شده، تصمیم گرفتیم یه دسته‌بندی مرتب و منظم برای همه‌ی پست‌ها داشته باشیم تا شما عزیزان راحت‌تر بتونید محتوای مورد نظرتون رو پیدا کنید

این شما و این لیست دسته‌بندی‌های کانال🔻:

🦫 #go: آموزش‌ها و نکات کاربردی زبان گو

💻 #programming: مطالب برنامه نویسی

🐍 #python: ترفندها و نکات پایتونی

🦄 #django: مطالب فریم‌ورک جنگو

⚡️ #fastapi: مطالب فریم ورک فست

🌐 #web: مطالب مرتبط به وب

📡 #network: مطالب مرتبط به شبکه

🗂️ #db: معرفی و نکات دیتابیس

🔖 #reference: معرفی مقاله و ویدیو

📢 #notif: اطلاع رسانی ها

#question: سوالات جالب در برنامه نویسی

🎊 #event: رویداد هایی که معرفی کردیم

🎬 #movie: معرفی فیلم و سریال

📚 #book: معرفی کتاب‌های تخصصی

🤖 #AI: مطالب مرتبط به هوش مصنوعی

📊 #ml: مطالب مرتبط به یادگیری ماشین

🛠️ #backend: آموزش‌ها و ترفندهای بک‌اند

🔒 #security: نکات امنیتی

#devops: مطالب مرتبط به دواپس

📺 #YouTube: ویدیوهای چنل یوتیوب ما


هر کدوم از این هشتگ‌ها برای یه موضوع خاص طراحی شده تا شما به راحتی بتونید محتوای مورد نظرتون رو پیدا کنید. دیگه لازم نیست کلی تو کانال بگردید 😊

اگه موضوع جدیدی به مطالب کانال اضافه بشه، حتماً تو این لیست قرار می‌گیره


راستی میتونید بنر کانال رو برای دوستاتون هم بفرستید تا اونا هم به جمع ما بپیوندن و از این مطالب مفید استفاده کنن 😉

NinjaLearn Banner 🥷🤝


#category



🔆 CHANNEL | GROUP
22👍1👎1🔥1
خب خب خب، تفاوت Entrypoint و CMD توی داکر🐳
اگه با Dockerfile یا docker compose کار کرده باشین، احتمالا دوتا دستور CMD و Entrypoint برخورد کردین ولی تاحالا به تفاوتشون فکر کردین؟ اینکه هرکدوم چه کاری انجام میدن و کجا کاربرد دارن؟

CMD
برای مشخص کردن دستور پیشفرضی استفاده میشه که اگه هنگام اجرای کانتینر هیچ آرگومانی ندیم اجرا بشه. CMD باعث میشه که با خیلی راحت بتونین فقط با docker run image_name کاری که میخواین رو انجام بدین(فقط وقتی که Entrypoint وجود نداشته باشه). ولی اگه توی docker run آرگومان بدین اون آرگومان های جدید جای CMD توی Dockerfile رو میگیرن.
CMD ["python3", "app.py"]

توی این حالت، دستور نهایی ای که با docker run اجرا میشه این شکلیه:
python3 app.py

ولی اگه بنویسین docker run image_name echo hello دستور نهایی این شکلی میشه:
echo hello


Entrypoint
برای تعیین دستور اصلی کانتیر استفاده میشه. یه جورایی میشه گفت دستور غیرقابل تغییر کانتینر رو میشه باهاش تعیین کرد. حتی اگه موقع اجرای کانتینر بیایم از آرگومان ها استفاده کنیم اون آرگومان ها به عنوان ورودی به Entrypoint پاس داده میشن. در نتیجه Entrypoint رفتار اصلی کانتینر رو تعیین میکنه.
ENTRYPOINT ["python3", "app.py"]

حالا میتونین با docker run اجراش کنید و البته که میتونین با پاس دادن آرگومان به docker run اونهارو به Entrypoint اضافه کنید.
دستور docker run image_name --option باعث میشه که دستور نهایی ای که برای اجرا کانتینر استفاده بشه این شکلی بشه:
python3 app.py --option

شما حتی میتونید همزمان ازشون استفاده کنید و با CMD آرگومان های مختلفی به دستور اصلیتون بفرستین. اینجوری دستتون برای اجرای کانتینر خیلی باز میشه.
ENTRYPOINT ["python3", "app.py"]
CMD ["--option"]

و حالا اگه بخواین آرگومان های دستور رو تغییر بدین فقط کافیه اونهارو توی docker run به کانتینر پاس بدین.

جمع بندی✍️
از CMD برای تنظیم پیش فرض ها و حالت های مختلف استفاده کنید.
از Entrypoint برای تعیین رفتار اصلی و ثابت کانتینر استفاده کنید.
و البته که میتونین با ترکیبشون و استفاده ی درست از هردوتاشون کارای خفنی انجام بدین.

#️⃣ #programming #devops


🥷🏻 CHANNEL | GROUP
🔥13👍41
خب خب خب، Volume توی داکر🐳
‏Volume ها توی داکر یه راه استاندارد برای ذخیره ی داده ها به شکل پایدار(persistent data) هستن. یعنی وقتی که یه کانتینر خاموش یا پاک میشه، داده هایی که داخل Volume ذخیره شده باشن از بین نمیرن و دوباره قابل استفاده هستن. که این یعنی Volume ها جدا از لایه ی فایل سیستم کانتینر عمل میکنن و توی /var/lib/docker/volumes/ نگهداری میشن. کاربردشون معمولا برای دیتابیس ها، فایل های کاربر، یا هر داده ای که نباید با حذف کانتینر از دست بره هست.

چطور ازشون استفاده کنیم؟🤔
میتونید با استفاده از دستور زیر Volumeها رو مدیریت کنید.
docker volume ls            
# List all existing volumes
docker volume create NAME
# Create a new volume
docker volume inspect NAME
# View detailed information about a volume
docker volume rm NAME
# Remove a specific volume
docker volume prune
# Remove all unused volumes

نکته⚠️: اگه یه Volume هنوز به یه کانتینر متصل باشه، نمیشه مستقیم با rm حذفش کرد.

بعد از ساختن Volume های مورد نظرتون میتونید به این شکل وصلشون کنید به کانتینر هاتون:
docker run -v my_volume:/app/data my_image

یا توی فایل compose:
services:
app:
image: my_image
container_name: my_container
volumes:
- my_volume:/app/data

volumes:
my_volume:

خب همونطور که دیدین، اسم Volume رو سمت چپ دو نقطه و مسیری که میخوایم توی کانتینر بهش وصل بشیم رو سمت راست میذاریم.
با اینکار هر تغییری که توی مسیر /app/data/ توی فایل سیستم کانتینر رخ بده توی Volume هم ذخیره میشه و حتی با خاموش شدن کانتینر هم در دسترس و قابل استفاده هست.

یه نکته ی مهم⚠️
احتمالا توی بعضی جاها دیده باشین که از سینتکس زیر استفاده میشه:
services:
app:
image: my_image
container_name: my_container
volumes:
- .:/app/data

توی این روش سمت راست دونقطه به جای اسم Volume، مسیر فعلی توی سیستم قرار داده شده. توی این روش اصلا از Volume استفاده نمیشه و اسمش Bind Mount هست. درواقع اگه سمت راست دو نقطه به جای اسم Volume یه مسیر توی فایل سیستمتون رو بنویسید، Bind Mount اتفاق میوفته.
اینجا به جای اینکه یه Volume رو به فایل سیستم کانتینر وصل کرده باشیم، پوشه فعلی از فایل سیستم اصلی خودمون رو به فایل سیستم کانتینر وصل کردیم. این کار باعث بروز یه سری مشکلات میشه:

1️⃣ اگه اطلاعات توی کانتینر از دست برن توی فایل سیستم اصلی هم از دست میرن
یعنی اگه شما پروژه رو توی کانتینر حذف کنید، از روی سیستم خودتون هم حذف میشه. درواقع هر تغییری که توی کانتینر ایجاد کنید توی فایل سیستم اصلیتون هم ایجاد میشه.
2️⃣ عدم تطابق نسخه ی فایل ها
وقتی چند تا کانتینر همزمان یه مسیر رو Bind کردن، ممکنه فایل ها تصادفی توسط یکی از کانتینر ها تغییر کنه و هماهنگی بین فایل های پروژه به هم بریزه و باعث خرابی بشه.
3️⃣ ریسک های امنیتی
اگه داخل کانتینر دسترسی root باشه و به پوشه های حساسی Bind Mount شده باشه، کانتینر میتونه مستقیما به فایل های سیستمی آسیب بزنه.
4️⃣ انتقال ناخواسته ی فایل های حساس
اگه اشتباهی کل home/ یا / رو mount کنید داخل کانتینر، ممکنه فایل های حساس(مثل SSH Keyها، توکن ها، رمزها و...) هم توی محیط کانتینر قابل دسترس باشه.

جمع بندی✍️
‏Volume ها بشدت کاربردی هستن و میتونن برنامه نویس و کد رو نجات بدن. فقط باید دقت کنید که مسیر درستی رو به Volume بدین.
همچنین Bind Mount هم میتونه توی فاز توسعه کاربردی باشه. چون خیلی راحت میشه تغییرات توی کد رو روی کانتینر مشاهده و بررسی کرد ولی برای محیط پروداکشن خیلی خطرناک هستن و میتونن کلا محصول شمارو خراب کنن.

#️⃣ #programming #devops


🥷🏻 CHANNEL | GROUP
👍13