Deploy / build-and-deploy (push) Successful in 33s
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>
50 lines
1.6 KiB
Bash
Executable File
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
|