رهبر گروه کانتینرها (بخش پنجم)

سلام

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


تو این پست میخوام چند تا تغییر کوچیک که تو برنامه ها دادم رو بگم و بعد هم برم سراغ داکرایز کردن پروژه و تست کردنش!

لیست تغییرات پروژه ها:

1- توی بخش ورود جملات توسط کاربران برنامه که یک نرم افزار لاراولی بود، CORS رو اضافه کردیم و همچنین Validation ها رو که بررسی کنیم دقیقا چه چیزی داره ذخیره میشه که اگر مشکل داشت به کاربر بگیم‌ (البته سمت کاربر هم منطقا چک میکنیم همیشه)

2- توی بخش پایتونی پروژه که اصطلاحا یک کد کوچیک بود که هر N ثانیه به دیتابیس ریکویست میزد و بر اساس شرایط پست های موجود یک حرکتی رو اتخاذ میکرد هم تغییراتی دادیم. اولا که برای بخش request زدنش به سمت پروژه نود جی اس ایمون (سوکت سرورمون) یک سری exception handling گذاشتیم که اگر به هر دلیلی down شده بود سوکت سرورمون، برنامه کرش نکنه. دوما این که “دقیقا چند تا جمله تو صف برای نمایش مونده” هم کوئریش اضافه شده که به سمت سوکت سرور ارسال میشه و برای کاربرا نمایش داده میشه. سوما این که برنامه از حالت کران جابی به حالت یک برنامه While True تغییر پیدا کرد تا در اسرع وقت باید یک ریفکتور اساسی بشه این کد. مثلا یکی از مشکلاتش تو همین کرش کردن های زمان های ریکوئست زدن به سوکت سروره که اگر به هر دلیلی نتونه این کار رو بکنه، در اصل نباید از اون پست رد بشه ولی خب رد میشه که باید باگ های این چنینی رو کلا اصلاح کنم.

3- توی بخش سوکت سرورمون هم تغییراتی دادم تا عملکرد برنامه راحت تر بشه. مثلا هر وقت به انتهای نمایش پست ها میرسیم برای همه کاربران اتمام پست ها نمایش داده میشه یا اگر مثلا کاربری وسط نمایش یک پست به سرور کانکت بشه، باز هم سرور براش پستی که در حال نمایش بود رو ارسال میکنه که بتونه مثل بقیه ببینه.

4- توی بخش فرانت اند پروژه هم که امکان ارسال پست توسط کاربران رو اضافه کردم.


اما بریم سراغ داکرایز کردن پروژه ها که خیلی راحت بشه ازشون استفاده کرد ولی قبلش باید این مقاله رو یکبار خونده باشین تا علت بعضی چیزها رو درک کنین، مثلا این که چرا بعضی چیزها رو مستقیم از env کانتینر بخونیم نه از خود کانفیگ پروژه یا چیزهای دیگه ای که به زودی به پروژه مون اضافه میشه در آینده: The Twelve Factors (این مقاله معروف، خلاصه ای از نیازمندی های اولیه اجرای یک نرم افزار در محیط های مدرن و کلود بیس رو بیان کرده. به عنوان مهندس نرم افزار یا مهندس سیستم حتما یک بار باید خونده باشینش.)


داکر رو که میدونیم هممون چیه پس نیاز نیست دربارش صحبت کنیم چون تو پست های قبلی توضیح دادمش و کورس های خوب هم براش معرفی کردم. اما بریم تک تک نرم افزارهامونو داکرایز کنیم. من سعی میکنم داکرایز کردن یکی از پروژه ها رو کامل و دقیق توضیح بدم ولی بقیه رو فقط کلیاتشو میگم. کدوم پروژه رو کامل توضیح میدم؟‌بله درست حدس زدید پروژه لاراولی مون رو!

0- راه اندازی شبکه داخلی داکر برای ارتباط راحت بین سرویس ها:

docker network create tribonak

1- راه اندازی یک MySQL سرور با داکر به عنوان نیازمندی پروژه:

همیشه بهترین انتخاب برای راه اندازی نرم افزارها و سرویس ها، خوندن مستنداته پس مستندات image رسمی mysql داکر رو میخونیم و به این command میرسیم:

docker run –name tribonak-db -m 512m -p 3307:3306 -e MYSQL_DATABASE=tribonak -e MYSQL_ROOT_PASSWORD=pass_123456789_P -v /home/amirbagh75/Projects/tribonak/db_files:/var/lib/mysql –net tribonak mysql:5.7

اولش گفتیم اسم کانتینرمون tribonak-db باشه که بتونیم راحت تر باهاش تعامل کنیم. بعدش گفتیم که 512 مگابایت بیشتر بهش رم اختصاص نده. بعدش گفتیم پورت 3307 از سرور یا لپ تاپمون رو به پورت 3306 کانتینر map کن (فوروارد کن یا متصل کن). بعدش بهش گفتیم هر وقت که کانتینر بالا اومد یک دیتابیس به اسم tribonak برامون بساز و بعدش هم گفتیم که پسورد root مون فلان باشه، و در قدم بعدی گفتیم که اطلاعات کانتینر برای این که از بین نره مثلا توی کرش کردن ها یا ریستارت شدن ها و …، داخل یک volume خاص هم توی سرور یا لپتاپمون ذخیره کن. بعدش هم گفتیم که از شبکه داخلی داکر به اسم tribnak استفاده کن. در نهایت هم اسم image رسمی و نسخه مد نظرمون رو گفتیم. اگر بیشتر میخواین بدونین که چطوری این env ها یا port هایی که نوشتیم بالا رو باید بلد بشیم، یک نگاه به این بندازین: لینک


خب میریم سراغ داکرایز کردن پروژه لاراولیمون با وب سرور داخلی خود php بدون nginx یا apache:

اما چه کردیم:

خط اول نوشتیم که میخوایم از یک image پایه به اسم php:7.3-cli استفاده کنیم. که خب یک سیستم عامل دبیان و php7.3 رو به ما تحویل میده تا ازش استفاده کنیم.

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

خط یازده کامپوزر که پکیج منیجر php هستش رو نصب کردیم. و خط سیزده گفتم یک دایرکتوری تو root به اسم project بساز و در خط چهارده هم گفتیم همه فایل هایی که داکر فایل تو اون دایرکتوری تو سیستم عامل اصلی هستش رو کپی کن و بریز تو اون دایرکتوری خاص تو کانتینر. در خط پانزده هم انگار وارد اون دایرکتوری project که ساخته بودیم شدم که دستوراتم توی اون دایرکتوری زده بشه که خب اگر متوجه شده باشین انگار وارد root پروژه لاراولیمون شدیم. اولین کار نصب پکیج های مورد نیاز لاراول هستش که تو خط هفده میبینید. در خط نوزده هم پورت 8000 کانتینر رو دسترسی شو از بیرون آزاد کردیم چون بعدا بدردمون میخوره تو ران کردنش. همچنین از خط 21 تا 27، یک سری env توی اون کانتینر تعریف کردیم که ازش تو پروژه لاراولیمون استفاده میکنیم. چیزهایی مثل یوزر دیتابیس یا فعال بودن دیباگ یا نبودن. در خط 29 گفتیم که فایل .env مورد نیاز لاراول رو بساز و بعد کلید نرم افزار رو بساز و در نهایت هم گفتم که migrate ها رو اجرا کن در خط 31.

خط 33 هم پروژه رو به محض ران شدن کانتینر، لانچ میکنه ولی اینجا چند تا نکته هست که با خوندن این مقاله خیلی خوب متوجهش میشین: لینک

یک نکته هم وجود داره که نیازی نیست key های پروژه لاراول رو تو هر بیلد بسازیم و بهتره که به عنوان یک ENV بهش بدیم، ولی چون فعلا تو پروژه ما زیاد ازش استفاده خاصی نمیشه مشکلی برامون پیش نمیاد.

خب با این دستور اصطلاحا داکر فایل رو build میکنیم که یک image ازش در بیاد به اسم laravel-project-tribonak :

. docker build –network tribonak -t laravel-project-tribonak

معمولا دفعه اول زمان بیشتری میبره بیلد شدن ولی دفعات بعدی داکر یک سری لایه ها رو کش میکنه و سرعت بیشتری داره. اگر هم میخواین نکات مهم نوشتن یک داکرفایل رو بدونین این مقاله رو بخونین: لینک

حالا میتونیم ران کنیم image رو:

docker run –name tribonak-laravel -p 8000:8000 –network tribonak laravel-project-tribonak

حالا میتونیم خیلی راحت با postman به پروژه ریکوئست بزنیم تا توی دیتابیس ذخیره بشه:

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


سه بخش آتی پروژه رو هم داکرایز کردم و توی گیتهابشون داکر فایلشون موجوده و میتونید بررسی کنید. لینک

بازدیدها: 3

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *