Настройка PHP на серверной платформе Ubuntu 24.04
Варианты установки PHP на Ubuntu 24.04
Основное решение: установка PHP через PPA ondrej/php
Этот метод позволяет получить самые свежие версии PHP (доступны PHP 8.3, 8.4, 7.4 и другие) и гибко управлять расширениями. Репозиторий ppa:ondrej/php официально поддерживается и регулярно обновляется.
Цель: получение актуальных стабильных версий PHP с возможностью выбора конкретной.
sudo add-apt-repository ppa:ondrej/php -y
sudo apt updateUbuntu 24.04 установка php (установка php на ubuntu 24.04)
После добавления репозитория выполняется установка нужной версии. Например, для PHP 8.3:
sudo apt install php8.3 php8.3-cli php8.3-fpm php8.3-mysql php8.3-xml php8.3-mbstring php8.3-curl php8.3-zip
Установка включает основные расширения, необходимые для большинства веб-приложений. Служба php8.3-fpm запускается автоматически.
Проверка версии:
php -v
PHP 8.3.15 (cli) (built: ...) ( NTS ) Copyright (c) The PHP Group
Настройка PHP-FPM для работы с Nginx или Apache требует редактирования пула (/etc/php/8.3/fpm/pool.d/www.conf).
Типичные ошибки:
- Конфликт версий, если ранее установлена другая версия PHP через apt. Решение: удалить старую версию или использовать несколько версий одновременно.
- Проблема с зависимостями при добавлении PPA (ошибка GPG). Решение: установка software-properties-common и обновление ключей.
Как установить PHP из официального репозитория Ubuntu?
Этот вариант подходит, когда требуется версия, включённая в дистрибутив (Ubuntu 24.04 поставляется с PHP 8.3 в репозиториях universe). Установка через apt без дополнительных репозиториев.
sudo apt update
sudo apt install php
Будут установлены базовые пакеты. Конкретные расширения добавляются отдельно: sudo apt install php-mysql php-xml php-mbstring.
Цель: быстрая установка PHP с минимальными усилиями для тестовых или простых проектов.
Ограничения: версия PHP фиксирована (на момент выхода Ubuntu 24.04 это 8.3), обновления до новых минорных версий могут отсутствовать.
Как установить конкретную версию PHP (например, 8.2 или 8.4) с расширениями?
Используя тот же PPA ondrej/php, можно установить любую доступную версию. Например, для PHP 8.4 (на момент написания последняя стабильная):
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.4 php8.4-cli php8.4-fpm php8.4-{mysql,xml,mbstring,curl,zip,bcmath,gd,intl,opcache}
Расширения указываются в фигурных скобках (синтаксис bash). Это удобно для установки набора.
Цель: использование новейшей версии PHP для современных фреймворков или приложений с требованиями.
Конфликт с уже установленной версией: если php-fpm от другой версии уже запущен, необходимо выключить его и включить нужный.
Как собрать PHP из исходного кода для нестандартной конфигурации?
Этот метод применяется, когда требуется кастомная сборка с особыми опциями компиляции (например, собственная статическая компиляция, нестандартные пути, поддержка экспериментальных расширений).
wget https://www.php.net/distributions/php-8.4.1.tar.gz
tar -xzf php-8.4.1.tar.gz
cd php-8.4.1
./configure --prefix=/usr/local/php8.4 --with-pdo-mysql --with-openssl --enable-mbstring --enable-fpm --with-curl
make -j$(nproc)
sudo make install
После сборки потребуется скопировать файлы конфигурации (php.ini-production), настроить php-fpm как systemd unit.
Цель: максимальная кастомизация, использование патчей, тестирование альфа-версий.
Проблемы: требуется много зависимостей (build-essential, libxml2-dev, libsqlite3-dev и т.д.). Сборка занимает время, возможны конфликты с системной версией.
После установки любой версии рекомендуется настроить временную зону, лимиты памяти и выполнить оптимизацию (opcache, realpath_cache) в php.ini.
Расширенные примеры настройки PHP на Ubuntu 24.04
Установка нескольких версий PHP и переключение между ними
Часто требуется одновременно иметь PHP 8.2 и 8.3 для разных проектов. Установка обеих версий через PPA:
sudo apt install php8.2 php8.2-fpm php8.3 php8.3-fpm
sudo update-alternatives --config php
Команда update-alternatives позволяет выбрать версию CLI по умолчанию. Для FPM каждая версия запускается как отдельная служба: sudo systemctl start php8.2-fpm, sudo systemctl start php8.3-fpm. Переключение между сокетами в конфигурации веб-сервера.
Пример выбора версии:
sudo update-alternatives --set php /usr/bin/php8.3
php -v
PHP 8.3.15 (cli) (built: ...)
Настройка пула PHP-FPM для отдельного сайта
Создание собственного пула с уникальными параметрами (например, ограничение памяти, количество процессов). Файл /etc/php/8.3/fpm/pool.d/mysite.conf:
[mysite]
user = www-data
group = www-data
listen = /run/php/php8.3-mysite.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
php_admin_value[memory_limit] = 256M
После добавления конфигурации перезагрузка FPM:
sudo systemctl restart php8.3-fpm
Пул используется в Nginx через upstream.
Установка дополнительных расширений через pecl
Например, для Redis или ImageMagick. Требуется установленный php-dev и pecl:
sudo apt install php8.3-dev php8.3-pecl
sudo pecl install redis
sudo bash -c "echo 'extension=redis.so' > /etc/php/8.3/mods-available/redis.ini"
sudo phpenmod -v 8.3 redis
sudo systemctl restart php8.3-fpm
Проверка:
php -m | grep redis
redis
Использование Composer с определённой версией PHP
Для проекта, требующего PHP 8.2, можно указать конкретный бинарник:
wget https://getcomposer.org/composer.phar
chmod +x composer.phar
./composer.phar install --ignore-platform-req=ext-xdebug
# или запуск с явным указанием php
/usr/bin/php8.2 ./composer.phar update
Также можно задать глобальный псевдоним:
alias composer='php8.2 /usr/local/bin/composer'
Оптимизация производительности через OpCache
Настройка opcache в /etc/php/8.3/fpm/conf.d/10-opcache.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0
Для разработки validate_timestamps рекомендуется оставить 1. После изменений перезагрузка FPM.
Проверка статуса opcache через скрипт или команду:
php -i | grep opcache
opcache.enable => On => On opcache.memory_consumption => 128