Нещодавно я публікував статтю про те, як налаштувати Xdebug з Docker та PHP 8.4, щоб продемонструвати, наскільки просто отримати з'єднання Xdebug. У тому навчальному посібнику я зафіксував налаштування INI, аби зосередитися на налаштуванні Xdebug. В реальному застосунку, однак, важливо, щоб Docker-образи були гнучкими, щоб кожен розробник міг налаштувати свої параметри без впливу на конфігурацію образу.
У цьому дописі я покажу, як використовувати змінні середовища для підвищення гнучкості ваших образів. Починаючи з версії 8.3, PHP підтримує значення за замовчуванням у синтаксисі змінної середовища INI, що дозволяє створити більш чисту конфігурацію INI.
Для порівняння, наш файл xdebug.ini виглядав так:
; build/php/conf.d/xdebug.ini file
[xdebug]
xdebug.mode = debug
xdebug.client_host = host.docker.internal
; Або ви можете використати IP-адресу хосту:
; xdebug.client_host = 192.168.86.203
xdebug.start_with_request = yes
Якщо один з ваших колег не хоче, щоб Xdebug запускалася за замовчуванням, йому доведеться змінювати файл INI і або комітити зміни, або просто скасовувати їх. Це не найкраще рішення.
Це не найзручніший підхід, особливо з огляду на те, що PHP тепер підтримує значення за замовчуванням у INI-файлах. Перед тим як перейти до його налаштування, ми можемо безпосередньо конфігурувати Xdebug за допомогою змінних середовища. Наступний код є еквівалентним нашому файлу xdebug.ini:
services:
app:
build:
context: .
dockerfile: build/Dockerfile
target: development
ports:
- "8080:80"
volumes:
- .:/srv/app
environment:
XDEBUG_CONFIG: "client_host=0.0.0.0 start_with_request=yes"
XDEBUG_MODE: "debug,develop"
Якщо перемістити значення змінних середовища в невідстежуваний ENV-файл, кожен розробник зможе самостійно налаштовувати параметри Xdebug. Інший спосіб конфігурації Xdebug — через INI, як ми робили раніше, але за допомогою змінних середовища:
; build/php/conf.d/xdebug.ini file
[xdebug]
xdebug.mode = ${PHP_XDEBUG_MODE:-debug,develop}
xdebug.client_host = ${PHP_XDEBUG_CLIENT_HOST:-host.docker.internal}
xdebug.start_with_request = ${PHP_XDEBUG_START_WITH_REQUEST:-trigger}
Я префіксував ці змінні з PHP_, щоб уникнути конфліктів і швидко їх впізнавати. Наприклад, XDEBUG_MODE зарезервовано для безпосередньої конфігурації Xdebug, тому, якщо ми хочемо налаштувати його через INI-змінну, потрібно вибрати унікальне ім'я.
Якщо ви перезапустите образ Docker, ви зможете перевірити ці налаштування, додавши phpinfo(); exit; на початок public/index.php або підключившись до контейнера:
$ docker compose up --build -d
$ docker compose exec app bash
# В контейнері
$ php -i | grep xdebug\.start_with_request
xdebug.start_with_request => trigger => trigger
Якщо ви хочете спробувати налаштувати ці значення локально, додайте наступне до вашого compose.yaml:
services:
app:
build:
context: .
dockerfile: build/Dockerfile
target: development
ports:
- "8080:80"
volumes:
- .:/srv/app
+ env_file:
+ - .docker.env
Потім створіть файли .docker.env та .docker.env.example в кореневій директорії вашого проєкту. Додайте до прикладового файлу розумні значення за замовчуванням, а також внесіть .docker.env у ваш .gitignore. Ось приклад вмісту:
PHP_XDEBUG_MODE=debug
PHP_XDEBUG_CLIENT_HOST=host.docker.internal
# Або використайте локальну IP-адресу комп'ютера
# PHP_XDEBUG_CLIENT_HOST=192.168.86.250
PHP_XDEBUG_START_WITH_REQUEST=trigger
Вам потрібно буде відновити контейнер, щоб побачити оновлені значення ENV, але, як тільки ви це зробите, ви повинні побачити, що ваші налаштування ENV прийняті:

Отже, ваші INI налаштування легко змінюються без впливу на файли збирання образу.
Тепер ви можете зробити свої Docker-образи гнучкими, використовуючи змінні середовища з налаштуваннями INI. Я також показав, як використовувати вбудовані змінні середовища Xdebug для налаштування, якщо ви надаєте перевагу простоті. Однак не всі налаштування можуть бути визначені через змінну середовища XDEBUG_CONFIG, тому обирайте спосіб конфігурації, який підходить саме вам!
Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!
Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю
Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу