يُعد phpMyAdmin واجهة ويب عملية لإدارة MariaDB وMySQL، وهو أيضًا من أكثر العناوين فحصًا على الإنترنت. يعرض هذا الدليل طريقتين للتثبيت على VPS Linux Infrawire الخاص بك: حزمة apt مع Apache، وتثبيتًا يدويًا خلف Nginx، ثم الإجراءات التي تبقيه بعيدًا عن الروبوتات.
📋 المتطلبات المسبقة
- خادم VPS بنظام Ubuntu 24.04 أو Debian 12 مع صلاحيات root أو
sudo(عنوان IP وكلمة مرور root متوفران في مساحة العميل) - حزمة LAMP (الخيار A) أو LEMP (الخيار B) تعمل مع MariaDB
- عنوان IP العام الخاص بك، ويُشار إليه أدناه بـ
ADMIN_IP
1. الخيار A: تثبيت حزمة apt مع Apache
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. في MariaDB على Ubuntu وDebian يستخدم 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. إخفاء العنوان وإضافة المصادقة (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
ثم أضف هذه الأسطر داخل الكتلة الموجودة <Directory /usr/share/phpmyadmin> في الملف /etc/phpmyadmin/apache.conf:
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.2-fpm.sock بدلًا من php8.3-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. أما الثاني فيُرجع 403 من أي عنوان IP غير ADMIN_IP، ويُرجع 401 من عنوانك إلى أن تُدخل كلمة مرور المصادقة الأساسية. قدّم phpMyAdmin عبر HTTPS فقط، وإلا انتقلت كلمات المرور كنص صريح.
🛠️ استكشاف الأخطاء وإصلاحها
404 Not Found. الاسم المستعار أو اسم location لا يطابق العنوان الذي كتبته، أو لم تتم إعادة تحميل خادم الويب.
تحصل أنت على 403 Forbidden. تغيّر عنوان IP العام الخاص بك. حدّث ADMIN_IP أو انتقل إلى نفق SSH.
«The mbstring extension is missing» أو صفحة فارغة. ثبّت php-mbstring ثم نفّذ phpenmod mbstring (Apache) أو أعد تشغيل php8.3-fpm (Nginx).
Access denied للمستخدم root. هذا متوقع ومرغوب. سجّل الدخول بالمستخدم المخصص الذي أنشأته في الخطوة 2.
🎉 تم تثبيت phpMyAdmin وإخفاؤه وتقييده: أنت وحدك من يصل إلى قواعد بياناتك.