Для быстрого развертывания связки Nginx и PHP-FPM используйте официальные образы из Docker Hub. Скачайте образы командой docker pull nginx и docker pull php:fpm. Это обеспечит вам готовые к работе контейнеры с минимальными усилиями.
Создайте файл docker-compose.yml для одновременного запуска Nginx и PHP-FPM. Укажите в нем конфигурацию для обоих сервисов, включая порты, тома и зависимости. Например, подключите папку с вашим проектом как том для обоих контейнеров, чтобы изменения в коде сразу применялись.
Настройте Nginx для работы с PHP-FPM. Внутри контейнера Nginx создайте файл конфигурации в директории /etc/nginx/conf.d/. Укажите в нем путь к сокету PHP-FPM, например: fastcgi_pass php:9000;. Это позволит Nginx передавать PHP-запросы в контейнер с PHP-FPM.
Для проверки работоспособности создайте файл index.php с содержимым <?php phpinfo(); ?> и поместите его в подключенный том. Откройте браузер и перейдите по адресу вашего сервера. Если вы видите страницу с информацией о PHP, связка работает корректно.
Используйте переменные окружения для гибкой настройки. Например, в docker-compose.yml можно задать параметры для PHP-FPM, такие как memory_limit или upload_max_filesize. Это упрощает управление конфигурацией без редактирования файлов внутри контейнера.
Подготовка окружения для работы с Docker
Установите Docker на вашу операционную систему, следуя официальной документации. Для Linux выполните команду curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
, для Windows и macOS скачайте Docker Desktop с сайта разработчика.
Проверьте установку, запустив команду docker --version
. Убедитесь, что Docker работает корректно, выполнив docker run hello-world
. Если контейнер запустился и вы увидели приветственное сообщение, установка прошла успешно.
Создайте директорию для вашего проекта, например, mkdir ~/nginx-php-project
. Перейдите в неё с помощью cd ~/nginx-php-project
. Это место будет использоваться для хранения конфигурационных файлов и Docker-образов.
Установите Docker Compose, если планируете управлять несколькими контейнерами. Для Linux выполните команду sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "K.*d')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
. Затем сделайте файл исполняемым: sudo chmod +x /usr/local/bin/docker-compose
.
Проверьте установку Docker Compose с помощью docker-compose --version
. Теперь вы готовы к созданию и настройке контейнеров для Nginx и PHP-FPM.
Установка Docker и Docker Compose
Установите Docker на вашу систему, следуя официальной инструкции для вашей операционной системы. Для Ubuntu выполните команду:
sudo apt-get update
sudo apt-get install docker.io
Для macOS или Windows скачайте Docker Desktop с официального сайта и запустите установщик.
После установки Docker добавьте текущего пользователя в группу docker, чтобы избежать необходимости использовать sudo:
sudo usermod -aG docker $USER
Перезагрузите систему для применения изменений.
Установите Docker Compose, если он не включен в Docker Desktop. Для Linux выполните:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Проверьте корректность установки, выполнив:
docker --version
docker-compose --version
Теперь Docker и Docker Compose готовы к использованию. Переходите к настройке Nginx и PHP-FPM.
Опишите шаги по установке Docker и Docker Compose на различных операционных системах.
Для установки Docker на Ubuntu выполните команды:
sudo apt update
sudo apt install docker.io
sudo systemctl enable --now docker
Для добавления текущего пользователя в группу docker
используйте команду sudo usermod -aG docker $USER
и перезагрузите систему.
На Debian установка аналогична Ubuntu. После обновления пакетов выполните:
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
Для CentOS или RHEL установите Docker с помощью команд:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
На macOS скачайте Docker Desktop с официального сайта. Установите приложение, следуя инструкциям на экране. После завершения запустите Docker из папки Applications.
Для Windows загрузите Docker Desktop с того же сайта. Убедитесь, что включена функция WSL 2 или Hyper-V. Установите Docker, следуя подсказкам установщика, и перезагрузите систему.
Чтобы установить Docker Compose на Linux, выполните команду:
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "K.*d')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
На macOS и Windows Docker Compose уже включен в Docker Desktop. Проверьте его наличие командой docker-compose --version
.
После установки убедитесь, что Docker и Docker Compose работают корректно. Проверьте версию Docker с помощью docker --version
, а Docker Compose – docker-compose --version
.
Создание Dockerfile для Nginx и PHP-FPM
Начните с выбора базового образа, например, nginx:latest
для Nginx и php:fpm
для PHP-FPM. Это обеспечит стабильную работу и доступ к последним обновлениям.
Создайте файл Dockerfile
в корне вашего проекта. Добавьте инструкцию FROM
для указания базового образа. Например:
FROM nginx:latest
Установите необходимые зависимости для PHP-FPM. Воспользуйтесь командой RUN
для установки пакетов, таких как php-fpm
, php-mysql
и других расширений, которые могут потребоваться вашему приложению. Например:
RUN apt-get update && apt-get install -y
php-fpm
php-mysql
php-cli
&& rm -rf /var/lib/apt/lists/*
Скопируйте конфигурационные файлы Nginx и PHP-FPM в контейнер. Используйте команду COPY
для переноса файлов. Например:
COPY nginx.conf /etc/nginx/nginx.conf
COPY php-fpm.conf /etc/php/7.4/fpm/php-fpm.conf
Убедитесь, что Nginx и PHP-FPM запускаются автоматически при старте контейнера. Добавьте команду CMD
для запуска обоих сервисов. Например:
CMD service php7.4-fpm start && nginx -g 'daemon off;'
Соберите образ с помощью команды docker build -t my-nginx-php-fpm .
. После сборки запустите контейнер, указав порты и необходимые переменные окружения. Например:
docker run -d -p 80:80 --name my-app my-nginx-php-fpm
Проверьте работоспособность контейнера, открыв браузер и перейдя по адресу http://localhost
. Если все настроено правильно, вы увидите ваш сайт, работающий на Nginx с поддержкой PHP-FPM.
Объясните, как создать Dockerfile, который будет использоваться для сборки контейнера с Nginx и PHP-FPM.
Создайте файл с именем Dockerfile
в корне вашего проекта. В первой строке укажите базовый образ, например, FROM php:8.2-fpm
, чтобы использовать PHP-FPM. Затем добавьте команду RUN apt-get update && apt-get install -y nginx
для установки Nginx.
Настройте конфигурацию Nginx, скопировав ваш файл конфигурации в контейнер. Используйте команду COPY nginx.conf /etc/nginx/nginx.conf
, где nginx.conf
– ваш файл с настройками. Убедитесь, что конфигурация корректно указывает на сокет PHP-FPM, например, fastcgi_pass unix:/var/run/php/php8.2-fpm.sock
.
Скопируйте файлы вашего приложения в контейнер с помощью COPY . /var/www/html
. Установите необходимые права доступа, используя команду RUN chown -R www-data:www-data /var/www/html
.
Добавьте команду EXPOSE 80
, чтобы открыть порт для веб-сервера. В конце укажите команду для запуска Nginx и PHP-FPM, например, CMD service php8.2-fpm start && nginx -g 'daemon off;'
.
Сохраните файл и выполните сборку контейнера командой docker build -t my-nginx-php-app .
. После завершения сборки запустите контейнер с помощью docker run -p 80:80 my-nginx-php-app
.
Настройка конфигурации Nginx и PHP-FPM
Для корректной работы Nginx с PHP-FPM настройте конфигурационные файлы обоих сервисов. Начните с редактирования файла /etc/nginx/sites-available/default
. Добавьте блок location
для обработки PHP-запросов:
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Убедитесь, что путь к сокету PHP-FPM (/var/run/php/php7.4-fpm.sock
) соответствует версии PHP, установленной на вашем сервере. Если используете другую версию, измените путь.
Далее проверьте конфигурацию PHP-FPM. Откройте файл /etc/php/7.4/fpm/pool.d/www.conf
и найдите параметр listen
. Убедитесь, что он совпадает с указанным в конфигурации Nginx:
listen = /var/run/php/php7.4-fpm.sock
После внесения изменений перезапустите оба сервиса:
- Для Nginx:
sudo systemctl restart nginx
- Для PHP-FPM:
sudo systemctl restart php7.4-fpm
Проверьте корректность конфигурации Nginx с помощью команды sudo nginx -t
. Если ошибок нет, сервис готов к работе. Для тестирования создайте файл info.php
в корневой директории веб-сервера:
<?php phpinfo(); ?>
Откройте его в браузере через http://ваш_домен/info.php
. Если страница отображается, настройка выполнена успешно.
Конфигурация Nginx для работы с PHP
Настройте Nginx для обработки PHP-запросов через PHP-FPM. Для этого добавьте в конфигурационный файл виртуального хоста блок location
, который будет передавать PHP-запросы на обработку. Пример конфигурации:
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Убедитесь, что путь к сокету PHP-FPM (/var/run/php/php7.4-fpm.sock
) соответствует вашей версии PHP. Если используется TCP-соединение, замените unix:/var/run/php/php7.4-fpm.sock
на 127.0.0.1:9000
.
Проверьте конфигурацию на ошибки с помощью команды:
nginx -t
После успешной проверки перезагрузите Nginx:
systemctl reload nginx
Для тестирования работы PHP создайте файл info.php
в корневой директории сайта:
<?php
phpinfo();
?>
Откройте этот файл в браузере через http://example.com/info.php
. Если конфигурация выполнена правильно, вы увидите страницу с информацией о PHP.
Если вы используете несколько версий PHP, настройте Nginx для работы с нужной версией, указав соответствующий сокет или порт. Пример для PHP 8.0:
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
Для повышения безопасности ограничьте доступ к файлам конфигурации и логическим файлам, добавив в конфигурацию Nginx следующие правила:
location ~ /.ht {
deny all;
}
location ~ /.(env|log|ini)$ {
deny all;
}
Эти настройки помогут защитить ваш сервер от несанкционированного доступа.
Расскажите, как настроить конфигурацию Nginx для обработки запросов к PHP-FPM.
Настройте блок server
в конфигурации Nginx для обработки PHP-запросов. Укажите корневую директорию вашего проекта и добавьте обработку файлов с расширением .php
. Например:
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Используйте директиву fastcgi_pass
, чтобы указать путь к сокету PHP-FPM. В примере выше это unix:/var/run/php/php-fpm.sock
. Если PHP-FPM работает на другом порту, замените сокет на 127.0.0.1:9000
.
Добавьте параметр fastcgi_param SCRIPT_FILENAME
, чтобы Nginx корректно передавал путь к скрипту PHP-FPM. Это гарантирует, что PHP-скрипты будут выполняться правильно.
Проверьте конфигурацию на ошибки с помощью команды:
nginx -t
Если ошибок нет, перезагрузите Nginx:
systemctl reload nginx
Убедитесь, что PHP-FPM запущен и работает. Проверьте его статус:
systemctl status php-fpm
Если всё настроено верно, создайте тестовый файл index.php
в корневой директории с содержимым:
<?php phpinfo(); ?>
Откройте его в браузере по адресу вашего сервера. Если отображается информация о PHP, конфигурация работает корректно.
Тестирование работы приложения в контейнерах
После запуска контейнеров с Nginx и PHP-FPM убедитесь, что приложение работает корректно. Откройте браузер и перейдите по адресу http://localhost
. Если страница загружается без ошибок, это означает, что сервер настроен правильно.
- Убедитесь, что файлы приложения корректно монтируются в контейнер. Проверьте содержимое директории внутри контейнера с помощью команды
docker exec -it <container_id> ls /var/www/html
. - Протестируйте обработку PHP-скриптов. Создайте файл
info.php
в корневой директории приложения с содержимым<?php phpinfo(); ?>
. Перейдите по адресуhttp://localhost/info.php
, чтобы убедиться, что PHP работает.
Если вы используете базу данных, проверьте подключение к ней из контейнера. Убедитесь, что контейнеры могут взаимодействовать друг с другом через сеть Docker. Используйте команду docker network inspect <network_name>
для проверки настроек сети.
- Остановите контейнеры с помощью команды
docker-compose down
и запустите их заново, чтобы проверить стабильность работы. - Измените конфигурацию Nginx или PHP-FPM, перезапустите контейнеры и проверьте, применяются ли изменения.
Если все тесты пройдены успешно, ваше приложение готово к использованию в контейнерах. Для дальнейшей оптимизации рассмотрите возможность настройки кэширования и мониторинга производительности.
Опишите процесс тестирования сетевого взаимодействия между Nginx и PHP-FPM после настройки.
Для проверки корректности взаимодействия между Nginx и PHP-FPM создайте тестовый PHP-файл в корневой директории веб-сервера. Например, создайте файл info.php
с содержимым:
<?php
phpinfo();
?>
Откройте браузер и перейдите по адресу http://ваш_домен/info.php
. Если настройки выполнены верно, вы увидите страницу с информацией о конфигурации PHP. Это подтверждает, что Nginx успешно передает запросы PHP-FPM.
Для более детальной проверки используйте команду curl
в терминале:
curl http://localhost/info.php
Если ответ содержит HTML-код страницы с информацией о PHP, значит, взаимодействие работает корректно.
Проверьте логи Nginx и PHP-FPM для выявления возможных ошибок. Логи Nginx находятся в /var/log/nginx/error.log
, а логи PHP-FPM – в /var/log/php-fpm.log
или аналогичных директориях, в зависимости от вашей конфигурации.
Для проверки доступности PHP-FPM через сокет выполните команду:
sudo lsof -U | grep php-fpm
Убедитесь, что сокет активен и доступен для Nginx. Если используется TCP-соединение, проверьте порт с помощью команды:
netstat -tuln | grep 9000
Если порт 9000 (или другой, указанный в конфигурации) прослушивается, соединение установлено.
Для проверки производительности и стабильности взаимодействия создайте нагрузочный тест с помощью инструмента ab
(Apache Benchmark):
ab -n 1000 -c 10 http://localhost/info.php
Результаты теста покажут, как система справляется с одновременными запросами. Если всё работает без ошибок, настройка завершена успешно.
Команда | Назначение |
---|---|
curl http://localhost/info.php |
Проверка ответа от PHP через Nginx |
sudo lsof -U | grep php-fpm |
Проверка доступности сокета PHP-FPM |
netstat -tuln | grep 9000 |
Проверка TCP-порта PHP-FPM |
ab -n 1000 -c 10 http://localhost/info.php |
Нагрузочный тест взаимодействия |