diff --git a/scratch/hooks/beauty-post-receive b/scratch/hooks/beauty-post-receive new file mode 100644 index 0000000..e3dbea4 --- /dev/null +++ b/scratch/hooks/beauty-post-receive @@ -0,0 +1,156 @@ +#!/bin/bash + +# ============================================================================== +# Kittisak Project - Integrated Deployment Script (post-receive hook) +# ============================================================================== + +# 1. TARGET PATHS (Nginx & PM2) +TARGET_SPA="/home/ti/projects/MyNginxMain/nginx/html/beauty/spa" +TARGET_ADMIN="/home/ti/projects/MyNginxMain/nginx/html/beauty/admin" +TARGET_BACKEND="/home/ti/projects/beauty-api" +TARGET_WEBSITE="/home/ti/projects/beauty-website" + +# 2. REPOSITORY CONFIG +REPO="/home/ti/git/beauty.kittisak.com.git" +BRANCH="master" +TEMP_DIR="/tmp/beauty_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="beauty-backend" +PM2_NAME_WEBSITE="beauty-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.beauty.kittisak.com/api" +export NEXT_PUBLIC_API_URL="https://api.beauty.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=3057 +SSR_PORT=3008 + +# ------------------------------------------------------------------------------ +# START DEPLOYMENT +# ------------------------------------------------------------------------------ +set -e +echo "------- Starting Full Deployment: beauty 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/beauty/g' $TARGET_BACKEND/ecosystem.config.js +sed -i 's/PORT: 3002/PORT: 3008/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/beauty/g' $TARGET_WEBSITE/ecosystem.config.js +sed -i 's/PORT: 3002/PORT: 3008/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://beauty.kittisak.com (PM2: $PM2_NAME_WEBSITE, Port: $SSR_PORT)" +echo " SPA -> https://spa.beauty.kittisak.com" +echo " Admin Panel -> https://admin.beauty.kittisak.com" +echo " API Backend -> https://api.kittisak.com (PM2: $PM2_NAME_BACKEND, Port: $BACKEND_PORT)" diff --git a/scratch/hooks/fashion-post-receive b/scratch/hooks/fashion-post-receive new file mode 100644 index 0000000..a83eeba --- /dev/null +++ b/scratch/hooks/fashion-post-receive @@ -0,0 +1,156 @@ +#!/bin/bash + +# ============================================================================== +# Kittisak Project - Integrated Deployment Script (post-receive hook) +# ============================================================================== + +# 1. TARGET PATHS (Nginx & PM2) +TARGET_SPA="/home/ti/projects/MyNginxMain/nginx/html/fashion/spa" +TARGET_ADMIN="/home/ti/projects/MyNginxMain/nginx/html/fashion/admin" +TARGET_BACKEND="/home/ti/projects/fashion-api" +TARGET_WEBSITE="/home/ti/projects/fashion-website" + +# 2. REPOSITORY CONFIG +REPO="/home/ti/git/fashion.kittisak.com.git" +BRANCH="master" +TEMP_DIR="/tmp/fashion_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="fashion-backend" +PM2_NAME_WEBSITE="fashion-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.fashion.kittisak.com/api" +export NEXT_PUBLIC_API_URL="https://api.fashion.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=3056 +SSR_PORT=3007 + +# ------------------------------------------------------------------------------ +# START DEPLOYMENT +# ------------------------------------------------------------------------------ +set -e +echo "------- Starting Full Deployment: fashion 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/fashion/g' $TARGET_BACKEND/ecosystem.config.js +sed -i 's/PORT: 3002/PORT: 3007/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/fashion/g' $TARGET_WEBSITE/ecosystem.config.js +sed -i 's/PORT: 3002/PORT: 3007/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://fashion.kittisak.com (PM2: $PM2_NAME_WEBSITE, Port: $SSR_PORT)" +echo " SPA -> https://spa.fashion.kittisak.com" +echo " Admin Panel -> https://admin.fashion.kittisak.com" +echo " API Backend -> https://api.kittisak.com (PM2: $PM2_NAME_BACKEND, Port: $BACKEND_PORT)" diff --git a/scratch/hooks/moto-post-receive b/scratch/hooks/moto-post-receive new file mode 100644 index 0000000..6a0671b --- /dev/null +++ b/scratch/hooks/moto-post-receive @@ -0,0 +1,156 @@ +#!/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)" diff --git a/scratch/hooks/wellness-post-receive b/scratch/hooks/wellness-post-receive new file mode 100644 index 0000000..22ed85c --- /dev/null +++ b/scratch/hooks/wellness-post-receive @@ -0,0 +1,156 @@ +#!/bin/bash + +# ============================================================================== +# Kittisak Project - Integrated Deployment Script (post-receive hook) +# ============================================================================== + +# 1. TARGET PATHS (Nginx & PM2) +TARGET_SPA="/home/ti/projects/MyNginxMain/nginx/html/wellness/spa" +TARGET_ADMIN="/home/ti/projects/MyNginxMain/nginx/html/wellness/admin" +TARGET_BACKEND="/home/ti/projects/wellness-api" +TARGET_WEBSITE="/home/ti/projects/wellness-website" + +# 2. REPOSITORY CONFIG +REPO="/home/ti/git/wellness.kittisak.com.git" +BRANCH="master" +TEMP_DIR="/tmp/wellness_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="wellness-backend" +PM2_NAME_WEBSITE="wellness-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.wellness.kittisak.com/api" +export NEXT_PUBLIC_API_URL="https://api.wellness.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=3055 +SSR_PORT=3006 + +# ------------------------------------------------------------------------------ +# START DEPLOYMENT +# ------------------------------------------------------------------------------ +set -e +echo "------- Starting Full Deployment: wellness 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/wellness/g' $TARGET_BACKEND/ecosystem.config.js +sed -i 's/PORT: 3002/PORT: 3006/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/wellness/g' $TARGET_WEBSITE/ecosystem.config.js +sed -i 's/PORT: 3002/PORT: 3006/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://wellness.kittisak.com (PM2: $PM2_NAME_WEBSITE, Port: $SSR_PORT)" +echo " SPA -> https://spa.wellness.kittisak.com" +echo " Admin Panel -> https://admin.wellness.kittisak.com" +echo " API Backend -> https://api.kittisak.com (PM2: $PM2_NAME_BACKEND, Port: $BACKEND_PORT)" diff --git a/serverinfo/beauty-post-receive b/serverinfo/beauty-post-receive new file mode 100644 index 0000000..e3dbea4 --- /dev/null +++ b/serverinfo/beauty-post-receive @@ -0,0 +1,156 @@ +#!/bin/bash + +# ============================================================================== +# Kittisak Project - Integrated Deployment Script (post-receive hook) +# ============================================================================== + +# 1. TARGET PATHS (Nginx & PM2) +TARGET_SPA="/home/ti/projects/MyNginxMain/nginx/html/beauty/spa" +TARGET_ADMIN="/home/ti/projects/MyNginxMain/nginx/html/beauty/admin" +TARGET_BACKEND="/home/ti/projects/beauty-api" +TARGET_WEBSITE="/home/ti/projects/beauty-website" + +# 2. REPOSITORY CONFIG +REPO="/home/ti/git/beauty.kittisak.com.git" +BRANCH="master" +TEMP_DIR="/tmp/beauty_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="beauty-backend" +PM2_NAME_WEBSITE="beauty-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.beauty.kittisak.com/api" +export NEXT_PUBLIC_API_URL="https://api.beauty.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=3057 +SSR_PORT=3008 + +# ------------------------------------------------------------------------------ +# START DEPLOYMENT +# ------------------------------------------------------------------------------ +set -e +echo "------- Starting Full Deployment: beauty 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/beauty/g' $TARGET_BACKEND/ecosystem.config.js +sed -i 's/PORT: 3002/PORT: 3008/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/beauty/g' $TARGET_WEBSITE/ecosystem.config.js +sed -i 's/PORT: 3002/PORT: 3008/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://beauty.kittisak.com (PM2: $PM2_NAME_WEBSITE, Port: $SSR_PORT)" +echo " SPA -> https://spa.beauty.kittisak.com" +echo " Admin Panel -> https://admin.beauty.kittisak.com" +echo " API Backend -> https://api.kittisak.com (PM2: $PM2_NAME_BACKEND, Port: $BACKEND_PORT)" diff --git a/serverinfo/fashion-post-receive b/serverinfo/fashion-post-receive new file mode 100644 index 0000000..a83eeba --- /dev/null +++ b/serverinfo/fashion-post-receive @@ -0,0 +1,156 @@ +#!/bin/bash + +# ============================================================================== +# Kittisak Project - Integrated Deployment Script (post-receive hook) +# ============================================================================== + +# 1. TARGET PATHS (Nginx & PM2) +TARGET_SPA="/home/ti/projects/MyNginxMain/nginx/html/fashion/spa" +TARGET_ADMIN="/home/ti/projects/MyNginxMain/nginx/html/fashion/admin" +TARGET_BACKEND="/home/ti/projects/fashion-api" +TARGET_WEBSITE="/home/ti/projects/fashion-website" + +# 2. REPOSITORY CONFIG +REPO="/home/ti/git/fashion.kittisak.com.git" +BRANCH="master" +TEMP_DIR="/tmp/fashion_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="fashion-backend" +PM2_NAME_WEBSITE="fashion-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.fashion.kittisak.com/api" +export NEXT_PUBLIC_API_URL="https://api.fashion.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=3056 +SSR_PORT=3007 + +# ------------------------------------------------------------------------------ +# START DEPLOYMENT +# ------------------------------------------------------------------------------ +set -e +echo "------- Starting Full Deployment: fashion 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/fashion/g' $TARGET_BACKEND/ecosystem.config.js +sed -i 's/PORT: 3002/PORT: 3007/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/fashion/g' $TARGET_WEBSITE/ecosystem.config.js +sed -i 's/PORT: 3002/PORT: 3007/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://fashion.kittisak.com (PM2: $PM2_NAME_WEBSITE, Port: $SSR_PORT)" +echo " SPA -> https://spa.fashion.kittisak.com" +echo " Admin Panel -> https://admin.fashion.kittisak.com" +echo " API Backend -> https://api.kittisak.com (PM2: $PM2_NAME_BACKEND, Port: $BACKEND_PORT)" diff --git a/serverinfo/moto-post-receive b/serverinfo/moto-post-receive new file mode 100644 index 0000000..6a0671b --- /dev/null +++ b/serverinfo/moto-post-receive @@ -0,0 +1,156 @@ +#!/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)" diff --git a/serverinfo/wellness-post-receive b/serverinfo/wellness-post-receive new file mode 100644 index 0000000..22ed85c --- /dev/null +++ b/serverinfo/wellness-post-receive @@ -0,0 +1,156 @@ +#!/bin/bash + +# ============================================================================== +# Kittisak Project - Integrated Deployment Script (post-receive hook) +# ============================================================================== + +# 1. TARGET PATHS (Nginx & PM2) +TARGET_SPA="/home/ti/projects/MyNginxMain/nginx/html/wellness/spa" +TARGET_ADMIN="/home/ti/projects/MyNginxMain/nginx/html/wellness/admin" +TARGET_BACKEND="/home/ti/projects/wellness-api" +TARGET_WEBSITE="/home/ti/projects/wellness-website" + +# 2. REPOSITORY CONFIG +REPO="/home/ti/git/wellness.kittisak.com.git" +BRANCH="master" +TEMP_DIR="/tmp/wellness_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="wellness-backend" +PM2_NAME_WEBSITE="wellness-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.wellness.kittisak.com/api" +export NEXT_PUBLIC_API_URL="https://api.wellness.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=3055 +SSR_PORT=3006 + +# ------------------------------------------------------------------------------ +# START DEPLOYMENT +# ------------------------------------------------------------------------------ +set -e +echo "------- Starting Full Deployment: wellness 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/wellness/g' $TARGET_BACKEND/ecosystem.config.js +sed -i 's/PORT: 3002/PORT: 3006/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/wellness/g' $TARGET_WEBSITE/ecosystem.config.js +sed -i 's/PORT: 3002/PORT: 3006/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://wellness.kittisak.com (PM2: $PM2_NAME_WEBSITE, Port: $SSR_PORT)" +echo " SPA -> https://spa.wellness.kittisak.com" +echo " Admin Panel -> https://admin.wellness.kittisak.com" +echo " API Backend -> https://api.kittisak.com (PM2: $PM2_NAME_BACKEND, Port: $BACKEND_PORT)"