Files
TX/DOCKER.md
T
riyadhafraa d70ee83a63 Set up Docker environment for local development and deployment
Configure Docker Compose, Dockerfiles for API and web servers, and a startup script to enable local development and deployment of the application.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 77cfe984-2c65-4152-bb7a-0df28274fe66
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 9b39e228-74f1-466d-ab5c-87a1e5e7ed07
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/c3c252e4-c83d-40ca-9fff-99a3ea60701e/77cfe984-2c65-4152-bb7a-0df28274fe66/kI0sxlu
Replit-Helium-Checkpoint-Created: true
2026-05-13 19:47:05 +00:00

3.9 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 تشغيل (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