Tutorial Perbaikan phpMyAdmin di HestiaCP

Tutorial Perbaikan phpMyAdmin di HestiaCP

Masalah

phpMyAdmin tidak berfungsi pada HestiaCP yang sudah terinstall. Gejala:

  • Akses http://domain.com/phpmyadmin/ menghasilkan 404 Not Found
  • Akses dari HestiaCP Panel (port 8083) ke phpMyAdmin juga tidak ditemukan
  • Error log nginx: directory index of "/usr/share/phpmyadmin//" is forbidden
  • Error log HestiaCP: "/usr/local/hestia/web/phpmyadmin/index.php" is not found

Penyebab

Terdapat 6 masalah yang menyebabkan phpMyAdmin tidak berfungsi:

1. File phpmyadmin.inc tidak di-load oleh nginx

File: /etc/nginx/conf.d/phpmyadmin.inc

Konfigurasi nginx hanya memuat file berekstensi .conf:

# /etc/nginx/nginx.conf line 128
include /etc/nginx/conf.d/*.conf;

Sedangkan file phpmyadmin menggunakan ekstensi .inc, sehingga tidak pernah di-load.

2. Location block phpMyAdmin tidak berada di dalam server block

File phpmyadmin.inc berisi directive location yang hanya valid di dalam blok server. Namun file ini di-include di level http (di dalam blok http {} di nginx.conf), sehingga location block tidak diterapkan ke server manapun.

3. File config.inc.php tidak ada di direktori phpMyAdmin

Direktori phpMyAdmin: /usr/share/phpmyadmin/

Hanya ada config.sample.inc.php, bukan config.inc.php. phpMyAdmin memerlukan file config.inc.php untuk berfungsi. File config yang benar berada di /etc/phpmyadmin/config.inc.php.

4. HestiaCP Panel mencari phpMyAdmin di path yang salah

HestiaCP Panel mengakses phpMyAdmin melalui URL /phpmyadmin/ di web server internalnya (port 8083). HestiaCP mencari file di /usr/local/hestia/web/phpmyadmin/ yang tidak ada.

5. Permission file config tidak dapat dibaca

File /etc/phpmyadmin/config.inc.php memiliki permission 640 (rw-r-----) dengan owner root:hestiamail. HestiaCP PHP-FPM berjalan sebagai user hestiaweb sehingga tidak dapat membaca file tersebut.

6. Error koneksi MySQL: No such file or directory

Error: mysqli::real_connect(): (HY000/2002): No such file or directory

Konfigurasi phpMyAdmin menggunakan host=localhost dan port=3306, namun tidak menentukan path socket MariaDB. PHP mysqli mencoba koneksi socket ke path default yang salah, sehingga gagal menemukan file socket MariaDB yang berada di /run/mysqld/mysqld.sock.


Perbaikan

Fix 1 & 2: Include phpMyAdmin di dalam server block

Buat file baru untuk include phpmyadmin.inc di dalam server block domain:

cat > /home/userhome/conf/web/server/nginx.conf_phpmyadmin << 'EOF'
include /etc/nginx/conf.d/phpmyadmin.inc;
EOF

Catatan: Ganti userhome dengan username HestiaCP dan server dengan nama domain web anda.

ln -sf /etc/phpmyadmin/config.inc.php /usr/share/phpmyadmin/config.inc.php
ln -s /usr/share/phpmyadmin /usr/local/hestia/web/phpmyadmin

Fix 5: Perbaiki permission file config

chmod 755 /etc/phpmyadmin/
chmod 644 /etc/phpmyadmin/config.inc.php
chmod 755 /etc/phpmyadmin/conf.d/
chmod 644 /etc/phpmyadmin/conf.d/01-localhost.php

Fix Tambahan: Tambahkan index directive di phpmyadmin.inc

Edit file /etc/nginx/conf.d/phpmyadmin.inc, tambahkan index index.php index.html;:

location /phpmyadmin {
    alias /usr/share/phpmyadmin/;
    index index.php index.html;

    location ~ /(libraries|setup|templates|locale) {
        deny   all;
        return 404;
    }

    location ~ /(.+\.(json|lock|md)) {
        deny   all;
        return 404;
    }

    location ~ ^/phpmyadmin/(.*\.php)$ {
        alias         /usr/share/phpmyadmin/$1;
        include       /etc/nginx/fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param HTTP_EARLY_DATA $rfc_early_data if_not_empty;
        fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin/$1;
        fastcgi_pass  unix:/run/php/www.sock;
    }

    location ~* \.(jpg|jpeg|gif|css|png|webp|js|ico|html|xml|txt)$ {
        alias /usr/share/phpmyadmin/$1;
    }
}

Fix 6: Perbaiki konfigurasi socket MySQL

Edit file /etc/phpmyadmin/conf.d/01-localhost.php, ganti host=localhost menjadi host=127.0.0.1 dan tambahkan socket:

<?php 
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['port'] = '3306';
$cfg['Servers'][$i]['socket'] = '/run/mysqld/mysqld.sock';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
// ... sisa konfigurasi lainnya

Penjelasan:

  • host=127.0.0.1 memaksa koneksi via TCP ke MariaDB yang listen di 127.0.0.1:3306
  • socket ditambahkan sebagai fallback jika koneksi via socket diperlukan
  • Jangan gunakan host=localhost tanpa socket karena akan menyebabkan error (HY000/2002)

Terapkan perubahan nginx

nginx -t && systemctl reload nginx

Verifikasi

Cek dari web server utama

curl -sI -H "Host: server" http://ipserver/phpmyadmin/

Harus menghasilkan HTTP/1.1 200 OK.

Cek dari HestiaCP Panel

Buka browser ke:

https://ip_server:8083/phpmyadmin/

Login ke panel HestiaCP terlebih dahulu, lalu akses phpMyAdmin.


Cara Akses phpMyAdmin

Akses URL
Dari HestiaCP Panel https://IP_SERVER:8083/phpmyadmin/
Langsung via HTTP http://domain.com/phpmyadmin/
Langsung via HTTPS https://domain.com/phpmyadmin/

Login menggunakan user MySQL/MariaDB yang tersedia (root atau user lain yang sudah dibuat).


File yang Dimodifikasi

File Aksi
/etc/nginx/conf.d/phpmyadmin.inc Ditambahkan index directive dan perbaikan SCRIPT_FILENAME
/usr/share/phpmyadmin/config.inc.php Symlink ke /etc/phpmyadmin/config.inc.php
/usr/local/hestia/web/phpmyadmin Symlink ke /usr/share/phpmyadmin
/home/userhome/conf/web/server/nginx.conf_phpmyadmin File baru untuk include phpmyadmin.inc
/etc/phpmyadmin/config.inc.php Permission diubah ke 644
/etc/phpmyadmin/conf.d/ Permission diubah ke 755
/etc/phpmyadmin/conf.d/01-localhost.php Permission diubah ke 644 + perbaikan host/socket

Troubleshooting

Masalah: "blowfish_secret" kosong di phpMyAdmin

Edit /etc/phpmyadmin/config.inc.php dan isi nilai blowfish_secret dengan string random 32 karakter:

$cfg["blowfish_secret"] = "abcdefghijklmnopqrstuvwxyz123456";

Masalah: Tidak bisa login ke HestiaCP Panel

Reset password via CLI:

v-change-user-password userhome password_baru

Masalah: 403 Forbidden di phpMyAdmin

Pastikan index directive sudah ditambahkan di phpmyadmin.inc:

location /phpmyadmin {
    alias /usr/share/phpmyadmin/;
    index index.php index.html;
    # ...
}

Masalah: Error "configuration file is not readable"

Pastikan permission file config sudah benar:

chmod 644 /etc/phpmyadmin/config.inc.php
chmod 755 /etc/phpmyadmin/conf.d/

Masalah: Error mysqli::real_connect(): (HY000/2002): No such file or directory

Edit /etc/phpmyadmin/conf.d/01-localhost.php:

// SALAH (menyebabkan error socket):
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '3306';

// BENAR:
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['port'] = '3306';
$cfg['Servers'][$i]['socket'] = '/run/mysqld/mysqld.sock';

Lalu cek path socket MariaDB:

mysql -e "SHOW VARIABLES LIKE 'socket';"
# Output: /run/mysqld/mysqld.sock

Posting Komentar

Please Select Embedded Mode To Show The Comment System.*

Lebih baru Lebih lama

Formulir Kontak