phpMyAdmin, MariaDB और MySQL के लिए एक सुविधाजनक वेब इंटरफ़ेस है, और साथ ही इंटरनेट पर सबसे ज़्यादा स्कैन किए जाने वाले URL में से एक भी। यह गाइड आपके VPS Linux Infrawire पर दो इंस्टॉलेशन दिखाती है, Apache के साथ apt पैकेज और Nginx के पीछे मैन्युअल इंस्टॉल, और फिर वे उपाय जो इसे बॉट से दूर रखते हैं।
📋 पूर्वापेक्षाएँ
- Ubuntu 24.04 या Debian 12 वाला VPS, root या
sudoएक्सेस के साथ (IP और root पासवर्ड आपके क्लाइंट एरिया में मिलते हैं) - MariaDB के साथ चालू LAMP (विकल्प A) या LEMP (विकल्प B) स्टैक
- आपका अपना सार्वजनिक IP, जिसे नीचे
ADMIN_IPकहा गया है
1. विकल्प A: Apache के साथ apt पैकेज इंस्टॉल करें
Bashapt update apt install -y phpmyadmin php-mbstring php-zip php-gd php-curl
इंस्टॉलर में स्पेस बार से apache2 चुनें (तारा दिखना चाहिए), फिर dbconfig-common से डेटाबेस कॉन्फ़िगर करने के लिए "हाँ" चुनें और phpMyAdmin के आंतरिक खाते के लिए पासवर्ड सेट करें। इसके बाद Apache रीलोड करें:
Bashphpenmod mbstring systemctl reload apache2
अब phpMyAdmin http://VPS_IP/phpmyadmin पर उपलब्ध है।
2. समर्पित डेटाबेस यूज़र बनाएँ
root से कभी लॉगिन न करें। Ubuntu और Debian पर MariaDB में root unix_socket ऑथेंटिकेशन इस्तेमाल करता है और phpMyAdmin उसे वैसे भी मना कर देगा: इसे ऐसे ही रहने दें और एक सामान्य खाता बनाएँ।
Bashmariadb
SQLCREATE USER 'pmauser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; GRANT ALL PRIVILEGES ON appdb.* TO 'pmauser'@'localhost'; FLUSH PRIVILEGES; EXIT;
अधिकार केवल उन्हीं डेटाबेस पर दें जिन्हें यूज़र सचमुच संभालता है। कॉन्फ़िगरेशन में AllowNoPassword चालू न करें।
3. URL छिपाएँ और ऑथेंटिकेशन जोड़ें (Apache)
डिफ़ॉल्ट एलियास को रैंडम एलियास से बदलें और पासवर्ड फ़ाइल बनाएँ:
BashSUFFIX=$(openssl rand -hex 6); echo "pma-$SUFFIX" sed -i "s#Alias /phpmyadmin#Alias /pma-$SUFFIX#" /etc/phpmyadmin/apache.conf htpasswd -c /etc/phpmyadmin/.htpasswd USER
फिर /etc/phpmyadmin/apache.conf में मौजूद <Directory /usr/share/phpmyadmin> ब्लॉक के अंदर ये पंक्तियाँ जोड़ें:
Apache1AuthType Basic 2AuthName 'Restricted area' 3AuthUserFile /etc/phpmyadmin/.htpasswd 4<RequireAll> 5 Require valid-user 6 Require ip ADMIN_IP 7</RequireAll>
<RequireAll> के बिना Apache दोनों में से कोई एक शर्त मान लेता; इसके साथ पासवर्ड और IP दोनों ज़रूरी हो जाते हैं।
Bashapache2ctl configtest && systemctl reload apache2
4. विकल्प B: Nginx के पीछे मैन्युअल इंस्टॉल
डिपेंडेंसी इंस्टॉल करें, फिर phpMyAdmin की आधिकारिक साइट से नवीनतम रिलीज़ डाउनलोड करें (VERSION की जगह वर्तमान संस्करण संख्या लिखें):
Bashapt install -y nginx php-fpm php-mysql php-mbstring php-xml php-zip php-gd php-curl apache2-utils cd /tmp wget https://files.phpmyadmin.net/phpMyAdmin/VERSION/phpMyAdmin-VERSION-all-languages.tar.gz tar xzf phpMyAdmin-VERSION-all-languages.tar.gz mkdir -p /var/www/pma mv phpMyAdmin-VERSION-all-languages /var/www/pma/pma-SECRET cd /var/www/pma/pma-SECRET cp config.sample.inc.php config.inc.php openssl rand -hex 16
pma-SECRET की जगह कोई रैंडम नाम रखें। config.inc.php संपादित करें और जनरेट की गई वैल्यू (32 अक्षर) को सीक्रेट के रूप में चिपकाएँ:
PHP$cfg['blowfish_secret'] = 'RANDOM_32_CHARS'; $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
Bashmkdir -p /var/lib/phpmyadmin/tmp chown www-data:www-data /var/lib/phpmyadmin/tmp chmod 700 /var/lib/phpmyadmin/tmp chown -R root:www-data /var/www/pma chmod 640 /var/www/pma/pma-SECRET/config.inc.php htpasswd -c /etc/nginx/.htpasswd USER
यह ब्लॉक अपनी साइट के server { ... } के अंदर जोड़ें। Debian 12 पर सॉकेट php8.3-fpm.sock की जगह php8.2-fpm.sock होता है:
Nginx1location ^~ /pma-SECRET/ { 2 allow ADMIN_IP; 3 deny all; 4 auth_basic 'Restricted area'; 5 auth_basic_user_file /etc/nginx/.htpasswd; 6 root /var/www/pma; 7 index index.php; 8 9 location ~ \.php$ { 10 include snippets/fastcgi-php.conf; 11 fastcgi_pass unix:/run/php/php8.3-fpm.sock; 12 } 13}
Bashnginx -t && systemctl reload nginx
5. सबसे सुरक्षित तरीक़ा: SSH टनल
यदि आप कोई सार्वजनिक एक्सपोज़र नहीं चाहते, तो इंटरफ़ेस को केवल VPS के भीतर से पहुँचने योग्य रखें और अपने कंप्यूटर से टनल खोलें:
Bashssh -L 8080:127.0.0.1:80 USER@VPS_IP
सेशन खुला रहने तक http://127.0.0.1:8080/pma-SECRET/ पर जाएँ। Apache में ब्लॉक के भीतर Require ip ADMIN_IP की जगह Require local रखें; Nginx में allow 127.0.0.1; का उपयोग करें। इससे घर के बदलते IP की समस्या भी हल हो जाती है।
6. सुरक्षा की जाँच करें
Bashcurl -sI http://VPS_IP/phpmyadmin | head -n 1 curl -sI http://VPS_IP/pma-SECRET/ | head -n 1
पहले अनुरोध को 404 लौटाना चाहिए। दूसरा ADMIN_IP के अलावा किसी भी IP से 403 लौटाता है, और आपके IP से तब तक 401 जब तक आप बेसिक ऑथ पासवर्ड नहीं देते। phpMyAdmin को केवल HTTPS पर ही चलाएँ, वरना पासवर्ड सादे टेक्स्ट में जाते हैं।
🛠️ समस्या निवारण
404 Not Found। एलियास या location का नाम आपके टाइप किए URL से मेल नहीं खाता, या वेब सर्वर रीलोड नहीं किया गया।
आपको ही 403 Forbidden मिल रहा है। आपका सार्वजनिक IP बदल गया है। ADMIN_IP अपडेट करें या SSH टनल पर जाएँ।
"The mbstring extension is missing" या खाली पेज। php-mbstring इंस्टॉल करें, फिर phpenmod mbstring (Apache) चलाएँ या php8.3-fpm रीस्टार्ट करें (Nginx)।
root के लिए Access denied। यह अपेक्षित और वांछित है। चरण 2 में बनाए गए समर्पित यूज़र से लॉगिन करें।
🎉 phpMyAdmin इंस्टॉल, छिपा हुआ और प्रतिबंधित है: आपके डेटाबेस तक केवल आप पहुँच सकते हैं।