Forwarded from اتاق برنامه نویسی </> (PapiDon)
🚀 مقدمه به دنیای RabbitMQ
در دنیای پرسرعت تکنولوژی امروز، ارتباط و تبادل اطلاعات بین سیستمها و برنامهها از اهمیت ویژهای برخوردار است. RabbitMQ یکی از ابزارهای کلیدی در این زمینه است که به عنوان یک سیستم پیامرسانی میانافزاری (Middleware) عمل میکند. این سیستم قادر است پیامها را بین بخشهای مختلف یک برنامه، یا حتی بین برنامههای مختلف، در یک معماری مبتنی بر خدمات (Service-Oriented Architecture) یا معماری میکروسرویسها (Microservices) انتقال دهد.
🐇 RabbitMQ ?
یک بروکر پیامرسانی متن باز است که بر اساس پروتکل AMQP (Advanced Message Queuing Protocol) پیادهسازی شده است. این سیستم به توسعهدهندگان امکان میدهد تا به راحتی و با انعطافپذیری بالا، پیامها را بین اجزای مختلف یک برنامه یا سیستم منتقل کنند. RabbitMQ یک راه حل قدرتمند برای مسائل مربوط به هماهنگسازی و غیرهمزمانسازی در برنامهها است.
🛠 کاربردهای RabbitMQ
🔸انتقال پیامها در معماریهای مبتنی بر خدمات یا میکروسرویسها: RabbitMQ به عنوان یک سیستم میانافزاری، پیامها را بین سرویسهای مختلف در یک معماری پیچیده انتقال میدهد.
🔸توزیع کارها بین (Workers): در سیستمهایی که نیاز به پردازش موازی و توزیع شده دارند، RabbitMQ میتواند برای توزیع کارها بین نودهای پردازشی استفاده شود.
🔸تضمین دلیوری پیامها: RabbitMQ از تاییدات پیام و دوام پیامها پشتیبانی میکند تا از از دست نرفتن پیامها در صورت بروز خطا اطمینان حاصل شود.
🔸انعطافپذیری و مقیاسپذیری: RabbitMQ امکان افزایش ظرفیت و توسعهپذیری را با استفاده از کلاسترها و تعادلبارها (Load Balancers) فراهم میکند.
✅ مزایای RabbitMQ
- قابلیت اطمینان: ارائه مکانیزمهایی برای تضمین دلیوری پیام، شامل تایید پیام و ذخیرهسازی دائمی.
- انعطافپذیری: پشتیبانی از چندین الگوی پیامرسانی، از جمله publish/subscribe، request/reply و routing patterns.
- مقیاسپذیری و عملکرد: قابلیت مقیاسپذیری به صورت افقی و عمودی برای پشتیبانی از بار کاری سنگین.
- پشتیبانی از چندین زبان برنامهنویسی: کلاینتها و کتابخانههایی برای زبانهای برنامهنویسی مختلف مانند Python، Java، .NET، PHP و دیگران.
❌ معایب RabbitMQ
- پیچیدگی در پیکربندی و مدیریت: نیاز به دانش فنی برای پیکربندی صحیح و بهینهسازی عملکرد.
- مدیریت حافظه و منابع: در بار کاریهای بسیار بالا، مدیریت منابع و حافظه میتواند چالشبرانگیز باشد.
- وابستگی به زیرساخت: نیاز به زیرساخت قابل اعتماد و پایدار برای اجرای RabbitMQ.
⚙️ کجا از RabbitMQ استفاده میشود؟
در سیستمهایی با نیاز به انتقال پیام قابل اعتماد و انعطافپذیر، از استارتآپها تا شرکتهای بزرگ، مورد استفاده قرار میگیرد. از جمله کاربردها میتوان به سیستمهای تجارت الکترونیک، شبکههای اجتماعی، سیستمهای مالی و بانکی، و سیستمهای پردازش دادههای بزرگ اشاره کرد.
🔍 نتیجهگیری
به عنوان یک ابزار انعطافپذیر و قدرتمند در انتقال پیام بین بخشهای مختلف یک برنامه یا سیستم، با قابلیتهایی مانند تضمین دلیوری، مقیاسپذیری، و پشتیبانی از چندین الگوی پیامرسانی، امکانات گستردهای را برای توسعهدهندگان فراهم میکند. با وجود برخی چالشها در مدیریت و پیکربندی، RabbitMQ همچنان یکی از محبوبترین انتخابها در میان سیستمهای پیامرسانی است.
📁 #RabbitMQ #MessageBroker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
در دنیای پرسرعت تکنولوژی امروز، ارتباط و تبادل اطلاعات بین سیستمها و برنامهها از اهمیت ویژهای برخوردار است. RabbitMQ یکی از ابزارهای کلیدی در این زمینه است که به عنوان یک سیستم پیامرسانی میانافزاری (Middleware) عمل میکند. این سیستم قادر است پیامها را بین بخشهای مختلف یک برنامه، یا حتی بین برنامههای مختلف، در یک معماری مبتنی بر خدمات (Service-Oriented Architecture) یا معماری میکروسرویسها (Microservices) انتقال دهد.
🐇 RabbitMQ ?
یک بروکر پیامرسانی متن باز است که بر اساس پروتکل AMQP (Advanced Message Queuing Protocol) پیادهسازی شده است. این سیستم به توسعهدهندگان امکان میدهد تا به راحتی و با انعطافپذیری بالا، پیامها را بین اجزای مختلف یک برنامه یا سیستم منتقل کنند. RabbitMQ یک راه حل قدرتمند برای مسائل مربوط به هماهنگسازی و غیرهمزمانسازی در برنامهها است.
🛠 کاربردهای RabbitMQ
🔸انتقال پیامها در معماریهای مبتنی بر خدمات یا میکروسرویسها: RabbitMQ به عنوان یک سیستم میانافزاری، پیامها را بین سرویسهای مختلف در یک معماری پیچیده انتقال میدهد.
🔸توزیع کارها بین (Workers): در سیستمهایی که نیاز به پردازش موازی و توزیع شده دارند، RabbitMQ میتواند برای توزیع کارها بین نودهای پردازشی استفاده شود.
🔸تضمین دلیوری پیامها: RabbitMQ از تاییدات پیام و دوام پیامها پشتیبانی میکند تا از از دست نرفتن پیامها در صورت بروز خطا اطمینان حاصل شود.
🔸انعطافپذیری و مقیاسپذیری: RabbitMQ امکان افزایش ظرفیت و توسعهپذیری را با استفاده از کلاسترها و تعادلبارها (Load Balancers) فراهم میکند.
✅ مزایای RabbitMQ
- قابلیت اطمینان: ارائه مکانیزمهایی برای تضمین دلیوری پیام، شامل تایید پیام و ذخیرهسازی دائمی.
- انعطافپذیری: پشتیبانی از چندین الگوی پیامرسانی، از جمله publish/subscribe، request/reply و routing patterns.
- مقیاسپذیری و عملکرد: قابلیت مقیاسپذیری به صورت افقی و عمودی برای پشتیبانی از بار کاری سنگین.
- پشتیبانی از چندین زبان برنامهنویسی: کلاینتها و کتابخانههایی برای زبانهای برنامهنویسی مختلف مانند Python، Java، .NET، PHP و دیگران.
❌ معایب RabbitMQ
- پیچیدگی در پیکربندی و مدیریت: نیاز به دانش فنی برای پیکربندی صحیح و بهینهسازی عملکرد.
- مدیریت حافظه و منابع: در بار کاریهای بسیار بالا، مدیریت منابع و حافظه میتواند چالشبرانگیز باشد.
- وابستگی به زیرساخت: نیاز به زیرساخت قابل اعتماد و پایدار برای اجرای RabbitMQ.
⚙️ کجا از RabbitMQ استفاده میشود؟
در سیستمهایی با نیاز به انتقال پیام قابل اعتماد و انعطافپذیر، از استارتآپها تا شرکتهای بزرگ، مورد استفاده قرار میگیرد. از جمله کاربردها میتوان به سیستمهای تجارت الکترونیک، شبکههای اجتماعی، سیستمهای مالی و بانکی، و سیستمهای پردازش دادههای بزرگ اشاره کرد.
🔍 نتیجهگیری
به عنوان یک ابزار انعطافپذیر و قدرتمند در انتقال پیام بین بخشهای مختلف یک برنامه یا سیستم، با قابلیتهایی مانند تضمین دلیوری، مقیاسپذیری، و پشتیبانی از چندین الگوی پیامرسانی، امکانات گستردهای را برای توسعهدهندگان فراهم میکند. با وجود برخی چالشها در مدیریت و پیکربندی، RabbitMQ همچنان یکی از محبوبترین انتخابها در میان سیستمهای پیامرسانی است.
📁 #RabbitMQ #MessageBroker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
❤3👍1
PHP & MYSQL pinned «🚀 مقدمه به دنیای RabbitMQ در دنیای پرسرعت تکنولوژی امروز، ارتباط و تبادل اطلاعات بین سیستمها و برنامهها از اهمیت ویژهای برخوردار است. RabbitMQ یکی از ابزارهای کلیدی در این زمینه است که به عنوان یک سیستم پیامرسانی میانافزاری (Middleware) عمل میکند. این…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
✨ آشنایی با Heredoc در PHP
آیا تا به حال با مشکل تعریف رشتههای چند خطی در PHP مواجه شدهاید؟ 🤔 ممکن است در کار با متنهای طولانی یا فرمتهایی مانند JSON و HTML به دنبال راه حلی راحتتر از استفاده مکرر از نقل قولها و کاراکترهای اسکیپ باشید. اینجاست که Heredoc به کمک شما میآید!
📖 Heredoc ?
یک سینتکس در PHP است که امکان تعریف راحت و خوانای رشتههای چند خطی را فراهم میکند. این روش به شما اجازه میدهد متنهای بزرگ را بدون نگرانی در مورد اسکیپ کردن کاراکترهای خاص قرار دهید.
🧐 چگونه کار میکند؟
برای استفاده از Heredoc، کافی است عبارت
📌 مثال
🛠 نکات کاربردی:
- شناسهها میتوانند هر نامی باشند، اما باید معتبر و منحصر به فرد در متن شما باشند.
- اطمینان حاصل کنید که پس از شناسه پایانی و قبل از
- در واقع Heredoc برای قرار دادن HTML، SQL، JSON و هر نوع دادهی چند خطی دیگری در کد PHP ایدهآل است.
🔥 جمعبندی:
ابزاری قدرتمند در PHP است که به شما کمک میکند با راحتی بیشتری با رشتههای چند خطی کار کنید. با استفاده از این سینتکس، میتوانید کدهای خود را خواناتر و مدیریتپذیرتر نگه دارید.
📁 #PHP #Heredoc
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
آیا تا به حال با مشکل تعریف رشتههای چند خطی در PHP مواجه شدهاید؟ 🤔 ممکن است در کار با متنهای طولانی یا فرمتهایی مانند JSON و HTML به دنبال راه حلی راحتتر از استفاده مکرر از نقل قولها و کاراکترهای اسکیپ باشید. اینجاست که Heredoc به کمک شما میآید!
📖 Heredoc ?
یک سینتکس در PHP است که امکان تعریف راحت و خوانای رشتههای چند خطی را فراهم میکند. این روش به شما اجازه میدهد متنهای بزرگ را بدون نگرانی در مورد اسکیپ کردن کاراکترهای خاص قرار دهید.
🧐 چگونه کار میکند؟
برای استفاده از Heredoc، کافی است عبارت
<<< را دنبال شده با یک شناسه دلخواه (مثلا EOT) تایپ کنید. سپس، رشتهی مورد نظر خود را در خطوط بعدی قرار دهید و با همان شناسه در یک خط جدید به پایان ببرید. مهم است که شناسه پایانی باید در خط جدید و تنها محتوای آن خط باشد، بدون هیچ فضای خالی پیش یا پس از آن.📌 مثال
<<<EOT
Please inspect the following text and determine if it is spam.
EOT;
🛠 نکات کاربردی:
- شناسهها میتوانند هر نامی باشند، اما باید معتبر و منحصر به فرد در متن شما باشند.
- اطمینان حاصل کنید که پس از شناسه پایانی و قبل از
; هیچ کاراکتر اضافی وجود ندارد.- در واقع Heredoc برای قرار دادن HTML، SQL، JSON و هر نوع دادهی چند خطی دیگری در کد PHP ایدهآل است.
🔥 جمعبندی:
ابزاری قدرتمند در PHP است که به شما کمک میکند با راحتی بیشتری با رشتههای چند خطی کار کنید. با استفاده از این سینتکس، میتوانید کدهای خود را خواناتر و مدیریتپذیرتر نگه دارید.
📁 #PHP #Heredoc
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
❤3👍1
PHP & MYSQL pinned «✨ آشنایی با Heredoc در PHP آیا تا به حال با مشکل تعریف رشتههای چند خطی در PHP مواجه شدهاید؟ 🤔 ممکن است در کار با متنهای طولانی یا فرمتهایی مانند JSON و HTML به دنبال راه حلی راحتتر از استفاده مکرر از نقل قولها و کاراکترهای اسکیپ باشید. اینجاست که Heredoc…»
Forwarded from کانال آموزشی لاراول (PapiDon)
🎉 Laravel 11 😍
بالاخره انتظارها به پایان رسید و نسخه ۱۱ فریمورک محبوب لاراول منتشر شد! این نسخه جدید با قابلیتهای نوآورانه و بهبودهای چشمگیری همراه است که تجربه توسعهدهندگان را به سطح جدیدی ارتقا میبخشد.
🔍 از مهمترین قابلیتهای این نسخه میتوان به موارد زیر اشاره کرد:
1️⃣ ساختار دایرکتوری بهینهشده: کدنویسی ماژولار و استفاده مجدد از کد را آسانتر میکند، که نتیجهاش افزایش کارایی در فرآیند توسعه است.
2️⃣ مدیریت تنظیمات: با رویکردی جدید که تمامی تنظیمات از یک منبع بالادستی به ارث میبرند، تنظیمات را میتوان به صورت سادهتر و متمرکزتری مدیریت کرد.
3️⃣ قابلیت
4️⃣ بهروزرسانیهای مربوط به مدیریت مسیریابی: تعداد فایلهای مسیر پیشفرض از چهار به دو فایل کاهش یافته و برای افزودن مسیرهای API به صورت انتخابی عمل میکنید، که منجر به ساختار برنامهای تمیزتر و سفارشیتر میشود.
📚 سعی خواهیم کرد موضوعات مهم را در کانال به اشتراک بگذاریم و حتماً درباره آنها مطلب منتشر کنیم. با ما حتما همراه باشید. 🫶😊
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding
بالاخره انتظارها به پایان رسید و نسخه ۱۱ فریمورک محبوب لاراول منتشر شد! این نسخه جدید با قابلیتهای نوآورانه و بهبودهای چشمگیری همراه است که تجربه توسعهدهندگان را به سطح جدیدی ارتقا میبخشد.
🔍 از مهمترین قابلیتهای این نسخه میتوان به موارد زیر اشاره کرد:
1️⃣ ساختار دایرکتوری بهینهشده: کدنویسی ماژولار و استفاده مجدد از کد را آسانتر میکند، که نتیجهاش افزایش کارایی در فرآیند توسعه است.
2️⃣ مدیریت تنظیمات: با رویکردی جدید که تمامی تنظیمات از یک منبع بالادستی به ارث میبرند، تنظیمات را میتوان به صورت سادهتر و متمرکزتری مدیریت کرد.
3️⃣ قابلیت
Dumpable: تجربهی دیباگ کردن را با امکان استفاده از متدهای ()dd و ()dump درون کلاسها، بهبود میبخشد و دیباگ کردن را در سرتاسر فریمورک یکپارچه و مداوم میسازد.4️⃣ بهروزرسانیهای مربوط به مدیریت مسیریابی: تعداد فایلهای مسیر پیشفرض از چهار به دو فایل کاهش یافته و برای افزودن مسیرهای API به صورت انتخابی عمل میکنید، که منجر به ساختار برنامهای تمیزتر و سفارشیتر میشود.
📚 سعی خواهیم کرد موضوعات مهم را در کانال به اشتراک بگذاریم و حتماً درباره آنها مطلب منتشر کنیم. با ما حتما همراه باشید. 🫶😊
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding
❤2🔥1
PHP & MYSQL pinned «🎉 Laravel 11 😍 بالاخره انتظارها به پایان رسید و نسخه ۱۱ فریمورک محبوب لاراول منتشر شد! این نسخه جدید با قابلیتهای نوآورانه و بهبودهای چشمگیری همراه است که تجربه توسعهدهندگان را به سطح جدیدی ارتقا میبخشد. 🔍 از مهمترین قابلیتهای این نسخه میتوان به موارد…»
Forwarded from کانال آموزشی لاراول (PapiDon)
🔧 راهنمای رفع مشکل اتصال به دیتابیس در لاراول 11
🔸با آغاز به کار نسخه جدید لاراول 11 و تنظیم پیشفرض DB_CONNECTION=sqlite، برخی از توسعهدهندگان که تمایل دارند از mysql به عنوان دیتابیس پروژه خود استفاده کنند، ممکن است با خطاهای اتصال دیتابیس روبرو شوند. یکی از رایجترین این خطاها مربوط به تنظیمات collation است.
برای مثال، خطای SQLSTATE[HY000]: General error: 1273 Unknown collation: 'utf8mb4_0900_ai_ci' نشان میدهد که تنظیمات collation با نسخه فعلی سرور MySQL یا MariaDB شما سازگار نیست.
⛔️ علت خطا و راهحلها:
خطای Unknown collation: 'utf8mb4_0900_ai_ci به این دلیل رخ میدهد که سرور دیتابیس MySQL یا MariaDB شما از تنظیمات collation utf8mb4_0900_ai_ci پشتیبانی نمیکند. این collation برای نسخههای جدید MySQL معرفی شده است و به بهبود عملکرد و دقت مقایسه دادهها کمک میکند، اما در نسخههای قدیمیتر MySQL یا برخی نسخههای MariaDB پشتیبانی نمیشود.
🛠 راهحلها:
1️⃣ ارتقاء سرور MySQL/MariaDB:
اگر امکانپذیر است، سرور دیتابیس را به نسخهای ارتقاء دهید که از این
2️⃣ تغییر Collation در پروژه لاراول:
- به فایل
- در بخش اتصالات دیتابیس (
📝 فایل
⚙️ اجرای مایگریشنها
با استفاده از دستور php artisan migrate ، اطمینان حاصل کنید که جدولهای مورد نیاز در دیتابیس ایجاد شدهاند. این کار همچنین به حل مشکلات مربوط به عدم وجود جدولها کمک میکند.
⚜️برای اطمینان از اعمال تغییرات، دستورات php artisan config:cache و php artisan cache:clear را اجرا کنید تا تنظیمات کش شده پاک شود.
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding
🔸با آغاز به کار نسخه جدید لاراول 11 و تنظیم پیشفرض DB_CONNECTION=sqlite، برخی از توسعهدهندگان که تمایل دارند از mysql به عنوان دیتابیس پروژه خود استفاده کنند، ممکن است با خطاهای اتصال دیتابیس روبرو شوند. یکی از رایجترین این خطاها مربوط به تنظیمات collation است.
برای مثال، خطای SQLSTATE[HY000]: General error: 1273 Unknown collation: 'utf8mb4_0900_ai_ci' نشان میدهد که تنظیمات collation با نسخه فعلی سرور MySQL یا MariaDB شما سازگار نیست.
⛔️ علت خطا و راهحلها:
خطای Unknown collation: 'utf8mb4_0900_ai_ci به این دلیل رخ میدهد که سرور دیتابیس MySQL یا MariaDB شما از تنظیمات collation utf8mb4_0900_ai_ci پشتیبانی نمیکند. این collation برای نسخههای جدید MySQL معرفی شده است و به بهبود عملکرد و دقت مقایسه دادهها کمک میکند، اما در نسخههای قدیمیتر MySQL یا برخی نسخههای MariaDB پشتیبانی نمیشود.
🛠 راهحلها:
1️⃣ ارتقاء سرور MySQL/MariaDB:
اگر امکانپذیر است، سرور دیتابیس را به نسخهای ارتقاء دهید که از این
collation پشتیبانی میکند.2️⃣ تغییر Collation در پروژه لاراول:
- به فایل
config/database.php در پروژه لاراول خود بروید.- در بخش اتصالات دیتابیس (
mysql در این مورد)، collation را به یک مقدار سازگار با نسخهی MySQL/MariaDB سرورتان تغییر دهید. برای نسخههای قدیمیتر، utf8mb4_unicode_ci توصیه میشود:'mysql' => [
...
'collation' => 'utf8mb4_unicode_ci',
...
],
📝 فایل
env. پروژه خود را بررسی و اطمینان حاصل کنید که اطلاعات دیتابیس به درستی تنظیم شدهاند:DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
⚙️ اجرای مایگریشنها
با استفاده از دستور php artisan migrate ، اطمینان حاصل کنید که جدولهای مورد نیاز در دیتابیس ایجاد شدهاند. این کار همچنین به حل مشکلات مربوط به عدم وجود جدولها کمک میکند.
⚜️برای اطمینان از اعمال تغییرات، دستورات php artisan config:cache و php artisan cache:clear را اجرا کنید تا تنظیمات کش شده پاک شود.
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding
❤4👍2
PHP & MYSQL pinned «🔧 راهنمای رفع مشکل اتصال به دیتابیس در لاراول 11 🔸با آغاز به کار نسخه جدید لاراول 11 و تنظیم پیشفرض DB_CONNECTION=sqlite، برخی از توسعهدهندگان که تمایل دارند از mysql به عنوان دیتابیس پروژه خود استفاده کنند، ممکن است با خطاهای اتصال دیتابیس روبرو شوند.…»
Forwarded from کانال آموزشی لاراول (PapiDon)
سلام رفقا
بعد از یه مدت نبودن، دوباره برگشتیم پر از انرژی🫶
⚡️ نگاهی به ویژگیهای جدید PHP 8.4
به زودی PHP 8.4 منتشر میشود و در این مطلب به بررسی ویژگیهای اعلامشده و امکانات جدید این نسخه خواهیم پرداخت.
📅 زمان انتشار PHP 8.4 چه تاریخی است؟
انتشار رسمی PHP 8.4 برای ۲۱ نوامبر ۲۰۲۴ برنامهریزی شده است. پیش از انتشار رسمی، این نسخه طی ۶ ماه مراحل پیشانتشار را از آلفا، بتا و کاندیداهای انتشار طی میکند.
💥 Property Hooks در PHP
از زبانهایی مثل Kotlin، C# و Swift الهام گرفته شده است. این ویژگی شامل دو نوع سینتکس متفاوت است که شبیه به closures کوتاه و چند خطی هستند:
🤓 در واقع Property hooks کمک میکنند تا از کدهای زائد مربوط به getter و setter های خاصیتها خلاص شویم و به یک خاصیت اجازه میدهد که دسترسی و بهروزرسانیها را با استفاده از hooks تعریف کند.
☄️ دسترسی به اعضای کلاس بدون پرانتز
از زمان معرفی دسترسی به اعضای کلاس هنگام نمونهسازی، شما باید ()new MyClass را در پرانتز قرار دهید، وگرنه با خطا مواجه میشوید. سینتکس پیشنهادی به شما این امکان را میدهد که به ثوابت، خصوصیات و متدها بدون نیاز به پرانتز اضافی دسترسی داشته باشید:
⌛ این بهروزرسانی مشکل کوچک دسترسی به اعضای کلاس را سادهتر میکند، بهطوری که نیازی به افزودن پرانتزهای اضافی یا استفاده از متد سازنده استاتیک نخواهد بود. این تغییر سینتکس PHP را بیشتر با زبانهای C مانند جاوا، #C و TypeScript همسو میکند که نیازی به پرانتزهای احاطهکننده ندارند.
🔗 برای مطالعه بیشتر PHP 8.4
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding
بعد از یه مدت نبودن، دوباره برگشتیم پر از انرژی
به زودی PHP 8.4 منتشر میشود و در این مطلب به بررسی ویژگیهای اعلامشده و امکانات جدید این نسخه خواهیم پرداخت.
📅 زمان انتشار PHP 8.4 چه تاریخی است؟
انتشار رسمی PHP 8.4 برای ۲۱ نوامبر ۲۰۲۴ برنامهریزی شده است. پیش از انتشار رسمی، این نسخه طی ۶ ماه مراحل پیشانتشار را از آلفا، بتا و کاندیداهای انتشار طی میکند.
از زبانهایی مثل Kotlin، C# و Swift الهام گرفته شده است. این ویژگی شامل دو نوع سینتکس متفاوت است که شبیه به closures کوتاه و چند خطی هستند:
class User implements Named
{
private bool $isModified = false;
public function __construct(
private string $first,
private string $last
) {}
public string $fullName {
// بازنویسی اکشن "خواندن" با منطق دلخواه
get => $this->first . " " . $this->last;
// بازنویسی اکشن "نوشتن" با منطق دلخواه
set {
[$this->first, $this->last] = explode(' ', $value, 2);
$this->isModified = true;
}
}
}
از زمان معرفی دسترسی به اعضای کلاس هنگام نمونهسازی، شما باید ()new MyClass را در پرانتز قرار دهید، وگرنه با خطا مواجه میشوید. سینتکس پیشنهادی به شما این امکان را میدهد که به ثوابت، خصوصیات و متدها بدون نیاز به پرانتز اضافی دسترسی داشته باشید:
// پرانتزهای اضافی برای دسترسی به اعضای کلاس مورد نیاز هستند
$request = (new Request())->withMethod('GET')->withUri('/hello-world');
// خطا PHP (<= PHP 8.3): syntax error, unexpected token "->"
$request = new Request()->withMethod('GET')->withUri('/hello-world');
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍1
PHP & MYSQL pinned «سلام رفقا بعد از یه مدت نبودن، دوباره برگشتیم پر از انرژی 🫶 ⚡️ نگاهی به ویژگیهای جدید PHP 8.4 به زودی PHP 8.4 منتشر میشود و در این مطلب به بررسی ویژگیهای اعلامشده و امکانات جدید این نسخه خواهیم پرداخت. 📅 زمان انتشار PHP 8.4 چه تاریخی است؟ انتشار…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
CGroup (Control Group)
یکی از ویژگیهای مهم در سیستمعامل لینوکس است که به شما امکان مدیریت منابع سیستمی مانند CPU، حافظه، دیسک و شبکه را برای گروهی از فرآیندها میدهد. این ابزار برای کنترل و محدود کردن استفاده از منابع توسط برنامهها و سرویسها بسیار مفید است.
1️⃣ گروهبندی فرآیندها: CGroup به شما این امکان را میدهد که فرآیندهای مرتبط را در یک گروه قرار دهید. به عنوان مثال، میتوانید همه فرآیندهای یک برنامه خاص را در یک گروه بگذارید.
2️⃣ مدیریت منابع: بعد از گروهبندی فرآیندها، میتوانید منابع سیستمی را به آن گروه اختصاص دهید یا محدود کنید. مثلاً میتوانید تعیین کنید که این گروه از فرآیندها فقط از 20 درصد از CPU استفاده کنند یا بیش از 1 گیگابایت حافظه مصرف نکنند.
3️⃣ نظارت و کنترل: با استفاده از CGroup، میتوانید مصرف منابع توسط گروههای مختلف را نظارت کنید و در صورت نیاز تنظیمات را تغییر دهید تا از استفاده بیش از حد منابع جلوگیری کنید.
- محدود کردن منابع: برای جلوگیری از اینکه یک برنامه تمام منابع سیستم را مصرف کند و باعث کاهش کارایی دیگر برنامهها شود.
- بهبود امنیت: با محدود کردن دسترسی به منابع، میتوانید از رفتارهای مخرب جلوگیری کنید.
- مدیریت سرویسها: در سرورهای بزرگ و پیچیده، میتوانید سرویسهای مختلف را با استفاده از CGroup مدیریت و کنترل کنید تا هر کدام منابع مشخصی داشته باشند.
فرض کنید یک سرور دارید که چندین سرویس مختلف روی آن اجرا میشود. میخواهید اطمینان حاصل کنید که سرویس وب شما همیشه عملکرد خوبی دارد و تحت تاثیر سرویسهای دیگر قرار نمیگیرد. با استفاده از CGroup، میتوانید:
- گروهی برای فرآیندهای سرویس وب ایجاد کنید.
- محدودیتهایی برای استفاده از CPU و حافظه این گروه تعیین کنید.
- مطمئن شوید که حتی اگر سرویسهای دیگر منابع زیادی مصرف کنند، سرویس وب شما همچنان منابع کافی برای کار کردن دارد.
🐳 چگونه Docker از CGroup استفاده میکند؟
1️⃣ مدیریت منابع: Docker از CGroup برای مدیریت منابع استفاده میکند. به این معنا که میتواند منابع CPU، حافظه، دیسک و شبکه را برای هر کانتینر به طور جداگانه محدود کند.
2️⃣ ایزولهسازی: CGroup به Docker کمک میکند تا هر کانتینر را از کانتینرهای دیگر ایزوله کند. این ایزولهسازی به اطمینان از اینکه فرآیندهای یک کانتینر نمیتوانند منابع کانتینرهای دیگر را تحت تأثیر قرار دهند، کمک میکند.
3️⃣ نظارت و کنترل: Docker با استفاده از CGroup میتواند مصرف منابع هر کانتینر را نظارت کند و در صورت نیاز تنظیمات منابع را تغییر دهد تا از کارایی و پایداری سیستم اطمینان حاصل کند.
پس CGroup ابزاری قدرتمند در لینوکس است که به شما امکان مدیریت بهتر منابع سیستمی را میدهد. با استفاده از CGroup میتوانید فرآیندها را گروهبندی کنید، منابع را به صورت دقیق تخصیص دهید و از کارایی و پایداری سیستم خود مطمئن شوید.
📁 #Linux #Docker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
PHP & MYSQL pinned «⭐️ مفهوم CGroup در لینوکس به زبان ساده CGroup (Control Group) یکی از ویژگیهای مهم در سیستمعامل لینوکس است که به شما امکان مدیریت منابع سیستمی مانند CPU، حافظه، دیسک و شبکه را برای گروهی از فرآیندها میدهد. این ابزار برای کنترل و محدود کردن استفاده از…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
yum نصب کنید، ممکن است با خطای زیر مواجه شوید:Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
این مشکل به دلیل پایان عمر (EOL) CentOS 8 و عدم دسترسی به مخازن پیشفرض CentOS به وجود میآید. زمانی که CentOS 8 به پایان عمر خود رسید، مخازن پیشفرض آن دیگر بهروزرسانی نمیشوند و دسترسی به آنها ممکن است محدود یا قطع شود. بنابراین نیاز است که از مخازن جایگزین مانند مخازن Vault استفاده کنیم.
1️⃣ ایجاد یا ویرایش فایل مخزن
ابتدا باید مخازن Vault را در یک فایل مخزن جدید تنظیم کنیم تا بتوانیم به بستههای مورد نیاز دسترسی پیدا کنیم.
- ایجاد یا ویرایش یک فایل مخزن جدید:
vi /etc/yum.repos.d/CentOS-Vault.repo
- اضافه کردن مخازن Vault:
محتوای زیر را در فایل قرار دهید:
[AppStream]
name=CentOS-$releasever - AppStream
baseurl=http://vault.centos.org/8.3.2011/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[BaseOS]
name=CentOS-$releasever - Base
baseurl=http://vault.centos.org/8.3.2011/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[extras]
name=CentOS-$releasever - Extras
baseurl=http://vault.centos.org/8.3.2011/extras/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
2️⃣ غیرفعال کردن مخازن پیشفرض
باید مطمئن شویم که مخازن پیشفرض CentOS غیرفعال شدهاند تا تداخل ایجاد نشود.
- ویرایش فایلهای مخازن پیشفرض:
فایلهای مخازن پیشفرض در مسیر
/etc/yum.repos.d/ قرار دارند. به عنوان مثال، فایلهای زیر را ویرایش کنید:vi /etc/yum.repos.d/CentOS-Linux-AppStream.repo
vi /etc/yum.repos.d/CentOS-Linux-BaseOS.repo
vi /etc/yum.repos.d/CentOS-Linux-Extras.repo
- غیرفعال کردن مخازن پیشفرض:
در هر کدام از این فایلها، خط
enabled را به 0 تغییر دهید. به عنوان مثال:[AppStream]
name=CentOS-$releasever - AppStream
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
همین تغییر را برای
BaseOS و Extras انجام دهید.3️⃣ پاک کردن کش YUM و بهروزرسانی
- پاک کردن کش YUM:
yum clean all
- بهروزرسانی لیست بستهها:
yum makecache
4️⃣ نصب بسته
tree- نصب بسته
tree:حالا باید بتوانید بسته
tree را بدون مشکل نصب کنید.yum install tree
متادیتا شامل اطلاعاتی در مورد بستهها، نسخهها، وابستگیها و سایر جزئیات مرتبط با مخازن نرمافزاری است.
yum از متادیتا برای جستجو و مدیریت بستهها استفاده میکند.متادیتا اطلاعاتی است که
yum از آن برای مدیریت بستهها استفاده میکند. این اطلاعات شامل:- لیست بستههای موجود
- نسخههای مختلف هر بسته
- وابستگیهای هر بسته
- اطلاعات مربوط به امنیت و بروزرسانیها
بدون دسترسی به متادیتا،
yum نمیتواند بستههای مورد نظر شما را پیدا و نصب کند.مخازن Vault شامل نسخههای قدیمیتر از بستههای نرمافزاری است که برای نسخههایی از سیستم عامل که به پایان عمر خود رسیدهاند (EOL) استفاده میشود. این مخازن به شما امکان دسترسی به بستههای نرمافزاری و بروزرسانیها را حتی پس از پایان عمر رسمی نسخه سیستم عامل میدهند.
مخازن Vault به شما اجازه میدهند تا به نسخههای قدیمیتر بستهها دسترسی داشته باشید که دیگر در مخازن اصلی موجود نیستند. این مخازن به ویژه برای سیستمهای قدیمی که به پایان عمر خود رسیدهاند (EOL) مفید هستند.
📁 #Linux #Docker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1🔥1👏1
PHP & MYSQL pinned «🖥 حل مشکل دانلود متادیتا برای مخازن CentOS در کانتینر داکر با استفاده از مخازن Vault 🧐 هنگامی که تلاش میکنید بستهای را در داخل کانتینر CentOS-8 با استفاده از yum نصب کنید، ممکن است با خطای زیر مواجه شوید: Failed to download metadata for repo 'appstream':…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
یادگیری چیزهایی که تغییر نمیکنند.
در این پست، تلاش میکنیم بفهمیم چرا باید اصول پایه را به جای فریمورکها یاد بگیریم و این موضوع چه تاثیری دارد.
اینجا است که اثر Lindy وارد میشود. این اثر میگوید تکنولوژیها و نوآوریهایی که به مدت طولانی مورد استفاده قرار گرفتهاند، احتمال بیشتری دارند که در آینده نیز مورد استفاده قرار گیرند. به عبارت دیگر، هرچه یک آیتم بیشتر مورد استفاده قرار گرفته باشد، احتمال بیشتری دارد که همچنان استفاده شود.
ما توسعهدهندگان دوست داریم هرچه زودتر چیزهای جدید را یاد بگیریم. این چیزها عمدتا شامل فریمورکها و ابزارهای جدید است (مانند React، Angular، Spring، Web Forms و غیره). با این حال، این فریمورکها معمولاً عمر کوتاهی دارند، در بهترین حالت ۲ تا ۵ سال. به جای یادگیری فریمورکها، که تا حدی لازم است، باید بیشتر روی یادگیری اصول پایه تمرکز کنیم.
یادگیری اصول پایه توسعه نرمافزار به توسعهدهندگان کمک میکند اصول و مفاهیم زیرین که در فریمورکها و زبانهای برنامهنویسی مختلف مشترک هستند را بفهمند. این درک به انعطافپذیری و سازگاری بیشتر هنگام کار با تکنولوژیهای جدید یا مواجهه با مشکلاتی که یک فریمورک خاص ممکن است زمان ببرد تا حل شود، منجر میشود.
علاوه بر این، داشتن درکی قوی از اصول پایه میتواند به استفاده موثرتر و کارآمدتر از فریمورکها منجر شود، زیرا توسعهدهنده بهتر میتواند فریمورکها را برای برآورده کردن نیازهای خاص سفارشی و گسترش دهد.
مثالی از یک اپلیکیشن وب که به کاربران امکان آپلود و اشتراکگذاری تصاویر را میدهد در نظر بگیرید که مثلاً در Ruby on Rails و قابلیتهای آن برای پردازش تصاویر انجام شده است. اگر تعداد کاربران افزایش یابد، فقط میتوانیم با مسائل عملکردی کار کنیم اگر فریمورک را خوب بشناسیم. با این حال، اگر اصول پایه توسعه وب را بفهمیم، میتوانیم نقاط ضعف را شناسایی کرده و راهحلهای مختلفی مانند استفاده از CDN، بهینهسازی اندازه تصاویر، استفاده از راهحلهای مختلف ذخیرهسازی و غیره را امتحان کنیم.
🔸Algorithms
🔹Data
🔸Clean Code
🔹SOLID Principles
🔸OO Programming
🔹Design Patterns
🔸Distributed Computing
🔹 System Design
...
نوشته دیوید توماس و اندرو هانت.
دیوید فارلی
استیو مککانل
تیتوس وینترز، تام منشرک و هیروم رایت
عمو باب مارتین
اریک فریمن
مارتین فاولر
آدیتیا بارگاوا
📁 #Skills
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2👏1
PHP & MYSQL pinned «✨ Learn things that don't change یادگیری چیزهایی که تغییر نمیکنند. در این پست، تلاش میکنیم بفهمیم چرا باید اصول پایه را به جای فریمورکها یاد بگیریم و این موضوع چه تاثیری دارد. 🤔 آیا تاکنون به این فکر کردهاید که چرا برخی تکنولوژیها هنوز با ما هستند…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
David Thomas and Andrew Hunt
این کتاب توصیههای عملی و حرفهای برای توسعهدهندگان ارائه میدهد. موضوعاتی مانند مسئولیتپذیری شخصی و توسعه حرفهای تا تکنیکهای معماری را پوشش میدهد. با وجود اینکه در سال ۱۹۹۹ نوشته شده است، هنوز در بسیاری از جنبهها معتبر است. ویژگی منحصر به فرد این کتاب این است که به صورت عملی با مجموعهای از نکات برای بهبود فرآیند توسعه به شما آموزش میدهد.
David Farley
این کتاب بر ساخت نرمافزار عالی تمرکز دارد و نویسنده یک چارچوب محکم برای اتصال بهترین شیوهها مانند Continuous Delivery (CD)، معماری شش ضلعی و Test-Driven Development به ایدههای اصلی در مهندسی نرمافزار ارائه میدهد. او همچنین در مورد تاریخچه توسعه نرمافزار و ایدههایی که صنعت را تغییر دادهاند، مینویسد.
Steve McConnell
یکی از کتابهایی که بیش از ۱۵ سال پیش نوشته شده و هنوز معتبر است. این کتاب به طراحی، کدنویسی، اشکالزدایی و تست میپردازد. در بیش از ۹۰۰ صفحه، نویسندگان نحوه نوشتن برنامهها برای مردم اول و سپس برای کامپیوترها، چگونگی تقسیم کد به دامنهها و چگونگی تسلط بر ویژگیهای انسانی بهترین برنامهنویسان (تواضع، کنجکاوی و مهمتر از همه، کنترل اگو) را توضیح میدهند.
Titus Winters, Tom Manshreck, and Hyrum Wright
این کتاب درباره برنامهنویسی نیست، بلکه در مورد شیوههای مهندسی در گوگل برای حفظ و سلامت کدپایه آنها است. در این کتاب، تفاوت بین مهندسی نرمافزار و برنامهنویسی، اهمیت قانون بیانسه، و چگونگی تست صحیح چیزها و انتشار کوچک و مکرر را خواهید آموخت.
Eric Freeman
این کتاب الگوهای طراحی اصلی نرمافزار را برای ایجاد طراحیهای انعطافپذیرتر، شیکتر و قابل استفاده مجدد بدون نیاز به کشف مجدد راهحلهای طراحی توصیف میکند. این کتاب به سبک کتابهای For Dummies نوشته شده است، به طوری که برای مبتدیان قابل فهم باشد.
Aditya Bhargava
این کتاب به زبانی ساده درباره کاربرد الگوریتمهای استاندارد در مسائل روزمره توسعهدهندگان توضیح میدهد. از مرتبسازی و جستجو شروع میکند و سپس به فشردهسازی دادهها و هوش مصنوعی با نمونه کدهایی در پایتون میپردازد. احتمالاً بهترین کتاب برای شروع یادگیری الگوریتمها است.
Martin Kleppman
این کتاب مفاهیم پیشرفته داده مانند پایگاههای داده و مدلهای داده و مفاهیم توزیعشده مانند تراکنشها، تکرار، سازگاری و غیره را توضیح میدهد. این کتاب یکی از تأثیرگذارترین کتابها در این دسته است.
Steve Freeman
نویسندگان رویههای خود، اهداف طراحی و برخی ابزارهایی که برای انجام کار استفاده میکنند را شرح میدهند. در یک مثال گسترده، خواهید فهمید که چگونه TDD در چند سطح عمل میکند، با استفاده از تستها برای هدایت ویژگیهای کد و ساختار شیءگرا و استفاده از اشیاء شبیهسازیشده برای یافتن و سپس تعریف پیوندها بین اشیاء.
John Ousterhout
این کتاب توضیح میدهد که چگونه سیستمهای نرمافزاری پیچیده را به قطعات قابل پیادهسازی مستقل تقسیم کنیم. سپس به مسائل فلسفی در مورد نحوه برخورد با فرآیند طراحی نرمافزار میپردازد و فهرستی از راهنماییهای طراحی برای دنبال کردن ارائه میدهد. این کتاب همچنین فهرستی از علائم هشدار برای طراحی بد ارائه میدهد. این کتاب یک همراه عالی برای Clean Code است زیرا دیدگاه متفاوتی ارائه میدهد.
📁 #Skills
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3
PHP & MYSQL pinned «🤓 کتابهایی که هر مهندس نرمافزاری باید در سال ۲۰۲۴ بخواند ... 🔖 The Pragmatic Programmer The Pragmatic Programmer David Thomas and Andrew Hunt این کتاب توصیههای عملی و حرفهای برای توسعهدهندگان ارائه میدهد. موضوعاتی مانند مسئولیتپذیری شخصی و توسعه حرفهای…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
🎓 تفاوت بین تعریف Volume در Dockerfile و استفاده از
سلام دوستان ! 👋
امروز میخواهیم درباره یکی از مفاهیم مهم در داکر صحبت کنیم: Volume. شاید این سوال برای شما پیش آمده باشد که وقتی میتوانیم Volume را هم در Dockerfile و هم هنگام اجرای کانتینر با استفاده از
🔍 تعریف Volume در Dockerfile
وقتی شما یک Volume را در داخل Dockerfile تعریف میکنید، در حقیقت دارید به داکر میگویید که این دایرکتوریها باید به عنوان نقاط ذخیرهسازی پایدار (Persistent Storage) عمل کنند. به عبارت دیگر، وقتی یک کانتینر از روی این ایمیج ساخته میشود، آن دایرکتوریهایی که به عنوان Volume تعریف کردهاید، از کانتینر جدا شده و دادههای آنها حفظ میشود، حتی اگر کانتینر متوقف شود یا از بین برود.
🔧 مثال:
در اینجا، وقتی کانتینر از این ایمیج ساخته میشود، دایرکتوری
✅ مزیت :
این روش وقتی مفید است که بخواهید از ابتدا در طراحی ایمیج خود، مکانهای ذخیرهسازی پایدار را تعیین کنید. این تضمین میکند که هر کسی که این ایمیج را استفاده میکند، از این Volumeها بهرهمند میشود.
🔍 استفاده از
حالا فرض کنید شما یک ایمیج داکر دارید و میخواهید هنگام اجرای کانتینر، یک دایرکتوری خاص از سیستم فایل میزبان (Host) خود را به داخل کانتینر Mount کنید. اینجاست که
🔧 مثال:
در اینجا، /path/on/host
(که روی سیستم میزبان است) به /path/in/container (که داخل کانتینر است) متصل میشود. هر تغییری که در این مسیرها رخ دهد، بین میزبان و کانتینر به اشتراک گذاشته میشود.
✅ مزیت:
این روش به شما انعطافپذیری بیشتری میدهد تا در زمان اجرای کانتینر، مشخص کنید که چه دایرکتوریهایی را میخواهید به اشتراک بگذارید یا ذخیره کنید. این برای مواردی که بخواهید دادههای خاصی را از کانتینر با میزبان یا بالعکس به اشتراک بگذارید، بسیار مفید است.
🎯 نتیجهگیری: تفاوت کلیدی
- تعریف Volume در Dockerfile بیشتر به معنای تعیین مکانهای پیشفرض برای ذخیرهسازی پایدار در هنگام ساخت ایمیج است.
- استفاده از
هر دو روش برای اهداف مختلفی به کار میروند و بسته به نیاز شما، میتوانید از هر یک یا ترکیبی از هر دو استفاده کنید. با فهم درست این تفاوتها، میتوانید به صورت بهینهتری از داکر و Volumeها استفاده کنید.
📌 توجه داشته باشید که تعریف VOLUME در Dockerfile الزاما به معنای این نیست که این مسیرها به طور خودکار به بیرون (میزبان) پاس داده میشوند یا به اشتراک گذاشته میشوند. این تنها به داکر اعلام میکند که این مسیرها باید به صورت پایدار و مستقل از چرخه زندگی کانتینر ذخیره شوند. اینکه این Volumeها به یک دایرکتوری در میزبان متصل شوند یا نه، به زمان اجرای کانتینر و نحوه استفاده از v- بستگی دارد.
📁 #Docker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
v- هنگام اجرای کانتینرسلام دوستان ! 👋
امروز میخواهیم درباره یکی از مفاهیم مهم در داکر صحبت کنیم: Volume. شاید این سوال برای شما پیش آمده باشد که وقتی میتوانیم Volume را هم در Dockerfile و هم هنگام اجرای کانتینر با استفاده از
v- تعریف کنیم، تفاوت بین این دو روش چیست؟ 🤔🔍 تعریف Volume در Dockerfile
وقتی شما یک Volume را در داخل Dockerfile تعریف میکنید، در حقیقت دارید به داکر میگویید که این دایرکتوریها باید به عنوان نقاط ذخیرهسازی پایدار (Persistent Storage) عمل کنند. به عبارت دیگر، وقتی یک کانتینر از روی این ایمیج ساخته میشود، آن دایرکتوریهایی که به عنوان Volume تعریف کردهاید، از کانتینر جدا شده و دادههای آنها حفظ میشود، حتی اگر کانتینر متوقف شود یا از بین برود.
🔧 مثال:
FROM ubuntu:latest
VOLUME /data
در اینجا، وقتی کانتینر از این ایمیج ساخته میشود، دایرکتوری
/data به طور خودکار به یک Volume تبدیل میشود. اگر فایل یا دادهای در این دایرکتوری قرار دهید، حتی بعد از حذف کانتینر، این دادهها باقی میمانند.✅ مزیت :
این روش وقتی مفید است که بخواهید از ابتدا در طراحی ایمیج خود، مکانهای ذخیرهسازی پایدار را تعیین کنید. این تضمین میکند که هر کسی که این ایمیج را استفاده میکند، از این Volumeها بهرهمند میشود.
🔍 استفاده از
v- هنگام اجرای کانتینرحالا فرض کنید شما یک ایمیج داکر دارید و میخواهید هنگام اجرای کانتینر، یک دایرکتوری خاص از سیستم فایل میزبان (Host) خود را به داخل کانتینر Mount کنید. اینجاست که
v- به کار میآید. این گزینه به شما اجازه میدهد یک Volume را دینامیک (در زمان اجرا) ایجاد کنید و یک دایرکتوری میزبان را به دایرکتوری کانتینر متصل کنید.🔧 مثال:
docker run -v /path/on/host:/path/in/container myimage
در اینجا، /path/on/host
(که روی سیستم میزبان است) به /path/in/container (که داخل کانتینر است) متصل میشود. هر تغییری که در این مسیرها رخ دهد، بین میزبان و کانتینر به اشتراک گذاشته میشود.
✅ مزیت:
این روش به شما انعطافپذیری بیشتری میدهد تا در زمان اجرای کانتینر، مشخص کنید که چه دایرکتوریهایی را میخواهید به اشتراک بگذارید یا ذخیره کنید. این برای مواردی که بخواهید دادههای خاصی را از کانتینر با میزبان یا بالعکس به اشتراک بگذارید، بسیار مفید است.
🎯 نتیجهگیری: تفاوت کلیدی
- تعریف Volume در Dockerfile بیشتر به معنای تعیین مکانهای پیشفرض برای ذخیرهسازی پایدار در هنگام ساخت ایمیج است.
- استفاده از
v- به شما اجازه میدهد در زمان اجرا، به صورت پویا دایرکتوریهای میزبان و کانتینر را به یکدیگر متصل کنید.هر دو روش برای اهداف مختلفی به کار میروند و بسته به نیاز شما، میتوانید از هر یک یا ترکیبی از هر دو استفاده کنید. با فهم درست این تفاوتها، میتوانید به صورت بهینهتری از داکر و Volumeها استفاده کنید.
📌 توجه داشته باشید که تعریف VOLUME در Dockerfile الزاما به معنای این نیست که این مسیرها به طور خودکار به بیرون (میزبان) پاس داده میشوند یا به اشتراک گذاشته میشوند. این تنها به داکر اعلام میکند که این مسیرها باید به صورت پایدار و مستقل از چرخه زندگی کانتینر ذخیره شوند. اینکه این Volumeها به یک دایرکتوری در میزبان متصل شوند یا نه، به زمان اجرای کانتینر و نحوه استفاده از v- بستگی دارد.
📁 #Docker
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
👍4❤1🔥1
PHP & MYSQL pinned «🎓 تفاوت بین تعریف Volume در Dockerfile و استفاده از v- هنگام اجرای کانتینر سلام دوستان ! 👋 امروز میخواهیم درباره یکی از مفاهیم مهم در داکر صحبت کنیم: Volume. شاید این سوال برای شما پیش آمده باشد که وقتی میتوانیم Volume را هم در Dockerfile و هم هنگام اجرای…»