Способы инсталляции PHP для Oracle Linux
Установка PHP на Oracle Linux: пошаговое руководство
Основной способ: репозиторий REMI
Репозиторий REMI предоставляет самые свежие версии PHP для RHEL-совместимых систем, включая Oracle Linux. Это предпочтительный вариант, если нужна актуальная версия с возможностью выбора модулей.
Шаги:
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
sudo dnf module enable php:remi-8.2 -y
sudo dnf install -y php php-cli php-fpm php-mysqlnd php-xml php-json php-gd php-mbstringLinux apache php (настройка apache и php в linux)
Пояснения: сначала подключается EPEL (необходим для REMI), затем сам REMI, активируется модуль с нужной веткой (здесь 8.2) и устанавливается набор базовых пакетов.
Проблема: No package php-xxx available - возможно, не включён модуль или используется неподходящая версия Oracle Linux. Решение: проверить dnf repolist, убедиться, что REMI активен.
Проблема: конфликт с модулем php из AppStream. Решение: отключить AppStream модуль командой sudo dnf module reset php.
Как установить PHP из стандартного репозитория AppStream?
Oracle Linux поставляется с модулем php в AppStream. Этот способ прост, но часто предлагает устаревшие версии.
sudo dnf module list php
sudo dnf module enable php:8.0 -y
sudo dnf install php php-cliPhp fpm linux (настройка php-fpm в linux)
Цель: быстрая установка без подключения сторонних репозиториев. Используется, когда версия не критична.
Проблема: версия 7.2 или 7.4 по умолчанию, не подходит для новых приложений. Решение: переключиться на более новую через dnf module enable php:remi-8.1, предварительно подключив REMI.
Как собрать PHP из исходных кодов для максимальной гибкости?
Компиляция позволяет задать любые параметры сборки, исключить лишние модули и оптимизировать под конкретную архитектуру.
wget https://www.php.net/distributions/php-8.2.10.tar.gz
tar xzf php-8.2.10.tar.gz
cd php-8.2.10
./configure --prefix=/opt/php8.2 --with-openssl --with-pdo-mysql --enable-fpm
make -j$(nproc)
sudo make installLinux версия php (проверка версии php в linux)
Цель: встроить редкие расширения, изменить пути по умолчанию, использовать на встраиваемых системах.
Проблема: зависимые библиотеки не установлены (например, libxml2, openssl). Решение: предварительно поставить dnf install libxml2-devel openssl-devel sqlite-devel.
Проблема: configure не находит mysql. Решение: указать --with-pdo-mysql=mysqlnd.
Как использовать Docker для изолированной установки PHP?
Контейнер Docker исключает влияние на хост-систему и упрощает перенос окружения.
docker run -d --name php-web -p 9000:9000 php:8.2-fpm-alpine
docker exec -it php-web php -vLinux установить php (установка php в linux)
Цель: тестирование разных версий, микросервисная архитектура, CI/CD.
Проблема: файлы не создаются на хосте. Решение: смонтировать папку через -v /host/path:/var/www/html.
Как переключаться между несколькими версиями PHP на одном сервере?
Репозиторий REMI позволяет устанавливать несколько веток параллельно через модули и альтернативные префиксы.
sudo dnf module enable php:remi-7.4 -y
sudo dnf install php74
sudo dnf module enable php:remi-8.2 -y
sudo dnf install php82
Цель: поддержка старых проектов одновременно с новыми.
Проблема: конфликт команд php. Решение: использовать полные пути /opt/remi/php74/root/usr/bin/php или настроить альтернативы alternatives --config php.
Примеры расширенной настройки PHP
1. Установка PHP-FPM с кастомным пулом
sudo dnf install php-fpm
sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/myapp.conf
sudo sed -i 's/^user = .*/user = myuser/' /etc/php-fpm.d/myapp.conf
sudo sed -i 's/^group = .*/group = mygroup/' /etc/php-fpm.d/myapp.conf
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
Результат: отдельный пул для приложения с собственным пользователем. Проверка: ps aux | grep php-fpm.
2. Установка расширений Redis и Imagick
sudo dnf install php-redis php-imagick
# Если расширения нет в репозитории, собрать из PECL
sudo dnf install php-pear php-devel
sudo pecl install redis
echo "extension=redis.so" | sudo tee /etc/php.d/30-redis.ini
Результат: php -m | grep redis покажет модуль. Ошибка: pecl не найден - установить php-pear.
3. Настройка Xdebug для отладки
sudo dnf install php-xdebug
# или через pecl
sudo pecl install xdebug
# Настройка /etc/php.d/xdebug.ini
cat << 'EOF' | sudo tee /etc/php.d/xdebug.ini
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
EOF
sudo systemctl restart php-fpm
Результат: PHP автоматически подключает отладчик. Проверка: php -i | grep xdebug.
4. Установка Composer и настройка авто-загрузки
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
composer --version
Результат: Composer глобально доступен. Проблема: openssl не включён - добавить --with-openssl при сборке PHP.
5. Включение OPcache и настройка для продакшена
# В /etc/php.d/10-opcache.ini
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
sudo systemctl restart php-fpm
Результат: скорость выполнения кода возрастает в 2-5 раз. Проверка: php -i | grep opcache.
6. Установка нескольких версий PHP с помощью SCLo (Software Collections)
sudo dnf install centos-release-scl
sudo dnf install rh-php80
scl enable rh-php80 bash
php -v
Результат: временное окружение с PHP 8.0. Постоянная активация через /etc/profile.d. Примечание: SCLo устарел, рекомендуется REMI.