Гнучкі Docker-образи з PHP INI змінними середовища

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 07 грудня, 2024
Ви готові зробити свої Docker-образи гнучкими, використовуючи змінні середовища? У цій статті ми розглянемо, як за допомогою простих налаштувань INI підвищити зручність роботи з Xdebug у вашому проекті Laravel, що дозволить кожному розробникові налаштувати власне конфігураційне середовище без зайвих зусиль

Нещодавно я публікував статтю про те, як налаштувати 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, тому обирайте спосіб конфігурації, який підходить саме вам!

Популярні

Logomark Logotype

Використання штучного інтелекту для управління перекладами в Laravel

Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!

Logomark Logotype

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю

Logomark Logotype

Усе, що нам відомо про Livewire 4

Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу