#!/usr/bin/env bash # ============================================================ # Tripz — مزامنة الكود من الماك إلى السيرفر (نصوص فقط) # الاستخدام من تيرمينال الماك: # ./sync-to-server.sh # مزامنة فقط # ./sync-to-server.sh --deploy # مزامنة ثم docker compose up على السيرفر # ./sync-to-server.sh --logs # عرض لوغ الحاويات على السيرفر # ملاحظة: لا نبني ولا نشغّل شيئاً على الماك — كل التشغيل على السيرفر عبر Docker. # ============================================================ set -euo pipefail # ---- إعدادات السيرفر (عدّل عند اللزوم) ---- SERVER_USER="root" SERVER_IP="194.163.173.157" REMOTE_DIR="/home/tripz-llc" # مجلد مخصّص جديد (منفصل عن مواقع CloudPanel) LOCAL_DIR="$(cd "$(dirname "$0")" && pwd)/" SSH="ssh ${SERVER_USER}@${SERVER_IP}" echo "==> مزامنة ${LOCAL_DIR} ⟶ ${SERVER_USER}@${SERVER_IP}:${REMOTE_DIR}" # تأكد من وجود المجلد على السيرفر $SSH "mkdir -p ${REMOTE_DIR}" # rsync: يرفع النصوص فقط، يستثني المخرجات والأسرار، ويحذف المحذوف محلياً # لكن يُبقي .env على السيرفر (يُنشأ هناك ولا يُرفع من الماك) rsync -avz --delete \ --exclude='.git/' \ --exclude='node_modules/' \ --exclude='dist/' \ --exclude='build/' \ --exclude='.dart_tool/' \ --exclude='**/pgdata/' \ --exclude='**/redisdata/' \ --exclude='.env' \ --exclude='.DS_Store' \ --exclude='*.log' \ "${LOCAL_DIR}" "${SERVER_USER}@${SERVER_IP}:${REMOTE_DIR}/" echo "==> تمت المزامنة." # ---- خيارات إضافية ---- case "${1:-}" in --deploy) echo "==> تشغيل docker compose على السيرفر..." $SSH "cd ${REMOTE_DIR}/backend && \ [ -f .env ] || cp .env.example .env && \ docker compose up -d --build && \ docker compose exec -T api npm run migration:run || true" echo "==> التطبيق: http://${SERVER_IP}:4010/api/health" ;; --logs) $SSH "cd ${REMOTE_DIR}/backend && docker compose logs --tail=100 -f" ;; esac