89 lines
3.2 KiB
Bash
89 lines
3.2 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
echo "[start-web] Starting web service..."
|
|
echo "[start-web] Bun: $(bun --version || true)"
|
|
|
|
cd /app
|
|
|
|
export BUN_INSTALL_CACHE_DIR="${BUN_INSTALL_CACHE_DIR:-/tmp/bun-cache}"
|
|
mkdir -p "$BUN_INSTALL_CACHE_DIR"
|
|
|
|
echo "[start-web] Using bun cache dir: $BUN_INSTALL_CACHE_DIR"
|
|
|
|
echo "[start-web] Using APP_DIR=$(pwd)"
|
|
echo "[start-web] NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL:-}"
|
|
echo "[start-web] NEXT_PUBLIC_CONVEX_URL=${NEXT_PUBLIC_CONVEX_URL:-}"
|
|
|
|
# Ensure system deps for native modules (best-effort, idempotent)
|
|
if command -v apt-get >/dev/null 2>&1; then
|
|
# Ensure curl/gnupg for NodeSource setup
|
|
if ! command -v curl >/dev/null 2>&1; then
|
|
apt-get update -y || true
|
|
apt-get install -y --no-install-recommends curl ca-certificates gnupg || true
|
|
fi
|
|
|
|
install_node() {
|
|
local current_node_major=""
|
|
if command -v node >/dev/null 2>&1; then
|
|
current_node_major=$(node -v | sed -E 's/^v([0-9]+).*/\1/')
|
|
if [ -n "$current_node_major" ] && [ "$current_node_major" -ge 20 ]; then
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
echo "[start-web] installing Node.js 22.x via NodeSource"
|
|
curl -fsSL https://deb.nodesource.com/setup_22.x | bash - || true
|
|
apt-get update -y || true
|
|
apt-get install -y --no-install-recommends nodejs || true
|
|
}
|
|
|
|
# Base toolchain for native modules
|
|
apt-get update -y || true
|
|
apt-get install -y --no-install-recommends build-essential python3 make pkg-config || true
|
|
|
|
if ! command -v openssl >/dev/null 2>&1; then
|
|
echo "[start-web] openssl not found; installing via apt-get (requires root)"
|
|
apt-get update -y || true
|
|
apt-get install -y --no-install-recommends openssl ca-certificates || true
|
|
fi
|
|
if ! command -v node >/dev/null 2>&1 && [ -x /usr/bin/nodejs ]; then
|
|
ln -sf /usr/bin/nodejs /usr/bin/node || true
|
|
fi
|
|
install_node
|
|
else
|
|
echo "[start-web] apt-get unavailable; skipping system deps install" >&2
|
|
fi
|
|
|
|
# Rebuild native better-sqlite3 bindings for the current Node version
|
|
if command -v npm >/dev/null 2>&1; then
|
|
echo "[start-web] rebuilding better-sqlite3 for current Node runtime"
|
|
(npm rebuild better-sqlite3 >/dev/null 2>&1 && echo "[start-web] better-sqlite3 rebuilt") || echo "[start-web] rebuild skipped (using existing bindings)"
|
|
fi
|
|
|
|
# Bun keeps its store in node_modules/.bun by default; ensure it exists and is writable
|
|
mkdir -p node_modules/.bun >/dev/null 2>&1 || true
|
|
|
|
# Prisma generate (idempotent) and apply DB migrations
|
|
echo "[start-web] prisma generate (bun runtime)"
|
|
bunx --bun prisma generate
|
|
|
|
echo "[start-web] prisma migrate deploy (bun runtime)"
|
|
bunx --bun prisma migrate deploy
|
|
|
|
# Seed Better Auth users safely (ensure-only by default)
|
|
if [ "${SKIP_AUTH_SEED:-false}" != "true" ]; then
|
|
echo "[start-web] seeding Better Auth users (ensure-only)"
|
|
bun run auth:seed || true
|
|
else
|
|
echo "[start-web] skipping auth seed (SKIP_AUTH_SEED=true)"
|
|
fi
|
|
|
|
echo "[start-web] launching Next.js"
|
|
PORT=${PORT:-3000}
|
|
NODE_MAJOR=$(command -v node >/dev/null 2>&1 && node -v | sed -E 's/^v([0-9]+).*/\1/' || echo "")
|
|
if [ -z "$NODE_MAJOR" ] || [ "$NODE_MAJOR" -lt 20 ]; then
|
|
echo "[start-web] Node.js 20+ not available; aborting"
|
|
exit 1
|
|
fi
|
|
exec node node_modules/next/dist/bin/next start --port "$PORT"
|