Введение в связку Nginx и PHP в Docker
Встроенный сервер удобен для одной страницы
и не годится,
когда статику и сценарии разносят
по двум программам.
HTML и картинки отдаёт один процесс,
а файлы .php считает другой,
и оба должны видеть одну папку
на диске контейнера.
Nginx принимает запрос браузера
и отдаёт готовые файлы сам.
Для сценария он не запускает
интерпретатор внутри себя,
а передаёт путь к файлу
по протоколу FastCGI
службе PHP-FPM.
Образ php:8.5-fpm
держит только процесс PHP,
который слушает порт 9000
внутри сети compose
и наружу его не публикуют.
Общая папка сайта монтируется
в оба контейнера под одним путём,
обычно /var/www/html.
Корень в конфиге nginx
и том у сервиса PHP
должны совпадать буква в букву,
иначе веб-сервер ищет файл
не там, где его видит интерпретатор.
Стандартный виртуальный хост
в образе nginx не знает,
куда слать .php.
Свой файл default.conf
заменяет встроенный сайт
и задаёт root,
fastcgi_pass
и параметр SCRIPT_FILENAME
из document_root.
Порт сайта на компьютере
чаще всего 8080,
а внутри nginx слушают 80.
Расширения PHP,
например для точной арифметики,
добавляют в Dockerfile
при сборке образа,
а не флагом при каждом запуске.
Composer попадает в образ
отдельной программой,
а каталог vendor
появляется после composer install
на этапе сборки.
Образ php:8.5-apache
в этом разделе не используем.
Уроки идут от статики
и проверки FPM
до полной связки,
общей папки,
конфига nginx,
расширения и зависимостей.
MySQL и другие базы здесь
не подключаем -
достаточно строки hello
на странице в браузере.