Files
ToolCTRL-website/entrypoint.sh
T
ToolCTRLandClaude Opus 4.7 bec5dc7363
Deploy / build-and-deploy (push) Successful in 33s
Produktion: ClamAV in den App-Container integriert
Dockerfile installiert clamav-daemon + clamav-freshclam und konfiguriert
clamd auf TCP 127.0.0.1:3310 mit DB-Verzeichnis auf der persistenten
Coolify-Volume (/app/data/clamav-db).

entrypoint.sh startet clamd und freshclam vor dem Node-Server, wartet
auf clamd-PING und exec't dann node als unprivilegierter Nutzer. tini
übernimmt PID 1 für Signal-Forwarding.

Folge: GameJam-Uploads werden in Produktion automatisch per ClamAV
geprüft, ohne dass Coolify manuell angepasst werden muss. Erster
Deploy lädt einmalig ~300 MB Virendefinitionen auf die Volume,
Folge-Starts in ~30 s. RAM-Bedarf des Containers ~1.5 GB.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 13:40:19 +02:00

50 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
#
# Container-Entrypoint: startet clamd (Virenscanner) + Node-Server.
# clamd läuft als clamav-User, node läuft als nodejs-User. Beide sind
# Kinder von tini (PID 1), das Signal-Forwarding und Reaping übernimmt.
#
set -eu
CLAMAV_DB_DIR=/app/data/clamav-db
# Persistente Verzeichnisse auf der Coolify-Volume sicherstellen.
mkdir -p "$CLAMAV_DB_DIR" \
/app/data/leads \
/app/data/gamejam \
/app/data/gamejam-games
chown -R clamav:clamav "$CLAMAV_DB_DIR" 2>/dev/null || true
chown -R nodejs:nodejs /app/data/leads \
/app/data/gamejam \
/app/data/gamejam-games 2>/dev/null || true
# Erster Start auf einer leeren Volume: Virendefinitionen ziehen
# (~300 MB; danach persistent auf der Volume).
if ! ls "$CLAMAV_DB_DIR"/daily.{cvd,cld} >/dev/null 2>&1; then
echo "[entrypoint] keine ClamAV-DB im Volume — initialer freshclam-Lauf …"
freshclam --quiet \
|| echo "[entrypoint] initialer freshclam fehlgeschlagen; Container läuft weiter"
fi
# Hintergrund-Updates der Virendefinitionen (alle paar Stunden).
freshclam --daemon --quiet || true
# clamd starten (forkt in den Hintergrund).
echo "[entrypoint] clamd starten …"
clamd
# Bis zu ~120 s auf clamd-Bereitschaft warten. Wenn es länger dauert,
# startet node trotzdem — Uploads werden dann fail-closed abgelehnt,
# bis clamd kommt.
for i in $(seq 1 60); do
if printf 'zPING\0' | nc -w 2 127.0.0.1 3310 2>/dev/null | grep -q PONG; then
echo "[entrypoint] clamd bereit"
break
fi
sleep 2
done
echo "[entrypoint] node-Server starten …"
exec gosu nodejs node /app/server.js