#!/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 ==="