Sail: бази данни и Docker услуги
Този гайд е за услуги до laravel.test: SQL, Redis, по избор RabbitMQ, MongoDB и удобни за dev екстри. Допълва пълния Sail гайд. Команди за workers — в Опашки; .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 stub (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.
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:. -
Обикновено
mongodb/laravel-mongodb. Разширението mongodb трябва вlaravel.test. Следsail:publishредактирайте Dockerfile (напр.docker/8.3/Dockerfile):
RUN pecl install mongodb \
&& docker-php-ext-enable mongodb
-
sail build --no-cache. -
Хост
mongo, порт 27017 от контейнера на приложението.
RabbitMQ като контейнер
При пакет с AMQP драйвер:
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. UI на 15672.
Mailpit (SMTP за dev)
Насочете Laravel към mailpit и SMTP порта от compose; писмата в браузър UI.
Meilisearch / Typesense
sail:install --with=meilisearch или блок от upstream. Scout променливи към име на услуга.
Healthcheck и ред на стартиране
depends_on само не чака готовност на БД. Предпочитайте healthcheck и service_healthy, където Compose го поддържа.
Именовани томове и нулиране на данни
- Томовете остават след
sail down. sail down -vги изтрива — данните изчезват.- За един том:
docker volume rmпо име отdocker volume ls.