Session 7b: Fix pipeline - body parser, Redis queueing, poller visibility, auto-start

This commit is contained in:
Kev
2026-06-10 01:22:55 -04:00
parent b0890dadae
commit 5c44922937
11 changed files with 322 additions and 27 deletions
+34
View File
@@ -0,0 +1,34 @@
#!/bin/sh
#
# VYNDR API container entrypoint.
#
# Boots the PM2-managed pollers in daemon mode, then execs the Express
# server in the foreground so it runs as PID 1 (which Docker's signal
# forwarding + healthcheck expect). PM2 daemonizes its supervisor inside
# the container; the pollers keep running while Express handles requests.
#
# On container restart (Coolify redeploy) PM2's state is gone — that's
# fine, this script reseeds it. Pollers are idempotent: status keys live
# in Redis with TTLs, so a restart at most re-processes one game.
#
# Why a separate file from scripts/start.sh: that one is the local-dev
# launcher (boots the Python NBA service + Node API in the host shell).
# This one is the production container entrypoint.
set -e
# PM2 needs a writable HOME for its run-dir. The vyndr non-root user
# can't write to /root, so park PM2's metadata in /app/.pm2.
export PM2_HOME="${PM2_HOME:-/app/.pm2}"
mkdir -p "$PM2_HOME"
echo "[docker-entrypoint] PM2_HOME=$PM2_HOME"
echo "[docker-entrypoint] booting pollers via PM2"
cd /app/poller
pm2 start ecosystem.config.js || \
echo "[docker-entrypoint] PM2 start failed — continuing without pollers so the API still serves"
pm2 list || true
cd /app
echo "[docker-entrypoint] starting Express server (PID 1)"
exec node src/server.js
+1 -1
View File
@@ -3,7 +3,7 @@ const { createClient } = require('@supabase/supabase-js');
const supabase = createClient(
process.env.SUPABASE_URL,
process.env.SUPABASE_SERVICE_KEY
process.env.SUPABASE_SERVICE_ROLE_KEY || process.env.SUPABASE_SERVICE_KEY
);
const EXPECTED_TABLES = ['users', 'picks', 'scan_sessions', 'bets', 'outcomes', 'performance'];