Зі зростанням популярності контейнеризації у веб-розробці, 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:
Крок 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 репозиторій