From a9c652ff59155b21e8d10ef9506aa9eb8516a94b Mon Sep 17 00:00:00 2001 From: Jeffrey Smith Date: Thu, 26 Mar 2026 09:27:22 +0000 Subject: [PATCH] step 5 (continued): prune stale root files, drop frontend split Delete Dockerfile.frontend and docker-entrypoint-fe.sh (single-image decision per ROADMAP). Remove gutted /chat, /notes, /projects routes from nginx.conf. Fix Chat Switchboard branding in entrypoint and .env.example. Update DB names to switchboard_core, remove dead Extraction config. Co-Authored-By: Claude Opus 4.6 (1M context) --- Dockerfile.frontend | 65 -------------- docker-compose.yml | 2 +- docker-entrypoint-fe.sh | 190 ---------------------------------------- docker-entrypoint.sh | 4 +- nginx.conf | 10 --- server/.env.example | 14 ++- 6 files changed, 9 insertions(+), 276 deletions(-) delete mode 100644 Dockerfile.frontend delete mode 100644 docker-entrypoint-fe.sh diff --git a/Dockerfile.frontend b/Dockerfile.frontend deleted file mode 100644 index 222beec..0000000 --- a/Dockerfile.frontend +++ /dev/null @@ -1,65 +0,0 @@ -# ========================================== -# Switchboard Core - Frontend Dockerfile -# ========================================== -# Static SPA served by nginx. 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. -# -# v0.22.6+: Set BACKEND_URL to proxy page routes -# (/, /login, /admin, /editor, /notes, /settings) -# to the Go backend for server-rendered templates. -# When unset, page routes fall through to SPA. -# -# 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: CM6 editor bundle (esbuild → single IIFE) -FROM node:20-alpine AS cm6-build -WORKDIR /build -COPY src/editor/ /build/src/editor/ -COPY scripts/build-editor.sh /build/scripts/build-editor.sh -RUN cd /build/src/editor && npm ci --loglevel=warn -RUN sh /build/scripts/build-editor.sh /build/dist - -# Stage 3: 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 --from=cm6-build /build/dist/ /usr/share/nginx/html/vendor/codemirror/ -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"] diff --git a/docker-compose.yml b/docker-compose.yml index 367dba8..730edce 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ # Data persists in ./data/ between restarts. # To reset: rm -rf ./data/ # -# For Postgres / multi-replica / k8s deployment see k8s/ and server/Dockerfile + Dockerfile.frontend. +# For Postgres / multi-replica / k8s deployment see k8s/ and Dockerfile. services: switchboard: diff --git a/docker-entrypoint-fe.sh b/docker-entrypoint-fe.sh deleted file mode 100644 index 28abc41..0000000 --- a/docker-entrypoint-fe.sh +++ /dev/null @@ -1,190 +0,0 @@ -#!/bin/sh -# ============================================ -# Chat Switchboard - Frontend Entrypoint -# ============================================ -# nginx serves static assets and proxies page -# routes to the Go backend for template rendering. -# API/WS routes are handled by Ingress directly. -# -# Environment (required): -# BACKEND_URL - Backend service URL -# (e.g. "http://switchboard-be:8080") -# -# Environment (optional): -# BASE_PATH - URL prefix (e.g. "/dev", "" for root) -# ENVIRONMENT - Environment name for logging -# ============================================ -set -e - -BASE_PATH="${BASE_PATH:-}" -BACKEND_URL="${BACKEND_URL:?BACKEND_URL is required (e.g. http://switchboard-be:8080)}" -ENVIRONMENT="${ENVIRONMENT:-production}" - -# Read version from VERSION file (baked in at build time) -APP_VERSION="dev" -if [ -f /VERSION ]; then - APP_VERSION=$(cat /VERSION | tr -d '[:space:]') -fi - -# Compute build hash from JS file contents (unique per deploy) -BUILD_HASH=$(find /usr/share/nginx/html/js -name '*.js' -exec md5sum {} + 2>/dev/null | sort | md5sum | cut -c1-8) -if [ -z "${BUILD_HASH}" ]; then - BUILD_HASH=$(date +%s | md5sum | cut -c1-8) -fi - -# ── Inject into index.html (redirect page) ── -sed -i \ - -e "s|%%BASE_PATH%%|${BASE_PATH}|g" \ - -e "s|%%APP_VERSION%%|${APP_VERSION}|g" \ - /usr/share/nginx/html/index.html - -# Inject version and build hash into service worker -sed -i \ - -e "s|%%APP_VERSION%%|${APP_VERSION}|g" \ - -e "s|%%BUILD_HASH%%|${BUILD_HASH}|g" \ - /usr/share/nginx/html/sw.js - -echo "✅ Frontend: BASE_PATH=${BASE_PATH:-/} VERSION=${APP_VERSION} BUILD=${BUILD_HASH} BACKEND=${BACKEND_URL}" - -# ── Page route proxy blocks ───────────────── -page_proxy_block() { - local path="$1" - cat < /etc/nginx/conf.d/default.conf < /etc/nginx/conf.d/default.conf <