هل تعبت من الدخول إلى السيرفر كل مرة لتحديث الكود بعد git push؟ 🤦♂️ في هذا المقال، ستتعلم كيف تجعل Laravel يقوم بـ git pull تلقائيًا عند كل تحديث في GitHub، باستخدام Webhooks! سنشرح لك الخطوات بالتفصيل، بدءًا من إعداد Webhook في GitHub، إلى تنفيذ س...

أوتوماتيك Git Pull على السيرفر بعد كل Push في GitHub باستخدام Webhook
Table of contents [Show]
🚀 المشكلة؟
عندك مشروع Laravel على سيرفر، وكل مرة بتعمل git push
لازم تدخل بـ SSH وتعمل git pull
يدويًا؟ طب ما تيجي نخلي الموضوع أوتوماتيك؟ 🤩
🔥 الحل؟
هنستخدم GitHub Webhooks عشان كل ما تعمل git push
، الـ GitHub يبعت إشارة للسيرفر، والسيرفر يقوم أوتوماتيك يعمل git pull
.
📌 الخطوات بالتفصيل:
1️⃣ تجهيز السكريبت اللي هيعمل Git Pull
افتح routes/web.php
في Laravel، وضيف الكود ده:
use Illuminate\Support\Facades\Route; use Symfony\Component\Process\Process; Route::post('/github-webhook', function () { \Log::info('Webhook received from GitHub'); $process = new Process(['git', 'pull']); $process->run(); if (!$process->isSuccessful()) { \Log::error('Git Pull Error: ' . $process->getErrorOutput()); return response()->json(['message' => 'Git pull failed!'], 500); } return response()->json(['message' => 'Git pull executed successfully!']); });
2️⃣ إضافة الـ Webhook في GitHub
افتح GitHub Repository.
ادخل على Settings → Webhooks.
اضغط Add webhook.
في "Payload URL"، ضع رابط السيرفر متبوعًا بـ /github-webhook
.
اختر application/json كـ Content type.
حدد Just the push event.
اضغط Add webhook وخلاص! 🎉
3️⃣ تأمين الـ Webhook
نضيف Secret Key لحماية الـ Webhook. افتح .env
وأضف:
GITHUB_SECRET=your-secret-key
ثم عدّل الكود في web.php
ليشمل التحقق:
Route::post('/github-webhook', function (\Illuminate\Http\Request $request) { $secret = env('GITHUB_SECRET'); $signature = 'sha256=' . hash_hmac('sha256', $request->getContent(), $secret); if (!hash_equals($signature, $request->header('X-Hub-Signature-256'))) { \Log::warning('Webhook Signature Mismatch!'); return response()->json(['message' => 'Invalid signature'], 403); } \Log::info('Webhook received and verified.'); $process = new Process(['git', 'pull']); $process->run(); if (!$process->isSuccessful()) { \Log::error('Git Pull Error: ' . $process->getErrorOutput()); return response()->json(['message' => 'Git pull failed!'], 500); } return response()->json(['message' => 'Git pull executed successfully!']); });
للتأكد من أنه يعمل، جرب:
قم بـ git push
لكودك في GitHub.
في السيرفر، راقب اللوجات:
tail -f storage/logs/laravel.log
🎉 النتيجة؟
دلوقتي كل مرة تعمل git push
، السيرفر هيعمل git pull
أوتوماتيك وانت ملكش دعوة! 😎