Установка и настройка Nginx с PHP-FPM на Docker Hub

Для быстрого развертывания связки 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> для проверки настроек сети.

  1. Остановите контейнеры с помощью команды docker-compose down и запустите их заново, чтобы проверить стабильность работы.
  2. Измените конфигурацию 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 Нагрузочный тест взаимодействия

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии