راه اندازی محیط داکر از طریق bash یا ترمینال
مرحله اول: Run کردن داکر دسکتاپ
- با «شکن» تحریمهای اینترنتی رو بیاثر کن!
با توجه به اینکه داکر ایران را تحریم کرده از روشی که در سایت شکن گفته شده DNS سیستم محلی خود را تغییر دهید و سیستم خود را Restart کنید.
به علت تحریم ایران این مرحله الزامی می باشد و باید از یک DNS حرفه ای استفاده کنید.
- تحریم شکن خود را فعال کنید
- داکر دسکتاپ خود را run کنید
زمپ (XAMPP) و داکر دسکتاپ (Docker Desktop) دو ابزار مختلف برای راهاندازی محیطهای سرور و توسعه نرمافزار هستند. همانگونه که برای استفاده از زمپ باید ابتدا آن را استارت کنید، داکر دسکتاپ را نیز باید قبل از استفاده استارت کنید. برای استارت داکر دسکتاپ اینجا کلیک کنید.
مرحله دوم: راه اندازی محیط Docker
اگر پروژه شما در محیط bash یا همان ترمینال اوبونتو 22.04 باز نیست مطابق دستور زیر آن را باز کنید.
- باز کردن پروژه در محیط ترمینال
- ساخت و راه اندازی کانتینر ها (داکر دسکتاپ باید ران باشد!)
- docker-compose
- up
- d- (یا detach--)
- --build
- تصاویر داکر را از نو میسازد (اگر تغییراتی در کد یا تنظیمات وجود داشته باشد).
- کانتینرها را بر اساس سرویسهای تعریفشده در docker-compose.yml راهاندازی میکند.
- کانتینرها را در حالت پسزمینه (d-) اجرا میکند تا ترمینال شما آزاد بماند.
- نصب وابستگیهای Composer
- docker-compose exec:
- app :
- composer install:
- وابستگیهای PHP پروژه را از فایل composer.json نصب میکند
- یک فایل composer.lock ایجاد میکند (یا به روز میکند)
- پکیجها را در دایرکتوری vendor/ نصب میکند
- تنظیم مجوزهای فایلها
- تنظیم مجوزهای فایلها (دستور اول)
- تنظیم مجوزهای فایلها (دستور دوم)
- این بخش فرمانی است که درون کانتینر app اجرا میشود.
- chmod : دستور تغییر مجوزهای دسترسی در لینوکس
- R- : به صورت بازگشتی (Recursive) عمل کند، یعنی روی تمام فایلها و دایرکتوریهای زیرمجموعه نیز اعمال شود
- 775 : سطح دسترسی را تنظیم می کند
- مالک (owner):
- گروه (group):
- سایرین (others):
- storage در دستور اول وbootstrap/cache در دستور دوم : مسیر دایرکتوری که مجوزهای آن تغییر میکند را مشخص می کند
- کپی فایل env.
- تنظیمات دیتابیس (مثل DB_HOST, DB_USERNAME)
- کلید امنیتی برنامه (APP_KEY)
- تنظیمات کش، ایمیل، و سایر سرویسهای خارجی را ذخیره میکند.
- تولید کلید برنامه
- docker-compose exec
- app
- php artisan key:generate
- APP_KEY را در فایل .env تولید یا بهروزرسانی میکند.
- این کلید برای رمزنگاری دادههای حساس (مثل sessionها، کوکیها و دادههای رمز شده) استفاده میشود.
- باز کردن پورت 3306
- sudo:
- ufw:
- allow 3306:
- پیکربندی فایل env.
- اجرای migrations
cd first-website
docker-compose up -d --build
دستور docker-compose up -d --build یک دستور پرکاربرد در Docker است که چندین عمل را به صورت همزمان انجام میدهد. در اینجا ببینیم که هر بخش از این دستور چه کاری انجام میدهد:
این بخش نشاندهنده استفاده از ابزار Docker Compose است که برای مدیریت برنامههای چندکانِینری (multi-container) با استفاده از یک فایل پیکربندی (معمولاً docker-compose.yml) به کار میرود.
این دستور سرویسهای تعریفشده در فایل docker-compose.yml را راهاندازی میکند. اگر کانتینرها از قبل وجود نداشته باشند، آنها را ایجاد میکند و در غیر این صورت، کانتینرهای موجود را راهاندازی مجدد میکند.
این پرچم باعث میشود کانتینرها در حالت detached (پسزمینه) اجرا شوند، یعنی ترمینال شما بلوکه نمیشود و میتوانید ادامه کار کنید. اگر این پرچم را نگذارید، لاگهای کانتینرها در ترمینال نمایش داده میشوند.
این گزینه به Docker میگوید که تصاویر (images) مورد نیاز را از نو بسازد (بر اساس Dockerfileهای تعریفشده). اگر تصاویر از قبل ساخته شده باشند، Docker به طور پیشفرض از نسخههای کششده استفاده میکند، اما --build آنها را مجدداً میسازد تا مطمئن شوید تغییرات اخیر اعمال شدهاند.
علت استفاده از این دستور
docker-compose exec app composer install
این دستور در یک محیط Docker چندین کار را انجام میدهد:
این بخش از دستور برای اجرای یک دستور درون یک سرویس در حال اجرا در Docker Compose استفاده میشود.
این نام سرویسی است که در فایل docker-compose.yml تعریف شده است. معمولاً این سرویس حاوی اپلیکیشن اصلی شماست.
این دستور درون container سرویس app اجرا میشود و:
هر دو دستور زیر را به ترتیب نصب کنید.
docker-compose exec app chmod -R 775 storage
docker-compose exec app chmod -R 775 bootstrap/cache
این دستور یک فرمان Docker Compose است که برای تغییر مجوزهای دسترسی (permissions) فایلها و دایرکتوریها درون یک کانتینر استفاده میشود.
معنی کد دسترسی 775
خواندن (4) + نوشتن (2) + اجرا (1) = 7
خواندن (4) + نوشتن (2) + اجرا (1) = 7
خواندن (4) + اجرا (1) = 5
cp .env.example .env
این دستور، فایل .env.example (که به عنوان الگوی پیشفرض در پروژه لاراول وجود دارد) را کپی میکند و یک فایل جدید به نام .env ایجاد میکند.
فایل .env فایل تنظیمات محیطی (Environment Variables) پروژه است و مقادیر حیاتی مانند:
docker-compose exec app php artisan key:generate
معنی بخشهای مختلف دستور:
برای اجرای یک دستور داخل یک کانتینر در حال اجرا (مدیریت شده توسط docker-compose) استفاده میشود.
نام سرویس (service) تعریف شده در فایل docker-compose.yml است که معمولاً به کانتینر اصلی لاراول اشاره دارد (جایی که کدهای PHP اجرا میشوند).
یک دستور Artisan (کنسول لاراول) است که:
sudo ufw allow 3306
چرا این دستور مهم است؟
دستور sudo ufw allow 3306 در سیستمهای لینوکس (مخصوصاً اوبونتو/دبیان) برای باز کردن پورت 3306 در فایروال UFW استفاده میشود. این کار به برنامههای خارجی (مثلا داکر دسکتاپ) اجازه میدهد به سرور MySQL که روی پورت 3306 در حال اجراست متصل شوند.
برای اجرای دستور با دسترسی مدیرسیستم (root) نیاز است.
مخفف Uncomplicated Firewall، یک فایروال ساده برای لینوکس است.
پورت 3306 (پورت پیشفرض MySQL) را در فایروال باز میکند.
فایل env. را باز کنید و تنظیمات دیتابیس را به صورت زیر تغییر دهید توجه کنید که DB_CONNECTION=sqlite را حذف کرده یا به صورت متن در آورید و سپس کد زیر را آنجا پیست نمایید:
DB_CONNECTION=mysqlDB_HOST=dbDB_PORT=3306DB_DATABASE=laravelDB_USERNAME=laravelDB_PASSWORD=secret

docker-compose exec app php artisan migrate