This repository has been archived on 2026-04-03. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
core/Dockerfile.frontend
2026-02-25 13:29:15 +00:00

52 lines
2.0 KiB
Docker

# ==========================================
# Chat Switchboard - Frontend Dockerfile
# ==========================================
# Static SPA served by nginx. No API proxy —
# in k8s, the Ingress routes /api/ and /ws to
# the backend service directly.
#
# Supports path-based deployment via BASE_PATH
# env var (e.g. /dev, /test, or empty for root).
# The entrypoint generates the nginx config and
# injects BASE_PATH into index.html at startup.
#
# Build context: repo root
# ==========================================
# Stage 1: Download vendor libs (vendor/ is gitignored)
FROM node:20-alpine AS vendor
WORKDIR /tmp
RUN npm pack marked@16.3.0 dompurify@3.2.4 mermaid@11.4.1 katex@0.16.11 2>/dev/null && \
mkdir -p /vendor/mermaid /vendor/katex/fonts && \
tar xzf marked-*.tgz -C /tmp && cp /tmp/package/lib/marked.umd.js /vendor/marked.min.js && \
rm -rf /tmp/package && \
tar xzf dompurify-*.tgz -C /tmp && cp /tmp/package/dist/purify.min.js /vendor/purify.min.js && \
rm -rf /tmp/package && \
tar xzf mermaid-*.tgz -C /tmp && cp /tmp/package/dist/mermaid.min.js /vendor/mermaid/mermaid.min.js && \
rm -rf /tmp/package && \
tar xzf katex-*.tgz -C /tmp && \
cp /tmp/package/dist/katex.min.js /vendor/katex/katex.min.js && \
cp /tmp/package/dist/katex.min.css /vendor/katex/katex.min.css && \
cp -r /tmp/package/dist/fonts/* /vendor/katex/fonts/ && \
rm -rf /tmp/package /tmp/*.tgz
# Stage 2: nginx + entrypoint
FROM nginx:1-alpine
# Remove default config — entrypoint generates it
RUN rm -f /etc/nginx/conf.d/default.conf
COPY src/ /usr/share/nginx/html/
COPY --from=vendor /vendor/ /usr/share/nginx/html/vendor/
COPY VERSION /VERSION
COPY docker-entrypoint-fe.sh /docker-entrypoint-fe.sh
RUN chmod +x /docker-entrypoint-fe.sh
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost/healthz 2>/dev/null || \
wget --no-verbose --tries=1 --spider http://localhost/ || exit 1
ENTRYPOINT ["/docker-entrypoint-fe.sh"]