#!/bin/bash APP=/home/erpsolution26/public_html/spincraft.erpsolution26.com # ---- phase 1: detach from cron so we survive its process-group teardown ---- if [ "$1" != "child" ]; then mkdir "$APP/.deploy2.lock" 2>/dev/null || exit 0 setsid nohup /bin/bash "$0" child /dev/null 2>&1 & exit 0 fi # ---- phase 2: the real work, fully detached ---- exec >>$APP/deploy2.log 2>&1 echo "================ PHASE2 START $(date) ================" cd $APP || exit 1 NODEBIN="" for v in 22 20 24 18; do if [ -x /opt/alt/alt-nodejs$v/root/usr/bin/node ]; then NODEBIN=/opt/alt/alt-nodejs$v/root/usr/bin break fi done export PATH=$NODEBIN:$PATH export HOME=/home/erpsolution26 export NODE_ENV=production echo "node: $(node -v) bin: $NODEBIN" # ---- make sure dependencies are actually complete ---- echo "-- npm install (resume/verify) --" npm install --no-audit --no-fund --loglevel=error >> npm.log 2>&1 echo " npm exit=$? top-level=$(ls -A node_modules | wc -l)" # ---- prisma client + native engine ---- echo "-- prisma generate --" ./node_modules/.bin/prisma generate >> prisma.log 2>&1 echo " prisma exit=$?" echo " engines in .prisma/client:" ls -la node_modules/.prisma/client/ 2>/dev/null | grep -iE 'engine|\.node' | sed 's/^/ /' echo " engines in @prisma/engines:" ls -la node_modules/@prisma/engines/ 2>/dev/null | grep -iE 'engine|\.node' | sed 's/^/ /' tail -5 prisma.log | sed 's/^/ /' # ---- apache reverse proxy ---- cat > .htaccess <<'HTEOF' RewriteEngine On DirectoryIndex disabled RewriteRule ^/?$ http://127.0.0.1:3100/ [P,L,QSA] RewriteRule ^(.+)$ http://127.0.0.1:3100/$1 [P,L,QSA] PassengerEnabled off HTEOF echo "OK .htaccess written" # ---- keepalive ---- cat > keepalive.sh </dev/null; then exit 0; fi export PATH=$NODEBIN:\$PATH export HOME=/home/erpsolution26 export NODE_ENV=production setsid nohup ./node_modules/.bin/next start -p 3100 >> node.log 2>&1 & echo \$! > node.pid KAEOF chmod +x keepalive.sh echo "OK keepalive.sh written" # ---- (re)start the app, detached ---- if [ -f node.pid ]; then kill -9 "$(cat node.pid)" 2>/dev/null; fi pkill -9 -u erpsolution26 -f "next start -p 3100" 2>/dev/null sleep 2 setsid nohup ./node_modules/.bin/next start -p 3100 >> node.log 2>&1 & echo $! > node.pid echo "OK node started pid=$(cat node.pid)" # ---- wait for it to answer locally ---- CODE=000 for i in $(seq 1 40); do sleep 3 CODE=$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:3100/login 2>/dev/null) [ "$CODE" = "200" ] && break done echo "local /login -> $CODE (after $((i*3))s)" echo "public /login -> $(curl -sk -o /dev/null -w '%{http_code}' https://spincraft.erpsolution26.com/login)" echo "--- node.log tail ---" tail -25 node.log echo "=== DONE ==="