رفتن به محتوای اصلی
دیدگاه کلود | ارائه‌کننده سرورهای ابری و اختصاصی
آموزش نصب و راه‌اندازی Laravel با Docker Compose روی Ubuntu 22.04

آموزش نصب و راه‌اندازی Laravel با Docker Compose روی Ubuntu 22.04

این راهنما توسط دیدگاه تهیه شده و هدف آن ارائه یک آموزش کامل، کاربردی و در عین حال ساده برای راه‌اندازی فریم‌ورک Laravel با استفاده از Docker Compose روی Ubuntu 22.04 است. اگر می‌خواهید محیط توسعه‌ای استاندارد، قابل تکرار و نزدیک به محیط production داشته باشید، جای درستی آمده‌اید.


این راهنما توسط دیدگاه تهیه شده و هدف آن ارائه یک آموزش کامل، کاربردی و در عین حال ساده برای راه‌اندازی فریم‌ورک Laravel با استفاده از Docker Compose روی Ubuntu 22.04 است. اگر می‌خواهید محیط توسعه‌ای استاندارد، قابل تکرار و نزدیک به محیط production داشته باشید، جای درستی آمده‌اید.


مقدمه

کانتینرسازی یا Containerization یعنی اجرای یک برنامه به‌همراه تمام وابستگی‌هایش داخل محیط‌های ایزوله‌ای به نام کانتینر. نتیجه؟

  • محیط توسعه همه اعضای تیم یکی می‌شود

  • دیگر خبری از «روی سیستم من کار می‌کنه» نیست

  • توسعه، تست و دیپلوی ساده‌تر و قابل پیش‌بینی‌تر می‌شود

در این آموزش، با استفاده از Docker Compose یک پروژه Laravel را در قالب سه سرویس جداگانه اجرا می‌کنیم:

  • app: شامل PHP 7.4 (PHP-FPM)

  • db: دیتابیس MySQL 8

  • nginx: وب‌سرور برای ارائه اپلیکیشن

فایل‌های پروژه بین سیستم شما و کانتینرها سینک می‌شوند تا توسعه راحت و سریع باشد.


پیش‌نیازها

قبل از شروع، مطمئن شوید موارد زیر را دارید:

  • Ubuntu 22.04 (لوکال یا سرور)

  • دسترسی sudo

  • Docker نصب‌شده

  • Docker Compose نصب‌شده

پیشنهاد دیدگاه: اگر روی سرور کار می‌کنید، حتما فایروال فعال باشد.


مرحله ۱: دریافت پروژه نمونه Laravel

ابتدا یک پروژه دمو Laravel را از GitHub دریافت می‌کنیم:

2 خط
cd ~
curl -L https://github.com/do-community/travellist-laravel-demo/archive/tutorial-1.0.1.zip -o travellist.zip
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

نصب unzip و استخراج فایل‌ها:

5 خط
sudo apt update
sudo apt install unzip
unzip travellist.zip
mv travellist-laravel-demo-tutorial-1.0.1 travellist-demo
cd travellist-demo
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

مرحله ۲: تنظیم فایل .env

فایل .env محل تنظیمات وابسته به محیط است و نباید عمومی شود.

ساخت فایل:

2 خط
cp .env.example .env
nano .env
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

تنظیمات دیتابیس را به شکل زیر تغییر دهید:

6 خط
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=travellist
DB_USERNAME=travellist_user
DB_PASSWORD=password
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

در اینجا db همان نام سرویس دیتابیس در Docker Compose است.


مرحله ۳: ساخت Dockerfile برای Laravel

برای اجرای Laravel به یک ایمیج اختصاصی PHP نیاز داریم.

ایجاد فایل Dockerfile:

nano Dockerfile
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

محتوا:

17 خط
FROM php:7.4-fpm

ARG user
ARG uid

RUN apt-get update && apt-get install -y \
    git curl zip unzip libpng-dev libonig-dev libxml2-dev

RUN docker-php-ext-install pdo_mysql mbstring bcmath gd

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && chown -R $user:$user /home/$user

WORKDIR /var/www
USER $user
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

این Dockerfile:

  • PHP-FPM را اجرا می‌کند

  • اکستنشن‌های لازم Laravel را نصب می‌کند

  • Composer را اضافه می‌کند

  • مشکل permission را از ریشه حل می‌کند


مرحله ۴: تنظیم Nginx و دیتابیس

تنظیم Nginx

2 خط
mkdir -p docker-compose/nginx
nano docker-compose/nginx/travellist.conf
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

کانفیگ:

15 خط
server {
  listen 80;
  root /var/www/public;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    fastcgi_pass app:9000;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

تنظیم دیتابیس اولیه

2 خط
mkdir docker-compose/mysql
nano docker-compose/mysql/init_db.sql
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

(ایجاد جدول نمونه places برای تست اپلیکیشن)


مرحله ۵: ساخت docker-compose.yml

nano docker-compose.yml
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

ساختار نهایی:

39 خط
version: "3.9"
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        user: sammy
        uid: 1000
    volumes:
      - ./:/var/www
    networks:
      - travellist

  db:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_USER: ${DB_USERNAME}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
    volumes:
      - ./docker-compose/mysql:/docker-entrypoint-initdb.d
    networks:
      - travellist

  nginx:
    image: nginx:alpine
    ports:
      - "8000:80"
    volumes:
      - ./:/var/www
      - ./docker-compose/nginx:/etc/nginx/conf.d
    networks:
      - travellist

networks:
  travellist:
    driver: bridge
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

مرحله ۶: اجرای پروژه

3 خط
docker compose build app
docker compose up -d
docker compose ps
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

سپس در مرورگر:

http://localhost:8000
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

اگر صفحه Laravel را دیدید، همه‌چیز درست است.


نصب وابستگی‌ها و کلید Laravel

2 خط
docker compose exec app composer install
docker compose exec app php artisan key:generate
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

رفع مشکل Permission در Laravel

2 خط
docker compose exec app chown -R sammy:sammy storage bootstrap/cache
docker compose exec app chmod -R 775 storage bootstrap/cache
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

این مرحله بسیار مهم است و جلوی خطاهای رایج Laravel را می‌گیرد.


استفاده از docker-compose.override.yml

برای جدا کردن محیط توسعه و production، از override استفاده کنید.

  • توسعه: bind mount + debug

  • production: image آماده + volume

این روش، تمیزترین و حرفه‌ای‌ترین ساختار ممکن است.


جمع‌بندی دیدگاه

با این ساختار:

  • محیط شما استاندارد و قابل تکرار است

  • توسعه و دیپلوی سریع‌تر می‌شود

  • مشکلات permission و dependency حذف می‌شوند

  • آماده مقیاس‌پذیری هستید

این دقیقاً همان روشی است که دیدگاه برای پروژه‌های حرفه‌ای Laravel پیشنهاد می‌دهد.

موفق باشید 🚀