البرمجة مبتدئ 7 دقيقة

كيفية نشر موقع ساكن على GitHub Pages

GitHub Pages استضافة ساكنة مجانية مدمجة مباشرة في GitHub. لا خادم تُعدّه، ولا فاتورة لحركة المرور الصغيرة، وتحدث عمليات النشر تلقائيًا عند كل push. يدعم HTML وCSS وJavaScript والأطر المبنية مسبقًا — أي شيء لا يحتاج كودًا من جانب الخادم وقت التشغيل.

الخطوات

  1. 1

    ارفع موقعك إلى مستودع GitHub

    يجب أن يكون كودك المصدري في مستودع GitHub. إذا كنت تنشر مجلد بناء جاهز (مثل dist/)، إما أن تُضيف ناتج البناء إلى فرع مخصص أو تستخدم GitHub Actions للبناء تلقائيًا (مشروح لاحقًا).

    bash
    git init
    git add .
    git commit -m "Initial commit"
    git remote add origin https://github.com/your-user/your-repo.git
    git push -u origin main
  2. 2

    فعّل Pages في إعدادات المستودع

    انتقل إلى Settings → Pages في مستودعك. تحت Source، اختر Deploy from a branch، ثم حدد الفرع (عادةً main) والمجلد (/ (root) أو /docs). اضغط Save. يبدأ GitHub نشرًا فوريًا ويعرض رابط الموقع المباشر — عادةً https://your-user.github.io/your-repo/ — في غضون 60 ثانية تقريبًا.

    bash
    # بعد التفعيل، تحقق من حالة النشر:
    gh run list --workflow pages-build-deployment
  3. 3

    امنع معالجة Jekyll غير المرغوب فيها

    افتراضيًا، تُمرر GitHub Pages موقعك عبر Jekyll الذي يتجاهل أي ملف أو مجلد يبدأ اسمه بشرطة سفلية (_app، _next، __mocks__). إذا كانت أطر العمل تُنتج ملفات كهذه، أضف ملف .nojekyll إلى جذر فرع النشر.

    bash
    # في جذر مستودعك (أو dist/ قبل النشر):
    touch .nojekyll
    git add .nojekyll
    git commit -m "Disable Jekyll processing"
    git push
  4. 4

    انشر إطار عمل مبني باستخدام GitHub Actions

    لـ Vite أو Next.js static export أو أي إطار يحتاج خطوة بناء، استخدم GitHub Actions للبناء والنشر بدلًا من إضافة مجلد dist/ إلى الـ commit. أنشئ .github/workflows/deploy.yml — هذا هو النهج الموصى به لأي موقع غير بسيط.

    yaml
    name: Deploy to GitHub Pages
    
    on:
      push:
        branches: [main]
    
    permissions:
      contents: read
      pages: write
      id-token: write
    
    jobs:
      deploy:
        environment:
          name: github-pages
          url: ${{ steps.deploy.outputs.page_url }}
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
    
          - name: Set up Node
            uses: actions/setup-node@v4
            with:
              node-version: 20
              cache: npm
    
          - run: npm ci
          - run: npm run build          # outputs to dist/
    
          - uses: actions/upload-pages-artifact@v3
            with:
              path: dist
    
          - id: deploy
            uses: actions/deploy-pages@v4
  5. 5

    حوّل مصدر Pages إلى GitHub Actions

    عند استخدام الـ workflow أعلاه، عد إلى Settings → Pages → Source وحوّله من "Deploy from a branch" إلى GitHub Actions. وإلا سيقوم GitHub بنشر الفرع والـ workflow معًا مما يُسبب تعارضات.

    bash
    # تأكد من رابط النشر بعد انتهاء الـ workflow:
    gh run list --limit 5
  6. 6

    أضف نطاقًا مخصصًا

    لتقديم الموقع من www.example.com بدلًا من رابط *.github.io الافتراضي: أضف ملف CNAME يحتوي نطاقك إلى جذر فرع النشر، ثم أنشئ سجل CNAME في DNS يشير إلى your-user.github.io. يُفعَّل HTTPS تلقائيًا عبر Let's Encrypt — يستغرق عادةً بضع دقائق.

    bash
    # أنشئ ملف CNAME
    echo 'www.example.com' > CNAME
    git add CNAME && git commit -m "Add custom domain" && git push
    
    # سجل DNS المطلوب لدى مزود النطاق:
    # Type: CNAME
    # Name: www
    # Value: your-user.github.io
  7. 7

    اعرف حدود المنصة

    GitHub Pages سخي للمشاريع الشخصية لكنه غير مصمم للتطبيقات الإنتاجية عالية الحركة. تذكر هذه الحدود: الموقع المنشور يجب أن يكون 1 GB أو أقل؛ توصي GitHub بالبقاء تحت حد نطاق ترددي تقريبي 100 GB/شهر؛ وهناك حد 10 عمليات بناء/ساعة لكل مستودع. لا كود من جانب الخادم، ولا قواعد بيانات — ساكن فقط.

    bash
    # تحقق من حجم موقعك المبني محليًا:
    du -sh dist/
    # أي شيء يتجاوز ~500 MB علامة تحذير لموقع ساكن.

نصائح ومحاذير

  • لمحفظة شخصية على <code>username.github.io</code>، أنشئ مستودعًا باسم <code>username.github.io</code> بالضبط — سيقدمه GitHub تلقائيًا من الجذر بدون مسار فرعي.
  • إذا كان تطبيقك أحادي الصفحة يُظهر 404 على الروابط العميقة، أضف <code>404.html</code> يُعيد التوجيه إلى <code>index.html</code> — تُقدمه GitHub Pages للمسارات الغائبة.
  • Cache-busting مجاني: تُقدم GitHub Pages الملفات بـ ETag قوي. أجبر على إعادة التحميل بإضافة query string أو باستخدام أسماء ملفات مُشفَّرة بالمحتوى (تفعل Vite ذلك تلقائيًا).
  • حزمة npm اسمها <code>gh-pages</code> (<code>npm install --save-dev gh-pages</code>) تُؤتمت رفع مجلد <code>dist/</code> إلى فرع <code>gh-pages</code> دون الحاجة لـ workflow في Actions.

خاتمة

يُغطي GitHub Pages الغالبية العظمى من احتياجات الاستضافة الساكنة بتكلفة صفرية. للـ HTML البسيط، فعّله في الإعدادات بنقرتين. لأطر مثل Vite أو Next.js، يمنحك الـ workflow أعلاه CI/CD تلقائيًا دون الحاجة لحساب طرف ثالث. أضف نطاقًا مخصصًا ويُعالَج HTTPS تلقائيًا. القيد الوحيد الحقيقي هو الاشتراط الساكن فقط — في اللحظة التي تحتاج فيها قاعدة بيانات أو منطقًا من جانب الخادم، انتقل إلى منصة مثل Vercel أو Render أو VPS.

#Git #GitHub #Deployment
العودة إلى جميع الأدلة

هل تحتاج مساعدة في مشروعك؟

احجز استشارة مجانية لمدة 30 دقيقة لمناقشة تحدياتك التقنية واستكشاف الحلول معًا.