823 lines
24 KiB
Markdown
823 lines
24 KiB
Markdown
# 🚀 المرحلة 3: نشر التطبيقات (Application Deployment)
|
||
|
||
## 📋 نظرة عامة
|
||
هذه المرحلة تركّز على نشر التطبيقات بأمان على السيرفر المحمي مع CloudPanel.
|
||
|
||
---
|
||
|
||
## 🎯 الأهداف
|
||
- نشر تطبيقات PHP/Python بأمان
|
||
- تكوين قواعد البيانات
|
||
- إعداد SSL/TLS
|
||
- اختبار وفحص التطبيقات
|
||
- مراقبة الأداء
|
||
|
||
---
|
||
|
||
## ⚙️ الخطوة 1: التحقق من CloudPanel
|
||
|
||
### 1.1 فحص التثبيت
|
||
```bash
|
||
# الاتصال بالسيرفر (باستخدام knock)
|
||
~/FORTRESS_KEYS/knock.sh 194.163.xxx.xxx
|
||
|
||
# بعد الدخول:
|
||
# التحقق من CloudPanel
|
||
if [ -d "/usr/local/cloudpanel" ]; then
|
||
echo "✅ CloudPanel مثبت"
|
||
cat /usr/local/cloudpanel/version
|
||
else
|
||
echo "❌ CloudPanel غير مثبت - سيتم التثبيت"
|
||
fi
|
||
```
|
||
|
||
### 1.2 تثبيت CloudPanel (إن لم يكن مثبتاً)
|
||
```bash
|
||
# تثبيت CloudPanel
|
||
curl -sS https://installer.cloudpanel.io/ce/v2/install.sh -o install.sh
|
||
sudo bash install.sh
|
||
|
||
# الانتظار حتى يكتمل التثبيت (5-10 دقائق)
|
||
|
||
# بعد التثبيت:
|
||
# الوصول: https://SERVER_IP:8443
|
||
# المستخدم: admin
|
||
# كلمة المرور: ستُعرض بعد التثبيت
|
||
```
|
||
|
||
### 1.3 تأمين CloudPanel
|
||
```bash
|
||
# 1. فتح منفذ CloudPanel في UFW
|
||
sudo ufw allow 8443/tcp comment 'CloudPanel Admin'
|
||
|
||
# 2. إنشاء سكريبت للوصول الآمن
|
||
sudo tee /usr/local/bin/fortress/cloudpanel_access.sh > /dev/null <<'EOF'
|
||
#!/bin/bash
|
||
# 🔐 CloudPanel Safe Access
|
||
|
||
# فتح المنفذ مؤقتاً (30 دقيقة)
|
||
sudo ufw allow from $SSH_CLIENT to any port 8443 proto tcp
|
||
|
||
echo "✅ CloudPanel متاح لـ 30 دقيقة"
|
||
echo "🌐 https://$(curl -s ifconfig.me):8443"
|
||
|
||
# إغلاق تلقائي بعد 30 دقيقة
|
||
(sleep 1800 && sudo ufw delete allow from $SSH_CLIENT to any port 8443 proto tcp) &
|
||
EOF
|
||
|
||
sudo chmod +x /usr/local/bin/fortress/cloudpanel_access.sh
|
||
```
|
||
|
||
---
|
||
|
||
## 📦 الخطوة 2: إعداد قواعد البيانات
|
||
|
||
### 2.1 تأمين MySQL/MariaDB
|
||
```bash
|
||
# تشغيل معالج الأمان
|
||
sudo mysql_secure_installation
|
||
|
||
# الإجابات الموصى بها:
|
||
# Enter current password: [اضغط Enter]
|
||
# Set root password? [Y]
|
||
# Remove anonymous users? [Y]
|
||
# Disallow root login remotely? [Y]
|
||
# Remove test database? [Y]
|
||
# Reload privilege tables? [Y]
|
||
```
|
||
|
||
### 2.2 إنشاء مستخدم قاعدة بيانات للتطبيق
|
||
```bash
|
||
# الدخول إلى MySQL
|
||
sudo mysql
|
||
|
||
# إنشاء قاعدة بيانات ومستخدم
|
||
CREATE DATABASE app_production CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD_HERE';
|
||
GRANT ALL PRIVILEGES ON app_production.* TO 'appuser'@'localhost';
|
||
FLUSH PRIVILEGES;
|
||
|
||
# التحقق
|
||
SHOW DATABASES;
|
||
SELECT User, Host FROM mysql.user;
|
||
|
||
EXIT;
|
||
```
|
||
|
||
### 2.3 نسخ احتياطي تلقائي لقواعد البيانات
|
||
```bash
|
||
sudo tee /usr/local/bin/fortress/db_backup.sh > /dev/null <<'DBBACKUPEOF'
|
||
#!/bin/bash
|
||
# 💾 Database Backup Script
|
||
|
||
BACKUP_DIR="/backup/databases"
|
||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||
DB_NAME="app_production"
|
||
DB_USER="appuser"
|
||
DB_PASS="STRONG_PASSWORD_HERE"
|
||
|
||
mkdir -p "$BACKUP_DIR"
|
||
|
||
# نسخة احتياطية مضغوطة
|
||
mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz"
|
||
|
||
# تشفير النسخة
|
||
openssl enc -aes-256-cbc -salt -pbkdf2 \
|
||
-in "${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz" \
|
||
-out "${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz.enc" \
|
||
-k "TRIPZ_DB_$(hostname)_$(date +%Y)"
|
||
|
||
# حذف غير المشفر
|
||
rm -f "${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz"
|
||
|
||
# الاحتفاظ بآخر 14 يوم
|
||
find "$BACKUP_DIR" -name "*.sql.gz.enc" -mtime +14 -delete
|
||
|
||
echo "✅ نسخة احتياطية: ${DB_NAME}_${TIMESTAMP}.sql.gz.enc"
|
||
DBBACKUPEOF
|
||
|
||
sudo chmod +x /usr/local/bin/fortress/db_backup.sh
|
||
|
||
# جدولة (يومياً 3 صباحاً)
|
||
(sudo crontab -l 2>/dev/null; echo "0 3 * * * /usr/local/bin/fortress/db_backup.sh >> /var/log/fortress/db_backup.log 2>&1") | sudo crontab -
|
||
```
|
||
|
||
---
|
||
|
||
## 🌐 الخطوة 3: نشر تطبيق PHP
|
||
|
||
### 3.1 إنشاء موقع في CloudPanel
|
||
```
|
||
📝 من واجهة CloudPanel:
|
||
|
||
1. اذهب إلى: Sites → Add Site
|
||
2. املأ البيانات:
|
||
- Site Name: myapp.com
|
||
- Site User: myapp
|
||
- Document Root: /home/myapp/htdocs/myapp.com
|
||
- PHP Version: 8.2 (الأحدث)
|
||
- Enable Varnish Cache: نعم
|
||
|
||
3. اضغط: Create Site
|
||
```
|
||
|
||
### 3.2 تكوين PHP (من SSH)
|
||
```bash
|
||
# تحرير php.ini للموقع
|
||
SITE_USER="myapp"
|
||
PHP_VERSION="8.2"
|
||
|
||
sudo tee /home/$SITE_USER/.php/cli/php.ini > /dev/null <<'PHPEOF'
|
||
# ══════════════════════════════════════
|
||
# TRIPZ FORTRESS - PHP Security Config
|
||
# ══════════════════════════════════════
|
||
|
||
# الأمان
|
||
expose_php = Off
|
||
display_errors = Off
|
||
log_errors = On
|
||
error_log = /home/myapp/logs/php_error.log
|
||
|
||
# الحدود
|
||
memory_limit = 256M
|
||
upload_max_filesize = 10M
|
||
post_max_size = 10M
|
||
max_execution_time = 30
|
||
max_input_time = 60
|
||
|
||
# الجلسات
|
||
session.cookie_httponly = 1
|
||
session.cookie_secure = 1
|
||
session.use_strict_mode = 1
|
||
|
||
# الملفات المعطلة (الخطيرة)
|
||
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
|
||
PHPEOF
|
||
|
||
# إعادة تشغيل PHP-FPM
|
||
sudo systemctl restart php${PHP_VERSION}-fpm
|
||
```
|
||
|
||
### 3.3 رفع الكود
|
||
```bash
|
||
# من اللابتوب - رفع الملفات عبر rsync
|
||
cd /path/to/your/app
|
||
|
||
rsync -avz --progress \
|
||
-e "ssh -i ~/FORTRESS_KEYS/fortress_master -p 2200" \
|
||
./ tripzadmin@194.163.xxx.xxx:/tmp/app_upload/
|
||
|
||
# على السيرفر - نقل الملفات
|
||
sudo mv /tmp/app_upload/* /home/myapp/htdocs/myapp.com/
|
||
sudo chown -R myapp:myapp /home/myapp/htdocs/myapp.com/
|
||
sudo chmod -R 755 /home/myapp/htdocs/myapp.com/
|
||
|
||
# الصلاحيات الخاصة (للمجلدات القابلة للكتابة)
|
||
sudo chmod -R 775 /home/myapp/htdocs/myapp.com/storage
|
||
sudo chmod -R 775 /home/myapp/htdocs/myapp.com/cache
|
||
```
|
||
|
||
### 3.4 تكوين قاعدة البيانات للتطبيق
|
||
```bash
|
||
# تحرير ملف التكوين (.env للـ Laravel مثلاً)
|
||
sudo -u myapp nano /home/myapp/htdocs/myapp.com/.env
|
||
|
||
# المحتوى:
|
||
DB_CONNECTION=mysql
|
||
DB_HOST=127.0.0.1
|
||
DB_PORT=3306
|
||
DB_DATABASE=app_production
|
||
DB_USERNAME=appuser
|
||
DB_PASSWORD=STRONG_PASSWORD_HERE
|
||
|
||
# حماية الملف
|
||
sudo chmod 600 /home/myapp/htdocs/myapp.com/.env
|
||
```
|
||
|
||
---
|
||
|
||
## 🐍 الخطوة 4: نشر تطبيق Python (Flask/Django)
|
||
|
||
### 4.1 تثبيت Python والأدوات
|
||
```bash
|
||
# تثبيت Python 3.11
|
||
sudo apt install -y python3.11 python3.11-venv python3-pip
|
||
|
||
# إنشاء مستخدم للتطبيق
|
||
sudo useradd -m -s /bin/bash pyapp
|
||
```
|
||
|
||
### 4.2 إنشاء بيئة افتراضية
|
||
```bash
|
||
# إنشاء المجلدات
|
||
sudo mkdir -p /home/pyapp/app
|
||
sudo mkdir -p /home/pyapp/logs
|
||
|
||
# إنشاء venv
|
||
sudo -u pyapp python3.11 -m venv /home/pyapp/venv
|
||
|
||
# تفعيل وتثبيت المتطلبات
|
||
sudo -u pyapp /home/pyapp/venv/bin/pip install --upgrade pip
|
||
sudo -u pyapp /home/pyapp/venv/bin/pip install flask gunicorn
|
||
|
||
# أو من requirements.txt:
|
||
# sudo -u pyapp /home/pyapp/venv/bin/pip install -r /home/pyapp/app/requirements.txt
|
||
```
|
||
|
||
### 4.3 تكوين Gunicorn (WSGI Server)
|
||
```bash
|
||
sudo tee /etc/systemd/system/pyapp.service > /dev/null <<'GUNICORNEOF'
|
||
[Unit]
|
||
Description=Python App - Gunicorn
|
||
After=network.target
|
||
|
||
[Service]
|
||
User=pyapp
|
||
Group=pyapp
|
||
WorkingDirectory=/home/pyapp/app
|
||
Environment="PATH=/home/pyapp/venv/bin"
|
||
|
||
ExecStart=/home/pyapp/venv/bin/gunicorn \
|
||
--workers 3 \
|
||
--bind unix:/home/pyapp/app.sock \
|
||
--access-logfile /home/pyapp/logs/access.log \
|
||
--error-logfile /home/pyapp/logs/error.log \
|
||
wsgi:app
|
||
|
||
Restart=always
|
||
RestartSec=10
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
GUNICORNEOF
|
||
|
||
# تفعيل وبدء
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable pyapp
|
||
sudo systemctl start pyapp
|
||
|
||
# التحقق
|
||
sudo systemctl status pyapp
|
||
```
|
||
|
||
### 4.4 تكوين Nginx للتطبيق Python
|
||
```bash
|
||
sudo tee /etc/nginx/sites-available/pyapp.conf > /dev/null <<'NGINXEOF'
|
||
server {
|
||
listen 80;
|
||
server_name pyapp.example.com;
|
||
|
||
# التحويل إلى HTTPS
|
||
return 301 https://$server_name$request_uri;
|
||
}
|
||
|
||
server {
|
||
listen 443 ssl http2;
|
||
server_name pyapp.example.com;
|
||
|
||
# SSL Certificates (سيتم إضافتها لاحقاً)
|
||
ssl_certificate /etc/letsencrypt/live/pyapp.example.com/fullchain.pem;
|
||
ssl_certificate_key /etc/letsencrypt/live/pyapp.example.com/privkey.pem;
|
||
|
||
# الأمان
|
||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||
add_header X-Content-Type-Options "nosniff" always;
|
||
add_header X-XSS-Protection "1; mode=block" always;
|
||
|
||
# السجلات
|
||
access_log /home/pyapp/logs/nginx_access.log;
|
||
error_log /home/pyapp/logs/nginx_error.log;
|
||
|
||
# Proxy إلى Gunicorn
|
||
location / {
|
||
proxy_pass http://unix:/home/pyapp/app.sock;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
}
|
||
|
||
# الملفات الثابتة
|
||
location /static {
|
||
alias /home/pyapp/app/static;
|
||
expires 30d;
|
||
add_header Cache-Control "public, immutable";
|
||
}
|
||
}
|
||
NGINXEOF
|
||
|
||
# تفعيل الموقع
|
||
sudo ln -s /etc/nginx/sites-available/pyapp.conf /etc/nginx/sites-enabled/
|
||
sudo nginx -t
|
||
sudo systemctl reload nginx
|
||
```
|
||
|
||
---
|
||
|
||
## 🔒 الخطوة 5: إعداد SSL/TLS (Let's Encrypt)
|
||
|
||
### 5.1 تثبيت Certbot
|
||
```bash
|
||
sudo apt install -y certbot python3-certbot-nginx
|
||
```
|
||
|
||
### 5.2 الحصول على شهادة SSL
|
||
```bash
|
||
# لموقع PHP (عبر CloudPanel)
|
||
# استخدم الواجهة: SSL/TLS → Let's Encrypt
|
||
|
||
# لموقع Python (يدوياً)
|
||
sudo certbot --nginx -d pyapp.example.com
|
||
|
||
# الإجابات:
|
||
# Email: your-email@example.com
|
||
# Agree to TOS: Yes
|
||
# Redirect HTTP to HTTPS: Yes
|
||
```
|
||
|
||
### 5.3 التجديد التلقائي
|
||
```bash
|
||
# اختبار التجديد
|
||
sudo certbot renew --dry-run
|
||
|
||
# التجديد مُجدول تلقائياً في systemd timer
|
||
sudo systemctl status certbot.timer
|
||
```
|
||
|
||
---
|
||
|
||
## 🔍 الخطوة 6: الفحص والاختبار
|
||
|
||
### 6.1 سكريبت فحص التطبيق
|
||
```bash
|
||
sudo tee /usr/local/bin/fortress/app_check.sh > /dev/null <<'APPCHECKEOF'
|
||
#!/bin/bash
|
||
# 🔍 Application Health Check
|
||
|
||
echo "🔍 TRIPZ FORTRESS - Application Check"
|
||
echo "════════════════════════════════════════"
|
||
|
||
# 1. فحص المواقع
|
||
echo "🌐 المواقع:"
|
||
for site in /home/*/htdocs/*; do
|
||
if [ -d "$site" ]; then
|
||
SITE_NAME=$(basename $site)
|
||
SITE_USER=$(basename $(dirname $(dirname $site)))
|
||
echo " 📁 $SITE_NAME (المستخدم: $SITE_USER)"
|
||
|
||
# فحص الصلاحيات
|
||
PERMS=$(stat -c %a $site)
|
||
if [ "$PERMS" == "755" ]; then
|
||
echo " ✅ الصلاحيات: $PERMS"
|
||
else
|
||
echo " ⚠️ الصلاحيات: $PERMS (مقترح: 755)"
|
||
fi
|
||
fi
|
||
done
|
||
|
||
# 2. فحص قواعد البيانات
|
||
echo ""
|
||
echo "💾 قواعد البيانات:"
|
||
sudo mysql -e "SHOW DATABASES;" | grep -v -E "Database|information_schema|performance_schema|mysql|sys" | while read db; do
|
||
SIZE=$(sudo mysql -e "SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)' FROM information_schema.TABLES WHERE table_schema='$db';" | tail -1)
|
||
echo " 📊 $db: ${SIZE} MB"
|
||
done
|
||
|
||
# 3. فحص Nginx
|
||
echo ""
|
||
echo "🌍 Nginx:"
|
||
if nginx -t 2>&1 | grep -q "successful"; then
|
||
echo " ✅ التكوين صحيح"
|
||
else
|
||
echo " ❌ أخطاء في التكوين!"
|
||
fi
|
||
|
||
# 4. فحص PHP-FPM
|
||
echo ""
|
||
echo "🐘 PHP-FPM:"
|
||
for version in 8.0 8.1 8.2 8.3; do
|
||
if systemctl is-active --quiet php${version}-fpm 2>/dev/null; then
|
||
echo " ✅ PHP $version نشط"
|
||
fi
|
||
done
|
||
|
||
# 5. فحص Python Apps
|
||
echo ""
|
||
echo "🐍 Python Apps:"
|
||
if systemctl is-active --quiet pyapp 2>/dev/null; then
|
||
echo " ✅ pyapp نشط"
|
||
WORKERS=$(ps aux | grep gunicorn | grep -v grep | wc -l)
|
||
echo " Workers: $WORKERS"
|
||
else
|
||
echo " ⚠️ pyapp غير نشط"
|
||
fi
|
||
|
||
# 6. فحص SSL
|
||
echo ""
|
||
echo "🔒 SSL Certificates:"
|
||
sudo certbot certificates 2>/dev/null | grep "Certificate Name" | while read line; do
|
||
DOMAIN=$(echo $line | awk '{print $3}')
|
||
EXPIRY=$(sudo certbot certificates 2>/dev/null | grep -A 10 "Certificate Name: $DOMAIN" | grep "Expiry Date" | awk '{print $3, $4}')
|
||
echo " 🔐 $DOMAIN → ينتهي: $EXPIRY"
|
||
done
|
||
|
||
echo ""
|
||
echo "════════════════════════════════════════"
|
||
echo "✅ الفحص مكتمل"
|
||
APPCHECKEOF
|
||
|
||
sudo chmod +x /usr/local/bin/fortress/app_check.sh
|
||
|
||
# تشغيل الفحص
|
||
sudo /usr/local/bin/fortress/app_check.sh
|
||
```
|
||
|
||
### 6.2 اختبار الأداء
|
||
```bash
|
||
# تثبيت أدوات الاختبار
|
||
sudo apt install -y apache2-utils
|
||
|
||
# اختبار PHP site
|
||
ab -n 1000 -c 10 https://myapp.com/
|
||
|
||
# اختبار Python app
|
||
ab -n 1000 -c 10 https://pyapp.example.com/
|
||
```
|
||
|
||
---
|
||
|
||
## 🛡️ الخطوة 7: حماية التطبيقات
|
||
|
||
### 7.1 ModSecurity (WAF)
|
||
```bash
|
||
# تثبيت ModSecurity
|
||
sudo apt install -y libmodsecurity3 modsecurity-crs
|
||
|
||
# تكوين Nginx مع ModSecurity
|
||
sudo tee /etc/nginx/modsec/main.conf > /dev/null <<'MODSECEOF'
|
||
SecRuleEngine On
|
||
SecRequestBodyAccess On
|
||
SecResponseBodyAccess On
|
||
|
||
SecAuditEngine RelevantOnly
|
||
SecAuditLog /var/log/modsec_audit.log
|
||
|
||
# OWASP Core Rule Set
|
||
Include /etc/nginx/modsec/crs-setup.conf
|
||
Include /etc/nginx/modsec/rules/*.conf
|
||
MODSECEOF
|
||
|
||
# تفعيل في Nginx
|
||
# (يتطلب إعادة بناء Nginx مع ModSecurity module)
|
||
```
|
||
|
||
### 7.2 Rate Limiting في Nginx
|
||
```bash
|
||
# إضافة Rate Limiting للحماية من DDoS
|
||
sudo tee -a /etc/nginx/nginx.conf > /dev/null <<'RATELIMITEOF'
|
||
|
||
# ══════════════════════════════════════
|
||
# TRIPZ FORTRESS - Rate Limiting
|
||
# ══════════════════════════════════════
|
||
|
||
# تحديد المعدل: 10 طلبات/ثانية
|
||
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
|
||
|
||
# تحديد الاتصالات المتزامنة
|
||
limit_conn_zone $binary_remote_addr zone=addr:10m;
|
||
RATELIMITEOF
|
||
|
||
# تطبيق على المواقع
|
||
# في ملفات sites-enabled، أضف:
|
||
# limit_req zone=general burst=20 nodelay;
|
||
# limit_conn addr 10;
|
||
```
|
||
|
||
### 7.3 Fail2Ban للمواقع
|
||
```bash
|
||
# فلتر Nginx
|
||
sudo tee /etc/fail2ban/filter.d/nginx-limit-req.conf > /dev/null <<'F2BEOF'
|
||
[Definition]
|
||
failregex = limiting requests, excess:.* by zone.*client: <HOST>
|
||
ignoreregex =
|
||
EOF
|
||
|
||
# Jail
|
||
sudo tee -a /etc/fail2ban/jail.local > /dev/null <<'EOF'
|
||
|
||
[nginx-limit-req]
|
||
enabled = true
|
||
filter = nginx-limit-req
|
||
port = http,https
|
||
logpath = /var/log/nginx/*error.log
|
||
maxretry = 5
|
||
bantime = 3600
|
||
findtime = 600
|
||
EOF
|
||
|
||
sudo systemctl restart fail2ban
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 الخطوة 8: المراقبة والتنبيهات
|
||
|
||
### 8.1 تثبيت Netdata (اختياري)
|
||
```bash
|
||
# Netdata للمراقبة في الوقت الفعلي
|
||
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
|
||
|
||
# الوصول: http://SERVER_IP:19999
|
||
# ⚠️ يجب تأمينه بـ password أو VPN!
|
||
|
||
# تأمين Netdata
|
||
sudo tee -a /etc/netdata/netdata.conf > /dev/null <<'EOF'
|
||
[web]
|
||
bind to = localhost
|
||
EOF
|
||
|
||
sudo systemctl restart netdata
|
||
|
||
# الآن يمكن الوصول فقط عبر SSH tunnel:
|
||
# ssh -L 19999:localhost:19999 -i ~/FORTRESS_KEYS/fortress_master -p 2200 tripzadmin@SERVER_IP
|
||
```
|
||
|
||
### 8.2 تنبيهات الأداء
|
||
```bash
|
||
sudo tee /usr/local/bin/fortress/performance_alert.sh > /dev/null <<'PERFEOF'
|
||
#!/bin/bash
|
||
# 📊 Performance Monitoring & Alerts
|
||
|
||
# حدود التنبيه
|
||
CPU_THRESHOLD=80
|
||
MEMORY_THRESHOLD=85
|
||
DISK_THRESHOLD=90
|
||
|
||
# الحالة الحالية
|
||
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
|
||
MEMORY_USAGE=$(free | grep Mem | awk '{print ($3/$2) * 100.0}' | cut -d'.' -f1)
|
||
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | cut -d'%' -f1)
|
||
|
||
# التحقق والتنبيه
|
||
if (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )); then
|
||
/usr/local/bin/fortress/telegram_notify.sh "⚠️ CPU مرتفع: ${CPU_USAGE}%"
|
||
fi
|
||
|
||
if [ "$MEMORY_USAGE" -gt "$MEMORY_THRESHOLD" ]; then
|
||
/usr/local/bin/fortress/telegram_notify.sh "⚠️ الذاكرة مرتفعة: ${MEMORY_USAGE}%"
|
||
fi
|
||
|
||
if [ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ]; then
|
||
/usr/local/bin/fortress/telegram_notify.sh "⚠️ القرص ممتلئ: ${DISK_USAGE}%"
|
||
fi
|
||
PERFEOF
|
||
|
||
sudo chmod +x /usr/local/bin/fortress/performance_alert.sh
|
||
|
||
# جدولة الفحص (كل 30 دقيقة)
|
||
(sudo crontab -l 2>/dev/null; echo "*/30 * * * * /usr/local/bin/fortress/performance_alert.sh") | sudo crontab -
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 الخطوة 9: الاختبار النهائي
|
||
|
||
### 9.1 قائمة الفحص النهائية
|
||
```bash
|
||
sudo tee /usr/local/bin/fortress/final_test.sh > /dev/null <<'FINALTESTEOF'
|
||
#!/bin/bash
|
||
# ✅ Final Deployment Test
|
||
|
||
echo "🧪 TRIPZ FORTRESS - Final Deployment Test"
|
||
echo "════════════════════════════════════════════════"
|
||
|
||
# 1. الاتصال
|
||
echo "1️⃣ فحص الاتصال:"
|
||
ping -c 2 8.8.8.8 >/dev/null && echo " ✅ Internet" || echo " ❌ Internet"
|
||
curl -s https://google.com >/dev/null && echo " ✅ HTTPS" || echo " ❌ HTTPS"
|
||
|
||
# 2. الخدمات
|
||
echo ""
|
||
echo "2️⃣ الخدمات الأساسية:"
|
||
SERVICES=("nginx" "mysql" "php8.2-fpm" "sshd" "ufw" "fail2ban")
|
||
for svc in "${SERVICES[@]}"; do
|
||
systemctl is-active --quiet $svc && echo " ✅ $svc" || echo " ❌ $svc"
|
||
done
|
||
|
||
# 3. المواقع
|
||
echo ""
|
||
echo "3️⃣ فحص المواقع:"
|
||
for site in myapp.com pyapp.example.com; do
|
||
STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://$site 2>/dev/null || echo "000")
|
||
if [ "$STATUS" == "200" ]; then
|
||
echo " ✅ $site → $STATUS"
|
||
else
|
||
echo " ⚠️ $site → $STATUS"
|
||
fi
|
||
done
|
||
|
||
# 4. SSL
|
||
echo ""
|
||
echo "4️⃣ SSL Certificates:"
|
||
sudo certbot certificates 2>/dev/null | grep -c "Certificate Name" && echo " ✅ شهادات نشطة" || echo " ⚠️ لا توجد شهادات"
|
||
|
||
# 5. قواعد البيانات
|
||
echo ""
|
||
echo "5️⃣ قواعد البيانات:"
|
||
mysql -e "SHOW DATABASES;" 2>/dev/null | grep -c "app_production" && echo " ✅ app_production" || echo " ❌ app_production"
|
||
|
||
# 6. الأمان
|
||
echo ""
|
||
echo "6️⃣ الطبقات الأمنية:"
|
||
systemctl is-active --quiet knockd && echo " ✅ Port Knocking" || echo " ❌ Port Knocking"
|
||
systemctl is-active --quiet endlessh && echo " ✅ Honeypot" || echo " ❌ Honeypot"
|
||
sudo fail2ban-client status sshd &>/dev/null && echo " ✅ Fail2Ban" || echo " ❌ Fail2Ban"
|
||
|
||
# 7. النسخ الاحتياطية
|
||
echo ""
|
||
echo "7️⃣ النسخ الاحتياطية:"
|
||
[ -d "/backup/fortress" ] && ls /backup/fortress/*.enc &>/dev/null && echo " ✅ نسخ السيرفر" || echo " ⚠️ نسخ السيرفر"
|
||
[ -d "/backup/databases" ] && ls /backup/databases/*.enc &>/dev/null && echo " ✅ نسخ قواعد البيانات" || echo " ⚠️ نسخ قواعد البيانات"
|
||
|
||
echo ""
|
||
echo "════════════════════════════════════════════════"
|
||
echo "✅ الاختبار مكتمل!"
|
||
FINALTESTEOF
|
||
|
||
sudo chmod +x /usr/local/bin/fortress/final_test.sh
|
||
|
||
# تشغيل الاختبار
|
||
sudo /usr/local/bin/fortress/final_test.sh
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 الخطوة 10: التوثيق النهائي
|
||
|
||
### 10.1 ملف معلومات التطبيقات
|
||
```bash
|
||
sudo tee /root/APPLICATIONS_INFO.txt > /dev/null <<'EOF'
|
||
════════════════════════════════════════════════════════
|
||
🚀 TRIPZ FORTRESS - معلومات التطبيقات
|
||
════════════════════════════════════════════════════════
|
||
|
||
📝 المواقع النشطة:
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
1. myapp.com
|
||
- النوع: PHP 8.2
|
||
- الموقع: /home/myapp/htdocs/myapp.com
|
||
- قاعدة البيانات: app_production
|
||
- SSL: Let's Encrypt ✅
|
||
|
||
2. pyapp.example.com
|
||
- النوع: Python (Flask + Gunicorn)
|
||
- الموقع: /home/pyapp/app
|
||
- Socket: /home/pyapp/app.sock
|
||
- SSL: Let's Encrypt ✅
|
||
|
||
💾 قواعد البيانات:
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
- app_production (myapp.com)
|
||
- النسخ الاحتياطي: يومياً 3 صباحاً
|
||
- الموقع: /backup/databases/
|
||
|
||
🔧 الصيانة:
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
• فحص التطبيقات: sudo /usr/local/bin/fortress/app_check.sh
|
||
• فحص الأداء: sudo /usr/local/bin/fortress/performance_alert.sh
|
||
• الاختبار الشامل: sudo /usr/local/bin/fortress/final_test.sh
|
||
• نسخة احتياطية يدوية: sudo /usr/local/bin/fortress/db_backup.sh
|
||
|
||
🔐 CloudPanel:
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
الوصول: https://SERVER_IP:8443
|
||
المستخدم: admin
|
||
للأمان: استخدم /usr/local/bin/fortress/cloudpanel_access.sh
|
||
|
||
📊 المراقبة:
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
Netdata: http://localhost:19999 (عبر SSH tunnel فقط)
|
||
السجلات: /var/log/fortress/, /var/log/nginx/
|
||
|
||
⚠️ ملاحظات:
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
1. تحديث SSL تلقائياً (Certbot)
|
||
2. Rate Limiting مفعّل (10 req/s)
|
||
3. ModSecurity WAF (إن فُعّل)
|
||
4. تنبيهات الأداء كل 30 دقيقة
|
||
|
||
════════════════════════════════════════════════════════
|
||
EOF
|
||
|
||
sudo cat /root/APPLICATIONS_INFO.txt
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ النتيجة النهائية
|
||
|
||
الآن السيرفر:
|
||
- ✅ محمي بـ 9 طبقات أمنية
|
||
- ✅ التطبيقات منشورة ومحمية
|
||
- ✅ قواعد البيانات آمنة ومنسوخة
|
||
- ✅ SSL/TLS مفعّل وتلقائي
|
||
- ✅ مراقبة وتنبيهات نشطة
|
||
- ✅ نسخ احتياطية يومية
|
||
|
||
---
|
||
|
||
## 🆘 استكشاف الأخطاء
|
||
|
||
### مشكلة: الموقع لا يعمل (502 Bad Gateway)
|
||
```bash
|
||
# 1. فحص PHP-FPM
|
||
sudo systemctl status php8.2-fpm
|
||
sudo tail -f /var/log/php8.2-fpm.log
|
||
|
||
# 2. فحص Nginx
|
||
sudo nginx -t
|
||
sudo systemctl status nginx
|
||
|
||
# 3. فحص الصلاحيات
|
||
ls -la /home/myapp/htdocs/myapp.com/
|
||
```
|
||
|
||
### مشكلة: قاعدة البيانات لا تتصل
|
||
```bash
|
||
# 1. فحص MySQL
|
||
sudo systemctl status mysql
|
||
|
||
# 2. اختبار الاتصال
|
||
mysql -u appuser -p app_production
|
||
|
||
# 3. فحص المستخدمين
|
||
sudo mysql -e "SELECT User, Host FROM mysql.user;"
|
||
```
|
||
|
||
### مشكلة: SSL لا يعمل
|
||
```bash
|
||
# 1. فحص الشهادات
|
||
sudo certbot certificates
|
||
|
||
# 2. إعادة المحاولة
|
||
sudo certbot --nginx -d myapp.com --force-renewal
|
||
|
||
# 3. فحص Nginx
|
||
sudo nginx -t
|
||
```
|
||
|
||
---
|
||
|
||
## 📞 الدعم النهائي
|
||
|
||
إذا واجهت أي مشاكل:
|
||
1. راجع السجلات: `sudo journalctl -xe`
|
||
2. فحص الأمان: `sudo /usr/local/bin/fortress/health_check.sh`
|
||
3. فحص التطبيقات: `sudo /usr/local/bin/fortress/app_check.sh`
|
||
4. التواصل: https://tripz-egypt.com
|
||
|
||
═══════════════════════════════════════════
|
||
🎉 جميع المراحل مكتملة!
|
||
السيرفر محمي والتطبيقات جاهزة!
|
||
═══════════════════════════════════════════
|