# 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 (favicon.svg included — index.html references it). COPY index.html style.css script.js favicon.svg favicon.png apple-touch-icon.png /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: data feed every 15 min, health checks + Outlook unread every minute. RUN printf '*/15 * * * * cd /opt/dashboard && node update-data.js\n* * * * * cd /opt/dashboard && node update-health.js\n* * * * * cd /opt/dashboard && node update-outlook.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"]