Files
homaroma/serverinfo/moto-post-receive
T
2026-09-24 06:06:16 +07:00

157 lines
5.0 KiB
Bash

#!/bin/bash
# ==============================================================================
# Kittisak Project - Integrated Deployment Script (post-receive hook)
# ==============================================================================
# 1. TARGET PATHS (Nginx & PM2)
TARGET_SPA="/home/ti/projects/MyNginxMain/nginx/html/moto/spa"
TARGET_ADMIN="/home/ti/projects/MyNginxMain/nginx/html/moto/admin"
TARGET_BACKEND="/home/ti/projects/moto-api"
TARGET_WEBSITE="/home/ti/projects/moto-website"
# 2. REPOSITORY CONFIG
REPO="/home/ti/git/moto.kittisak.com.git"
BRANCH="master"
TEMP_DIR="/tmp/moto_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="moto-backend"
PM2_NAME_WEBSITE="moto-website"
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.moto.kittisak.com/api"
export NEXT_PUBLIC_API_URL="https://api.moto.kittisak.com/api"
# Customer-specific values. Fill these in on the server if enabled.
export VITE_LIFF_ID="${VITE_LIFF_ID:-}"
export VITE_OMISE_PUBLIC_KEY="${VITE_OMISE_PUBLIC_KEY:-}"
# Service ports. Nginx proxies to these ports.
BACKEND_PORT=3058
SSR_PORT=3009
# ------------------------------------------------------------------------------
# START DEPLOYMENT
# ------------------------------------------------------------------------------
set -e
echo "------- Starting Full Deployment: moto 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
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
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/
sed -i 's/homaroma/moto/g' $TARGET_BACKEND/ecosystem.config.js
sed -i 's/PORT: 3002/PORT: 3009/g' $TARGET_BACKEND/ecosystem.config.js
cd $TARGET_BACKEND
echo "Installing backend dependencies..."
$BUN install
mkdir -p $TARGET_BACKEND/apps/backend/public
cd $TARGET_BACKEND/apps/backend
echo ">>> Generating Prisma Client..."
$BUN x prisma generate
if [ ! -f "$TARGET_BACKEND/.env" ]; then
echo "Error: .env file is missing at $TARGET_BACKEND/.env. Deployment aborted."
exit 1
fi
cp "$TARGET_BACKEND/.env" "$TARGET_BACKEND/apps/backend/.env"
echo ">>> Running Prisma Migrate Deploy..."
$BUN x prisma migrate deploy
# E. PM2 Management - BACKEND
echo ">>> Managing PM2 Process: $PM2_NAME_BACKEND..."
$PM2 startOrReload $TARGET_BACKEND/ecosystem.config.js --only $PM2_NAME_BACKEND --env production --update-env
echo "PM2 process '$PM2_NAME_BACKEND' is running. Waiting 10s for it to fully start..."
sleep 10
# F. Build & Deploy WEBSITE (Next.js SSR)
echo ">>> Building Next.js SSR App inside monorepo temp dir..."
cd $TEMP_DIR/apps/website
$BUN run build
# G. 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/
cp $TEMP_DIR/ecosystem.config.js $TARGET_WEBSITE/
sed -i 's/homaroma/moto/g' $TARGET_WEBSITE/ecosystem.config.js
sed -i 's/PORT: 3002/PORT: 3009/g' $TARGET_WEBSITE/ecosystem.config.js
# H. Fix Permissions
echo ">>> Fixing Permissions..."
chown -R ti:ti $TARGET_BACKEND $TARGET_WEBSITE
# I. PM2 Management - SSR Next.js
cd $TARGET_WEBSITE
echo ">>> Creating symlink for .next..."
ln -sf apps/website/.next .next
echo ">>> Managing PM2 Process: $PM2_NAME_WEBSITE..."
$PM2 startOrReload $TARGET_WEBSITE/ecosystem.config.js --only $PM2_NAME_WEBSITE --env production --update-env
echo "PM2 process '$PM2_NAME_WEBSITE' is running."
# J. Cleanup
echo "Cleaning up build artifacts..."
rm -rf $TEMP_DIR
echo "------- ALL DEPLOYMENTS COMPLETED SUCCESSFULLY -------"
echo ""
echo "Service Summary:"
echo " Website (SSR) -> https://moto.kittisak.com (PM2: $PM2_NAME_WEBSITE, Port: $SSR_PORT)"
echo " SPA -> https://spa.moto.kittisak.com"
echo " Admin Panel -> https://admin.moto.kittisak.com"
echo " API Backend -> https://api.kittisak.com (PM2: $PM2_NAME_BACKEND, Port: $BACKEND_PORT)"