Install PHP 8.4/8.5 untuk HestiaCP di Ubuntu 20.04

Install PHP 8.4/8.5 untuk HestiaCP di Ubuntu 20.04

Latar Belakang

PHP 8.4+ tidak tersedia di ppa:ondrej/php untuk Ubuntu 20.04 (Focal). Hestia 1.9.6 sudah membundle PHP 8.4.21 di /usr/local/hestia/php/ yang dikompilasi khusus untuk focal.


1. Setup PHP 8.4 (menggunakan bundle Hestia)

mkdir -p /etc/php/8.4/fpm/pool.d /etc/php/8.4/cli /var/log/php8.4
ln -sf /usr/local/hestia/php/bin/php /usr/bin/php8.4

1.2 Buat php-fpm.conf

cat > /etc/php/8.4/fpm/php-fpm.conf << 'EOF'
[global]
pid = /run/php/php8.4-fpm.pid
error_log = /var/log/php8.4-fpm.log
log_level = error
emergency_restart_threshold = 10
emergency_restart_interval = 60s
process_control_timeout = 10s
events.mechanism = epoll
include=/etc/php/8.4/fpm/pool.d/*.conf
EOF

1.3 Buat php.ini (dari bundled Hestia)

cp /usr/local/hestia/php/lib/php.ini /etc/php/8.4/fpm/php.ini
ln -sf /etc/php/8.4/fpm/php.ini /etc/php/8.4/cli/php.ini

1.4 Konfigurasi php.ini

sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 100M/g' /etc/php/8.4/fpm/php.ini
sed -i 's/post_max_size = 8M/post_max_size = 100M/g' /etc/php/8.4/fpm/php.ini
sed -i 's/max_execution_time = 30/max_execution_time = 60/g' /etc/php/8.4/fpm/php.ini
sed -i 's/;max_input_vars = 1000/max_input_vars = 4000/g' /etc/php/8.4/fpm/php.ini
sed -i 's/;date.timezone =/date.timezone = Asia\/Jakarta/g' /etc/php/8.4/fpm/php.ini
sed -i 's/;opcache.enable=1/opcache.enable=1/g' /etc/php/8.4/fpm/php.ini
sed -i 's/;opcache.memory_consumption=128/opcache.memory_consumption=512/g' /etc/php/8.4/fpm/php.ini
sed -i 's/;opcache.max_accelerated_files=10000/opcache.max_accelerated_files=100000/g' /etc/php/8.4/fpm/php.ini

1.5 Hapus extension= yang salah

Ekstensi berikut sudah compiled-in (tidak perlu extension=): curl, gettext, mbstring, zip, pdo_sqlite, pdo_pgsql

Edit /etc/php/8.4/fpm/php.ini dan hapus/komentari baris:

extension=curl       # compiled-in → hapus
extension=gettext    # compiled-in → hapus
extension=mbstring   # compiled-in → hapus
extension=zip        # compiled-in → hapus
extension=pdo_sqlite # compiled-in → hapus
extension=pdo_pgsql  # .so tidak ada → hapus

1.6 Aktifkan extension shared (.so)

Tambahkan di /etc/php/8.4/fpm/php.ini:

extension=gd
extension=intl
extension=pdo_mysql
extension=bcmath
zend_extension=opcache

1.7 Set MySQL socket path

pdo_mysql.default_socket = /run/mysqld/mysqld.sock
mysqli.default_socket = /run/mysqld/mysqld.sock

1.8 Disable function untuk security

disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,exec,system,passthru,shell_exec,proc_open,popen

1.9 Buat pool default

cat > /etc/php/8.4/fpm/pool.d/dummy.conf << 'EOF'
; origin-src: deb/php-fpm/dummy.conf
[www]
listen = /run/php/php8.4-fpm-dummy.sock
listen.owner = hestiamail
listen.group = www-data
listen.mode = 0660
user = hestiamail
group = hestiamail
pm = ondemand
pm.max_children = 4
pm.max_requests = 4000
pm.process_idle_timeout = 10s
EOF

1.10 Buat systemd service

cat > /lib/systemd/system/php8.4-fpm.service << 'SYSTEMD'
[Unit]
Description=PHP 8.4 FastCGI Process Manager
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/hestia/php/sbin/php-fpm --nodaemonize -c /etc/php/8.4/fpm --fpm-config /etc/php/8.4/fpm/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
RuntimeDirectory=php8.4-fpm
RuntimeDirectoryMode=0755
PIDFile=/run/php/php8.4-fpm.pid

[Install]
WantedBy=multi-user.target
SYSTEMD

systemctl daemon-reload
systemctl enable php8.4-fpm
systemctl start php8.4-fpm

Penting: Gunakan flag -c /etc/php/8.4/fpm karena binary bundled Hestia dikompilasi dengan --with-config-file-path=/usr/local/hestia/php/lib. Tanpa flag ini, FPM akan membaca php.ini yang salah dan pdo_mysql tidak terload.

1.11 Register di HestiaCP

cp /usr/local/hestia/install/deb/php-fpm/multiphp.tpl \
   /usr/local/hestia/data/templates/web/php-fpm/PHP-8_4.tpl

Verifikasi:

/usr/local/hestia/bin/v-list-sys-php
/usr/local/hestia/bin/v-list-web-templates-backend

2. Compile Extension Tambahan (bcmath, gd, intl, pdo_mysql)

2.1 Install build tools

apt-get install -y autoconf g++ pkg-config libicu-dev libpng-dev \
  libjpeg-dev libfreetype6-dev libwebp-dev libxpm-dev libgd-dev

2.2 Manual install libgd-dev (jika konflik versi)

cd /tmp
apt-get download libgd-dev
mkdir -p gd-extract && dpkg-deb -x libgd-dev*.deb gd-extract/
cp -r gd-extract/usr/include/* /usr/include/
cp -r gd-extract/usr/lib/x86_64-linux-gnu/* /usr/lib/x86_64-linux-gnu/
ln -sf /bin/sed /usr/bin/sed

2.4 Build bcmath

cd /tmp/php-8.4.21/ext/bcmath
/usr/local/hestia/php/bin/phpize
./configure --with-php-config=/usr/local/hestia/php/bin/php-config
make -j$(nproc) && make install

2.5 Build intl

cd /tmp/php-8.4.21/ext/intl
/usr/local/hestia/php/bin/phpize
./configure --with-php-config=/usr/local/hestia/php/bin/php-config
make -j$(nproc) && make install

2.6 Build gd

cd /tmp/php-8.4.21/ext/gd
/usr/local/hestia/php/bin/phpize
./configure --with-php-config=/usr/local/hestia/php/bin/php-config \
  --with-jpeg --with-webp --with-xpm --with-freetype --enable-gd
make -j$(nproc) && make install

2.7 Build pdo_mysql

cd /tmp/php-8.4.21/ext/pdo_mysql
/usr/local/hestia/php/bin/phpize
./configure --with-php-config=/usr/local/hestia/php/bin/php-config --with-pdo-mysql=mysqlnd
make -j$(nproc) && make install

3. Install PHP 8.5 (build from source)

3.1 Install build dependencies

apt-get install -y autoconf g++ pkg-config libicu-dev libpng-dev \
  libjpeg-dev libfreetype6-dev libwebp-dev libxpm-dev libxml2-dev \
  libcurl4-openssl-dev libssl-dev libsqlite3-dev libzip-dev libonig-dev \
  libgmp-dev libbz2-dev libreadline-dev libtidy-dev libpspell-dev libtool

3.2 Fix libxml2-dev (jika konflik versi)

cd /tmp
apt-get download libxml2-dev
mkdir -p xml-dev-extract && dpkg-deb -x libxml2-dev*.deb xml-dev-extract/
cp -r xml-dev-extract/usr/include/libxml2 /usr/include/
cp xml-dev-extract/usr/lib/x86_64-linux-gnu/pkgconfig/libxml-2.0.pc /usr/lib/pkgconfig/

3.3 Download & compile PHP 8.5

cd /tmp
wget https://www.php.net/distributions/php-8.5.0.tar.gz
tar xzf php-8.5.0.tar.gz && cd php-8.5.0

./configure \
  --prefix=/usr/local/php8.5 \
  --with-config-file-path=/etc/php/8.5/fpm \
  --with-config-file-scan-dir=/etc/php/8.5/fpm/conf.d \
  --enable-fpm \
  --with-fpm-user=nobody \
  --with-fpm-group=nogroup \
  --enable-bcmath \
  --enable-calendar \
  --enable-exif \
  --enable-ftp \
  --enable-gd \
  --with-freetype --with-jpeg --with-webp --with-xpm \
  --enable-intl \
  --enable-mbstring \
  --enable-shmop \
  --enable-soap \
  --enable-sockets \
  --enable-sysvmsg --enable-sysvsem --enable-sysvshm \
  --with-curl \
  --with-gettext \
  --with-gmp \
  --with-mysqli \
  --with-openssl \
  --with-pdo-mysql \
  --with-pdo-sqlite \
  --with-pear \
  --with-readline \
  --with-zip \
  --with-zlib \
  --with-bz2 \
  --with-iconv \
  --with-pspell \
  --with-tidy

make -j$(nproc) && make install
ln -sf /usr/local/php8.5/bin/php /usr/bin/php8.5

3.4 Setup FPM & systemd (sama seperti 8.4)

mkdir -p /etc/php/8.5/fpm/pool.d /etc/php/8.5/fpm/conf.d /var/log/php8.5
cp /tmp/php-8.5.0/php.ini-production /etc/php/8.5/fpm/php.ini

Ulangi langkah 1.4–1.8 untuk /etc/php/8.5/fpm/php.ini (tanpa perlu edit extension, karena semua compiled-in).

3.5 Buat systemd service PHP 8.5

cat > /lib/systemd/system/php8.5-fpm.service << 'SYSTEMD'
[Unit]
Description=PHP 8.5 FastCGI Process Manager
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/php8.5/sbin/php-fpm --nodaemonize --fpm-config /etc/php/8.5/fpm/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
RuntimeDirectory=php8.5-fpm
RuntimeDirectoryMode=0755
PIDFile=/run/php/php8.5-fpm.pid

[Install]
WantedBy=multi-user.target
SYSTEMD

systemctl daemon-reload
systemctl enable php8.5-fpm
systemctl start php8.5-fpm

3.6 Register di HestiaCP

cp /usr/local/hestia/install/deb/php-fpm/multiphp.tpl \
   /usr/local/hestia/data/templates/web/php-fpm/PHP-8_5.tpl

4. Verifikasi

# Cek service
systemctl status php8.4-fpm
systemctl status php8.5-fpm

# Cek deteksi Hestia
/usr/local/hestia/bin/v-list-sys-php

# Cek PDO driver
php8.4 -r 'echo implode(", ", PDO::getAvailableDrivers()) . "\n";'
php8.5 -r 'echo implode(", ", PDO::getAvailableDrivers()) . "\n";'

5. Assign ke Domain

CLI:

v-change-web-domain-backend-tpl <user> <domain> PHP-8_4
v-change-web-domain-backend-tpl <user> <domain> PHP-8_5

Panel: Edit domain → Backend Template → pilih PHP-8_4 / PHP-8_5.

Posting Komentar

Please Select Embedded Mode To Show The Comment System.*

Lebih baru Lebih lama

Formulir Kontak