Files
dashboard/Dockerfile
T
fegger 012eee6c45 Add server-side health checks for service online status
- update-health.js: pings every service URL from script.js (single
  source of truth) in parallel every minute via cron and writes
  health.json; any HTTP response below 500 counts as online, 5xx as
  error, timeouts/DNS failures as offline; TLS validity ignored
- Card badges now show real state instead of a static Online label:
  grey Checking, green Online (with latency tooltip), amber Error
  (HTTP code), red Offline (reason); refreshed every 30 s
- Entrypoint runs a first sweep at boot; nginx serves /health.json
  with no-cache; README documents the behavior
2026-09-04 14:15:08 +02:00

28 lines
991 B
Docker

# Dashboard: nginx static host + calendar/data updater + API proxy.
FROM nginx:1.27-alpine
# Install Node.js and cron for the data updater.
RUN apk add --no-cache nodejs dcron
# Copy site assets.
COPY index.html style.css script.js /usr/share/nginx/html/
COPY icons /usr/share/nginx/html/icons
COPY nginx.conf /etc/nginx/conf.d/default.conf
# Backend scripts (node_modules included so the build works offline).
COPY api /opt/dashboard
# Cron refreshes the data feed every 15 minutes and health checks every minute.
RUN printf '*/15 * * * * cd /opt/dashboard && node update-data.js\n* * * * * cd /opt/dashboard && node update-health.js\n' > /etc/crontabs/root
# Entrypoint: run updater once, start API proxy + cron, then nginx.
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget -q --spider http://127.0.0.1:80/ || exit 1
ENTRYPOINT ["/docker-entrypoint.sh"]