#!/bin/bash set -e export DOCKER_BUILDKIT=1 export COMPOSE_DOCKER_CLI_BUILD=1 # Ensure nexus is connected to default bridge network so docker build can reach it docker network connect bridge nexus 2>/dev/null || true # Nexus npm registry NEXUS_IP=$(docker inspect -f '{{.NetworkSettings.Networks.bridge.IPAddress}}' nexus 2>/dev/null || true) if [ -z "$NEXUS_IP" ]; then NEXUS_IP="172.17.0.3" fi NPM_REGISTRY="http://${NEXUS_IP}:8081/repository/bitchpedar/" BRANCH="${1:-develop}" echo "Starting Deployment for branch: ${BRANCH}" if [ "$BRANCH" == "develop" ]; then COMPOSE_FILE="compose.stage.yml" TARGET_DIR="/opt/services/canina/stage" BACKEND_HOST="backend_stage" APP_HOST="stage.canina.ir" ADMIN_HOST="stageadmin.canina.ir" API_URL="https://stageapi.canina.ir" CONTAINER_PREFIX="canino_backend_stage" else COMPOSE_FILE="compose.prod.yml" TARGET_DIR="/opt/services/canina/prod" BACKEND_HOST="backend_prod" APP_HOST="canina.ir" ADMIN_HOST="admin.canina.ir" API_URL="https://api.canina.ir" CONTAINER_PREFIX="canino_backend_prod" fi mkdir -p "$TARGET_DIR" if [ ! -d "$TARGET_DIR/.git" ]; then echo "Cloning repository into $TARGET_DIR..." git clone -b "$BRANCH" https://git.parsaaghayi.ir/parsa/canina.git "$TARGET_DIR" else echo "Pulling latest changes in $TARGET_DIR..." cd "$TARGET_DIR" git fetch origin "$BRANCH" git reset --hard "origin/$BRANCH" cd - fi cd "$TARGET_DIR" # ✅ فایل‌های کانفیگ را از پوشه‌ی scripts مخزن به TARGET_DIR کپی می‌کنیم echo "Copying configuration files in $TARGET_DIR..." cp "scripts/$COMPOSE_FILE" "docker-compose.yml" sed -i 's/- REDIS_PORT: 6379/- REDIS_PORT=6379/g' "docker-compose.yml" 2>/dev/null || true echo "Patching nginx.conf for environment..." sed -i "s/__BACKEND_HOST__/${BACKEND_HOST}/g" "nginx.conf" sed -i "s/__APP_HOST__/${APP_HOST}/g" "nginx.conf" sed -i "s/__ADMIN_HOST__/${ADMIN_HOST}/g" "nginx.conf" echo "Using Nexus npm proxy: $NPM_REGISTRY" NPM_REGISTRY_ARG="--build-arg NPM_REGISTRY=${NPM_REGISTRY}" echo "Building Docker images..." docker compose --progress plain build \ --build-arg NEXT_PUBLIC_API_URL="${API_URL}/api" \ --build-arg VITE_API_URL="${API_URL}" \ ${NPM_REGISTRY_ARG} echo "Starting containers..." docker compose up -d echo "Waiting for backend to start..." sleep 15 echo "Running database migrations..." if [ "$BRANCH" == "develop" ]; then # Staging: use db push (fast, schema sync) then seed echo "[STAGING] Running prisma db push..." docker exec "$CONTAINER_PREFIX" npx prisma db push || true echo "[STAGING] Running prisma db seed..." docker exec "$CONTAINER_PREFIX" npx prisma db seed || true else # Production: use db push to sync schema additions without data loss echo "[PRODUCTION] Running prisma db push to ensure schema is up to date..." docker exec "$CONTAINER_PREFIX" npx prisma db push --skip-generate || true echo "[PRODUCTION] Seeder skipped to protect production data." fi # Auto-cleanup old docker builder cache to keep disk healthy echo "Cleaning up dangling docker build cache..." docker builder prune -f --keep-storage 2GB 2>/dev/null || docker builder prune -f 2>/dev/null || true docker image prune -f 2>/dev/null || true echo "Deployment for $BRANCH completed successfully!"