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
userhomedengan username HestiaCP danserverdengan nama domain web anda.
Fix 3: Buat symlink config.inc.php
ln -sf /etc/phpmyadmin/config.inc.php /usr/share/phpmyadmin/config.inc.php
Fix 4: Buat symlink untuk HestiaCP Panel
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.1memaksa koneksi via TCP ke MariaDB yang listen di127.0.0.1:3306socketditambahkan sebagai fallback jika koneksi via socket diperlukan- Jangan gunakan
host=localhosttanpasocketkarena 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