مقدمة: لماذا VPS هو الحل المثالي لمشروع PHP
\nتطوير تطبيق PHP هو نصف المهمة فقط. النصف الثاني، الذي لا يقل أهمية، هو النشر الصحيح على الخادم. يوفر الخادم الافتراضي الخاص (VPS) المرونة والتحكم والأداء غير المتاح عند استخدام الاستضافة المشتركة. تحصل على وصول root، وإمكانية ضبط البيئة بدقة، وعزل كامل للموارد.
\nفي هذا الدليل، سننتقل من شراء الخادم إلى تطبيق عملي باستخدام PHP 8.x و Nginx و MySQL و Git. جميع الخطوات موصوفة لنظام التشغيل Ubuntu 22.04 LTS - التوزيعة الأكثر شيوعًا لخوادم الويب.
\n\n1. الإعداد الأولي لـ VPS والاتصال
\n\n1.1. اختيار وشراء VPS
\nلتطبيق PHP، الحد الأدنى من المتطلبات: 1 vCPU، 1 جيجابايت RAM، 20 جيجابايت SSD. نوصي بمزودين ذوي سمعة جيدة: DigitalOcean، Linode، Vultr أو المحليين Timeweb، Beget.
\nبعد الشراء، ستحصل على عنوان IP وكلمة مرور root (أو مفتاح SSH).
\n\n1.2. الاتصال عبر SSH وإنشاء مستخدم
\nنتصل بالخادم (استبدل 192.168.1.1 بعنوان IP الخاص بك):
ssh root@192.168.1.1\nننشئ مستخدمًا غير مميز للعمل اليومي:
\nadduser deployer\nusermod -aG sudo deployer\nنضبط مفاتيح SSH للدخول الآمن:
\nmkdir -p /home/deployer/.ssh\ncp ~/.ssh/authorized_keys /home/deployer/.ssh/\nchown -R deployer:deployer /home/deployer/.ssh\nchmod 700 /home/deployer/.ssh\nchmod 600 /home/deployer/.ssh/authorized_keys\nنعطل دخول root عبر كلمة المرور، نحرر /etc/ssh/sshd_config:
PermitRootLogin prohibit-password\nPasswordAuthentication no\nنعيد تشغيل SSH: systemctl restart sshd
1.3. الأمان الأساسي للخادم
\n- \n
- نحدث الحزم:
apt update && apt upgrade -y\n - نثبت fail2ban:
apt install fail2ban -y\n - نضبط UFW (جدار الحماية): \n
ufw allow OpenSSH\nufw allow 'Nginx Full'\nufw enable\n\n2. تثبيت وضبط مجموعة LEMP (Linux، Nginx، MySQL، PHP)
\n\n2.1. تثبيت Nginx
\napt install nginx -y\nsystemctl enable nginx\nsystemctl start nginx\nتحقق من العمل بفتح عنوان IP الخاص بالخادم في المتصفح. يجب أن ترى صفحة الترحيب الخاصة بـ Nginx.
\n\n2.2. تثبيت PHP 8.x و PHP-FPM
\nنضيف المستودع للإصدار الحالي من PHP:
\napt install software-properties-common -y\nadd-apt-repository ppa:ondrej/php -y\napt update\napt install php8.2-fpm php8.2-mysql php8.2-xml php8.2-curl php8.2-mbstring php8.2-zip php8.2-gd -y\nنتحقق من حالة PHP-FPM:
\nsystemctl status php8.2-fpm\n\n2.3. تثبيت MySQL (MariaDB)
\napt install mariadb-server -y\nsystemctl enable mariadb\nsystemctl start mariadb\nنشغل سكريبت الأمان:
\nmysql_secure_installation\nننشئ قاعدة بيانات ومستخدمًا للتطبيق:
\nmysql -u root -p\nCREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password';\nGRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';\nFLUSH PRIVILEGES;\nEXIT;\n\n2.4. ضبط المضيف الافتراضي لـ Nginx
\nننشئ ملف تكوين لنطاقنا (مثل myapp.com):
nano /etc/nginx/sites-available/myapp\nمحتوى الملف:
\nserver {\n listen 80;\n server_name myapp.com www.myapp.com;\n root /var/www/myapp/public;\n index index.php index.html;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_pass unix: