Files
vyndr/scripts/docker-entrypoint.sh
T

35 lines
1.3 KiB
Bash
Executable File

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