2026-02-05/1
This commit is contained in:
822
PHASE_3_APPLICATION_DEPLOYMENT.md
Normal file
822
PHASE_3_APPLICATION_DEPLOYMENT.md
Normal file
@@ -0,0 +1,822 @@
|
||||
# 🚀 المرحلة 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
|
||||
|
||||
═══════════════════════════════════════════
|
||||
🎉 جميع المراحل مكتملة!
|
||||
السيرفر محمي والتطبيقات جاهزة!
|
||||
═══════════════════════════════════════════
|
||||
Reference in New Issue
Block a user