# دليل النشر والتنفيذ - شامل ومفصل **التاريخ:** 16 يونيو 2026 **الحالة:** قيد الإعداد للنشر **المدة المتوقعة:** 9.5 ساعات --- ## 🎯 الهدف تطبيق إصلاحات أمان حرجة على نظام سيرو مع ضمان عدم قطع الخدمة. --- ## 📋 المتطلبات قبل البدء - [ ] نسخة احتياطية كاملة من قاعدة البيانات - [ ] وصول مسؤول (SSH) إلى الخوادم - [ ] حساب DevOps / تشغيل - [ ] فريق اختبار جاهز - [ ] خطة العودة للإصدار السابق --- ## 🚀 مراحل التنفيذ ### المرحلة 1️⃣: تحضيراتي (30 دقيقة) #### 1.1 التحقق من البيئة الحالية ```bash # تحقق من إصدار PHP php -v # تحقق من توفر openssl php -m | grep openssl # تحقق من Redis redis-cli ping # تحقق من MySQL mysql -u root -p -e "SELECT VERSION();" ``` #### 1.2 نسخ احتياطي شامل ```bash # قاعدة البيانات الرئيسية 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 -- استخدم 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 نسخ الملفات الجديدة ```bash 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 ```bash # إنشاء نسخة جديدة من .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 ``` **القيم الواجب تغييرها:** ``` ❌ ``` #### 2.3 توليد المفاتيح الآمنة ```bash # توليد 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 اختبار الملفات الجديدة ```bash # اختبر بناء الجملة 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 تفعيل الميزات الجديدة ```php // في 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 ```php // اختبر التوقيع 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 ```bash # 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 اختبار أمان - محاولات الهجوم ```bash # ❌ محاولة بدون 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 تفعيل السجلات ```bash # تحقق من 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) ```php // لاحقاً: إضافة لوحة معلومات للمراقبة 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 توثيق التغييرات ```markdown # تقرير النشر **التاريخ:** 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) إذا حدثت مشكلة ما: ```bash # 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. أرسل النسخ الاحتياطية للتحليل --- **النشر منجز ✅**