دليل · ٢٠ دقيقة للقراءة
انشر أول تطبيق Prisma لك إلى الإنتاج — Composer وPostgres وCompute في ٢٠ دقيقة
الأساس الإنتاجي لأي تطبيق Prisma: أنشئ API بـ TypeScript مع Prisma ORM 8، ونمذج البيانات بـ contract، وشغّله محلياً على Prisma Postgres، وانشره على Prisma Compute بأمر واحد. بلا واجهة وبلا ميزات منتج — تنتهي بـ API حي وبسير العمل نفسه لتبني عليه. كل خطوة مُختبَرة على خطة Free.
جدول المحتويات
Prisma هي stack TypeScript كاملة: تُصرّح عن تطبيقك (services وقواعد البيانات والاتصالات) في TypeScript، وتنمذج بياناتك مع Prisma ORM، وتنشر كل شيء على Prisma Compute بأمر واحد. تتضمن خطة Free 200,000 عملية قاعدة بيانات و2GB تخزين و٥٠ قاعدة بيانات و1M طلب compute و360 GB-hours ذاكرة — بدون بطاقة ائتمان، بدون حد زمني، بدون فوترة استخدام.
في هذا الدليل، ستنشئ API بـ TypeScript على Prisma Postgres، وتفهم Composer declaration، وتنمذج البيانات مع Prisma ORM، وتشغّله محلياً مع بيانات seeded، وتختبر API، وتنشره على Prisma Compute.
ما الذي ستبنيه: Hono API بمسارين (/ و/users) على قاعدة بيانات Prisma Postgres، يعمل محلياً ومُنشر على Prisma Compute.
الوقت: ~٢٠ دقيقة | التكلفة: مجاني (بدون بطاقة ائتمان)
النطاق — ما هذا الدليل وما ليس هو
هذا هو الأساس الإنتاجي، وليس منتجاً مكتملاً. لا واجهة، ولا مصادقة، ولا CRUD يتجاوز قراءة المستخدمين الثلاثة seeded. وهذا مقصود: الهدف إزالة كل مجهول بين مجلد فارغ وAPI حي type-safe — Bun، والـ emulators المحلية، والـ contracts، والـ migrations، ومصادقة CLI، وسير النشر.
بعد إتمام هذه الخطوات، يصبح بناء نماذجك وmutations وواجهة أمامية فوقه عملاً تطبيقياً عادياً بلا عوائق إعداد. إن أردت تطبيقاً مكتمل الميزات، فاعتبر هذا الخطوة صفر.
كيف تُشغّل الأوامر في هذا الدليل
- كل أمر يُشغَّل في terminal، من جذر المشروع (
my-app/) إلا إذا ذكرت الخطوة غير ذلك. $ترمز لـ shell prompt — اكتب ما بعدها فقط.- الـ scaffold ثبّت الاعتماديات بالفعل، لذا لا حاجة إلى
npm install. - الخطوتان ٤ و٥ تحتاجان terminalين: الأول يشغّل dev server ويبقى مشغولاً، والثاني يشغّل
curl. - macOS وLinux يستخدمان bash/zsh. على Windows تعمل أوامر CLI في PowerShell، لكن
prisma dev(التطوير المحلي) لا يدعم Windows بعد.
المتطلبات المسبقة
- Node.js 22.18+ أو ٢٤٫١١+ أو ٢٦+ (٢٤ موصى به) —
node --version - npm (يأتي مع Node.js)
- Bun — مطلوب للتطوير المحلي (
curl -fsSL https://bun.sh/install | bash) - حساب Prisma — مجاني للإنشاء at console.prisma.io، بدون بطاقة ائتمان لخطة Free
تحقق من إعدادك:
node --version # v22.18+ أو v24.11+ أو v26+
npm --version # 10+
bun --version # 1.x
الخطوة ١ — Scaffold التطبيق
شغّل هذا في الدليل الذي تريد أن يُنشأ فيه مجلد المشروع (مثلاً مجلد ~/Code). ينشئ my-app/، ويثبّت كل الاعتماديات بـ npm، ويُنشئ baseline migration، ويهيّئ مستودع Git — يستغرق دقيقتين ويحتاج اتصالاً بالشبكة.
npx --yes create-prisma@latest my-app --template hono --provider postgres --no-deploy --package-manager npm --authoring psl --skills none --yes
cd my-app
أُعيد اختبار هذا الدليل بـ create-prisma 0.14.6 وPrisma CLI 8.0.0-rc.28. قد يتغيّر @latest؛ الأوامر أدناه تعكس هذا الإصدار.
الflags:
--template hono— يستخدم Hono كـ web framework (خادم API صغير وسريع)--provider postgres— قاعدة بيانات Prisma Postgres--no-deploy— scaffold فقط، لا نشر بعد--authoring psl— Prisma Schema Language لـ data modeling--skills none— تخطي agent skill files--yes— قبول defaults، بدون prompts
ما يتم إنشاؤه:
my-app/
├── module.ts # App declaration (Composer)
├── service.ts # Service declaration
├── prisma.config.ts # Prisma config (ORM + Composer + deploy)
├── tsdown.config.ts # Build config (bundles src/index.ts → dist/server.mjs)
├── migrations/
│ ├── app/<timestamp>_init/ # migration.json, migration.ts, ops.json
│ └── snapshots/ # contract.json and contract.d.ts per snapshot
└── src/
├── index.ts # Hono server with / and /users routes
└── prisma/
├── contract.prisma # Data model (User + Post)
├── contract.json # Emitted contract (generated)
├── contract.d.ts # Contract types (generated)
├── composer.ts # Typed data contract for Composer
├── db.ts # Prisma Postgres client from the contract
├── users.ts # listUsers() query helper
└── seed.ts # Seeds alice, bob, carol on first query
In this walkthrough the baseline folder is migrations/app/20261030T1854_init/; the timestamp is generated when you scaffold, so use your own _init folder later.

الخطوة ٢ — فهم Composer Declaration
التطبيق مُصرّح في ملفين. ابدأ بـ declaration — إنها ما يعمل عليه كل أمر لاحق.
module.ts — التطبيق
import { module } from "@prisma/composer";
import { postgres } from "@prisma/composer-prisma-cloud/orm";
import { appContract } from "./src/prisma/composer.ts";
import app from "./service.ts";
export default module("my-app", ({ provision }) => {
const database = provision(
postgres({
name: "database",
contract: appContract,
config: "./prisma.config.ts",
}),
{ id: "database" },
);
provision(app, { deps: { database } });
});

هذا يُصرّح عن:
- قاعدة بيانات Prisma Postgres named "database"
- service (تطبيق Hono) يعتمد على قاعدة البيانات
- قاعدة البيانات typed بـ contract الخاص بك (schema)
service.ts — الخدمة
import node from "@prisma/composer/node";
import { compute } from "@prisma/composer-prisma-cloud";
import { postgres } from "@prisma/composer-prisma-cloud/orm";
import { appContract } from "./src/prisma/composer.ts";
export default compute({
name: "app",
deps: {
database: postgres(appContract),
},
build: node({ module: import.meta.url, entry: "./dist/server.mjs" }),
});

هذا يُصرّح عن:
- compute service named "app"
- اعتماده على قاعدة البيانات (typed by contract)
- كيفية بنائه (Node.js، entry point
dist/server.mjs)
prisma.config.ts — Prisma config
import { definePrismaConfig } from "prisma/config";
import { defineConfig as ormConfig } from "@prisma/orm-postgres/config";
import { defineConfig as composer } from "@prisma/composer/config";
import { nodeBuild } from "@prisma/composer/node/control";
import { prismaCloud, prismaState } from "@prisma/composer-prisma-cloud/control";
export default definePrismaConfig({
skills: {
agents: [],
},
orm: ormConfig({
contract: "./src/prisma/contract.prisma",
db: {
connection: process.env.DATABASE_URL!,
},
}),
composer: composer({
entry: "./module.ts",
extensions: [prismaCloud({ region: "us-east-1" }), nodeBuild()],
state: prismaState(),
}),
});

نقاط رئيسية:
orm.contract— يشير إلى ملف Prisma schema الخاص بكorm.db.connection— DATABASE_URL (يُستخدم فقط بـ ORM commands مثلdb:*، وليس بـprisma devأوprisma deploy)composer.entry— يشير إلىmodule.ts؛ يقرأprisma devوprisma deployالـ entry من هناcomposer.extensions— يُنشر على Prisma Cloud في regionus-east-1composer.state— يحتفظ بـ deploy state
لا connection string في declaration. قاعدة البيانات هي dependency مُصرّح عنها. Composer يحقن الاتصال أينما يعمل التطبيق. Declaration هي TypeScript عادي — npx tsc --noEmit يتحقق من wiring.
الخطوة ٣ — نموذج بيانات Prisma ORM
الجانب data يقع under src/prisma/. schema الخاص بك هو starter contract، ويُصدر الـ scaffold typed client مع query helper seeded.
src/prisma/contract.prisma
// use prisma-8
model User {
id Int @id @default(autoincrement())
email String @unique
username String?
name String?
posts Post[]
createdAt TimestamptzString @default(now())
updatedAt temporal.updatedAtString()
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
author User @relation(fields: [authorId], references: [id])
authorId Int
createdAt TimestamptzString @default(now())
updatedAt temporal.updatedAtString()
}

npm run contract:emit يُجمّع هذا إلى contract.json وcontract.d.ts — الـ artifacts التي تُفحص استعلاماتك مقابلها. شغّله الـ scaffold مرة واحدة؛ وأعد تشغيله من جذر المشروع كلما عدّلت contract.
src/prisma/composer.ts — typed contract لـ Composer
import { dataContract } from "@prisma/composer-prisma-cloud/orm";
import type { Contract } from "./contract.d.ts";
import contractJson from "./contract.json" with { type: "json" };
export const appContract = dataContract<Contract>(contractJson);

src/prisma/db.ts — Prisma Postgres client
import postgres from "@prisma/orm-postgres/runtime";
import { contractFromJson } from "@prisma/orm-postgres/static";
import "temporal-polyfill/global";
import service from "../../service.ts";
import type { Contract } from "./contract.d.ts";
import contractJson from "./contract.json" with { type: "json" };
export const contract = contractFromJson<Contract>(contractJson);
function loadComposerDatabase() {
try {
return service.load().database.client;
} catch {
return undefined;
}
}
export const db =
loadComposerDatabase() ??
(process.env.DATABASE_URL
? postgres({ contract, url: process.env.DATABASE_URL })
: postgres({ contract }));

Composer يحقن اتصال قاعدة البيانات at runtime. التشغيل المستقل يستخدم DATABASE_URL عند تعيينه.
src/prisma/seed.ts — seeds sample users مرة واحدة
import { db } from "./db.ts";
const users = [
{ email: "alice@prisma.io", username: "alice", name: "Alice" },
{ email: "bob@prisma.io", username: "bob", name: "Bob" },
{ email: "carol@prisma.io", username: "carol", name: "Carol" },
];
let pendingSeed: Promise<void> | undefined;
async function runSeed(): Promise<void> {
for (const user of users) {
await db.orm.public.User.upsert({
create: user,
update: {},
conflictOn: { email: user.email },
});
}
}
export function seed(): Promise<void> {
pendingSeed ??= runSeed().catch((error: unknown) => {
pendingSeed = undefined;
throw error;
});
return pendingSeed;
}

src/prisma/users.ts — الـ typed query
import { db } from "./db.ts";
import { seed } from "./seed.ts";
export { db };
export async function listUsers(limit = 10) {
await seed();
const users = await db.orm.public.User.select("id", "email", "username", "name", "createdAt").limit(limit).all();
return users.map((user) => ({
id: String(user.id),
email: user.email,
username: user.username ?? null,
name: user.name ?? null,
createdAt: user.createdAt,
}));
}
export type StarterUser = Awaited<ReturnType<typeof listUsers>>[number];

لاحظ Prisma ORM 8 API: db.orm.public.User.select(...).limit(...).all() يُرجع typed rows مباشرة — بدون PrismaClient import.
src/index.ts — Hono server
import { serve } from "@hono/node-server";
import { Hono } from "hono";
import { listUsers } from "./prisma/users";
const app = new Hono();
app.get("/", (c) => {
return c.json({
message: "hello from create-prisma + hono",
});
});
app.get("/users", async (c) => {
const users = await listUsers(10).catch((error: unknown) => {
console.error("Failed to query users:", error);
return undefined;
});
if (!users) {
return c.json({ error: "Could not query users. Check the server log for the error." }, 500);
}
return c.json(users);
});
const rawPort = (process.env.PORT ?? "").trim();
const parsedPort = rawPort.length > 0 ? Number(rawPort) : Number.NaN;
const port =
Number.isInteger(parsedPort) && parsedPort >= 0 && parsedPort <= 65535 ? parsedPort : 3000;
serve({
fetch: app.fetch,
port,
});
console.log(`Server running at http://localhost:${port}`);

غيّر contract عندما تكون جاهزاً لـ model your own data، شغّل npm run contract:emit، وسيُرشدك compiler عبر كل query يحتاج إلى تحديث.
الخطوة ٤ — التشغيل محلياً على Prisma Postgres
افتح terminal في جذر المشروع (my-app/، المجلد الذي يحتوي module.ts). تحقق من مكانك:
pwd # .../my-app
ls module.ts # module.ts
ثم ابنِ التطبيق وشغّل المنصة المحلية. السكربتان يفعلان شيئين مختلفين:
npm run build # يحزم src/index.ts → dist/server.mjs
npm run composer:dev # يشغّل `prisma dev`
npm run dev:composer يشغّل الاثنين معاً إن أردت.
ما يحدث في أول تشغيل:
- يبدأ Prisma قاعدة Postgres محلية وcompute emulator محلياً على جهازك.
database-migrateيطبّق baseline migration الموجودة فيmigrations/app/<timestamp>_init/.- يُبنى service ويُشغّل، ويُطبع عنوانه.
prisma dev يعمل في الواجهة (foreground) ويراقب التغييرات — اترك ذلك الـ terminal مفتوحاً. أوقفه بـ Ctrl+C، أو بـ npx prisma dev stop من terminal آخر.
متطلب: prisma dev يشغّل service باستخدام Bun، لذا يجب أن يكون bun على PATH. إن لم يكن موجوداً يفشل الأمر بـ:
local dev runs services under bun — the Prisma Compute runtime — and `bun` was not found on PATH. Install it: https://bun.sh
ثبّته بـ curl -fsSL https://bun.sh/install | bash، ثم افتح terminal جديداً ليُعاد تحميل PATH.
الشاشة الأخيرة من التشغيل الأول (الخطة تطبع كل مورد أثناء إنشائه؛ التشغيلات اللاحقة تطبع Plan · no changes):
Plan · 9 created
✔ my-app.app (Prisma.App) created (493ms)
✔ my-app.app.deployment (Prisma.Deployment) created (336ms)
✔ my-app.app.env.COMPOSER_MY_APP_APP_DATABASE_URL (Prisma.EnvironmentVariable) created (339ms)
✔ my-app.app.env.COMPOSER_MY_APP_APP_ORIGIN (Prisma.EnvironmentVariable) created (483ms)
✔ my-app.app.env.COMPOSER_MY_APP_APP_PORT (Prisma.EnvironmentVariable) created (496ms)
✔ my-app.database (Prisma.Database) created (499ms)
✔ my-app.database.connection (Prisma.Connection) created (487ms)
✔ my-app.database.migration (PrismaOrm.Migration) created (467ms)
✔ my-app.database.warmup (PrismaCloud.PgWarm) created (479ms)
stack deployed (9/9)
dev: ready
my-app.app: http://localhost:3009
استخدم العنوان الظاهر في سطر my-app.app: — لا تفترض الـ port. يمكنك أيضاً سؤاله بينما dev يعمل:
npx prisma dev url my-app.app
# http://localhost:3009
Sample users are seeded automatically the first time the app queries the database. البيانات المحلية تبقى بعد إعادة التشغيل؛ شغّل npx prisma dev --fresh لمسحها والبدء نظيفاً.

الخطوة ٥ — اختبار API
اترك dev server يعمل وافتح terminal ثانياً في نفس جذر المشروع. الـ terminal الأول مشغول بـ prisma dev.
APP_URL="$(npx prisma dev url my-app.app | tail -1)"
curl "$APP_URL/users"
هذا التشغيل طبع http://localhost:3009؛ قد يختلف port عندك.
الاستجابة من نفس التشغيل:
[
{
"id": "1",
"email": "alice@prisma.io",
"username": "alice",
"name": "Alice",
"createdAt": "2026-10-28 11:07:04.591+00"
},
{
"id": "2",
"email": "bob@prisma.io",
"username": "bob",
"name": "Bob",
"createdAt": "2026-10-28 11:07:04.595+00"
},
{
"id": "3",
"email": "carol@prisma.io",
"username": "carol",
"name": "Carol",
"createdAt": "2026-10-28 11:07:04.596+00"
}
]

المسار الجذري فحص سريع:
curl "$APP_URL/"
# {"message":"hello from create-prisma + hono"}
من أين يأتي المستخدمون الثلاثة
هم ليسوا حسابات، ومسار /users لا يُنشئهم. الـ scaffold يعرّفهم في src/prisma/seed.ts:
import { db } from "./db.ts";
const users = [
{ email: "alice@prisma.io", username: "alice", name: "Alice" },
{ email: "bob@prisma.io", username: "bob", name: "Bob" },
{ email: "carol@prisma.io", username: "carol", name: "Carol" },
];
let pendingSeed: Promise<void> | undefined;
async function runSeed(): Promise<void> {
for (const user of users) {
await db.orm.public.User.upsert({
create: user,
update: {},
conflictOn: { email: user.email },
});
}
}
export function seed(): Promise<void> {
pendingSeed ??= runSeed().catch((error: unknown) => {
pendingSeed = undefined;
throw error;
});
return pendingSeed;
}
وsrc/prisma/users.ts يستدعي seed() قبل أول استعلام:
import { db } from "./db.ts";
import { seed } from "./seed.ts";
export { db };
export async function listUsers(limit = 10) {
await seed();
const users = await db.orm.public.User.select("id", "email", "username", "name", "createdAt").limit(limit).all();
return users.map((user) => ({
id: String(user.id),
email: user.email,
username: user.username ?? null,
name: user.name ?? null,
createdAt: user.createdAt,
}));
}
export type StarterUser = Awaited<ReturnType<typeof listUsers>>[number];
seed() يعمل upsert لكل صف حسب البريد مرة واحدة في العملية، لذا ضرب /users مرتين لا يُنشئ تكراراً. غيّر المصفوفة لتزرع بياناتك، أو أزل الاستدعاء إن لم ترد صفوفاً تجريبية.
البيانات type-safe end to end. غيّر User model في contract.prisma، شغّل npm run contract:emit، وسيُعلّم TypeScript كل query يحتاج إلى تحديث.
الخطوة ٦ — النشر على Prisma Compute
كل هذه الخطوة تستخدم Prisma CLI الذي ثبّته الـ scaffold كـ dev dependency — بدون نقر في لوحة التحكم. شغّل الأوامر من جذر المشروع.
٦٫١ تسجيل دخول CLI
npx prisma auth login
يطبع الأمر verification URL ويفتح متصفحك. وافق، فيحفظ CLI جلسة لتلك workspace. تحقق:
npx prisma auth whoami
يجب أن ترى status: signed in والـ workspace الذي سينشر إليه CLI.
لـ CI أو أي بيئة headless، تخطَّ تدفق المتصفح واستخدم service token من الـ console (Console → Settings → Service Tokens → New Service Token):

export PRISMA_SERVICE_TOKEN="your-service-token"
export PRISMA_WORKSPACE_ID="your-workspace-id"
مع هذين المتغيرين يُبلغ prisma auth whoami عن environment variable: PRISMA_SERVICE_TOKEN. عند وجود token وجلسة محفوظة معاً، يفوز الـ token.
٦٫٢ النشر
npm run deploy
هذا السكربت يشغّل أمرين:
npm run build # tsdown → dist/server.mjs
npx prisma deploy
prisma deploy لا يبني لك — بل يجمع ما أنتجه build، لذا يجب تشغيل build أولاً (npm run deploy يرتب ذلك).
أول نشر يُنشئ Prisma project (باسم الـ module، my-app) وproduction branch وقاعدة Postgres والservice. المنطقة تأتي من prismaCloud({ region: "us-east-1" }) في prisma.config.ts، فاضبطها قبل أول نشر إن احتجت منطقة أخرى. النشرات اللاحقة تُطبّق الفرق بدلاً من إعادة إنشاء كل شيء.
ناتج نشر my-app في هذا الدليل:
my-app
├─ database postgres-database db_deb2i8b2avdhig1qny91ms8e
└─ app compute-service cps_gxooak0zynndovlamqkaq5w7
https://gxooak0zynndovlamqkaq5w7.ewr.prisma.build
Plan · 9 created · 1 ran
✔ app-deploy (Prisma.Deployment) created (6.6s)
✔ app-svc (Prisma.App) created (23.8s)
✔ COMPOSER_APP_DATABASE_URL-var (Prisma.EnvironmentVariable) created (8.2s)
✔ COMPOSER_APP_ORIGIN-var (Prisma.EnvironmentVariable) created (22.1s)
✔ COMPOSER_APP_PORT-var (Prisma.EnvironmentVariable) created (23.8s)
✔ database-conn (Prisma.Connection) created (21.2s)
✔ database-db (Prisma.Database) created (23.9s)
✔ database-migrate (PrismaOrm.Migration) created (15.6s)
✔ database-warm (PrismaCloud.PgWarm) created (17.0s)
✔ composer-deployment-report ran [action] (804ms)
stack deployed (10/10)
✔ plan and apply (36.0s)
▸ record result
✔ record result (7.3s)
app: https://gxooak0zynndovlamqkaq5w7.ewr.prisma.build
✔ Deployed my-app to production in 46.9s.
Address Deployed
database postgres-database db_deb2i8b2avdhig1qny91ms8e
app compute-service cps_gxooak0zynndovlamqkaq5w7
انسخ app URL من ناتجك — الـ hostname فريد لنشرك.
النص أعلاه من النشر الأصلي لهذا الدليل. إصدارات CLI الحالية تسمّي الموارد
my-app.app/my-app.databaseوتضيف اسم التطبيق إلى متغيرات البيئة (COMPOSER_MY_APP_APP_*)، كما يظهر ناتج التطوير المحلي. الأمر وشكل النشر لم يتغيرا:npx prisma deploy.

٦٫٣ ربط المجلد ثم التحقق
النشر لا يربط المجلد، لذا أوامر المشروع مثل prisma service لا تجد المشروع بعد. اربطه مرة واحدة:
npx prisma project link my-app
يكتب هذا .prisma/local.json داخل المشروع (أبعده عن version control إن كنت تلتزم التطبيق). الآن تحقق من النشر وافحص service:
curl https://<your-app-url>/users
npx prisma service list
npx prisma service logs app
في هذا الدليل التطبيق المنشور هو https://gxooak0zynndovlamqkaq5w7.ewr.prisma.build; نشرك يحصل على hostname فريد، لذا استخدم العنوان من ناتجك.
prisma service list يطبع اسم service وid والمنطقة والعنوان المباشر. prisma service logs app يعرض سجل التشغيل — في نشر سليم ينتهي بسطر إقلاع الخادم.
الاستجابة من التطبيق المنشور:
[
{
"id": "1",
"email": "alice@prisma.io",
"username": "alice",
"name": "Alice",
"createdAt": "2026-10-28 11:12:05.387121+00"
},
{
"id": "2",
"email": "bob@prisma.io",
"username": "bob",
"name": "Bob",
"createdAt": "2026-10-28 11:12:05.394182+00"
},
{
"id": "3",
"email": "carol@prisma.io",
"username": "carol",
"name": "Carol",
"createdAt": "2026-10-28 11:12:05.396076+00"
}
]
٦٫٤ نشر stage معزول (اختياري)
الـ stages نسخ كاملة من التطبيق بخدمات وقواعد بيانات خاصة بها — مفيدة لبيئة staging دائمة أو واحدة لكل pull request:
npx prisma deploy --stage staging
النشر بدون --stage يستهدف production. للنشر باسم تطبيق مختلف مرّر --name.

ما التالي
-
إضافة more models — عدّل
contract.prisma، شغّلnpm run contract:emit، حدّث queries -
إضافة migrations — بعد تغيير
contract.prisma، شغّل:bashnpx prisma contract emit npx prisma migration plan --name <change> --from <timestamp>_init npm run build npx prisma deploy<change>هو الاسم الذي تختاره.<timestamp>_initهو مجلد baseline تحتmigrations/app/— في هذا الدليل هو20261030T1854_init؛ سيتغيّر عندك. بدون--fromتحاول الخطة إعادة إنشاء كل الجداول. راجع الشرح الكامل. -
تحقق من usage —
npx prisma postgres usage <database>أو تتبعه في Prisma Console. كل استعلام يُحتسب عملية واحدة، قراءة كان أو كتابة.

هذا الرسم من نفس الـ workspace بعد هذا الدليل ودليل الوكيل: ٩٣ طلباً، و٤٧٥ عملية، و٠٫٠٠٥٣٩ GiB-hours ذاكرة provisioned، وفاتورة $0.00. خط الـ ٢٠٠٬٠٠٠ عملية هو الحد الشهري؛ أما التخزين فمنفصل ولا يُعاد ضبطه شهرياً. العمليات تُحتسب لكل استعلام، لذا مسار API ينفّذ ثلاثة استعلامات يكلّف ثلاث عمليات.
- الإدارة من الـ console — console.prisma.io يعرض كل project وbranch وقاعدة بيانات ونشر

- الترقية إلى خطة paid — إذا وصلت إلى حدود Free plan، انقل workspace الخاص بك إلى خطة paid
- استكشاف other templates —
next،svelte،nuxt،tanstack-start، والمزيد. تطبيقات SvelteKit وDeno لا تُنشر على Prisma Compute بعد. ويحتاج Nuxt إلى Node 22.22.3+ على خط ٢٢، أو ٢٤٫١٥+ على خط ٢٤، أو ٢٦+. - قراءة docs — prisma.io/docs للمرجع الكامل
استكشاف الأخطاء
bun not found: التطوير المحلي يتطلب Bun. ثبّته بـ curl -fsSL https://bun.sh/install | bash وأعد تشغيل terminal ليُحمَّل PATH.
prisma dev على Windows: التطوير المحلي غير مدعوم على Windows بعد. استخدم macOS أو Linux (أو WSL) للخطوتين ٤–٥؛ خطوات النشر تعمل في أي مكان.
Build fails: شغّل npx tsc --noEmit للتحقق من أخطاء TypeScript. Declaration هي TypeScript عادي — الأخطاء fail the compile.
Deploy fails بخطأ auth: لا توجد جلسة لـ CLI. شغّل npx prisma auth login (أو عيّن PRISMA_SERVICE_TOKEN وPRISMA_WORKSPACE_ID). تحقق بـ npx prisma auth whoami.
PROJECT.SETUP_REQUIRED عند تشغيل prisma service ...: المجلد غير مربوط بمشروع. شغّل npx prisma project link <name>، أو مرّر --project <id-or-name>.
Deploy يتوقف بـ HostedStateBootstrapError: يوجد مشروع بنفس الاسم لكن حالته المستضافة أُنشئت خارج نشرات هذا module. انشر باسم مختلف عبر --name، أو أعد تسمية module.
Database not seeding: Sample users are seeded automatically on first query. إذا لم يظهر، تحقق من migration logs in the dev output.
الـ scaffold ينتظر عند “Ok to proceed? (y)”: الأمر npx يطلب إذن تثبيت حزمة create-prisma. الأمر في الخطوة ١ يستخدم npx --yes لقبوله. إذا شغّلته بدون --yes، اكتب y، أو أعد تشغيل الأمر مع --yes بعد npx.
Port already in use: prisma dev يعيّن port حراً تلقائياً ويطبعه في سطر my-app.app:. إذا لم يستجب URL المطبوع، تحقق مما يستمع على ذلك المنفذ: lsof -i :<port> (استخدم الـ port من العنوان المطبوع).
الأسئلة الشائعة
هل Prisma مجاني للاستخدام؟
نعم. خطة Free هي $0 شهرياً بدون بطاقة ائتمان، وبلا حد زمني، وبلا فوترة استخدام. حدودها تنطبق على الـ workspace كله: ٢٠٠٬٠٠٠ عملية قاعدة بيانات شهرياً، و٢ GB تخزين، و٥٠ قاعدة بيانات، ونقل بيانات غير محدود، و١٠ اتصالات pooled و10 direct (خمسة من direct محجوزة لعمليات المنصة)، وبلا نسخ احتياطي آلي. ويضيف Prisma Compute مليون طلب و٣٦٠ GB-hours ذاكرة provisioned و4 vCPU-hours و10 GB نطاق ترددي صادر شهرياً. المصدر: https://www.prisma.io/docs/full-stack-tutorial وhttps://www.prisma.io/pricing.
هل أحتاج Prisma ORM لاستخدام Prisma Postgres؟
لا. Prisma ORM اختياري على المنتجين: Prisma Postgres يعمل مع أي عميل PostgreSQL، وPrisma Compute يشغّل تطبيقات لا تستخدم Prisma ORM. هذا الدليل يستخدم Prisma ORM لأنه يُنمّط الاستعلامات، لكن pg أو Drizzle أو أي عميل آخر سيعمل أيضاً. المصدر: https://www.prisma.io/docs/full-stack-tutorial.
ما هو Prisma Composer؟
Prisma Composer هو إطار TypeScript لتطبيقات مكوّنة من عدة خدمات. تُصرّح عن الخدمات واعتمادياتها كقيم TypeScript عادية، ثم تشغّل أوامر dev وdeploy في Prisma CLI ما صرّحت عنه وتُوفّره على Prisma Compute وPrisma Postgres. الـ declaration بيانات: يفحص المترجم الربط، ويوفّرها النشر، ويحقن الـ runtime الاعتماديات. المصدر: https://www.prisma.io/docs/composer/core-concepts.
ما هو Prisma contract؟
الـ contract هو الوصف الواحد لنموذج بياناتك وكيفية تخزينه — ملف contract.prisma الذي حلّ محل schema.prisma في Prisma ORM 8. تُفحص استعلاماتك مقابله، وتُخطَّط الـ migrations كتغييرات عليه، ويتحقق prisma db verify من قاعدة بيانات حية مقابله. الـ contract هو ما تكتبه؛ أما schema فهي البنية الفعلية لقاعدة بياناتك. الأمر npx prisma contract emit يكتب contract.json وcontract.d.ts. المصدر: https://www.prisma.io/docs/orm/contract-authoring/the-data-contract.
كيف يعمل التطوير المحلي؟
شغّل npm run composer:dev (أي prisma dev) من جذر المشروع. التطوير المحلي يشغّل تطبيقك على Bun، ويبدأ قاعدة Prisma Postgres محلية، ويطبّق الـ migrations التي التزمت بها، ويطبع عنوان التطبيق. لا حساب ولا credentials ولا connection string. يجب أن يكون Bun على PATH. المصدر: https://www.prisma.io/docs/local-development.
كيف أنشر في الإنتاج؟
شغّل npm run deploy، الذي يبني التطبيق ثم يشغّل prisma deploy. النشر يستخدم جلسة prisma auth login؛ وفي CI عيّن PRISMA_SERVICE_TOKEN وPRISMA_WORKSPACE_ID بدلاً منها. أول نشر يُنشئ المشروع ويحتاج منطقة، تُعيَّن بـ prismaCloud({ region }) في prisma.config.ts أو بمتغير PRISMA_REGION؛ والمشروع الموجود يحتفظ بمنطقته. الأمر prisma deploy نفسه لا يبني — شغّل البناء أولاً. المصدر: https://www.prisma.io/docs/cli/deploy.
ماذا يحدث إذا وصلت إلى حد خطة Free؟
لا يُحصَّل شيء. خطة Free بلا فوترة استخدام، لذا الوصول إلى حد لا يضيف رسماً. العمليات وعدادات Compute الأربعة حدود شهرية؛ أما التخزين وعدد قواعد البيانات فغير مرتبطة بشهر. لتجاوز حد، انقل الـ workspace إلى خطة مدفوعة، تُفوتر الاستخدام الزائد عن المبالغ المشمولة ويمكنها تحديد سقف للإنفاق. المصدر: https://www.prisma.io/docs/full-stack-tutorial.
من أين تأتي هذه الإجابات عن المنتج؟
كل ادعاء عن المنتج أعلاه مأخوذ من توثيق Prisma: https://www.prisma.io/docs/full-stack-tutorial (خطة Free واختيارية ORM)، https://www.prisma.io/docs/composer/core-concepts (Composer)، https://www.prisma.io/docs/orm/contract-authoring/the-data-contract (contract)، https://www.prisma.io/docs/local-development (التطوير المحلي على Bun)، وhttps://www.prisma.io/docs/cli/deploy (النشر والمصادقة والمنطقة). السلوك الخاص بهذا التطبيق مأخوذ من الكود في هذا الدليل والتشغيلات المعروضة أعلاه.
مقالات ذات صلة
بناء الذكاء الاصطناعي الموثوق: ضوابط LLM في تطبيقات العالم الحقيقي
اكتشف كيف تجعل الضوابط النماذج اللغوية الكبيرة (LLMs) آمنة، أخلاقية، ومطابقة—من الرعاية الصحية إلى المالية—وتعلم كيفية تصميم ومراقبة ونشر AI بمسؤولية.
داخل وكلاء الذكاء الاصطناعي للبرمجة: كيف تتطور مسارات التطوير الذاتية
نظرة واقعية ومفصلة عن وكلاء الذكاء الاصطناعي للبرمجة — كيف تعمل، ما الذي يجعلها مختلفة عن الكوبيلوتات التقليدية، وكيف تعيد السيرورات الوكلائية تشكيل تطوير البرمجيات.
المزيد من الأدلّة
دليل · ٣٠ دقيقة للقراءة
بناء تطبيق فوري مع Supabase — قاعدة بيانات، مصادقة، وتحديثات مباشرة في ٣٠ دقيقة
ابنِ تطبيق todo تعاوني فوري مع Supabase و Next.js. يغطي قاعدة بيانات Postgres وRow Level Security والمصادقة والاشتراكات الفورية وEdge Functions. كل خطوة مُختبَرة مباشرةً على الطبقة المجانية من Supabase.
دليل · ٢٥ دقيقة للقراءة
دليل المطور لبروتوكول سياق النموذج (MCP)
أتقن بروتوكول MCP من البنية إلى الإنتاج. تعلم بروتوكول العميل-الخادم وبناء خوادم مخصصة باستخدام TypeScript و Python SDKs والاتصال بعملاء MCP الحقيقيين ونشر تكاملات آمنة لسير العمل المدعوم بالذكاء الاصطناعي.
للوكلاء الآليين:/for-agents/llms.txt/ar/guides/prisma-first-app-deploy.md