initial: NAS agent runner setup
This commit is contained in:
commit
9d8a7fe237
16 changed files with 1121 additions and 0 deletions
66
entrypoint.sh
Normal file
66
entrypoint.sh
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
#!/usr/bin/env bash
|
||||
# entrypoint.sh — container-startup
|
||||
#
|
||||
# Verantwoordelijkheden:
|
||||
# 1. Schrijfbare dirs op de bind-mounts garanderen (UID/GID matching)
|
||||
# 2. Health-server starten als achtergrondproces
|
||||
# 3. gosu naar de agent-user en daemon-loop starten
|
||||
#
|
||||
# Loopt als root tot stap 3 — daarvoor hebben we root nodig om
|
||||
# bind-mounts goed te zetten als de share met andere ownership is
|
||||
# aangemaakt.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
log() { printf '[entrypoint] %s\n' "$*" >&2; }
|
||||
|
||||
: "${AGENT_UID:=1000}"
|
||||
: "${AGENT_GID:=1000}"
|
||||
: "${AGENT_STATE_DIR:=/var/run/agent}"
|
||||
: "${AGENT_LOG_DIR:=/var/log/agent}"
|
||||
: "${AGENT_REPO_CACHE:=/var/cache/repos}"
|
||||
: "${AGENT_HEALTH_PORT:=8080}"
|
||||
|
||||
# ----- 1. dirs op bind-mounts -------------------------------------------
|
||||
log "ensuring directories on bind-mounts"
|
||||
mkdir -p \
|
||||
"${AGENT_STATE_DIR}" \
|
||||
"${AGENT_LOG_DIR}/runs" \
|
||||
"${AGENT_LOG_DIR}/jobs" \
|
||||
"${AGENT_REPO_CACHE}" \
|
||||
/var/cache/npm \
|
||||
/var/cache/pnpm
|
||||
|
||||
# Alleen ownership corrigeren als de share als andere user is aangemaakt
|
||||
# — niet recursief op /var/cache/repos want dat kan groot zijn en de
|
||||
# eerste boot vertragen.
|
||||
chown "${AGENT_UID}:${AGENT_GID}" \
|
||||
"${AGENT_STATE_DIR}" \
|
||||
"${AGENT_LOG_DIR}" \
|
||||
"${AGENT_LOG_DIR}/runs" \
|
||||
"${AGENT_LOG_DIR}/jobs" \
|
||||
"${AGENT_REPO_CACHE}" \
|
||||
/var/cache/npm \
|
||||
/var/cache/pnpm 2>/dev/null || true
|
||||
|
||||
# ----- 2. health-server in de achtergrond -------------------------------
|
||||
log "starting health-server on :${AGENT_HEALTH_PORT}"
|
||||
gosu agent node /opt/agent/bin/health-server.js \
|
||||
> "${AGENT_LOG_DIR}/health-server.log" 2>&1 &
|
||||
HEALTH_PID=$!
|
||||
log "health-server pid=${HEALTH_PID}"
|
||||
|
||||
# Initial state: starting
|
||||
gosu agent /bin/bash -c 'cat > "${AGENT_STATE_DIR}/state.json"' <<EOF
|
||||
{
|
||||
"status": "starting",
|
||||
"startedAt": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
|
||||
"lastBatchAt": null,
|
||||
"lastBatchExit": null,
|
||||
"consecutiveFailures": 0
|
||||
}
|
||||
EOF
|
||||
|
||||
# ----- 3. drop privileges en start daemon-loop --------------------------
|
||||
log "dropping to agent user and starting run-agent.sh"
|
||||
exec gosu agent /opt/agent/bin/run-agent.sh
|
||||
Loading…
Add table
Add a link
Reference in a new issue