تجربه مهاجرت از زمپ به داکر (به همراه نیم وجب آموزش)

من تا همین دو سه روز پیش داشتم از زمپ استفاده میکردم اما تصمیم گرفتم بلاخره مهاجرت کنم به سمت داکر برای ادامه کارم.اگه از بروبکس زمپ کار هستین این پست برای شماست.دلایل مختلف زیادی برای اینکار هست اما من سه تا دلیل داشتم.اولیش این بود که من میخاستم imagick رو استفاده کنم. روی زمپ نصبش کردم کار هم میکرد اما همش یه وارنینگ مسخره میداد و باعث میشد یه سری دیگه از نرم افزار ها مثل phpcs کارشون رو درست انجام ندن. برای همین مجبور بودم هی افزونه ش رو توی php.ini کامنت کنم برای حالت عادی و کامنتش رو بردارم برای کار با composer و موقعی که نیاز به این افزونه بود. سرچ هم کردم چه خاکی به سر بریزم که از شر وارنینگه خلاص شم و یه مشکل مربوط به ورژن بود و نتونستم و بیخیالش شدم.دومیش این بود که زمپ واقعا کند شده بود و روی اعصابم بود و منم از اون دسته برنامه نویسام که حتی اگه یه تغییر کوچیک بدم بازم رفرش میکنم نتیجه رو ببینم مطمئن بشم و بعد به کارم ادامه میدم?. آخر همین پست هم یه مقایسه بین سرعت هاشون گذاشتم ببینین.و همچین از dusk برای تست کردن استفاده میکنم که خب شاید تست کامل یه سایت معمولی حدود 2/3 دقیقه وقت میگرفت.سومیش هم این بود که این روزا همه چی به سمت اتوماتیک شدن پیش میره به عنوان یه بک اند کار زشته اصلا بلد نیستم با داکر کار کنم (هنوزم نیستم!) ولی در همین حد که بتونم با زمپ جایگزینش کنم یادش گرفتم تا یه روزی یه پروژه که بیاد دستم که روی یه PaaS منتشر کنم.من خیلی وقت پیش سعی کردم این کار رو انجام بدم اما نتونستم و بیخیالش شدم و به کار با زمپ ادامه دادم اما این چند روز عید وقت آزاد پیدا کردم و بلاخره انجامش دادم.حالا برای شما هم توضیح میدم چجوری میتونین از زمپ مهاجرت خودتون رو شروع کنین بدون اینکه درگیرتون کنم با ریز امکانات داکر. در آخر هم محیط داشبورد داکر رو شبیه به زمپ بهتون معرفی میکنم تا احساس غریبی نداشته باشین.برای شروع چیزی که مسلمه اینه که داکر رو دانلود کنین و نصب کنین.برای ویندوز که یه ویزارد خیلی ساده داره نکست نکست نکست میزنین ریستارت میکنه سیستمو و همه چی حاضر میشه. https://www.docker.com/products/docker-desktop خب از همین الان بگم سایت داکر برای ایران تحریمه و حالا یا با شکن یا یه یخ شکن خوب میتونین دورش بزنین.خب من یه توسعه دهنده لاراول هستم و از زمپ به این شکل استفاده میکنم که همه پروژه هام رو داخل پوشه htdocs زمپ و تو فولدر های جدا قرار میدم.(test, test2, ...) بعد با کمک Virtual Hostبه هر پروژه یه آدرس منحصربفرد میدم. مثلا آدرس test.loc پروژه تست من رو بالا میاره. test2.loc پروژه تست دومی رو بالا میاره و ....حالا میخام کاری کنم بدون اینکه نیاز باشه زمپ رو حذف کنم یا پوشه htdocs رو تغییر بدم دقیقا با همون آدرس ها بالا بیاد و این کار رو داکر به عهده بگیره به جای زمپ.قبل هر کاری به phpmyadmin زمپتون برین و به تب Export برینتوی قسمت Export method روی Custom قرار بدین وتمام دیتابیس هایی که نیاز دارین رو اکسپورت بگیرین.در آخر هم حتما آپاچی و mysql رو از طریق زمپ خاموش کنین تا به مشکل پورت داخل داکر بر نخورین.خب همونطور که گفتم من توسعه دهنده لاراول هستم و برای توسعه لاراول روی داکر سرچ کردم با Laradock آشنا شدم که یه محیط برای توسعه لاراول داخل داکر فراهم میکنه.برای شروع با git داخل پوشه htdocs زمپ پروژه رو clone میکنم.git clone https://github.com/laradock/laradock.gitبعد به داخل پوشه laradock برین و از فایل env-example کپی بگیرین و اسمش رو بذارین .envخب حالا وقت کانفیگ کردن پروژه س.فایل env رو باز کنین تا قسمت هایی که لازم هست رو تغییر بدین.ظاهرا پورت پیش فرض phpmyadmin که 8080 هست از قبل استفاده شده پس من تغییرش میدم.PMA_PORT=8888خب حالا من تصمیم دارم از nginx استفاده کنم اما شما اگه خواستین میتونین از apache2 هم استفاده کنین اما من nginx رو ترجیح میدم.برای کانفیگ کردن nginx به پوشه nginx/sites میرم.اگه یادتون باشه گفته بودم چجوری با Virtual Host آدرس های مختلف برای پروژه های مختلفم داشتم.توی زمپ این کار همه شون توی فایل httpd-vhosts.conf انجام میشد.حالا برای انجام همین کار توی nginx من باید به ازای هر آدرس یه فایل کانفیگ جدا درست کنم.مثلا من الان برای پروژه test خودم یه کانفیگ میسازم.برای اینکار یه کپی از فایل laravel.conf.example میگیرم و اسمش رو بهtest.loc.conf تغییر میدم.بعد دوتا قسمت root, server_name رو تغییر میدم مناسب با پروژه ای که میخام لود شه.server_name test.loc; # این آدرس هاست من هست root /var/www/test/public; # اینم آدرس پوشه روتقسمت # به بعد کامنته و لازم نیست بنویسینشبه همین شکل بقیه سایت ها رو هم میسازم.و حالا وقت اینه که image ها رو بسازیم و ازشون container بسازیم.برای اینکار این دستور رو توی پوشه laradock بزنین.docker-compose up -d nginx mysql phpmyadminبسته به سرعت اینترنتتون و کیفیت یخ شکنتون این کار چند دقیقه ای طول میکشه میتونین تو این مدت برین یه چایی یا قهوه☕ یا شیر کاکائو یا دلستر? یا هایپ یا اسموک? بزنین و بعد برگردین?.پیام موفقیت آخر کاراگه وسط کار خطا داد اینترنت رو چک کنین و دوباره این دستور رو بزنین.بعد نصب میرم به phpmyadmin تا دیتابیسی که اکسپورت گرفته بودم رو اینجا ایمپورت کنم آدرس127.0.0.1:8888رو باز میکنم و فیلد ورود رو به این شکل پر میکنم.server: mysql username: root password: rootبعد از تب ایمپورت دیتابیسم رو ایمپورت میکنم.یه کار دیگه که باید انجام بدین تغییر دادن کانفیگ فایل پروژه هاتون هست برای دیتابیس. مثلا من برای پروژه تست داخل فایل .envپروژه ام این خطوط رو این شکلی تغییر میدم.DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=test DB_USERNAME=root DB_PASSWORD=rootمقادیر DB_HOST, DB_USERNAME, DB_PASSWORD رو تغییر دادم.حالا باید آدرس پروژه ام رو توی مرورگر باز کنم. (test.loc)اگه مشکل csrf و یا کاربر از قبل وارد شده و این چیزا داشتین یه بار کوکی ها رو کامل از مرورگر پاک کنین و دوباره آدرس رو باز کنین.اگه ارور های دیگه ای بودش هم دیگه از عمو گوگل بپرسین تا به راه حل برسین.اگه سایت شما بالا میاد تبریک میگم? شما اولین پروژه تون روdockerizeکردین?.اجرای دستورات composer و artisanیه تفاوتی که از این به بعد تو روند توسعه براتون ایجاد میشه اینه که برای اجرای دستورات آرتیسان و کومپوزر و هر دستور دیگه ای از این به بعد باید داخل bash یا shell containerانجام بدین.برای این کار این دستور رو بزنین.docker exec -it laradock_workspace_1 /bin/bashاگه laradock_workspace_1 وجود نداشت با دستورdocker psمیتونین ببینین اسم container برای workspace تون چیهمقایسه سرعت بین زمپ و داکرخب حالا داخل یکی از پروژه هام میخام بهت نشون بدم که چقدر سرعت تفاوت داره.تست اولم رو با این افزونه انجام میدم.https://github.com/maurobussini/restful-stressکانفیگ:از قصد سه تا دستور select و یه دستور insert و یه دستور delete به mysql هم داخل کد میذارم.Route::get('/', function () { \App\User::all(); \App\Category::all(); \App\Product::all(); $c = \App\Category::create(['name' => 'test', 'icon' => 'fa fa-star']); $c->delete(); return view('welcome'); });نتیجه تست در زمپ:نتیجه تست در داکر:حالا یه نمونه هم از داخل پروژه.این یه پروژه ای که برای آموزش دادن چند روز پیش ساختم و سرعت رو داخلش مقایسه کردم. برای اینکه عدالت برقرار شه حدود ده بار رفرش کردم و سریع ترین زمان ممکن رو اسکرین شات گرفتم.نتیجه در زمپ:بوت: 565ms - اپ: 349msنتیجه در داکر:بوت: 39ms - اپ: 77msالان یکی شاید بگه مگه سروره که مهم باشه سرعت چقدره دیگه چند میلی ثانیه که این حرفا رو نداره. آره شاید اینطور به نظر برسه اما فرض کنین برای منی که روزی 300 بار رفرش میکنم هر بار حدود نیم ثانیه وقتم تلف شه و این عدد رو در ماه در نظر بگیریم یه عدد نسبتا بزرگی میشه.مقایسه ظاهر برنامهبرای اینکه حس غریبی بهتون دست نده ظاهر پنل این دو برنامه رو مقایسه میکنم تا ببینین چقدر شبیه هم هستن.البته اگه اون دکمه رو بزنین تمام image هایی که laradock پشتیبانی میکنه رو دانلود میکنه.ولی برای اینکه فقط nginx, php, mysql, phpmyadmin بمونن اون دکمه سمت چپ رو بزنین تا زیر منوش باز شه و دونه به دونه کنتینر ها رو استارت بزنین.و سخن آخریکمی هم ناراحتم که دارم با زمپ خداحافظی میکنم. این نرم افزار از 16 سالگی و از اولین روز های یادگیری برنامه نویسی وب همراهم بود. قبلش فقط تونستم یه هفته توی wamp دووم بیارم و بعدش اومدم سراغ زمپ از همون موقع تا الان همراهم بوده :).زمپ دوست 6 ساله مناگرچه پاکش نمیکنم و برای یه سری کارها نیازش دارم :).ممنون که این پست رو خوندین.اگه توسعه دهنده لاراول هستین و میخاین روند توسعه دادن پنل ادمین پروژه هاتون سریع تر بشه پکیج ادمین ساز من رو یه نگاهی بندازین. http://sanjabteam.github.io/ اگه زحمتی نباشه دکمه ❤️ اون پایین سمت راست هم بفشارین وسایر نوشته هام رو هم نگاهی بندازین: https://virgool.io/@amiralizadeh9480/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%81%DB%8C%D9%84%D9%85-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%BE%DA%A9%DB%8C%D8%AC-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84%DB%8C%D9%85-pz8akkudoua6 https://virgool.io/laravel-community/%D8%B3%D8%A7%D8%AE%D8%AA-%D9%BE%D9%86%D9%84-%D8%A7%D8%AF%D9%85%DB%8C%D9%86-%D8%A8%D8%A7-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-%D8%A8%D9%87-%D8%B3%D8%B1%DB%8C%D8%B9-%D8%AA%D8%B1%DB%8C%D9%86-%D8%B1%D9%88%D8%B4-%D9%85%D9%85%DA%A9%D9%86-iaycwl52ddwq https://virgool.io/laravel-community/%D8%A7%D9%81%D8%B2%D9%88%D9%86%D9%87-%D9%85%D9%86-%D8%A8%D8%B1%D8%A7%DB%8C-vscode-%D9%88-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-mw9bcpvidbrd