Оркестратор для локальной разработки нескольких PHP‑сервисов (api‑profiles и api‑qr‑link) с общей инфраструктурой на базе Docker Compose: Nginx + PHP‑FPM + Postgres.
- Архитектура и сервисы
- Предварительные требования
- Быстрый старт
- Конфигурация окружения
- Подмодули Git
- Запуск и остановка
- Порты и хостнеймы
- Полезные команды
- Структура репозитория
- Типичные проблемы
Docker Compose поднимает:
- nginx — проксирует запросы к сервисам:
api-profilesна порту80api-qr-linkна порту81
- api-profiles — PHP‑FPM контейнер (код в Git‑подмодуле
services/api-profiles) - api-qr-link — PHP‑FPM контейнер (код в Git‑подмодуле
services/api-qr-link) - postgres — база данных
Nginx конфигуры лежат в docker/nginx/configs/conf.d/api-services.conf, где определены два server‑блока и правила проксирования на соответствующие PHP‑FPM контейнеры.
Установите:
- Docker 24+ (или актуальная версия)
- Docker Compose v2 (
docker compose) - Git
- Доступ по SSH к GitHub (подмодули указывают на
git@github.com:...)
Проверьте доступность SSH‑ключа:
ssh -T git@github.com-
Склонируйте репозиторий вместе с подмодулями:
git clone --recurse-submodules <repo-url> cd orchestrator
-
Создайте
.envна основе примера:cp .env.example .env
-
Поднимите контейнеры:
docker compose up -d --build
-
Добавьте хостнеймы в
/etc/hosts(локально):127.0.0.1 api-profiles.local 127.0.0.1 api-qr-link.local -
Проверьте доступность сервисов:
curl -I http://api-profiles.local curl -I http://api-qr-link.local:81
Все настройки лежат в .env. Пример — .env.example.
Ключевые параметры:
| Переменная | Назначение | Пример |
|---|---|---|
COMPOSE_PROJECT_NAME |
Префикс контейнеров/сети | tipsGrammBackendServices |
SERVER_HOME |
Путь до корня репозитория | ./ |
PHP_ENV |
Режим PHP (dev/prod) | dev |
APP_ENV |
Режим приложения (dev/prod) | dev |
PORT_API_PROFILES |
Порт Nginx для api‑profiles | 80 |
PORT_API_QR_LINK |
Порт Nginx для api‑qr‑link | 81 |
PORT_POSTGRES |
Внешний порт Postgres | 5432 |
💡 В
docker/php/Dockerfileопределён образ PHP 8.4 с набором расширений, Xdebug включён дляPHP_ENV=dev.
Сервисы подключаются как Git‑подмодули.
Если репозиторий уже склонирован без --recurse-submodules:
git submodule update --init --recursivegit submodule update --remote --mergegit submodule statusdocker compose up -d --builddocker compose downdocker compose restart api-profilesdocker compose build --no-cache api-profilesПо умолчанию:
| Сервис | Хост | Порт |
|---|---|---|
| api‑profiles | api-profiles.local |
80 |
| api‑qr‑link | api-qr-link.local |
81 |
| postgres | localhost |
5432 |
Если порты заняты, измените
PORT_*в.env.
tail -f docker/nginx/logs/api-profiles-access.logdocker compose exec api-profiles bashdocker compose exec api-profiles composer installdocker compose exec api-profiles php bin/console doctrine:migrations:migrate.
├── docker/ # Docker-файлы и конфиги
│ ├── nginx/ # Nginx конфигурация и логи
│ ├── php/ # PHP Dockerfile и конфиги
│ └── postgres/ # Данные и init-скрипты Postgres
├── services/ # Git-подмодули сервисов
│ ├── api-profiles/ # сервис api-profiles
│ └── api-qr-link/ # сервис api-qr-link
├── docker-compose.yaml # Compose конфиг
└── .env.example # пример окружения
Подмодули не были инициализированы. Выполните:
git submodule update --init --recursiveИзмените значения PORT_API_PROFILES/PORT_API_QR_LINK в .env и перезапустите:
docker compose down
docker compose up -d --buildПроверьте SSH‑ключ и агент:
ssh -T git@github.com