Files
TX/DOCKER.md
riyadhafraa ea5b3b5836 Add secure generation and display of initial user credentials
Add logic to `start.sh` to generate and display initial admin and user passwords, and update `docker-compose.yml` to use these generated passwords.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 77cfe984-2c65-4152-bb7a-0df28274fe66
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 55b36940-657f-422c-9cdb-2cec579ea067
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:54:24 +00:00

95 lines
4.5 KiB
Markdown

# تشغيل 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 على الماك — كله يشتغل داخل الحاويات.
## التشغيل لأول مرة
```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` يطبع لك كلمتي مرور عشوائيتين في الترمنال (وكمان يحفظهن في `.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
```bash
git pull
./start.sh rebuild
```