بی آکادمی
آموزش پایتون
هوش مصنوعی
دانلود و نصب لینوکس
داکر دسکتاپ
VS Code
آموزش لاراول
گیت و گیت هاب
آموزش HTML
آموزش CSS
فلکس باکس
جاوااسکریپت
TypeScript
فروشگاه اینترنتی
اپلیکیشن موبایل
آموزش اکسل
آموزش SQL
آموزش MySQL
آموزش PHP

راه اندازی محیط داکر از طریق bash یا ترمینال

مرحله اول: Run کردن داکر دسکتاپ

  1. با «شکن» تحریم‌های اینترنتی رو بی‌اثر کن!

    با توجه به اینکه داکر ایران را تحریم کرده از روشی که در سایت شکن گفته شده DNS سیستم محلی خود را تغییر دهید و سیستم خود را Restart کنید.

    به علت تحریم ایران این مرحله الزامی می باشد و باید از یک DNS حرفه ای استفاده کنید.

  2. تحریم شکن خود را فعال کنید run کردن داکر دسکتاپ
  3. داکر دسکتاپ خود را run کنید

    زمپ (XAMPP) و داکر دسکتاپ (Docker Desktop) دو ابزار مختلف برای راه‌اندازی محیط‌های سرور و توسعه نرم‌افزار هستند. همانگونه که برای استفاده از زمپ باید ابتدا آن را استارت کنید، داکر دسکتاپ را نیز باید قبل از استفاده استارت کنید. برای استارت داکر دسکتاپ اینجا کلیک کنید.

مرحله دوم: راه اندازی محیط Docker

اگر پروژه شما در محیط bash یا همان ترمینال اوبونتو 22.04 باز نیست مطابق دستور زیر آن را باز کنید.

  1. باز کردن پروژه در محیط ترمینال
  2. Ubuntu 22.04
    cd first-website

  3. ساخت و راه اندازی کانتینر ها (داکر دسکتاپ باید ران باشد!)
  4. bash
    docker-compose up -d --build

    دستور docker-compose up -d --build یک دستور پرکاربرد در Docker است که چندین عمل را به صورت همزمان انجام می‌دهد. در اینجا ببینیم که هر بخش از این دستور چه کاری انجام می‌دهد:

    1. docker-compose
    2. این بخش نشان‌دهنده استفاده از ابزار Docker Compose است که برای مدیریت برنامه‌های چندکانِینری (multi-container) با استفاده از یک فایل پیکربندی (معمولاً docker-compose.yml) به کار می‌رود.

    3. up
    4. این دستور سرویس‌های تعریف‌شده در فایل docker-compose.yml را راه‌اندازی می‌کند. اگر کانتینرها از قبل وجود نداشته باشند، آن‌ها را ایجاد می‌کند و در غیر این صورت، کانتینرهای موجود را راه‌اندازی مجدد می‌کند.

    5. d- (یا detach--)
    6. این پرچم باعث می‌شود کانتینرها در حالت detached (پس‌زمینه) اجرا شوند، یعنی ترمینال شما بلوکه نمی‌شود و می‌توانید ادامه کار کنید. اگر این پرچم را نگذارید، لاگ‌های کانتینرها در ترمینال نمایش داده می‌شوند.

    7. --build
    8. این گزینه به Docker می‌گوید که تصاویر (images) مورد نیاز را از نو بسازد (بر اساس Dockerfileهای تعریف‌شده). اگر تصاویر از قبل ساخته شده باشند، Docker به طور پیش‌فرض از نسخه‌های کش‌شده استفاده می‌کند، اما --build آن‌ها را مجدداً می‌سازد تا مطمئن شوید تغییرات اخیر اعمال شده‌اند.

    علت استفاده از این دستور

    • تصاویر داکر را از نو می‌سازد (اگر تغییراتی در کد یا تنظیمات وجود داشته باشد).
    • کانتینرها را بر اساس سرویس‌های تعریف‌شده در docker-compose.yml راه‌اندازی می‌کند.
    • کانتینرها را در حالت پس‌زمینه (d-) اجرا می‌کند تا ترمینال شما آزاد بماند.

  5. نصب وابستگی‌های Composer
  6. bash
    docker-compose exec app composer install

    این دستور در یک محیط Docker چندین کار را انجام می‌دهد:

    1. docker-compose exec:
    2. این بخش از دستور برای اجرای یک دستور درون یک سرویس در حال اجرا در Docker Compose استفاده می‌شود.

    3. app :
    4. این نام سرویسی است که در فایل docker-compose.yml تعریف شده است. معمولاً این سرویس حاوی اپلیکیشن اصلی شماست.

    5. composer install:
    6. این دستور درون container سرویس app اجرا می‌شود و:

      • وابستگی‌های PHP پروژه را از فایل composer.json نصب می‌کند
      • یک فایل composer.lock ایجاد می‌کند (یا به روز می‌کند)
      • پکیج‌ها را در دایرکتوری vendor/ نصب می‌کند

    7. تنظیم مجوزهای فایل‌ها
    8. هر دو دستور زیر را به ترتیب نصب کنید.

      1. تنظیم مجوزهای فایل‌ها (دستور اول)
      2. bash
        docker-compose exec app chmod -R 775 storage
      3. تنظیم مجوزهای فایل‌ها (دستور دوم)
      4. bash
        docker-compose exec app chmod -R 775 bootstrap/cache

      این دستور یک فرمان Docker Compose است که برای تغییر مجوزهای دسترسی (permissions) فایل‌ها و دایرکتوری‌ها درون یک کانتینر استفاده می‌شود.

      • این بخش فرمانی است که درون کانتینر app اجرا می‌شود.
      • chmod : دستور تغییر مجوزهای دسترسی در لینوکس
      • R- : به صورت بازگشتی (Recursive) عمل کند، یعنی روی تمام فایل‌ها و دایرکتوری‌های زیرمجموعه نیز اعمال شود
      • 775 : سطح دسترسی را تنظیم می کند
      • معنی کد دسترسی 775

        • مالک (owner):
        • خواندن (4) + نوشتن (2) + اجرا (1) = 7

        • گروه (group):
        • خواندن (4) + نوشتن (2) + اجرا (1) = 7

        • سایرین (others):
        • خواندن (4) + اجرا (1) = 5

      • storage در دستور اول وbootstrap/cache در دستور دوم : مسیر دایرکتوری که مجوزهای آن تغییر می‌کند را مشخص می کند

    9. کپی فایل env.
    10. bash
      cp .env.example .env

      این دستور، فایل .env.example (که به عنوان الگوی پیش‌فرض در پروژه لاراول وجود دارد) را کپی می‌کند و یک فایل جدید به نام .env ایجاد می‌کند.

      فایل .env فایل تنظیمات محیطی (Environment Variables) پروژه است و مقادیر حیاتی مانند:

      • تنظیمات دیتابیس (مثل DB_HOST, DB_USERNAME)
      • کلید امنیتی برنامه (APP_KEY)
      • تنظیمات کش، ایمیل، و سایر سرویس‌های خارجی را ذخیره می‌کند.

    11. تولید کلید برنامه
    12. bash
      docker-compose exec app php artisan key:generate

      معنی بخش‌های مختلف دستور:

      1. docker-compose exec
      2. برای اجرای یک دستور داخل یک کانتینر در حال اجرا (مدیریت شده توسط docker-compose) استفاده می‌شود.

      3. app
      4. نام سرویس (service) تعریف شده در فایل docker-compose.yml است که معمولاً به کانتینر اصلی لاراول اشاره دارد (جایی که کدهای PHP اجرا می‌شوند).

      5. php artisan key:generate
      6. یک دستور Artisan (کنسول لاراول) است که:

        • APP_KEY را در فایل .env تولید یا به‌روزرسانی می‌کند.
        • این کلید برای رمزنگاری داده‌های حساس (مثل sessionها، کوکی‌ها و داده‌های رمز شده) استفاده می‌شود.
    13. باز کردن پورت 3306
    14. bash
      sudo ufw allow 3306

      چرا این دستور مهم است؟

      دستور sudo ufw allow 3306 در سیستم‌های لینوکس (مخصوصاً اوبونتو/دبیان) برای باز کردن پورت 3306 در فایروال UFW استفاده می‌شود. این کار به برنامه‌های خارجی (مثلا داکر دسکتاپ) اجازه می‌دهد به سرور MySQL که روی پورت 3306 در حال اجراست متصل شوند.

      1. sudo:
      2. برای اجرای دستور با دسترسی مدیرسیستم (root) نیاز است.

      3. ufw:
      4. مخفف Uncomplicated Firewall، یک فایروال ساده برای لینوکس است.

      5. allow 3306:
      6. پورت 3306 (پورت پیش‌فرض MySQL) را در فایروال باز می‌کند.

    15. پیکربندی فایل env.
    16. فایل env. را باز کنید و تنظیمات دیتابیس را به صورت زیر تغییر دهید توجه کنید که DB_CONNECTION=sqlite را حذف کرده یا به صورت متن در آورید و سپس کد زیر را آنجا پیست نمایید:

      .env
      DB_CONNECTION=mysql
      DB_HOST=db
      DB_PORT=3306
      DB_DATABASE=laravel
      DB_USERNAME=laravel
      DB_PASSWORD=secret
      فرم ثبت نام
    17. اجرای migrations
    18. bash
      docker-compose exec app php artisan migrate