Top.Mail.Ru

Упаковка Laravel проекта в Docker: Полный гайд

Упаковка Laravel проекта в Docker: Полный гайд

Docker позволяет изолировать Laravel-проект в контейнерах, обеспечивая одинаковое окружение для разработки, тестирования и продакшена. В этой статье мы шаг за шагом упакуем Laravel-проект в Docker-контейнеры, настроим nginx, PHP, MySQL и Laravel Scheduler.


Структура проекта

laravel-docker/
├── .env
├── docker-compose.yml
├── Dockerfile
├── nginx/
│   └── default.conf
└── src/
    └── ... Laravel файлы ...

Создание docker-compose.yml

version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: laravel_app
    working_dir: /var/www/html
    volumes:
      - ./src:/var/www/html
    ports:
      - "9000:9000"
    networks:
      - laravel

  webserver:
    image: nginx:alpine
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app
    networks:
      - laravel

  db:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      MYSQL_DATABASE: laravel
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: laravel
      MYSQL_PASSWORD: secret
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - laravel

networks:
  laravel:

volumes:
  db_data:

Создание Dockerfile для PHP + Laravel

FROM php:8.2-fpm

# Установка зависимостей
RUN apt-get update && apt-get install -y \
    build-essential \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip \
    curl \
    git \
    nano \
    libzip-dev \
    libpq-dev \
    && docker-php-ext-install pdo pdo_mysql mbstring exif pcntl bcmath gd zip

# Установка Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Установка рабочей директории
WORKDIR /var/www/html

Конфигурация nginx

Создайте файл nginx/default.conf:

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    root /var/www/html/public;

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

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }
}

Переместите Laravel-проект в папку src/, чтобы он был доступен в контейнерах.

Отредактируйте src/.env:

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secret

Запуск Docker-контейнеров

docker-compose up -d --build

Затем зайдите в контейнер app:

docker exec -it laravel_app bash

Внутри установите зависимости:

composer install
php artisan key:generate
php artisan migrate

Откройте браузер и перейдите на http://localhost — вы должны увидеть главную страницу Laravel.

 

Автор:

81

Читайте также

2 комментария

Оставьте комментарий

Комментарии

  • Имя автора
    sdfsdg
    24.06.2025 в 07:34

    sdgfsdg


  • Имя автора
    Евгений
    24.06.2025 в 07:36

    Test


Бот: Здравствуйте! Я чат-бот веб-разработчика. Чем могу помочь в создании или доработке вашего сайта?