106 lines
2.9 KiB
Bash
106 lines
2.9 KiB
Bash
#!/usr/bin/env bash
|
|
# Run on server as root:
|
|
# cd /root/modstagram-next && bash scripts/server-fix-502.sh
|
|
set -euo pipefail
|
|
|
|
APP_DIR="${APP_DIR:-/root/modstagram-next}"
|
|
cd "$APP_DIR"
|
|
echo ">>> modstagram-next deploy | $APP_DIR"
|
|
|
|
# Stop anything blocking ports
|
|
pm2 delete modstagram-next 2>/dev/null || true
|
|
fuser -k 3004/tcp 2>/dev/null || true
|
|
fuser -k 3001/tcp 2>/dev/null || true
|
|
|
|
# PM2 config — port 3004 (nginx upstream on this server)
|
|
cat > "$APP_DIR/ecosystem.config.cjs" << EOF
|
|
module.exports = {
|
|
apps: [{
|
|
name: "modstagram-next",
|
|
cwd: "$APP_DIR",
|
|
script: "$APP_DIR/node_modules/next/dist/bin/next",
|
|
args: "start --port 3004 --hostname 0.0.0.0",
|
|
instances: 1,
|
|
exec_mode: "fork",
|
|
autorestart: true,
|
|
max_restarts: 20,
|
|
min_uptime: 5000,
|
|
max_memory_restart: "900M",
|
|
env: {
|
|
NODE_ENV: "production",
|
|
PORT: "3004",
|
|
HOSTNAME: "0.0.0.0",
|
|
UPSTREAM_API_URL: "https://api.modstagram.com",
|
|
NEXT_PUBLIC_SOCKET_URL: "https://api.modstagram.com",
|
|
NEXT_PUBLIC_IMAGE_BASE_URL: "https://api.modstagram.com/storage",
|
|
NEXT_PUBLIC_BASE_URL: "/api/v1",
|
|
NEXT_PUBLIC_SITE_URL: "https://modstagram.com",
|
|
},
|
|
}],
|
|
};
|
|
EOF
|
|
|
|
# Production env
|
|
if [ ! -f .env.production ]; then
|
|
cat > .env.production << 'ENVEOF'
|
|
PORT=3004
|
|
HOSTNAME=0.0.0.0
|
|
UPSTREAM_API_URL=https://api.modstagram.com
|
|
NEXT_PUBLIC_SOCKET_URL=https://api.modstagram.com
|
|
NEXT_PUBLIC_IMAGE_BASE_URL=https://api.modstagram.com/storage
|
|
NEXT_PUBLIC_BASE_URL=/api/v1
|
|
NEXT_PUBLIC_SITE_URL=https://modstagram.com
|
|
ENVEOF
|
|
fi
|
|
|
|
# Copy Google Client ID from .env.local if present
|
|
if [ -f .env.local ] && grep -q GOOGLE .env.local 2>/dev/null; then
|
|
grep GOOGLE .env.local >> .env.production 2>/dev/null || true
|
|
fi
|
|
|
|
npm pkg set scripts.start="next start --port 3004 --hostname 0.0.0.0"
|
|
|
|
echo ">>> npm install (do NOT run npm ci — lock file on server may be old) ..."
|
|
npm install @react-oauth/google@^0.13.5 --save
|
|
npm install
|
|
|
|
echo ">>> npm run build ..."
|
|
if ! npm run build; then
|
|
echo ""
|
|
echo "!!! BUILD FAILED — site stays 502 until build succeeds."
|
|
echo " Send the error lines above to fix the code/deps."
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f .next/BUILD_ID ]; then
|
|
echo "ERROR: .next/BUILD_ID missing after build"
|
|
exit 1
|
|
fi
|
|
|
|
echo ">>> PM2 start ..."
|
|
pm2 start "$APP_DIR/ecosystem.config.cjs" --update-env
|
|
pm2 save
|
|
|
|
sleep 3
|
|
echo ""
|
|
echo ">>> PM2 status:"
|
|
pm2 list | grep -E "modstagram|name" || pm2 list
|
|
|
|
echo ""
|
|
echo ">>> Ports:"
|
|
ss -tlnp | grep -E '3001|3004' || echo "(nothing on 3001/3004)"
|
|
|
|
echo ""
|
|
HTTP=$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:3004/ || echo "000")
|
|
echo ">>> curl 127.0.0.1:3004 → HTTP $HTTP"
|
|
|
|
if [ "$HTTP" != "200" ] && [ "$HTTP" != "304" ] && [ "$HTTP" != "307" ]; then
|
|
echo ""
|
|
echo "!!! Next.js not healthy. Last logs:"
|
|
pm2 logs modstagram-next --lines 40 --nostream
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo ">>> OK — modstagram.com should work (nginx → 3004)."
|