Docker ابزاری است که برای ایجاد کانتینر برای برنامه ها استفاده می شود. این کانتینرها برای بسته بندی برنامه ها استفاده می شوند تا بتوانند بدون نیاز به تنظیمات یا پیکربندی خاصی در هر محیط (یا سیستم عامل) به راحتی اجرا شوند.
لاراول Sail برنامه لاراول شما را با محیط توسعه Docker فراهم می کند. با استفاده از آن، لازم نیست به صورت دستی یک کانتینر Docker برای برنامه Laravel خود ایجاد کنید. به طور پیش فرض یک محیط توسعه محلی متشکل از PHP، MySQL و Redis در اختیار شما قرار می دهد، اگرچه می توانید خدمات خاصی را که می خواهید انتخاب کنید. این بدان معناست که توسعه دهندگان لاراول دیگر نیازی به انجام تنظیمات خاصی (مانند نصب PHP، MySQL، سرور محلی و غیره) روی سیستم عامل خود ندارند تا شروع به ساخت برنامه لاراول کنند. با Sail، آنها می توانند آن را اجرا کند.
مزیت دیگری که Sail ارائه می دهد این است که توسعه دهندگان نگران نصب نسخه های صحیح نرم افزار پیکربندی روی سیستم خود نیستند. با Sail کانتینر، در صورت شکستگی به دلیل سازگاری، میتوانید به سادگی کانتینر را حذف کرده و یک کانتینر جدید ایجاد کنید، که همه آنها دور از محیط محلی شما هستند و هیچ ردپایی روی آن باقی نمیگذارند.
اگر در پروژهای با توسعهدهندگان دیگر همکاری میکنید، Sail اشتراکگذاری را آسان و ساده میکند، زیرا نیازی به در نظر گرفتن سیستمعاملهایی که سایر توسعهدهندگان استفاده میکنند وجود ندارد.
Sail لیست طولانی از تلاشها در محیط توسعه لاراول مانند Homestead، Valet، Laragon، Takeout، Laradock و Vessel را دنبال میکند.
کل بسته از دو فایل تشکیل شده است: یک فایل docker-compose.yml
که کانتینرهای Docker برنامه شما را نگه می دارد و یک اسکریپت Sail که یک CLI برای تعامل با این کانتینرها در اختیار شما قرار می دهد. فایل docker-compose.yml
در دایرکتوری ریشه پروژه شما قرار دارد در حالی که اسکریپت Sail در پوشه vendor/bin
شما قرار دارد.
در این مقاله نحوه نصب و استفاده از Laravel Sail را خواهیم آموخت. ما یک پروژه جدید ایجاد خواهیم کرد و به برخی از دستورات ضروری Sail نگاهی دقیق خواهیم انداخت.
برای آشنایی با داکر فایل می توانید این مقاله را بررسی کنید.
لاراول Sail چیست؟
Laravel Sail ابزاری برای سادهسازی توسعهی اپلیکیشنهای لاراول با استفاده از کانتینر های Docker است. به عبارت دیگر، Laravel Sail این امکان را به شما می دهد که بدون نیاز به نصب دستی نرم افزارهای مورد نیاز مانند سرور وب (مانند Nginx یا Apache) و پایگاه داده (مانند MySQL) بر روی سیستم خود، یک محیط توسعه کامل برای برنامه لاراول خود داشته باشید.
Sail با استفاده از Docker Compose، چندین کانتینر داکر را تعریف می کند که با هم کار می کنند تا تمام الزامات یک برنامه لاراول را برآورده کنند. این کانتینرها شامل مواردی مانند:
یک کانتینر برای برنامه لاراول شما
یک کانتینر برای پایگاه داده (معمولاً MySQL)
یک کانتینر برای Redis (برای حافظه پنهان)
یک کانتینر برای Node.js (برای کامپایل دارایی ها)
ما در یک مقاله دیگری به لاراول با قدرت داکر پرداخته ایم می توانید آن را نیز بررسی کنید.
چرا از لاراول Sail استفاده کنیم؟
Laravel Sail ابزاری است که توسعه برنامه های لاراول را با استفاده از کانتینرهای Docker ساده می کند. در اینجا چند دلیل وجود دارد که چرا ممکن است بخواهید از Laravel Sail استفاده کنید:
کاهش پیچیدگی: Sail نیاز به پیکربندی دستی اجزای فردی مانند PHP، MySQL و Redis را از بین می برد. این شما را از دردسرهای راه اندازی رها می کند و به شما امکان می دهد روی نوشتن کد تمرکز کنید.
سازگاری بهبود یافته: با کانتینر های از پیش تعریف شده خود، Sail تضمین می کند که محیط توسعه شما در ماشین های مختلف ثابت می ماند. این به ویژه هنگام همکاری با توسعه دهندگان دیگر در یک پروژه مفید است.
ایزوله: برنامه شما در یک کانتینر Docker اجرا می شود که از دستگاه محلی شما جدا شده است. این می تواند به جلوگیری از درگیری با سایر نرم افزارهایی که نصب کرده اید کمک کند.
همکاری آسان: از آنجایی که Sail از کانتینرهای Docker استفاده می کند، این کار را برای سایر توسعه دهندگان آسان می کند تا بدون نگرانی در مورد محیط محلی خود، پروژه را راه اندازی و اجرا کنند.
تجربه Docker: حتی اگر تجربه قبلی Docker را نداشته باشید، Sail با استفاده از یک راه اندازی از پیش پیکربندی شده، معرفی ملایمی را ارائه می دهد. این می تواند به شما کمک کند بدون نیاز به متخصص بودن، اصول Docker را بیاموزید.
به طور خلاصه، Laravel Sail می تواند گردش کار توسعه Laravel شما را با ارائه یک محیط توسعه سازگار، ایزوله و آسان برای استفاده ساده کند.
برای آشنایی با کوبرنیتیز می توانید این مقاله را بررسی کنید.
پیش نیازها
تنها شرط Sail این است که Docker روی سیستم عاملی که قرار است روی آن اجرا شود نصب شده باشد.
اگر از ویندوز استفاده می کنید، باید Windows Subsystem برای لینوکس 2 (WSL2) را نصب و فعال کنید. این به شما امکان می دهد فایل های اجرایی باینری لینوکس را به صورت بومی در سیستم عامل ویندوز خود اجرا کنید. همچنین، مطمئن شوید که Docker Desktop را برای استفاده از WSL2 پیکربندی کنید.
در غیر این صورت، نیازی به تجربه Docker نیست.
مرحله 1: نصب و پیکربندی Sail
هر برنامه جدید لاراول با Sail خارج از جعبه ارائه می شود. برای آن فقط به یک دستور ساده نیاز دارد.
دستور زیر را برای ایجاد یک برنامه جدید لاراول اجرا کنید:
curl -s https://laravel.build/new-sail-application | bash
دستور بالا پروژه را در دایرکتوری جدیدی به نام new-sail-application
ایجاد می کند. با خیال راحت نام آن را با هر چیزی که می خواهید پروژه شما نامگذاری شود تغییر دهید.
بعد، به دایرکتوری پروژه بروید:
cd new-sail-application
برای شروع Sail، دستور زیر را اجرا کنید:
./vendor/bin/sail up
افزودن Sail به یک برنامه موجود
همچنین می توانید Sail را در یک برنامه موجود با استفاده از Composer نصب کنید، با این فرض که محیط توسعه محلی شما برای استفاده از آن تنظیم شده است:
composer require laravel/sail --dev
پس از اتمام نصب، می توانید فایل docker-compose.yml
Sail را با استفاده از دستور زیر در دایرکتوری پروژه خود منتشر کنید:
php artisan sail:install
در نهایت، برای شروع Sail، دستور زیر را اجرا کنید:
./vendor/bin/sail up
مرحله 2: نگاهی دقیق به برنامه خود
اکنون محیط توسعه شما آماده و در حال اجرا است. با داکر، هر کانتینر فقط یک سرویس دارد. این بدان معنی است که برنامه Sail ما دارای سه سرویس است: یکی برای PHP، یکی برای MySQL و دیگری برای Redis.
این سه کانتینر توسط Docker Compose با استفاده از فایل docker-compose.ym
l در ریشه پروژه شما نگهداری و مدیریت می شوند. اگر این فایل را باز کنید، بخش سرویس ها با سه مؤلفه: laravel.test
، mysql
و redis
را خواهید دید.
laravel.test
مؤلفه PHP را کنترل می کند و دو مورد دیگر آنچه را که نام آنها نشان می دهد کنترل می کند.
تحت سرویس mySQL (این سرویس پایگاه داده شما را مدیریت می کند)، پارامتر ایمیج را پیدا خواهید کرد که نشان دهنده ایمیجی است که این کانتینر در حال نمونه سازی است. اساساً یک ایمیج مانند نقشه یک خانه است در حالی که کانتینر خود خانه ساخته شده است. نسخه MySQL برای نصب (8.0) نیز مشخص شده است:
mysql:
image: 'mysql:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping"]
همه ایمیج هایی که ما نیاز داریم از Docker Hub، بزرگترین کتابخانه ایمیج در شبکه، تهیه شده است. آنها با برخی از اسناد ارائه می شوند که نحوه استفاده از آنها را توضیح می دهد.
پارامتر پورت ها برای همگام سازی پورت کانتینر و پورت محلی استفاده می شود. DB_PORT:-3306
پورت محلی شما است و خط '3306:{FORWARD_DB_PORT:-3306}$'
آن را با درگاه کانتینر شما همگامسازی میکند.
در محیط، اعتبار پایگاه داده شما تعریف می شود. آنها در حال حاضر به مقادیر موجود در فایل env.
که در دایرکتوری ریشه پروژه شما قرار دارد اشاره می کنند.
داکر از حجم ها برای تداوم (یا ذخیره) داده های استفاده شده توسط یک کانتینر (حتی پس از نابودی کانتینر) استفاده می کند. بیرونی کردن داده ها یا نگهداری داده ها در خارج از یک کانتینر به دلایل زیادی مهم است.
کانتینر ها، بر اساس طراحی، به صورت موقت ایجاد می شوند. به این ترتیب، هنگامی که آنها از کار می افتند یا متوقف می شوند، تمام داده هایی که نگه می دارند از بین می روند. هنگامی که داده در یک حجم نوشته می شود و کانتینری که به آن تعلق دارد پایان می یابد، داده ها باقی می مانند و بنابراین می توانند توسط یک کانتینر جدید استفاده شوند. داده های پایدار همچنین می توانند توسط چندین کانتینر در ماشین های مختلف به اشتراک گذاشته شوند.
volumes
های خط: 'sailmysql:/var/lib/mysql
' به سادگی از volumes
به نام sailmysql
برای ذخیره تمام داده ها در فهرست var/lib/mysql
استفاده می کند (این جایی است که داده های MySQL ما ذخیره می شود).
همه سرویسهای موجود در کانتینر ما باید به یک شبکه متصل شوند تا با هم کار کنند. پارامتر شبکه ها مشخص می کند که کانتینر شما باید از کدام شبکه داخلی استفاده کند، در این مورد، Sail.
در نهایت، پارامتر Healthcare
دستوراتی را مشخص میکند که Docker باید برای بررسی سلامت کانتینر شما اجرا کند و اطمینان حاصل کند که طبق انتظار کار میکند.
اگر نگاهی دقیق به سرویس laravel.test
بیندازید، پارامتری که اول می شود ساخت است. به یک Dockerfile
اشاره می کند که در vendor/laravel/sail/runtimes/8.0/.
قرار دارد. این Dockerfile توسط تیم لاراول ایجاد شده است و حاوی دستورالعمل هایی برای ساختن ایمیجی است که در اینجا به آن نیاز داریم، بنابراین ما هیچ ایمیجی را از داکر هاب نمونه سازی نمی کنیم:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.0
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.0/app
ports:
- '${APP_PORT:-80}:80'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
- redis
- selenium
پارامتر image به ایمیجی که باید نمونه سازی شود اشاره می کند. در این مورد، یکی ایجاد شده توسط build. ports
کانتینر و پورت های محلی ما را با هم نقشه می کشد. محیطها به اعتبارنامههایی اشاره میکنند که در کد PHP ما استفاده میشوند. volumes برای ذخیره داده های مربوط به PHP استفاده می شود که نمی خواهیم از دست بدهیم، و شبکه ها شبکه داخلی را مشخص می کند که این سرویس باید به آن متصل شود.
پارامتر dependent_on
مشخص می کند که کدام سرویس ها باید قبل از شروع برنامه ما راه اندازی و اجرا شوند. کاربرد ما به mysql، redis و سلنیوم بستگی دارد.
آخرین سرویس، redis، مشابه سرویس mysql است:
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sailredis:/data'
networks:
- sail
healthcheck:
test: ["CMD", "redis-cli", "ping"]
ابتدا یک ایمیج Redis نمونه سازی می شود. سپس کانتینر و پورت های محلی ما همگام سازی می شوند. ما از یک حجم برای ذخیره دادههای Redis خود استفاده میکنیم، شبکه داخلی را که این سرویس باید به آن متصل شود تعریف میکنیم و برای اطمینان از اینکه کانتینر ما به درستی کار میکند، یک بررسی سلامتی انجام میدهیم.
مرحله 3 - برخی از دستورات Sail را امتحان کنید
به طور پیش فرض، برای اجرای دستورات Sail، خط vendor/bin/sail
باید قبل از دستورات باشد. با این حال، میتوانیم یک نام مستعار bash را پیکربندی کنیم که فقط یک کلمه باشد تا دستورات ما کوتاهتر شود.
اساساً، ما خط vendor/bin/sail
را با کلمه sail جایگزین میکنیم:
alias sail='bash vendor/bin/sail'
برای اجرای تمام کانتینرهای فایل docker-compose.yml
و شروع برنامه ما، از دستور زیر استفاده می کنیم:
sail up
برای شروع کانتینرها در پس زمینه، از:
sail up -d
هنگامی که برنامه شما راه اندازی و اجرا شد، می توانید برای مشاهده آن به http://localhost
مراجعه کنید.
برای متوقف کردن کانتینرها، Control + C
را روی صفحه کلید خود فشار دهید. اگر در پسزمینه اجرا میشوند، اجرا کنید:
sail down
هنگام اجرای دستورات artisan، composer و npm، نام مستعار Sail باید قبل از دستورات باشد.
به عنوان مثال به جای اجرای:
php artisan migrate
شما دستور زیر را اجرا خواهید کرد:
sail artisan migrate
و به جای :
composer require laravel/sanctum
شما دستور زیر را اجرا خواهید کرد:
sail composer require laravel/sanctum
نتیجه
شما به پایان آموزش رسیدید! ما توانستیم یک برنامه جدید Sail ایجاد و راه اندازی کنیم. فایل docker-compose.yml
Sail را بررسی کردیم و نحوه تنظیم کانتینرها را آموختیم. ما همچنین برخی از دستورات ضروری برای اجرای برنامه Sail خود را یاد گرفتیم. اما همیشه چیزهای بیشتری برای دانستن وجود دارد! برای کسب اطلاعات بیشتر در مورد Sail، اسناد رسمی را در اینجا بررسی کنید.