From 92eca7a6a84accdcd3e89035621c40e54889a517 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 12 Jun 2026 19:32:33 -0400 Subject: [PATCH] x --- post-receive-local | 157 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 post-receive-local diff --git a/post-receive-local b/post-receive-local new file mode 100644 index 0000000..e2ecf9b --- /dev/null +++ b/post-receive-local @@ -0,0 +1,157 @@ +#!/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 +mkdir -p $TARGET_BACKEND/apps +mkdir -p $TARGET_BACKEND/packages + +# Sync Backend Source inside a monorepo-like layout so workspace deps resolve +rsync -av --delete \ + --exclude='.env' \ + --exclude='public/' \ + --exclude='node_modules/' \ + apps/backend/ $TARGET_BACKEND/apps/backend/ + +# Sync Shared Packages +rsync -av packages/ $TARGET_BACKEND/packages/ + +cp package.json bun.lock $TARGET_BACKEND/ + +cd $TARGET_BACKEND +echo "Installing backend dependencies..." +$BUN install + +# สร้าง public/ folder สำหรับ static files (upload images) +mkdir -p $TARGET_BACKEND/apps/backend/public + +cd $TARGET_BACKEND/apps/backend + +# Generate Prisma Client (สำคัญมาก! ต้องรันทุกครั้งหลัง install) +echo ">>> Generating Prisma Client..." +$BUN x prisma generate + +# E. Database Migration (Safe Method) +if [ -f "$TARGET_BACKEND/.env" ]; then + # Copy .env to apps/backend so Prisma and the app can find it + cp "$TARGET_BACKEND/.env" "$TARGET_BACKEND/apps/backend/.env" + 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 $TARGET_BACKEND/apps/backend/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)"