Files
riyadhafraa 7d65198298 Disable unwanted default applications and clean up related scripts
Remove `enable-default-apps.ts` script, add `disable-deprecated-apps.ts`, update seeding logic in `seed.ts` to set `isActive` to false for documents, and modify `DOCKER.md` and `scripts/package.json` accordingly.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 77cfe984-2c65-4152-bb7a-0df28274fe66
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: ac51f801-911b-4be5-b27c-e3212d5c0c73
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/c3c252e4-c83d-40ca-9fff-99a3ea60701e/77cfe984-2c65-4152-bb7a-0df28274fe66/1WKAcHk
Replit-Helium-Checkpoint-Created: true
2026-05-18 07:18:15 +00:00

6.3 KiB

تشغيل Tx OS عبر Docker

دليل سريع لتشغيل المشروع بالكامل على جهازك (ماك / لينكس) بأمر واحد، بدون الحاجة لتثبيت Node أو Postgres يدوياً.

المتطلبات

  • Docker Desktop (الإصدار 4.x أو أحدث) — حمّله من https://www.docker.com/products/docker-desktop/.
    • يدعم Apple Silicon (M1/M2/M3/M4) و Intel.
    • تأكد إنه شغّال بعد التثبيت (تشوف أيقونة الحوت بأعلى الشاشة).
  • Git — موجود غالباً، تأكد بـ git --version.

لا تحتاج تثبيت Node أو pnpm أو Postgres على الماك — كله يشتغل داخل الحاويات.

التشغيل لأول مرة

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 يطبع لك كلمتي مرور عشوائيتين في الترمنال (وكمان يحفظهن في .env):

Admin login:   admin / <كلمة سر عشوائية>
User login:    ahmed / <كلمة سر عشوائية>

انسخهن فوراً. لو فقدت كلمة سر admin تحتاج تدخل قاعدة البيانات يدوياً لإعادة تعيينها. تقدر تغيّرها لاحقاً من لوحة الإدارة داخل التطبيق.

الأوامر اليومية

الأمر الوظيفة
./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

git pull
./start.sh rebuild

تنبيه التحديثات (System Updates)

صفحة Admin → System Updates تعرض الإصدار الحالي وتقدر تفحص لو في إصدار أحدث على Gitea. للتفعيل:

  1. تأكد أن ملف latest.json موجود في جذر الريبو على Gitea بنفس بنية version.json:

    { "version": "0.2.0", "build": "20260601.abc1234" }
    
  2. أضف في .env (أو docker-compose.yml تحت services.api.environment):

    LATEST_VERSION_URL=https://desktop-11cj93j.tail866923.ts.net/rafraa/TX/raw/branch/main/latest.json
    
  3. أعد التشغيل: ./start.sh stop && ./start.sh.

عند كل إصدار جديد: حدّث latest.json في الريبو وادفع. عملاء Tx OS سيرون شارة "Update available" عند ضغطهم على Check Now.

رقم البناء (build) يُولَّد تلقائياً من git قبل كل pnpm run build (انظر scripts/update-version.mjs)، فلا تحتاج تعديله يدوياً في version.json.

تعطيل تطبيقات التقويم والإشعارات والمستندات

افتراضياً تصل الثلاثة مُعطَّلة في البيئات الجديدة (السيد فقط يُدخل صفوفاً جديدة، ولا يعدّل الموجودة). لتعطيلها على بيئة موجودة فيها هذه التطبيقات مفعّلة (مرة واحدة):

docker compose exec api pnpm --filter @workspace/scripts run disable-deprecated-apps

السكربت idempotent (آمن لإعادة التشغيل) ويضبط is_active=false لـ calendar و notifications و documents فقط. يمكن إعادة تفعيل أي منها لاحقاً من إعدادات التطبيقات داخل لوحة التحكم.