Sail: бази даних і Docker-сервіси
Цей гайд про сервіси поруч із laravel.test: SQL, Redis, опційний RabbitMQ, MongoDB і зручні для dev додатки. Доповнює повний гайд Sail. Команди воркерів — у Черги та воркери; розклад .env і серверів — у Оточення та деплой.
Навігація: Усі інструменти · Sail · Черги · Env · Діагностика
Зміст
- Мережа та правила імен хостів
- Сервіс Redis (повний приклад)
- Замінити MySQL на PostgreSQL
- MongoDB і розширення PHP у Sail
- RabbitMQ як контейнер
- Mailpit (SMTP для dev)
- Meilisearch / Typesense (опційний пошук)
- Healthcheck і порядок запуску
- Іменовані томи й скидання даних
Мережа та правила імен хостів
Усі хости з боку застосунку в .env мають бути іменами сервісів Compose (pgsql, redis, mongo), а не 127.0.0.1, бо PHP працює всередині laravel.test. З хост-машини до БД звертаються через 127.0.0.1:${FORWARD_DB_PORT}, коли порти проброшені.
Сервіс Redis (повний приклад)
Додайте в docker-compose.yml (підлаштуйте імена під ваш опублікований файл Sail):
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sail-redis:/data'
networks:
- sail
healthcheck:
test: ["CMD", "redis-cli", "ping"]
retries: 3
timeout: 5s
Зареєструйте sail-redis у верхньому рівні volumes:. У laravel.test додайте:
depends_on:
redis:
condition: service_healthy
(Якщо ваша версія Compose не підтримує condition, використовуйте простий depends_on: [redis].)
.env:
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
Перевірка: sail exec redis redis-cli ping.
Замінити MySQL на PostgreSQL
- Приберіть (або закоментуйте) сервіс
mysqlі його том. - Додайте
pgsqlзі свіжого заготовки Sail (php artisan sail:install --with=pgsqlу тимчасовому проєкті) або з laravel/sailstubs/pgsql.stubдля вашої версії. - Направте
depends_onуlaravel.testнаpgsql. .env:
DB_CONNECTION=pgsql
DB_HOST=pgsql
DB_PORT=5432
DB_DATABASE=laravel
DB_USERNAME=sail
DB_PASSWORD=password
- Перезберіть, якщо змінився образ PHP:
sail build --no-cache && sail up -d. - Чиста БД:
sail artisan migrate:fresh(знищує локальні дані, якщо не зробити dump/restore).
MongoDB і розширення PHP у Sail
1. Сервіс у Compose (мінімально):
mongo:
image: 'mongo:7'
ports:
- '${FORWARD_MONGO_PORT:-27017}:27017'
volumes:
- 'sail-mongo:/data/db'
networks:
- sail
-
Додайте
sail-mongoдоvolumes:. -
У Laravel зазвичай
mongodb/laravel-mongodb. Розширення PHP mongodb має бути вlaravel.test. Післяsail:publishвідредагуйте runtime Dockerfile (наприкладdocker/8.3/Dockerfile):
RUN pecl install mongodb \
&& docker-php-ext-enable mongodb
-
Перезбірка:
sail build --no-cache. -
У пакеті вкажіть хост
mongoі порт 27017 зсередини контейнера застосунку.
RabbitMQ як контейнер
Потрібно, якщо використовуєте пакет з драйвером AMQP (не ядро Laravel):
rabbitmq:
image: 'rabbitmq:3-management-alpine'
hostname: rabbitmq
ports:
- '${FORWARD_RABBITMQ_PORT:-5672}:5672'
- '${FORWARD_RABBITMQ_MANAGEMENT:-15672}:15672'
volumes:
- 'sail-rabbitmq:/var/lib/rabbitmq'
networks:
- sail
environment:
RABBITMQ_DEFAULT_USER: '${RABBITMQ_USER:-sail}'
RABBITMQ_DEFAULT_PASS: '${RABBITMQ_PASSWORD:-password}'
Оголосіть том sail-rabbitmq. У .env задайте ключі, які очікує ваш пакет черг (RABBITMQ_HOST=rabbitmq тощо). Management UI: http://localhost:15672 (guest/guest вимкнено, якщо задано користувача вище — у прикладі sail/password).
Mailpit (SMTP для dev)
У Sail часто є Mailpit. Налаштуйте пошту Laravel на хост mailpit і SMTP-порт з docker-compose.yml (зазвичай 1025 у мережі, на хості — проброшений). Листи дивіться в HTTP UI на проброшеному веб-порту — реальна пошта машину не залишає.
Meilisearch / Typesense (опційний пошук)
Приклад прапорця при встановленні:
php artisan sail:install --with=meilisearch
Або вставте блок Meilisearch / Typesense з upstream-заготовок Sail. SCOUT_DRIVER / MEILISEARCH_HOST (або еквівалент) — на ім’я сервісу і внутрішній порт.
Healthcheck і порядок запуску
Сам depends_on не чекає готовності БД. Краще healthcheck на mysql/pgsql/redis і condition: service_healthy, де Compose це підтримує — тоді php artisan migrate у entrypoint-скриптах рідше падає на старті.
Іменовані томи й скидання даних
- Іменовані томи зберігаються після
sail down. sail down -vвидаляє ці томи — усі локальні дані БД зникнуть.- Для чистого стану без удару по інших проєктах:
docker volume rmз конкретним ім’ям зdocker volume ls.
Див. також
- Sail — повний гайд
- Черги та воркери —
queue:work, Horizon, драйвери RabbitMQ - Оточення та деплой — розділення
.envі контраст із production - Діагностика