Files
Siro/DEPLOYMENT_GUIDE.md
2026-06-16 17:47:19 +03:00

11 KiB
Raw Blame History

دليل النشر والتنفيذ - شامل ومفصل

التاريخ: 16 يونيو 2026
الحالة: قيد الإعداد للنشر
المدة المتوقعة: 9.5 ساعات


🎯 الهدف

تطبيق إصلاحات أمان حرجة على نظام سيرو مع ضمان عدم قطع الخدمة.


📋 المتطلبات قبل البدء

  • نسخة احتياطية كاملة من قاعدة البيانات
  • وصول مسؤول (SSH) إلى الخوادم
  • حساب DevOps / تشغيل
  • فريق اختبار جاهز
  • خطة العودة للإصدار السابق

🚀 مراحل التنفيذ

المرحلة 1: تحضيراتي (30 دقيقة)

1.1 التحقق من البيئة الحالية

# تحقق من إصدار PHP
php -v

# تحقق من توفر openssl
php -m | grep openssl

# تحقق من Redis
redis-cli ping

# تحقق من MySQL
mysql -u root -p -e "SELECT VERSION();"

1.2 نسخ احتياطي شامل

# قاعدة البيانات الرئيسية
mysqldump -u root -p siro_main > /backup/siro_main_$(date +%Y%m%d_%H%M%S).sql

# قاعدة بيانات المحفظة
mysqldump -u root -p walletintaleq > /backup/walletintaleq_$(date +%Y%m%d_%H%M%S).sql

# ملفات الكود
tar -czf /backup/backend_$(date +%Y%m%d_%H%M%S).tar.gz /var/www/html/backend/

# .env file
cp backend/.env /backup/.env.backup

1.3 إنشاء قاعدة البيانات الجديدة

-- استخدم SQL Client مثل MySQL Workbench أو phpMyAdmin

-- الجدول الجديد لتتبع طلبات إضافة الأموال
CREATE TABLE IF NOT EXISTS driver_wallet_requests (
    id INT AUTO_INCREMENT PRIMARY KEY,
    driver_id INT NOT NULL,
    amount DECIMAL(10, 2) NOT NULL,
    source VARCHAR(50) DEFAULT 'manual',
    status ENUM('pending', 'completed', 'failed') DEFAULT 'pending',
    error TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    CONSTRAINT fk_driver_id FOREIGN KEY (driver_id)
        REFERENCES driver(id) ON DELETE CASCADE,

    INDEX idx_driver_status (driver_id, status),
    INDEX idx_created_at (created_at),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- اختياري: إضافة عمود log للتدقيق
ALTER TABLE driver_wallet_requests
ADD COLUMN audit_log LONGTEXT AFTER error;

-- اختياري: تحديد Retention Policy
ALTER TABLE driver_wallet_requests
ADD INDEX idx_retention (created_at);

-- تحقق من الجدول
DESCRIBE driver_wallet_requests;
SHOW CREATE TABLE driver_wallet_requests\G

المرحلة 2: النشر الفعلي (4 ساعات)

2.1 نسخ الملفات الجديدة

cd /var/www/html

# نسخ فئة WalletConnector
cp /path/to/WalletConnector.php backend/core/

# إنشاء مجلد wallet
mkdir -p backend/wallet
cp /path/to/backend/wallet/add.php backend/wallet/

# تحديث ملفات المحفظة في walletintaleq
cp /path/to/add_s2s.php walletintaleq.intaleq.xyz/v2/main/ride/driverWallet/

# تحديث encrypt_decrypt.php
cp /path/to/encrypt_decrypt.php backend/

2.2 تحديث ملف .env

# إنشاء نسخة جديدة من .env مع المتغيرات الآمنة
cp backend/.env.example backend/.env

# تحرير .env وملء القيم الحساسة
nano backend/.env

# تعيين الأذونات الصحيحة
chmod 600 backend/.env
chown www-data:www-data backend/.env

# التحقق من الأذونات
ls -la backend/.env

القيم الواجب تغييرها:

❌ <CHANGE_ME_STRONG_PASSWORD>
❌ <CHANGE_ME_32_BYTE_HEX_KEY>
❌ <CHANGE_ME_LONG_RANDOM_STRING>
❌ <CHANGE_ME_REDIS_PASSWORD>
❌ <CHANGE_ME_LONG_HMAC_SECRET>

2.3 توليد المفاتيح الآمنة

# توليد ENC_KEY (32 بايت hex)
openssl rand -hex 16

# مثال: 9a3f2e1b8c7d6e5f4a3b2c1d0e9f8a7b
# ← ضع هذا في ENC_KEY

# توليد JWT_SECRET
openssl rand -base64 32

# توليد WALLET_HMAC_SECRET
openssl rand -base64 48

# توليد REDIS_AUTH
openssl rand -base64 32

2.4 اختبار الملفات الجديدة

# اختبر بناء الجملة PHP
php -l backend/core/WalletConnector.php
php -l backend/wallet/add.php
php -l walletintaleq.intaleq.xyz/v2/main/ride/driverWallet/add_s2s.php

# اختبر الاتصال بـ Redis
php -r "
    \$redis = new Redis();
    \$redis->connect('localhost', 6379);
    echo \$redis->ping();
"

# اختبر الاتصال بـ MySQL
php -r "
    \$pdo = new PDO('mysql:host=localhost;dbname=siro_main', 'root', 'password');
    echo 'MySQL Connected';
"

2.5 تفعيل الميزات الجديدة

// في backend/bootstrap.php أو config

// تفعيل WalletConnector
require_once __DIR__ . '/core/WalletConnector.php';

// تفعيل المسار الجديد
// أضف في router.php أو .htaccess
// POST /wallet/add → backend/wallet/add.php

المرحلة 3: الاختبار (2 ساعة)

3.1 اختبار وحدة - WalletConnector

// اختبر التوقيع HMAC
$hmac = hash_hmac('sha256', 'test', 'secret');
echo "HMAC: $hmac\n";

// اختبر التسلسل الزمني
$timestamp = time();
$timeDiff = abs(time() - $timestamp);
echo "Time diff: $timeDiff (should be < 5 seconds)\n";

// اختبر Nonce
$nonce = bin2hex(random_bytes(16));
echo "Nonce: $nonce (length: " . strlen($nonce) . ")\n";

3.2 اختبار التكامل - End-to-End

# 1⃣ احصل على JWT (كسائق)
curl -X POST https://api.siromove.com/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "id": 1,
    "fingerprint": "fake_fingerprint",
    "aud": "driver"
  }'

# 2⃣ استخدم JWT لإضافة الأموال
JWT_TOKEN="eyJ0eXAiOiJKV1QiLCJhbGc..."

curl -X POST https://api.siromove.com/wallet/add \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -d '{
    "amount": 100,
    "source": "test"
  }'

# 3⃣ تحقق من قاعدة البيانات
mysql -u root -p siro_main -e "
  SELECT * FROM driver_wallet_requests
  WHERE driver_id = 1
  ORDER BY created_at DESC
  LIMIT 1;
"

3.3 اختبار أمان - محاولات الهجوم

# ❌ محاولة بدون JWT
curl -X POST https://api.siromove.com/wallet/add \
  -H "Content-Type: application/json" \
  -d '{"amount": 100}'
# النتيجة المتوقعة: 401 Unauthorized

# ❌ JWT غير صحيح
curl -X POST https://api.siromove.com/wallet/add \
  -H "Authorization: Bearer invalid_token" \
  -d '{"amount": 100}'
# النتيجة المتوقعة: 401 Unauthorized

# ❌ مبلغ سالب
curl -X POST https://api.siromove.com/wallet/add \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -d '{"amount": -100}'
# النتيجة المتوقعة: 400 Bad Request

# ❌ مبلغ أكبر من 10,000
curl -X POST https://api.siromove.com/wallet/add \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -d '{"amount": 50000}'
# النتيجة المتوقعة: 400 Bad Request

# ❌ تحديد السرعة (multiple requests)
for i in {1..10}; do
  curl -X POST https://api.siromove.com/wallet/add \
    -H "Authorization: Bearer $JWT_TOKEN" \
    -d '{"amount": 100}' &
done
wait
# النتيجة المتوقعة: 429 Too Many Requests

المرحلة 4: المراقبة (1 ساعة)

4.1 تفعيل السجلات

# تحقق من logs
tail -f /var/log/siro-api/security.log

# ابحث عن أخطاء
grep ERROR /var/log/siro-api/*.log

# احسب عدد الطلبات الناجحة
grep "wallet add completed" /var/log/siro-api/security.log | wc -l

4.2 إنشاء لوحة معلومات (Dashboard)

// لاحقاً: إضافة لوحة معلومات للمراقبة

SELECT
    DATE(created_at) as date,
    COUNT(*) as total_requests,
    SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END) as successful,
    SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) as failed,
    SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) as pending
FROM driver_wallet_requests
GROUP BY DATE(created_at);

المرحلة 5: التوثيق والإغلاق (30 دقيقة)

5.1 توثيق التغييرات

# تقرير النشر

**التاريخ:** 2026-06-17  
**المدة:** 9.5 ساعات  
**حالة النشر:** ✅ ناجح

## التغييرات:

1. ✅ نقل endpoint إضافة الأموال إلى Backend
2. ✅ تطبيق S2S API مع توقيع HMAC
3. ✅ إصلاح التشفير (IV عشوائي)
4. ✅ تقليل أذونات Android
5. ✅ تحديث الروابط إلى HTTPS

## الاختبارات:

- ✅ اختبار وحدة
- ✅ اختبار تكامل
- ✅ اختبار أمان
- ✅ اختبار الأداء

## المراقبة:

- ✅ السجلات تعمل بشكل صحيح
- ✅ لا توجد أخطاء
- ✅ الأداء عادي

## النقاط الحرجة:

- لا تنسَ تحديث WALLET_HMAC_SECRET في كلا الجانبين
- لا تنسَ تعديل firewall rules
- لا تنسَ إخطار فريق الدعم

5.2 إخطارات المستخدمين (اختياري)

📢 تنبيه الصيانة:
تم تحديث نظام المحفظة لأسباب أمنية.
- لا توجد تأثيرات على المستخدمين
- جميع الأموال آمنة
- الخدمة مستقرة

للمزيد من المعلومات، اتصل بـ: support@siromove.com

🚨 خطة العودة للإصدار السابق (Rollback)

إذا حدثت مشكلة ما:

# 1⃣ توقف الخدمة
systemctl stop siro-api

# 2⃣ استعد النسخة الاحتياطية
cp /backup/backend_*.tar.gz .
tar -xzf backend_*.tar.gz -C /var/www/html/

# 3⃣ استعد قاعدة البيانات
mysql -u root -p < /backup/siro_main_*.sql
mysql -u root -p < /backup/walletintaleq_*.sql

# 4⃣ استعد .env القديم
cp /backup/.env.backup backend/.env

# 5⃣ أعد تشغيل الخدمة
systemctl start siro-api

# 6⃣ تحقق من الحالة
systemctl status siro-api

قائمة التحقق النهائي

  • تم عمل نسخ احتياطية
  • تم نسخ الملفات الجديدة
  • تم تحديث .env
  • تم إنشاء الجداول الجديدة
  • تم اختبار جميع البيانات
  • تم اختبار الأمان
  • تم مراقبة الخدمة
  • تم توثيق التغييرات
  • تم إخطار الفريق

📞 الدعم والمساعدة

في حالة أي مشاكل:

  1. تحقق من السجلات: /var/log/siro-api/
  2. جرّب rollback
  3. اتصل بـ: devops@siromove.com
  4. أرسل النسخ الاحتياطية للتحليل

النشر منجز