BigBike
This commit is contained in:
1 parent
2364aa32b0
commit
5ba4afb2de
7 files changed
+756
No files matched your search
@@ -0,0 +1,149 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==============================================================================
|
||||
# HomAroma / CMS Project - Post-Receive Hook for sql@192.168.1.26
|
||||
# ==============================================================================
|
||||
|
||||
# 1. PATH & ENVIRONMENT
|
||||
export PATH="/home/sql/.bun/bin:/usr/local/bin:/usr/bin:/bin:$PATH"
|
||||
set -e
|
||||
|
||||
# 2. TARGET PATHS
|
||||
# Static Frontend Deployments (Nginx document root)
|
||||
TARGET_SPA="/var/www/html/cms/spa"
|
||||
TARGET_ADMIN="/var/www/html/cms/admin"
|
||||
|
||||
# Backend & Next.js Website Working Directories
|
||||
TARGET_BACKEND="/home/sql/code/cms-api"
|
||||
TARGET_WEBSITE="/home/sql/code/cms-website"
|
||||
|
||||
# 3. REPOSITORY CONFIG
|
||||
REPO="/home/sql/git/cms.git"
|
||||
BRANCH="master"
|
||||
TEMP_DIR="/tmp/cms_build_$(date +%s)"
|
||||
|
||||
# 4. BINARY PATHS
|
||||
BUN="/home/sql/.bun/bin/bun"
|
||||
NODE="/usr/bin/node"
|
||||
PM2="/usr/bin/pm2"
|
||||
|
||||
# 5. PM2 PROCESS NAMES
|
||||
PM2_NAME_BACKEND="cms-backend"
|
||||
PM2_NAME_WEBSITE="cms-website"
|
||||
|
||||
# 6. SERVICE PORTS (Ensure no collision with 3001, 4000, 4545, 5000, 5432, 6333, 8000)
|
||||
BACKEND_PORT=3005
|
||||
SSR_PORT=3002
|
||||
|
||||
# 7. BUILD ENVIRONMENT VARIABLES
|
||||
export VITE_API_URL="http://192.168.1.26:${BACKEND_PORT}/api"
|
||||
export NEXT_PUBLIC_API_URL="http://192.168.1.26:${BACKEND_PORT}/api"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# START DEPLOYMENT
|
||||
# ------------------------------------------------------------------------------
|
||||
echo "------- 🚀 Starting Full Deployment: sql@192.168.1.26 -------"
|
||||
|
||||
# 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 with Bun..."
|
||||
$BUN install
|
||||
|
||||
# B. Build & Deploy SPA
|
||||
if [ -d "apps/spa" ]; then
|
||||
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 ../..
|
||||
fi
|
||||
|
||||
# C. Build & Deploy Admin Panel
|
||||
if [ -d "apps/admin" ]; then
|
||||
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 ../..
|
||||
fi
|
||||
|
||||
# D. Deploy & Manage Backend
|
||||
if [ -d "apps/backend" ]; then
|
||||
echo ">>> Updating Backend at $TARGET_BACKEND..."
|
||||
mkdir -p "$TARGET_BACKEND/apps"
|
||||
mkdir -p "$TARGET_BACKEND/packages"
|
||||
|
||||
rsync -av --delete \
|
||||
--exclude='.env' \
|
||||
--exclude='public/' \
|
||||
--exclude='node_modules/' \
|
||||
apps/backend/ "$TARGET_BACKEND/apps/backend/"
|
||||
|
||||
rsync -av packages/ "$TARGET_BACKEND/packages/"
|
||||
cp package.json bun.lock ecosystem.config.js "$TARGET_BACKEND/" 2>/dev/null || cp package.json bun.lock "$TARGET_BACKEND/"
|
||||
|
||||
cd "$TARGET_BACKEND"
|
||||
$BUN install
|
||||
|
||||
mkdir -p "$TARGET_BACKEND/apps/backend/public"
|
||||
|
||||
cd "$TARGET_BACKEND/apps/backend"
|
||||
echo ">>> Generating Prisma Client & Pushing DB..."
|
||||
$BUN x prisma generate
|
||||
$BUN x prisma db push --accept-data-loss || echo "Prisma db push skipped or failed"
|
||||
|
||||
echo ">>> Managing PM2 for Backend..."
|
||||
if $PM2 describe "$PM2_NAME_BACKEND" > /dev/null 2>&1; then
|
||||
$PM2 restart "$PM2_NAME_BACKEND" --update-env
|
||||
else
|
||||
$PM2 start "$BUN" --name "$PM2_NAME_BACKEND" --cwd "$TARGET_BACKEND/apps/backend" -- run src/index.ts
|
||||
fi
|
||||
fi
|
||||
|
||||
# E. Deploy & Manage Website (Next.js SSR)
|
||||
if [ -d "$TEMP_DIR/apps/website" ]; then
|
||||
echo ">>> Building Website (Next.js SSR)..."
|
||||
cd "$TEMP_DIR/apps/website"
|
||||
$BUN run build
|
||||
|
||||
echo ">>> Updating Website at $TARGET_WEBSITE..."
|
||||
mkdir -p "$TARGET_WEBSITE"
|
||||
rsync -av --delete \
|
||||
--exclude='.env' \
|
||||
--exclude='node_modules/' \
|
||||
"$TEMP_DIR/apps/website/.next/standalone/" "$TARGET_WEBSITE/" 2>/dev/null || echo "Standalone directory sync"
|
||||
|
||||
if [ -d "$TEMP_DIR/apps/website/.next/static" ]; then
|
||||
mkdir -p "$TARGET_WEBSITE/.next/static"
|
||||
cp -rv "$TEMP_DIR/apps/website/.next/static/"* "$TARGET_WEBSITE/.next/static/"
|
||||
fi
|
||||
if [ -d "$TEMP_DIR/apps/website/public" ]; then
|
||||
cp -rv "$TEMP_DIR/apps/website/public" "$TARGET_WEBSITE/"
|
||||
fi
|
||||
|
||||
echo ">>> Managing PM2 for Website..."
|
||||
cd "$TARGET_WEBSITE"
|
||||
PORT=$SSR_PORT
|
||||
if $PM2 describe "$PM2_NAME_WEBSITE" > /dev/null 2>&1; then
|
||||
$PM2 restart "$PM2_NAME_WEBSITE" --update-env
|
||||
else
|
||||
PORT=$SSR_PORT $PM2 start "$NODE" --name "$PM2_NAME_WEBSITE" -- server.js
|
||||
fi
|
||||
fi
|
||||
|
||||
# F. Cleanup & Save PM2
|
||||
rm -rf "$TEMP_DIR"
|
||||
$PM2 save
|
||||
|
||||
echo "===== ✅ Deployment Completed Successfully! ====="
|
||||
$PM2 list
|
||||
Reference in new issue
Block a user