🐳 Как настроить Laravel с помощью Dockerfile и Docker-Compose

by itisgood

Разработка приложений Laravel требует стабильной и последовательной среды разработки.

Docker, популярная платформа контейнеризации, предлагает эффективный способ создания такой среды.

В этом комплексном руководстве мы рассмотрим, как создать надежную среду разработки Laravel с помощью Docker – ведущей технологии контейнеризации.

Руководство включает в себя шаги по интеграции MySQL и настройке Nginx, обеспечивая бесперебойный процесс разработки.

Необходимые условия

  • Базовые знания о Laravel, Docker и MySQL.
  • На вашей машине установлены Docker и Docker Compose.

Шаг 1: Настройка проекта Laravel

Сначала создайте новый проект Laravel или перейдите в каталог существующего проекта.

Если вы создаете новый проект, используйте Composer:

composer create-project --prefer-dist laravel/laravel my-laravel-app
cd my-laravel-app 

Шаг 2: Создание Dockerfile

Создайте Dockerfile в корне вашего проекта Laravel.

Этот файл использует образ PHP 8.2 и устанавливает необходимые расширения PHP вместе с Composer.

Он описывает окружение вашего приложения Laravel.

FROM php:8.2-fpm

# Install dependencies
RUN apt-get update && apt-get install -y \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]

Шаг 3: Настройка Docker Compose

Создайте файл ‘docker-compose.yml’ в корне вашего проекта.
Этот файл организует работу контейнеров Docker, определяя сервисы для Laravel (app), MySQL (db) и Nginx (web). Он создает сеть для этих сервисов и том для MySQL.
version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: my-laravel-app
    container_name: my-laravel-app
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: my-laravel-app
      SERVICE_TAGS: dev
    working_dir: /var/www/html
    volumes:
      - ./:/var/www/html
    networks:
      - app-network

  db:
    image: mysql:8
    container_name: my-laravel-mysql
    restart: unless-stopped
    tty: true
    ports:
      - "13306:3306"
    environment:
      MYSQL_DATABASE: laravel
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
      SERVICE_TAGS: dev
    volumes:
      - dbdata:/var/lib/mysql
    networks:
      - app-network

  # Nginx Service
  web:
    image: 'nginx:alpine'
    ports:
      - "8000:80"
    volumes:
      - ./:/var/www/html
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  dbdata:
    driver: local

Этот файл определяет два сервиса: app для вашего приложения Laravel и db для MySQL.

Он также задает сеть и том для хранения данных MySQL.

Шаг 4: Реализация конфигурации Nginx

Поместите файл nginx.conf в корень вашего проекта, чтобы настроить сервер Nginx, необходимый для обслуживания вашего приложения.

server {
    listen 80;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html/public;

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

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

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

Шаг 5: Запуск контейнеров

Настроив Dockerfile и docker-compose.yml, вы можете запускать контейнеры.

docker-compose up -d 

Шаг 6: Настройка базы данных Laravel

Измените файл .env в вашем проекте Laravel, чтобы использовать службу MySQL:

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=user
DB_PASSWORD=password

Шаг 7: Миграция баз данных

Запустите миграцию Laravel, чтобы настроить базу данных:

docker-compose exec app php artisan migrate 

Шаг 8: Доступ к приложению

Как только контейнеры будут запущены, вы можете получить доступ к приложению Laravel на сайте http://localhost:8000.

Заключение

Вы успешно создали среду разработки Laravel на базе Docker с интеграцией MySQL и настройкой Nginx.

Такая настройка повышает согласованность сценариев разработки и облегчает совместную работу команды.

Для дальнейшего совершенствования среды изучите дополнительные функции Docker и расширенные возможности Laravel.

см. также:

You may also like

Leave a Comment