مقاله

فایل compose.yaml چندسرویسه، شبکه داخلی، env و workflow روزانه dev — الگوی عملی.

Docker Compose برای Laravel — MySQL، Redis و Nginx با هم

Docker Compose برای Laravel — MySQL، Redis و Nginx با هم

یک container Laravel کافی نیست — DB، cache و web server جدا هستند. Docker Compose چند service را در یک فایل تعریف و با docker compose up بالا می‌آورد. پایه: معرفی Docker.

compose.yaml نمونه

services:
  app:
    build:
      context: .
      dockerfile: docker/php/Dockerfile
    volumes:
      - .:/var/www
    depends_on:
      - mysql
      - redis
    networks:
      - laravel

  nginx:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - .:/var/www
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app
    networks:
      - laravel

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: laravel
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - laravel

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
    networks:
      - laravel

networks:
  laravel:

volumes:
  mysql_data:

.env برای Docker

DB_HOST=mysql
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=secret
REDIS_HOST=redis
CACHE_STORE=redis
QUEUE_CONNECTION=redis

hostname = نام service در compose — نه localhost از داخل app container.

دستورات روزانه

docker compose up -d
docker compose exec app php artisan migrate
docker compose exec app composer install
docker compose logs -f nginx
docker compose down

depends_on و healthcheck

mysql:
  healthcheck:
    test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
    interval: 5s
    retries: 10

migrate بعد از ready بودن DB — کمتر race condition.

Queue worker در Compose

queue:
  build: .
  command: php artisan queue:work --sleep=3
  depends_on:
    - mysql
    - redis
  volumes:
    - .:/var/www

QueueRedis.

Node/Vite اختیاری

node:
  image: node:20-alpine
  working_dir: /var/www
  volumes:
    - .:/var/www
  command: npm run dev -- --host

اشتباهات

  • DB_HOST=127.0.0.1 داخل app container
  • بدون named volume — داده MySQL با down -v پاک
  • production compose همان dev بدون hardening

جمع‌بندی

Compose dev stack کامل. Nginx config: مقاله Nginx. SSL production: Let us Encrypt.

Compose برای پروژه