Иногда вам нужна актуальная версия PHP, а репозитории Linux отстают. Docker не подходит или нельзя его использовать. В таких случаях приходится собирать PHP из исходников и это проще, чем кажется.
Мы разберём, как установить PHP 8.5 на Debian(Ubuntu) и RHEL(CentOS/Rocky Linux) настроить FPM и сделать всё аккуратно, чтобы не сломать систему.
Шаг 1. Скачиваем исходники PHP
Сначала качаем официальные исходники:
wget https://www.php.net/distributions/php-8.5.0.tar.gz
tar -xvf php-8.5.0.tar.gz
cd php-8.5.0Создаём папку для установки, чтобы не трогать системный PHP:
sudo mkdir -p /opt/php-8.5Шаг 2. Устанавливаем зависимости
PHP требует много библиотек и dev-пакетов, но не пугайтесь, всё ставится одной командой.
Для Debian/Ubuntu
sudo apt update
sudo apt install -y build-essential pkg-config autoconf bison re2c \
libxml2-dev libsqlite3-dev libcurl4-openssl-dev libjpeg-dev \
libpng-dev libwebp-dev libfreetype-dev libonig-dev libzip-dev \
libssl-dev libreadline-dev libxslt1-dev libgmp-dev libicu-dev libtirpc-devДля RHEL/CentOS/Rocky
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y libxml2-devel sqlite-devel libcurl-devel libjpeg-devel \
libpng-devel libwebp-devel freetype-devel oniguruma-devel libzip-devel \
openssl-devel readline-devel libxslt-devel gmp-devel libicu-devel libtirpc-develШаг 3. Конфигурируем PHP
Настроим PHP с популярными расширениями и FPM:
./configure --prefix=/opt/php-8.5 \
--enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data \
--enable-mbstring --enable-intl --with-openssl --with-zlib \
--with-curl --with-zip --with-gd --with-jpeg --with-webp --with-freetype \
--enable-opcache --with-readline --enable-pcntl --enable-socketsДля RHEL/CentOS поменяйте www-data на apache:
--with-fpm-user=apache --with-fpm-group=apacheШаг 4. Сборка и установка
make -j$(nproc)
sudo make installПосле установки php и fpm будут доступны по следующим путям:
PHP:
/opt/php-8.5/bin/phpFPM:
/opt/php-8.5/sbin/php-fpm
Шаг 5. Настройка php.ini
Скопируйте готовый файл:
sudo cp php.ini-production /opt/php-8.5/lib/php.iniМожете редактировать под свои нужды.
Шаг 6. PHP-FPM как сервис systemd
Чтобы PHP-FPM работал как полноценный сервис, который стартует при загрузке системы и может управляться стандартными командами systemctl, нужно создать unit-файл systemd
sudo nano /etc/systemd/system/php-8.5-fpm.serviceВставляем:
[Unit]
Description=PHP 8.5 FPM service
After=network.target
[Service]
Type=simple
PIDFile=/opt/php-8.5/var/run/php-fpm.pid
ExecStart=/opt/php-8.5/sbin/php-fpm --nodaemonize
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.targetЗапускаем и проверяем статус севриса:
sudo systemctl daemon-reload
sudo systemctl enable --now php-8.5-fpm
sudo systemctl status php-8.5-fpmЕсли всё правильно, увидите активный процесс с PID, без ошибок.
Шаг 7. Добавляем PHP в PATH (опционально)
Чтобы при вызове php в терминале использовалась именно ваша версия PHP 8.5, а не системная, нужно добавить путь /opt/php-8.5/bin в переменную PATH.
echo 'export PATH="/opt/php-8.5/bin:$PATH"' | sudo tee /etc/profile.d/php85.sh
source /etc/profile.d/php85.shПроверяем:
php -vВы должны увидеть что-то вроде:
PHP 8.5.x (cli) (built: ...)Шаг 8. Обновление PHP 8.5
Когда выйдут патчи (8.5.x), просто повторяем сборку:
wget https://www.php.net/distributions/php-8.5.x.tar.gz
tar -xvf php-8.5.x.tar.gz
cd php-8.5.x
./configure --prefix=/opt/php-8.5
make -j$(nproc)
sudo make install