天天看點

RockyLinux / AlmaLinux / CentOS 快速搭建生産可用的PHP環境

作者:Cevinc
本文适用于基于RHEL的所有衍生發行版(CentOS/AlmaLinux/RockyLinux)

更新系統到最新版本 (可選)

dnf upgrade -y           

安裝EPEL擴充倉庫

dnf install epel-release -y && dnf --enablerepo=epel update -y           

安裝REMI源

REMI 源在不同版本的發行版支援的PHP版本不同,以RHEL/CentOS/RockyLinux/AlmaLinux 為例。

在 8.x 支援PHP的5.6/7.0/7.1/7.2/7.3/7.4/8.0/8.1/8.2的所有版本。

在 9.x 最低支援PHP版本為7.4

REMI源為Fedora和Enterprise Linux(RHEL、CentOS、Oracle、Scientific Linux等)使用者提供 最新版本的PHP、全功能和一些其他軟體,已經被廣泛應用。絕大多數的官方PECL擴充都可以一鍵平滑安裝,同時支援多PHP版本共存。

rpm -E %{centos_ver} 擷取失敗時手動替換成目前系統的主要版本号如:8或9
dnf install -y https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-$(rpm -E %{centos_ver}).rpm           

更新REMI源

dnf --enablerepo=remi-safe,remi-modular update -y           

安裝指定版本的PHP及其擴充依賴

以PHP8.0為例,安裝PHP8.0的FPM及其常用依賴擴充 (注意不要直接安裝php8.0包,預設會以apache擴充模式安裝,直接安裝FPM即可)

dnf --setopt=install_weak_deps=False install -y php80-php-fpm php80-php-cli php80-php-mbstring php80-php-xml php80-php-bcmath php80-php-gd php80-php-mysqlnd php80-php-posix php80-php-sodium php80-php-opcache php80-php-pecl-redis           

運作FPM

systemctl enable --now php80-php-fpm

後續優化

安裝後的配置檔案在 /etc/opt/remi/php{ver} 。以8.0舉例配置檔案路徑為/etc/opt/remi/php80。下方所有檔案都以此為根路徑。

以此類推可以同時運作多個PHP版本。

  • php-fpm.conf

error_log : 錯誤日志存放路徑

process_control_timeout: reload等待時間建議設定為20s(執行systemctl reload php80-php-fpm 後20s内所有程序平滑退出,超過20s的直接KILL)

  • php-fpm.conf.d/www.conf

user: 以指定使用者身份執行程序(推薦和web目錄數組一緻,預設是apache)

group: 同user

listen: 預設是/var/opt/remi/php版本/run/php-fpm/www.sock 建議改為127.0.0.1:9000

pm: php程序運作模式 dynamic動态(根據請求動态調整) static靜态(固定數量個fpm程序)

pm.max_children = 最大fpm程序數量 (pm=dynamic和static時生效,當pm=static時,僅調整該參數即可)

pm.start_servers = FPM啟動時立刻啟動多少個FPM程序

pm.min_spare_servers = 最小空閑FPM程序數量

pm.max_spare_servers = 最大空閑FPM程序數量

start_servers/min_spare_servers/max_spare_servers 在pm=static時不生效

當機器配置較高時,建議使用static配置:如8G記憶體建議設定為256

request_terminate_timeout: 每個FPM子程序程序處理多少個請求後就自動重新開機,防止記憶體洩露,按照通路量計算如果是10w次請求,那建議設定為25000 (除4)

  • php.d/10-opcache.ini

opcache.enable_cli: 改為0,CLI模式下運作的PHP通常不需要OPCache助力,開啟後反而可能會因為緩存導緻其他問題。

opcache.validate_timestamps: 設定為1

opcache.revalidate_freq: 每多少秒檢查一次檔案是否更新并重新整理opcache緩存。按照代碼更新時長而定,代碼檔案更新後,不重新整理緩存新的代碼不生效。

新增JIT相關配置,在PHP8.0後OPCache加入了JIT特性,極大助力PHP的運作速度,PHP8.0及以上版本建議開啟。

在10-opcache.ini新增配置:

opcache.jit_buffer_size=256M

opcache.jit=1255

修改任意配置檔案後都需要執行 systemctl reload php{ver}-php-fpm 重新讀取php配置(如systemctl reload php80-php-fpm)

繼續閱讀