#!/bin/bash # ============================================================================== # HomAroma Project - Integrated Deployment Script (post-receive hook) # ============================================================================== # 1. TARGET PATHS (Nginx & PM2) TARGET_SPA="/home/ti/projects/MyNginxMain/nginx/html/homaroma.shop/spa" TARGET_ADMIN="/home/ti/projects/MyNginxMain/nginx/html/homaroma.shop/admin" TARGET_BACKEND="/home/ti/projects/homaroma-api" TARGET_WEBSITE="/home/ti/projects/homaroma-website" # <-- Next.js SSR App # 2. REPOSITORY CONFIG REPO="/home/ti/git/homaroma.git" BRANCH="master" TEMP_DIR="/tmp/homaroma_build_$(date +%s)" # 3. BINARY PATHS & PM2 BUN="/home/ti/.bun/bin/bun" PM2="/home/ti/.nvm/versions/node/v22.17.1/bin/pm2" PM2_NAME_BACKEND="homaroma-backend" PM2_NAME_WEBSITE="homaroma-website" # <-- PM2 process name สำหรับ SSR export PATH="$PATH:/home/ti/.bun/bin:/home/ti/.nvm/versions/node/v22.17.1/bin" # 4. BUILD ENVIRONMENT export VITE_API_URL="https://api.homaroma.shop/api" export VITE_LIFF_ID="2010318436-npAZzUIV" # <-- สำหรับ LINE LIFF export NEXT_PUBLIC_API_URL="https://api.homaroma.shop/api" # <-- สำหรับ SSR (Client-side fetch) export VITE_OMISE_PUBLIC_KEY="pkey_test_67xsxzv86rp19bamkwg" # Port ของ Next.js SSR (Nginx จะ proxy_pass มาที่นี่) SSR_PORT=3002 # ------------------------------------------------------------------------------ # START DEPLOYMENT # ------------------------------------------------------------------------------ set -e echo "------- 🚀 Starting Full Deployment: HomAroma Platform -------" # A. Prepare Temp Source from Checkout echo "Cloning branch $BRANCH to temporary directory: $TEMP_DIR" mkdir -p $TEMP_DIR git --work-tree=$TEMP_DIR --git-dir=$REPO checkout -f $BRANCH cd $TEMP_DIR echo "Installing monorepo dependencies..." $BUN install # B. Build & Deploy SPA (Frontend สำหรับ LINE LIFF) echo ">>> Building SPA..." cd apps/spa $BUN run build echo "Deploying SPA to $TARGET_SPA..." mkdir -p $TARGET_SPA rm -rf $TARGET_SPA/* cp -rv dist/* $TARGET_SPA/ cd ../.. # C. Build & Deploy ADMIN PANEL echo ">>> Building Admin Panel..." cd apps/admin $BUN run build echo "Deploying Admin Panel to $TARGET_ADMIN..." mkdir -p $TARGET_ADMIN rm -rf $TARGET_ADMIN/* cp -rv dist/* $TARGET_ADMIN/ cd ../.. # D. Deploy & Manage BACKEND (API) echo ">>> Updating Backend at $TARGET_BACKEND..." mkdir -p $TARGET_BACKEND # Sync Backend Source (--exclude .env เพื่อป้องกันการลบ .env บน server!) rsync -av --delete \ --exclude='.env' \ --exclude='public/' \ --exclude='node_modules/' \ apps/backend/ $TARGET_BACKEND/ # Sync Shared Packages mkdir -p $TARGET_BACKEND/packages rsync -av packages/ $TARGET_BACKEND/packages/ cd $TARGET_BACKEND echo "Installing backend dependencies..." $BUN install # สร้าง public/ folder สำหรับ static files (upload images) mkdir -p $TARGET_BACKEND/public # Generate Prisma Client (สำคัญมาก! ต้องรันทุกครั้งหลัง install) echo ">>> Generating Prisma Client..." $BUN x prisma generate # E. Database Migration (Safe Method) if [ -f ".env" ]; then echo ">>> Running Prisma Migrate Deploy..." $BUN x prisma migrate deploy else echo "⚠️ Warning: .env not found at $TARGET_BACKEND/.env" echo " Please create it manually once: see serverinfo/text.txt for template" echo " Skipping migrations this time." fi # F. PM2 Management - BACKEND echo ">>> Managing PM2 Process: $PM2_NAME_BACKEND..." $PM2 restart $PM2_NAME_BACKEND 2>/dev/null || \ $PM2 start src/index.ts --name $PM2_NAME_BACKEND --interpreter $BUN echo "✅ PM2 process '$PM2_NAME_BACKEND' is running." # G. Build & Deploy WEBSITE (Next.js SSR) echo ">>> Building Next.js SSR App inside monorepo temp dir..." cd $TEMP_DIR/apps/website $BUN run build # build จาก monorepo (workspace:* resolve ได้) # E. Prepare Next.js SSR echo ">>> Preparing Next.js SSR App..." rsync -av --delete \ $TEMP_DIR/apps/website/.next/standalone/ $TARGET_WEBSITE/ rsync -av \ $TEMP_DIR/apps/website/public/ $TARGET_WEBSITE/apps/website/public/ rsync -av \ $TEMP_DIR/apps/website/.next/static/ $TARGET_WEBSITE/apps/website/.next/static/ # F. Fix Permissions echo ">>> Fixing Permissions..." chown -R ti:ti $TARGET_BACKEND $TARGET_WEBSITE # H. PM2 Management - SSR Next.js cd $TARGET_WEBSITE echo ">>> Creating symlink for .next..." ln -sf apps/website/.next .next cd apps/website echo ">>> Managing PM2 Process: $PM2_NAME_WEBSITE..." $PM2 delete $PM2_NAME_WEBSITE 2>/dev/null || true PORT=$SSR_PORT $PM2 start $BUN --name $PM2_NAME_WEBSITE \ -- server.js echo "✅ PM2 process '$PM2_NAME_WEBSITE' is running on port $SSR_PORT." # I. Cleanup echo "Cleaning up build artifacts..." rm -rf $TEMP_DIR echo "------- ✅ ALL DEPLOYMENTS COMPLETED SUCCESSFULLY -------" echo "" echo "📋 Service Summary:" echo " 🌐 Website (SSR) → https://homaroma.shop (PM2: $PM2_NAME_WEBSITE, Port: $SSR_PORT)" echo " 📱 SPA (LIFF) → https://spa.homaroma.shop" echo " 🔧 Admin Panel → https://admin.homaroma.shop" echo " 🔌 API Backend → https://api.homaroma.shop (PM2: $PM2_NAME_BACKEND)"