Implement a script to automatically generate build version information from git commit hash and date, updating version.json and creating latest.json. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 77cfe984-2c65-4152-bb7a-0df28274fe66 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: ab5429c1-7925-4a30-a964-b3db9c5772da 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
5.5 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
السكربت يعمل تلقائياً:
- ينشئ ملف
.envمن.env.docker.exampleويولّدSESSION_SECRETوPOSTGRES_PASSWORDعشوائيين. - يبني صور Docker (أول مرة يأخذ 5–10 دقائق — Node, Chromium, dependencies).
- يشغّل Postgres ثم يدفع جداول قاعدة البيانات (drizzle-kit push) ثم يزرع البيانات الأولية (seed).
- يشغّل 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. للتفعيل:
-
تأكد أن ملف
latest.jsonموجود في جذر الريبو على Gitea بنفس بنيةversion.json:{ "version": "0.2.0", "build": "20260601.abc1234" } -
أضف في
.env(أوdocker-compose.ymlتحتservices.api.environment):LATEST_VERSION_URL=https://desktop-11cj93j.tail866923.ts.net/rafraa/TX/raw/branch/main/latest.json -
أعد التشغيل:
./start.sh stop && ./start.sh.
عند كل إصدار جديد: حدّث latest.json في الريبو وادفع. عملاء Tx OS سيرون شارة "Update available" عند ضغطهم على Check Now.
رقم البناء (
build) يُولَّد تلقائياً من git قبل كلpnpm run build(انظرscripts/update-version.mjs)، فلا تحتاج تعديله يدوياً فيversion.json.