diff --git a/ecosystem.config.js b/ecosystem.config.js new file mode 100644 index 0000000..9e2aa48 --- /dev/null +++ b/ecosystem.config.js @@ -0,0 +1,27 @@ +module.exports = { + apps: [ + { + name: 'homaroma-backend', + script: './src/index.ts', + cwd: '/home/ti/projects/homaroma-api/apps/backend', + interpreter: '/home/ti/.bun/bin/bun', + watch: false, + max_memory_restart: '1G', + env_production: { + NODE_ENV: 'production' + } + }, + { + name: 'homaroma-website', + script: 'server.js', + cwd: '/home/ti/projects/homaroma-website/apps/website', + interpreter: '/home/ti/.bun/bin/bun', + watch: false, + max_memory_restart: '1G', + env_production: { + NODE_ENV: 'production', + PORT: 3002 + } + } + ] +}; diff --git a/post-receive-local b/post-receive-local index e2ecf9b..236e854 100644 --- a/post-receive-local +++ b/post-receive-local @@ -82,7 +82,7 @@ rsync -av --delete \ # Sync Shared Packages rsync -av packages/ $TARGET_BACKEND/packages/ -cp package.json bun.lock $TARGET_BACKEND/ +cp package.json bun.lock ecosystem.config.js $TARGET_BACKEND/ cd $TARGET_BACKEND echo "Installing backend dependencies..." @@ -98,21 +98,19 @@ 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." +if [ ! -f "$TARGET_BACKEND/.env" ]; then + echo "❌ Error: .env file is missing at $TARGET_BACKEND/.env. Deployment aborted." + exit 1 fi +# 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 + # 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 +$PM2 startOrReload $TARGET_BACKEND/ecosystem.config.js --only $PM2_NAME_BACKEND --env production echo "✅ PM2 process '$PM2_NAME_BACKEND' is running." # G. Build & Deploy WEBSITE (Next.js SSR) @@ -129,6 +127,8 @@ rsync -av \ rsync -av \ $TEMP_DIR/apps/website/.next/static/ $TARGET_WEBSITE/apps/website/.next/static/ +cp ecosystem.config.js $TARGET_WEBSITE/ + # F. Fix Permissions echo ">>> Fixing Permissions..." chown -R ti:ti $TARGET_BACKEND $TARGET_WEBSITE @@ -137,12 +137,9 @@ chown -R ti:ti $TARGET_BACKEND $TARGET_WEBSITE 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." +$PM2 startOrReload $TARGET_WEBSITE/ecosystem.config.js --only $PM2_NAME_WEBSITE --env production +echo "✅ PM2 process '$PM2_NAME_WEBSITE' is running." # I. Cleanup echo "Cleaning up build artifacts..." diff --git a/serverinfo/post-receive b/serverinfo/post-receive index 8ea866e..236e854 100644 --- a/serverinfo/post-receive +++ b/serverinfo/post-receive @@ -82,7 +82,7 @@ rsync -av --delete \ # Sync Shared Packages rsync -av packages/ $TARGET_BACKEND/packages/ -cp package.json bun.lock $TARGET_BACKEND/ +cp package.json bun.lock ecosystem.config.js $TARGET_BACKEND/ cd $TARGET_BACKEND echo "Installing backend dependencies..." @@ -98,19 +98,19 @@ echo ">>> Generating Prisma Client..." $BUN x prisma generate # E. Database Migration (Safe Method) -if [ -f "$TARGET_BACKEND/.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." +if [ ! -f "$TARGET_BACKEND/.env" ]; then + echo "❌ Error: .env file is missing at $TARGET_BACKEND/.env. Deployment aborted." + exit 1 fi +# 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 + # 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 +$PM2 startOrReload $TARGET_BACKEND/ecosystem.config.js --only $PM2_NAME_BACKEND --env production echo "✅ PM2 process '$PM2_NAME_BACKEND' is running." # G. Build & Deploy WEBSITE (Next.js SSR) @@ -127,6 +127,8 @@ rsync -av \ rsync -av \ $TEMP_DIR/apps/website/.next/static/ $TARGET_WEBSITE/apps/website/.next/static/ +cp ecosystem.config.js $TARGET_WEBSITE/ + # F. Fix Permissions echo ">>> Fixing Permissions..." chown -R ti:ti $TARGET_BACKEND $TARGET_WEBSITE @@ -135,12 +137,9 @@ chown -R ti:ti $TARGET_BACKEND $TARGET_WEBSITE 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." +$PM2 startOrReload $TARGET_WEBSITE/ecosystem.config.js --only $PM2_NAME_WEBSITE --env production +echo "✅ PM2 process '$PM2_NAME_WEBSITE' is running." # I. Cleanup echo "Cleaning up build artifacts..."