# تشغيل Tx OS عبر Docker دليل سريع لتشغيل المشروع بالكامل على جهازك (ماك / لينكس) بأمر واحد، بدون الحاجة لتثبيت Node أو Postgres يدوياً. ## المتطلبات - **Docker Desktop** (الإصدار 4.x أو أحدث) — حمّله من . - يدعم Apple Silicon (M1/M2/M3/M4) و Intel. - تأكد إنه شغّال بعد التثبيت (تشوف أيقونة الحوت بأعلى الشاشة). - **Git** — موجود غالباً، تأكد بـ `git --version`. > لا تحتاج تثبيت Node أو pnpm أو Postgres على الماك — كله يشتغل داخل الحاويات. ## التشغيل لأول مرة ```bash git clone https://desktop-11cj93j.tail866923.ts.net/rafraa/TX.git cd TX ./start.sh ``` السكربت يعمل تلقائياً: 1. ينشئ ملف `.env` من `.env.docker.example` ويولّد `SESSION_SECRET` و `POSTGRES_PASSWORD` عشوائيين. 2. يبني صور Docker (أول مرة يأخذ 5–10 دقائق — Node, Chromium, dependencies). 3. يشغّل Postgres ثم يدفع جداول قاعدة البيانات (drizzle-kit push) ثم يزرع البيانات الأولية (seed). 4. يشغّل API server والواجهة خلف Nginx. بعدها افتح: **http://localhost:3000** ## الأوامر اليومية | الأمر | الوظيفة | |---|---| | `./start.sh` | تشغيل (build إذا لزم) | | `./start.sh logs` | متابعة سجلّات الحاويات | | `./start.sh stop` | إيقاف بدون حذف (البيانات تبقى) | | `./start.sh down` | حذف الحاويات (البيانات تبقى في الـ volumes) | | `./start.sh rebuild` | إعادة بناء الصور من الصفر | | `./start.sh reset` | **خطر**: حذف قاعدة البيانات والملفات المرفوعة | ## البنية ``` http://localhost:3000 → nginx (web container) ├── / → ملفات React الثابتة └── /api/* → http://api:8080 (Node Express + Socket.IO) └── postgres:5432 └── /app/storage (volume للملفات) ``` ثلاث حاويات + قاعدة بيانات: - **postgres** — Postgres 16، البيانات في volume اسمه `tx-os_postgres_data`. - **migrate** — يشتغل مرة وحدة عند كل تشغيل، يدفع schema ويزرع البيانات. - **api** — Node 24 + Chromium (لتوليد PDF) + التخزين المحلي. - **web** — Nginx يقدّم الواجهة ويعمل reverse proxy للـ API. ## تخصيص عدّل `.env` بعد ما يُنشأ. أهم القيم: - `APP_PORT=3000` — منفذ المتصفح (غيّره مثلاً إلى 8080 لو 3000 محجوز). - `SESSION_SECRET` — سر توقيع الجلسات (مولّد تلقائياً، لا تشاركه). - `POSTGRES_PASSWORD` — كلمة مرور قاعدة البيانات. - `STORAGE_DRIVER=local` — التخزين على القرص داخل الحاوية (افتراضي ومناسب لمعظم الحالات). - `SMTP_*` — إعدادات البريد لإشعارات اجتماعات الإدارة (اختياري). بعد تعديل `.env` نفّذ `./start.sh stop` ثم `./start.sh` لإعادة التحميل. ## استكشاف الأخطاء - **المنفذ 3000 محجوز**: عدّل `APP_PORT` في `.env`. - **الواجهة ما تفتح**: راجع `./start.sh logs`، خصوصاً سجل `api` و `migrate`. - **بحاجة للوصول لقاعدة البيانات**: `docker compose exec postgres psql -U tx tx`. - **مساحة القرص**: `docker system prune` يحذف الصور غير المستخدمة (لا يلمس الـ volumes). ## التحديث من Gitea ```bash git pull ./start.sh rebuild ```