سيرفرات

🚀 نشر تطبيق Laravel باستخدام GitHub Actions

F

Fady Mondy

Oct 20, 2025

75 مشاهدة
🚀 نشر تطبيق Laravel باستخدام GitHub Actions

من الجميل جدًا أن تقوم ببناء نظام CI/CD (التكامل والتسليم المستمر) لمشروعك بعد الانتهاء من التطوير أو من أجل بيئة Staging لاختبار المشروع على الخادم، لذلك سنشرح في هذا الدرس أفضل طريقة للقيام بذلك 🚀.

يمكنك اتباع خطوات هذا الدرس لتجعل تطبيقك يعمل أونلاين بسهولة.

🏯 تثبيت CloudPanel

لبدء العمل على خادم جديد، عادة ستحتاج لتثبيت العديد من الحزم أو استخدام Docker.
لكن الطريقة الأسهل لنشر تطبيق Laravel PHP هي الحصول على VPS من أحد مزودي الخدمة مثل AWS EC2 أو Hetzner Cloud… إلخ.
بعد الحصول على الـ VPS — ويجب أن يكون بنظام Ubuntu 22.01 — يمكنك متابعة الخطوات التالية.

ما هو CloudPanel

CloudPanel هو لوحة تحكم خوادم مجانية وحديثة لإدارة الخوادم بسهولة وبساطة.
يمكنك تشغيل PHP و Node.js و مواقع ثابتة و Reverse Proxies و تطبيقات Python بسرعة باستخدام تقنيات عالية الأداء.

يدعم الإطلاق السريع على:

✅ المميزات

  • مجاني 100%
  • سهل الاستخدام
  • مدعوم من المجتمع
  • سريع جدًا (حتى 250x)
  • آمن (SSL مجاني)
  • تكامل مع Cloudflare
  • أداء عالي
  • جاهز خلال دقيقة واحدة فقط
  • يدعم كل مزودي الخدمة الكبار
  • يدعم X86 و ARM

🧰 تثبيت CloudPanel

سجّل الدخول إلى الخادم الخاص بك باستخدام SSH:

ssh root@yourIpAddress

إذا كنت تستخدم كلمة مرور:

ssh -i path_to_your_private_key root@yourIpAddress

قم بتحديث النظام وتثبيت الحزم المطلوبة:

apt update && apt -y upgrade && apt -y install curl wget sudo

الآن قم بتثبيت CloudPanel:

curl -sS https://installer.cloudpanel.io/ce/v2/install.sh -o install.sh; \
echo "3c30168958264ced81ca9b58dbc55b4d28585d9066b9da085f2b130ae91c50f6 install.sh" | \
sha256sum -c && sudo bash install.sh

🌐 الوصول إلى لوحة CloudPanel

لأسباب أمنية، يجب الدخول إلى لوحة CloudPanel فورًا وإنشاء مستخدم المدير. افتح المتصفح وتوجه إلى:

https://yourIpAddress:8443

ثم تجاهل تحذير الشهادة واختر “Advanced” ثم “Proceed”.


🔓 ربط Cloudflare

لتحسين الأمان والأداء، سنستخدم Cloudflare كـ DNS و Reverse Proxy مع التخزين المؤقت.

✨ إنشاء حساب على Cloudflare

قم بإنشاء حساب جديد بسهولة عبر هذا الرابط.

➕ إضافة الدومين إلى Cloudflare

أضف موقعك إلى Cloudflare من تبويب Websites. أدخل الدومين ثم غيّر Nameservers من مزود الدومين إلى Cloudflare. تستغرق العملية بضع دقائق إلى 24 ساعة حسب المزود.

🌍 ربط الدومين بـ CloudPanel

  1. افتح DNS من لوحة Cloudflare وأضف سجل A يشير إلى IP الخادم.
  2. اجعل Proxy status = DNS Only.
  3. في CloudPanel، من الإعدادات غيّر الدومين إلى cp.YOUR_DOMAIN. سيتم توليد SSL تلقائيًا.

🌐 ربط دومين المشروع

  1. من تبويب Website أضف موقع جديد واختَر “Create PHP Site App”.
  2. أضف A Record في Cloudflare.
  3. من تبويب SSL/TLS في Cloudflare أنشئ Origin Certificate مجاني لمدة 15 سنة.
  4. استورد الشهادة في CloudPanel.

الآن موقعك آمن ويعمل بـ SSL ✅.


🔃 استنساخ المشروع (Clone Repo)

سجّل الدخول إلى الخادم باستخدام SSH كمستخدم المشروع:

ssh youproject@yourIpAddress

قم بإنشاء مفتاح SSH جديد:

ssh-keygen -t ed25519 -C "[email protected]"

اعرض المفتاح وانسخه:

cat .ssh/rsa.pub

أضفه إلى GitHub من Settings → Deploy keys. ثم استنسخ المشروع إلى مجلد المشروع:

cd /home/yourproject/htdocs/yourproject.com
git clone [email protected]:tomatophp/tomato.git .

📄 إعداد .env

cp .env.example .env

حدث معلومات قاعدة البيانات والدومين:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tomato-kit
DB_USERNAME=root
DB_PASSWORD=26111995

APP_URL=https://yourproject.com
APP_HOST=yourproject.com

📦 تثبيت الحزم

composer install
php artisan key:generate
php artisan config:cache
php artisan storage:link
php artisan optimize:clear

📦 تثبيت NVM/NPM/Yarn

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
source ~/.bashrc
nvm install 18
nvm use 18
npm -g i yarn
yarn && yarn build

الآن المشروع جاهز للعمل على المتصفح 🥳.


🎇 إعداد CI/CD Workflow

قم بإنشاء ملف GitHub Actions داخل .github/workflows/ci.yaml وأضف الكود التالي:

name: Testing Laravel with MySQL
on:
  pull_request:
    branches: [ master ]
  push:
    branches: [ master ]

jobs:
  laravel:
    runs-on: ubuntu-latest
    ...
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
      - name: Install Composer dependencies
        run: composer install --no-progress --prefer-dist --optimize-autoloader
      - name: Prepare Laravel Application
        run: |
          php -r "file_exists('.env') || copy('.env.example', '.env');"
          php artisan key:generate
      - name: Test with phpunit
        run: vendor/bin/phpunit --coverage-text
      - name: Deploy to server
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USERNAME }}
          port: ${{ secrets.SSH_PORT }}
          password: ${{ secrets.SSH_PASSWORD }}
          script: cd ${{ secrets.SSH_PATH }} && ./.scripts/deploy.sh

أضف أسرار الخادم (Secrets) في إعدادات GitHub:

SSH_HOST: 8.8.8.8
SSH_USERNAME: yourproject
SSH_PORT: 22
SSH_PASSWORD: yourpassword
SSH_PATH: /home/yourproject/htdocs/yourdomain.com

🦕 إعداد سكربت النشر (Deploy Script)

قم بإنشاء مجلد .scripts وملف deploy.sh مع صلاحيات التشغيل:

mkdir .scripts
cd .scripts
touch deploy.sh
chmod 755 deploy.sh

ثم أضف:

#!/bin/bash
set -e

echo "Deployment started ..."

(php artisan down) || true
git reset --hard
git pull origin master
composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
php artisan clear-compiled
php artisan optimize
yarn
yarn build
php artisan migrate --force
php artisan up

echo "Deployment finished!"

ادفع التغييرات (push) إلى GitHub وستبدأ عملية CI/CD تلقائيًا ⚡


النتيجة النهائية: بإتمام هذه الخطوات، سيكون لديك نظام نشر آلي (CI/CD) متكامل لتطبيق Laravel، مزود بلوحة تحكم CloudPanel، وحماية Cloudflare، وأتمتة كاملة للنشر والتحديثات.

شارك هذا:

التعليقات (0)

انضم إلى النقاش

الرجاء تسجيل الدخول للتعليق

تسجيل الدخول

لا توجد تعليقات بعد

كن أول من يعلق

مستعد للعمل معاً؟

دعنا نناقش كيف يمكننا المساعدة

تواصل معنا