# Tripz Backend — NestJS (Docker فقط) > **لا تثبيت محلي على الماك.** الكود يُكتب محلياً، والبناء والتشغيل والهجرات **كلها داخل Docker على السيرفر**. ## التشغيل على السيرفر ```bash cd backend cp .env.example .env # ثم عدّل كلمات المرور والأسرار docker compose up -d --build # يبني ويشغّل: postgres/postgis, redis, martin, api, worker ``` ## الهجرات (داخل حاوية الـ api) ```bash docker compose exec api npm run migration:run ``` ## فحص سريع ```bash curl http://:4010/api/health # {"status":"ok",...} # توثيق Swagger: http://:4010/api/docs ``` ## العزل على السيرفر المشترك (راجع docs/14) - Postgres: قاعدة `tripz`، بادئة جداول `tripz_` (مثال: `tripz_tenants`). - Redis: **DB رقم 3** غير الافتراضي + بادئة مفاتيح `tripz:`. - منافذ مضيف غير قياسية (API 4010، Postgres 55432) لتفادي التصادم. - أسماء حاويات/شبكة/فوليوم ببادئة `tripz-`. ## البنية الحالية (P0) ``` src/ ├── main.ts # bootstrap API (+ Swagger) ├── worker.ts # نقطة دخول BullMQ (هيكل) ├── app.module.ts # ConfigModule + TypeORM(entityPrefix) + Throttler + TenantMiddleware ├── config/ # configuration.ts + data-source.ts (هجرات) ├── common/ │ ├── tenant/ # context (AsyncLocalStorage) + middleware + @Tenant() │ └── usage/ # UsageInterceptor (أساس الفوترة) ├── database/ │ ├── entities/ # tenant.entity.ts │ └── migrations/ # InitTenants └── modules/ ├── health/ # GET /api/health └── tenants/ # GET /api/tenant/config/:slug ، admin/tenants ``` ## التالي (P1) users · auth(OTP) · drivers · trips(★ آلة حالة) · matching(Redis GEO) · tariff · realtime(Socket.IO) · maps(وكيل انطلق).