إعداد خادم Ubuntu كامل مع LAMP Stack - دليل شامل خطوة بخطوة
دليل شامل لإعداد خادم Ubuntu كامل مع LAMP Stack
المقدمة
إعداد خادم Linux كامل هو عملية معقدة تتطلب فهماً عميقاً للعديد من المكونات. في هذا الدليل المفصل جداً، سنغطي كل خطوة من خطوات إعداد خادم Ubuntu Server 22.04 LTS مع LAMP Stack (Linux، Apache، MySQL، PHP) مع شرح مفصل لكل أمر وسببه.
ما هو LAMP Stack؟
- L - Linux: نظام التشغيل الأساسي
- A - Apache: خادم الويب
- M - MySQL/MariaDB: نظام إدارة قاعدة البيانات
- P - PHP: لغة البرمجة للويب
متطلبات الخادم:
- خادم Ubuntu Server 22.04 LTS (جديد أو موجود)
- صلاحيات sudo أو root
- اتصال بالإنترنت مستقر
- مساحة تخزين كافية (20 جيجابايت على الأقل)
- ذاكرة RAM: 1 جيجابايت على الأقل (2 جيجابايت موصى بها)
الخطوة 1: تحديث النظام والأدوات الأساسية
تحديث قائمة الحزم:
sudo apt update
هذا الأمر يحدث قائمة الحزم المتاحة من المستودعات. يجب تشغيله دائماً قبل أي تثبيت للتأكد من الحصول على أحدث إصدارات البرامج.
ترقية النظام:
sudo apt upgrade -y
يقوم هذا الأمر بترقية جميع الحزم المثبتة إلى أحدث إصداراتها. العلم -y يؤكد تلقائياً على جميع الأسئلة.
تثبيت أدوات أساسية:
sudo apt install -y curl wget git unzip software-properties-common apt-transport-https ca-certificates gnupg lsb-release
- curl: لتحميل الملفات من الإنترنت
- wget: بديل لـ curl مع ميزات إضافية
- git: للتحكم في الإصدارات
- unzip: لفك الضغط عن الملفات
- software-properties-common: لإدارة مستودعات البرامج
- apt-transport-https: لدعم HTTPS في apt
- ca-certificates: شهادات الأمان
- gnupg: للتحقق من التوقيعات
- lsb-release: معلومات عن التوزيعة
الخطوة 2: إعداد جدار ناري أساسي (UFW)
التحقق من حالة UFW:
sudo ufw status
السماح بالاتصالات الأساسية:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
- ssh (22): للوصول عن بعد
- 80: HTTP
- 443: HTTPS
تفعيل جدار الناري:
sudo ufw enable
الخطوة 3: تثبيت وإعداد Apache
تثبيت Apache:
sudo apt install -y apache2
التحقق من حالة Apache:
sudo systemctl status apache2
تفعيل Apache للتشغيل التلقائي:
sudo systemctl enable apache2
إعداد Virtual Host أساسي:
sudo mkdir -p /var/www/html/example.com/public_html
sudo chown -R www-data:www-data /var/www/html/example.com
sudo chmod -R 755 /var/www/html/example.com
إنشاء ملف Virtual Host:
sudo nano /etc/apache2/sites-available/example.com.conf
أضف المحتوى التالي:
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html/example.com/public_html
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
تفعيل الموقع:
sudo a2ensite example.com.conf
sudo a2dissite 000-default.conf
sudo systemctl reload apache2
الخطوة 4: تثبيت وإعداد MySQL/MariaDB
تثبيت MariaDB (بديل أفضل لـ MySQL):
sudo apt install -y mariadb-server mariadb-client
تأمين MariaDB:
sudo mysql_secure_installation
سيطلب منك:
- إعداد كلمة مرور root
- حذف المستخدمين المجهولين
- منع تسجيل الدخول عن بعد لـ root
- حذف قاعدة البيانات التجريبية
- إعادة تحميل جداول الصلاحيات
الدخول إلى MariaDB:
sudo mysql -u root -p
إنشاء قاعدة بيانات ومستخدم:
CREATE DATABASE example_db;
CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON example_db.* TO 'example_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
الخطوة 5: تثبيت وإعداد PHP
إضافة مستودع PHP:
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
تثبيت PHP 8.1 مع الإضافات المطلوبة:
sudo apt install -y php8.1 php8.1-cli php8.1-common php8.1-mysql php8.1-zip php8.1-gd php8.1-mbstring php8.1-curl php8.1-xml php8.1-bcmath php8.1-intl php8.1-fpm
التحقق من تثبيت PHP:
php --version
إعداد PHP للعمل مع Apache:
sudo a2enmod php8.1
sudo systemctl restart apache2
إنشاء ملف اختبار PHP:
sudo nano /var/www/html/example.com/public_html/info.php
أضف:
اختبار PHP:
افتح المتصفح واذهب إلى: http://your_server_ip/info.php
الخطوة 6: تثبيت phpMyAdmin
تثبيت phpMyAdmin:
sudo apt install -y phpmyadmin
اختر Apache2 عند السؤال، ثم اضغط "Yes" لإعداد قاعدة البيانات.
ربط phpMyAdmin مع Apache:
sudo ln -s /usr/share/phpmyadmin /var/www/html/example.com/public_html/phpmyadmin
إعداد كلمة مرور phpMyAdmin:
sudo mysql -u root -p
ALTER USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;
EXIT;
الخطوة 7: إعداد SSL مع Let's Encrypt
تثبيت Certbot:
sudo apt install -y certbot python3-certbot-apache
الحصول على شهادة SSL:
sudo certbot --apache -d example.com -d www.example.com
سيطلب منك عنوان البريد الإلكتروني وموافقتك على الشروط.
اختبار التجديد التلقائي:
sudo certbot renew --dry-run
الخطوة 8: إعداد Fail2Ban للحماية
تثبيت Fail2Ban:
sudo apt install -y fail2ban
إنشاء ملف إعداد محلي:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
تعديل الإعدادات:
sudo nano /etc/fail2ban/jail.local
غير القيم التالية:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
[sshd]
enabled = true
إعادة تشغيل Fail2Ban:
sudo systemctl restart fail2ban
الخطوة 9: إعداد النسخ الاحتياطي التلقائي
إنشاء سكريبت النسخ الاحتياطي:
sudo nano /usr/local/bin/backup.sh
أضف المحتوى:
#!/bin/bash
# Backup script for web server
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/var/backups"
DB_BACKUP="$BACKUP_DIR/db_backup_$DATE.sql"
WEB_BACKUP="$BACKUP_DIR/web_backup_$DATE.tar.gz"
# Create backup directory if it doesn't exist
mkdir -p $BACKUP_DIR
# Backup database
mysqldump -u example_user -p'strong_password' example_db > $DB_BACKUP
# Backup web files
tar -czf $WEB_BACKUP /var/www/html/example.com
# Delete backups older than 7 days
find $BACKUP_DIR -type f -name "*.sql" -mtime +7 -delete
find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +7 -delete
echo "Backup completed on $DATE"
جعل السكريبت قابل للتنفيذ:
sudo chmod +x /usr/local/bin/backup.sh
إضافة مهمة مجدولة:
sudo crontab -e
أضف السطر:
0 2 * * * /usr/local/bin/backup.sh
الخطوة 10: تحسين الأداء
تفعيل mod_rewrite:
sudo a2enmod rewrite
sudo systemctl restart apache2
تحسين إعدادات PHP:
sudo nano /etc/php/8.1/apache2/php.ini
غير القيم التالية:
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
إعداد Gzip compression:
sudo a2enmod deflate
sudo nano /etc/apache2/mods-enabled/deflate.conf
أضف:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
الخطوة 11: مراقبة النظام
تثبيت htop لمراقبة العمليات:
sudo apt install -y htop
تشغيله: htop
مراقبة استخدام القرص:
df -h
مراقبة الذاكرة:
free -h
مراقبة سجلات النظام:
sudo journalctl -u apache2 -f
الخطوة 12: استكشاف الأخطاء الشائعة
مشكلة عدم عمل PHP:
sudo a2enmod php8.1
sudo systemctl restart apache2
مشكلة في قاعدة البيانات:
sudo systemctl status mariadb
sudo systemctl restart mariadb
مشكلة في الصلاحيات:
sudo chown -R www-data:www-data /var/www/html/example.com
sudo chmod -R 755 /var/www/html/example.com
إعادة تشغيل جميع الخدمات:
sudo systemctl restart apache2
sudo systemctl restart mariadb
sudo systemctl restart php8.1-fpm
خاتمة
تهانينا! لقد نجحت في إعداد خادم Ubuntu كامل مع LAMP Stack. خادمك الآن جاهز لاستضافة مواقع الويب بأمان وكفاءة. تذكر دائماً الحفاظ على النظام محدثاً ومراقبة السجلات بانتظام.
نصائح إضافية:
- قم بتغيير كلمات المرور الافتراضية
- راقب استخدام الموارد بانتظام
- احتفظ بنسخ احتياطية منتظمة
- قم بتحديث النظام بانتظام
- استخدم HTTPS دائماً
من خلال
Mohannad Hassounah
مشرف