انشر تطبيق Next.js على alawadi.cloud في ٥ دقائق
دليل عملي خطوة بخطوة: تجهيز تطبيق Next.js (أو أيّ تطبيق Node.js) كصورة Docker ونشره على alawadi.cloud عبر GitHub Actions وOIDC، دون تخزين أيّ كلمة مرور أو مفتاح ثابت.
لديك تطبيق Next.js (أو أيّ تطبيق Node.js)، وتريده حيّاً على رابط حقيقي، بشهادة TLS ونشر تلقائي من GitHub وقاعدة بيانات Postgres مُدارة في المشروع ذاته. هذا بالضبط ما يفعله هذا الدليل، في خمس دقائق تقريباً من العمل الفعلي.
ما ستحتاجه
- تطبيق Next.js في مستودع GitHub
- Docker Desktop (لبناء صورة التطبيق واختبارها محلياً)
- حساب على alawadi.cloud (افتح البوابة، أو راسل الدعم إن احتجت صلاحية دخول للنسخة التجريبية)
الخطوة ١: اكتب ملف Dockerfile للإنتاج
أنشئ ملف Dockerfile في المجلد الرئيسي للمستودع. يبني Next.js نسخةً مستقلّة نضعها داخل صورة Node خفيفة:
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]وتأكّد من ضبط output: "standalone" في ملف next.config.ts.
الخطوة ٢: أنشئ مشروعاً وتطبيقاً على alawadi.cloud
١. ادخل بحساب Google على portal.alawadi.cloud
٢. انقر على مشروع جديد وأعطه اسماً
٣. داخل المشروع، انقر على إضافة تطبيق
٤. اختر اسماً للتطبيق (مثل web)، واترك حقل صورة Docker فارغاً الآن
الخطوة ٣: هيّئ النشر التلقائي عبر GitHub OIDC
في تبويب النشر داخل التطبيق، انقر على إعداد GitHub OIDC، ثم أدخل اسم المستودع (owner/repo) والفرع الذي تنشر منه (مثل main).
بهذا يستطيع GitHub Actions رفع صورة Docker ونشرها باسم هذا التطبيق، دون حفظ أيّ كلمة مرور أو مفتاح ثابت.
الخطوة ٤: أضف سير عمل GitHub Actions
أنشئ ملف .github/workflows/deploy.yml:
name: النشر على alawadi.cloud
on:
push:
branches: [main]
permissions:
id-token: write
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: بناء حزمة Docker ورفعها
run: |
docker build -t registry.alawadi.cloud/${{ secrets.REGISTRY_SLUG }}/web:${{ github.sha }} .
echo "${{ secrets.REGISTRY_PASSWORD }}" | \
docker login registry.alawadi.cloud -u ${{ secrets.REGISTRY_USER }} --password-stdin
docker push registry.alawadi.cloud/${{ secrets.REGISTRY_SLUG }}/web:${{ github.sha }}
- name: الحصول على رمز النشر
id: token
run: |
TOKEN=$(curl -sf -X POST \
https://api.alawadi.cloud/v1/containers/${{ secrets.CONTAINER_ID }}/deploy-token \
-H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
-H "Content-Type: application/json" | jq -r .token)
echo "token=$TOKEN" >> $GITHUB_OUTPUT
- name: النشر
run: |
curl -sf -X POST \
https://api.alawadi.cloud/v1/containers/${{ secrets.CONTAINER_ID }}/deploy \
-H "Authorization: Bearer ${{ steps.token.outputs.token }}" \
-H "Content-Type: application/json" \
-d '{"image":"registry.alawadi.cloud/${{ secrets.REGISTRY_SLUG }}/web:${{ github.sha }}"}'أضف REGISTRY_SLUG وREGISTRY_USER وREGISTRY_PASSWORD وCONTAINER_ID بوصفها أسراراً في إعدادات المستودع على GitHub.
الخطوة ٥: أضف قاعدة بيانات Postgres
داخل المشروع ذاته، انقر على إضافة قاعدة بيانات ← Postgres. يُحقن رابط الاتصال تلقائياً في تطبيقك كمتغيّر بيئة اسمه DATABASE_URL. اقرأه في تطبيقك:
// lib/db.ts
import { Pool } from "pg";
export const pool = new Pool({ connectionString: process.env.DATABASE_URL });ما ستحصل عليه
- نشر تلقائي مع كلّ رفع إلى فرع
main، دون أن تتسرّب كلمة مرور أو مفتاح - سجلّات مباشرة من لوحة تحكم البوابة
- قاعدة Postgres مُدارة داخل بيئة المشروع المعزولة ذاتها
- شهادة TLS على نطاقك الفرعي
.alawadi.cloud، تُدار تلقائياً - إعادة تشغيل وإيقاف وتشغيل من لوحة التحكم أو من واجهة البرمجة
ادفع الكود إلى main، تابع سير عمل GitHub، ويصبح تطبيقك حيّاً.
لديك أسئلة؟ افتح تذكرة دعم في البوابة، أو راسل [email protected].
الشركة المطوّرة لمنصّة alawadi.cloud
شركة تبني منصّة سحابية عربية الهوية، من الخوادم الفعلية وصولاً إلى تجربة المطوّرين.