Перейти к содержимому
Главная страница » Приложение Laravel в Docker

Приложение Laravel в Docker

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

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

Настройка проекта Laravel

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

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

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

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

Создание файла Dockerfile

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

Dockerfile

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"]

Настройка Docker Compose

Создайте файл «docker-compose.yml» в корневом каталоге вашего проекта. Этот файл управляет вашими контейнерами Docker, определяя службы для Laravel (приложение), MySQL (база данных) и Nginx (веб-сервер). Он создаёт сеть для этих служб и том для MySQL.

docker-compose.yml

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.

Настройка Nginx

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

nginx.conf


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;
    }
}

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

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

docker-compose up -d 

Настройка базы данных Laravel

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

.env

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=user
DB_PASSWORD=password
Помните, что эти переменные среды являются конфиденциальными и не должны быть доступны публично. Кроме того, пароли должны быть безопасными.

Перенос баз данных

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

docker-compose exec app php artisan migrate 

Доступ к приложению

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

Мы успешно создали среду разработки Laravel на базе Docker с интеграцией MySQL и конфигурацией Nginx. Такая настройка повышает согласованность между сценариями разработки и облегчает совместную работу команды. 
Чтобы ещё больше усовершенствовать свою среду, изучите дополнительные функции Docker и расширенные возможности Laravel.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *