Переглянути пости за тегами

Налаштування середовища розробки для останньої версії Laravel за допомогою Docker

  • 3 хв читання
  • 23 Чер, 2024

Зі зростанням популярності контейнеризації у веб-розробці, Docker став незамінним інструментом для розробників. Docker дозволяє безперешкодно керувати залежностями та середовищами, що дає можливість розробникам зосередитися на написанні коду. У цій статті ми покажемо вам, як налаштувати середовище розробки Laravel за допомогою Docker.

Передумови

Перед початком переконайтеся, що на вашій системі встановлені наступні інструменти:

  • Docker: Відвідайте офіційний веб-сайт Docker, щоб завантажити та встановити Docker Desktop.
  • Docker Compose: Зазвичай включено в Docker Desktop, встановіть окремо, якщо його немає.

Спочатку створимо папку для нашого проєкту та налаштуємо структуру для проєкту:

/docker
   /nginx # папка для налаштувань nginx
   /php   # папка для налаштувань php
   nginx.Dockerfile    # Dockerfile для nginx
   php.Dockerfile      # Dockerfile для php
/mysql # папка для mysql volume, порожня папка
/src   # папка, де буде розміщено код вашого сайту
docker-compose.yml  # файл конфігурації docker з сервісами
   

Крок 1: Налаштування Docker середовища для PHP

У папці docker створіть файл php.Dockerfile. Цей файл визначає конфігурацію для нашого Docker контейнера. Додайте наступний вміст у файл:

# docker/php.Dockerfile

FROM php:8.2-fpm-alpine

ADD ./docker/php/www.conf /usr/local/etc/php-fpm.d/www.conf

RUN addgroup -g 1000 laravel && adduser -G laravel -g laravel -s /bin/sh -D laravel

RUN mkdir -p /var/www/html

ADD ./src/ /var/www/html

RUN docker-php-ext-install pdo pdo_mysql

RUN chown -R laravel:laravel /var/www/html

Цей Dockerfile створює Docker контейнер з PHP 8.2 та всіма необхідними розширеннями для запуску проєкту Laravel.

Створюємо файл www.conf для php конфігурації

# docker/php/www.conf

[www]

user = laravel
group = laravel

listen = 127.0.0.1:9000

pm = dynamic

pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Крок 2: Налаштування Docker середовища для Nginx

Створіть папку nginx у docker папці. У ній створіть файл default.conf та вставте наступну конфігурацію сервера Nginx:

# docker/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$ {
        try_files $uri = 404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

 

Створіть nginx.Dockerfile для сервісу Nginx:

# docker/nginx.Dockerfile

FROM nginx:stable-alpine

ADD ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf

RUN mkdir -p /var/www/html

 

Крок 3: Створення файлу Docker Compose

У кореневій папці вашого проєкту створіть файл docker-compose.yml. Цей файл дозволяє нам визначати та керувати Docker додатками з кількома контейнерами. Вставте наступний вміст:

# docker-compose.yml

services:

    nginx:
        build:
            context: .
            dockerfile: ./docker/nginx.Dockerfile
        depends_on:
            - php
            - mysql
        container_name: laravel_nginx
        ports:
            - 80:80
            - 443:443
        volumes:
            - ./src:/var/www/html

    php:
        build:
            context: .
            dockerfile: ./docker/php.Dockerfile
        container_name: laravel_php
        volumes:
            - ./src:/var/www/html

    mysql:
        image: mysql:8.0.27
        platform: linux/amd64
        container_name: laravel_mysql
        ports:
            - 3306:3306
        volumes:
            - ./mysql:/var/lib/mysql
        environment:
            MYSQL_DATABASE: laraveldb
            MYSQL_USER: laravel
            MYSQL_PASSWORD: secret
            MYSQL_ROOT_PASSWORD: secret

    composer:
        image: composer:latest
        container_name: laravel_composer
        volumes:
            - ./src:/var/www/html
        working_dir: /var/www/html

    artisan:
        build:
            context: .
            dockerfile: ./docker/php.Dockerfile
        container_name: laravel_artisan
        volumes:
            - ./src:/var/www/html
        working_dir: /var/www/html
        entrypoint: ['php', 'artisan']

    npm:
        image: node:current-alpine
        container_name: laravel_npm
        volumes:
            - ./src:/var/www/html
        working_dir: /var/www/html
        entrypoint: ['npm']

 

Цей docker-compose.yml файл створює два сервіси: один для PHP і один для Nginx. Він також визначає Docker мережу, яку використовують ці два сервіси для спілкування.

 

Крок 4: Збірка Docker контейнерів

Тепер ми готові зібрати  наші Docker контейнери. З кореневої папки вашого Laravel проєкту виконайте наступну команду:

 

docker compose build

 

Крок 5: Створення нового проєкту Laravel

Нам потрібно створити новий проєкт Laravel. Перейдіть до директорії, де ви бажаєте створити ваш проєкт, та виконайте наступну команду:

 

docker compose run --rm composer create-project laravel/laravel .

Після цієї команди код проєкту з'явиться в папці src.

Запускаємо docker контейнери

docker compose up -d

Ви можете перевірити, чи працює проект, відкривши браузер. Наприклад, якщо встановлено значення значення порта 80 в docker-compose.yml:

http://localhost

Крок 6: Налаштування проєкту Laravel

Налаштування доступу до бази даних mysql. Для цього робимо зміни в файлі /src/.env . Розкоментовуємо і змінюємо наступні рядки:

DB_CONNECTION=mysql       # ми робимо з'єднання з mysql базою
DB_HOST=mysql             # ім'я сервіса в docker-compose.yml, у нас називається mysql
DB_PORT=3306              # mysql стандартний порт
DB_DATABASE=laraveldb     # ім'я бази даних, встановлено в значенні MYSQL_DATABASE в docker-compose.yml
DB_USERNAME=laravel       # ім'я користувача, встановлене в значенні MYSQL_USER в docker-compose.yml
DB_PASSWORD=secret        # пароль, встановлений в значенні MYSQL_PASSWORD в docker-compose.yml

Перезавантажуємо всі сервіси, щоб всі наші зміни підтягнулись.

docker compose down
docker compose up -d

Крок 7: Виконуємо міграції бази даних

docker compose run --rm artisan migrate

 

Якщо вам потрібно виконати composer або artisan, ми створили окремі сервіси для цього, які можна запустити командами:

# for composer 

docker compose run --rm composer

# for artisan

docker compose run --rm artisan

Доступ до повного проекту

Щоб отримати повний проект, відвідайте GitHub репозиторій