# تربز في حاويات — دليل التشغيل والفحص > الهدف: نسخة تربز كاملة على سيرفر واحد داخل compose واحدة، والتطبيق لا يتغير > فيه شيء سوى الـ base URLs (تُبنى مرة واحدة بـ `.env` الجديد). > > البورتات مخصصة لتربز ولا تتصادم مع نسخ سيرو/intaleq على السيرفر نفسه: > HTTP 8183 · driver 12022 · passenger 13033 · food 14042 · mysql 33063 · pma 8084 · TURN 3479 ## 0) قبل أي شيء — على السيرفر ```bash df -h / # التأكد من المساحة — الصور والقواعد تحتاج ~4-6GB docker image prune -f # نظّف أولاً، وإن لم تكفِ المساحة فالفحص على صندوق آخر ss -tlnp | grep -E ':(1202|1303|1404|3306|3478|808)[0-9]' # تأكد الفارغة ``` ## 1) الإعداد (مرة واحدة) ```bash cd /path/to/Tripz/docker cp .env.example .env && nano .env # املأ الأسرار — خاصة JWT_SECRET وكلمات MySQL # ⚠️ طابق أسماء القواعد في mysql/init/ مع ما يتوقعه الكود # ⚠️ توجد قاعدة طعام منفصلة tripz_food (06-foodDB.sql) — اضبط DB_FOOD_PASS docker compose build # تبعيات composer للخدمات التي لا تحمل vendor/ داخلها: docker compose run --rm socket_driver composer install docker compose run --rm socket_passenger composer install docker compose run --rm --workdir /var/www/backend php composer install ``` ## 2) التشغيل والاستيراد ```bash docker compose up -d # استيراد السكيمات (أول مرة فقط): docker compose exec -T mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" mainDB < ../backend/schema_primary.sql docker compose exec -T mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" ridesDB < ../backend/schema_ride.sql docker compose exec -T mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" locationDB < ../backend/schema_tracking.sql docker compose exec -T mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" paymentDB < ../payment_server/WalletDB.sql docker compose exec -T mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" locationDB < ../loction_server/locationDB.sql ``` ## 3) التحقق ```bash docker compose ps # كل الخدمات up curl -s http://localhost:8183/backend/index.html # nginx→ملفات curl -s -o /dev/null -w '%{http_code}\n' http://localhost:8183/backend/connect.php # يرد (401/400 طبيعي بلا JWT) curl -s http://localhost:8183/fpm-status # حالة حوض fpm docker compose logs socket_driver | tail # Workerman أقلع على 2020/2021 docker compose logs socket_food | tail # سوكيت الطعام على 4040 ``` اتصال التطبيق للتجربة: `https://api.tripz-egypt.com/backend` + سوكيتات `https://api.tripz-egypt.com:2020` / `:3030` / `:4040` (منفذة TLS عبر `/etc/nginx/sites-enabled/tripz-sockets-tls.conf` على المضيف). ## 4) الخدمات المنفصلة (transit / food / TURN) - **php_transit** — حوض fpm معزول (16 عاملاً) يخدم `/backend/transit/*` فقط. - **php_food** — حوض fpm معزول (24 عاملاً) يخدم `/backend/food/*` فقط، وقاعدة `tripz_food` منفصلة. - **socket_food** — سوكيت الطعام على 127.0.0.1:14042 (يفسد من المضيف على 4040). - **coturn** — مكالمات الصوت على TCP/UDP 3479 + نطاق 49301–49400 UDP (افتحهما على جدار الحماية؛ النطاق 49160–49300 محجوز لنسخة سيرو). ## 5) أدوات الإدارة - phpMyAdmin: `ssh -L 8084:127.0.0.1:8084 user@server` ثم `http://127.0.0.1:8084` - MySQL من السيرفر: `mysql -h127.0.0.1 -P33063 -uroot -p` - المهام المجدولة: انسخ `crontab.production` (ضمنف داخل حاوية php). ## 6) ملاحظات أداء محسوسة - الحاوية على لينكس = عمليات عادية بنفس النواة — لا محاكاة، حمل CPU/ذاكرة ≈ صفر. - المكان الوحيد الذي يُخسر فيه أداء فعلاً: كتابة MySQL فوق overlayfs — محلول بـ volume. - أداء PHP الحقيقي = opcache + مقاس حوض fpm + فهارس MySQL — مضبوطة في `php/`.