Files
ctms/docs/plans/2026-03-30-remove-nginx-implementation.md
T
2026-03-30 22:53:39 +08:00

3.3 KiB

Remove In-Repo Nginx Implementation Plan

For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

Goal: Remove repository-managed Nginx and replace it with a standalone frontend image plus backend image that are intended to sit behind an external reverse proxy.

Architecture: The compose stack runs db, backend, and frontend. The frontend image builds the Vite SPA and serves it directly from its own container, while the backend continues serving the API on port 8000. External infrastructure performs the only reverse proxy routing.

Tech Stack: Docker Compose, FastAPI, Vue/Vite, Node.js, PostgreSQL, GitHub Actions


Task 1: Define the frontend runtime image

Files:

  • Modify: frontend/Dockerfile

Step 1: Keep the multi-stage frontend build

Retain the existing build stage so npm ci and npm run build still produce dist.

Step 2: Turn the final image into a runnable frontend container

Use a lightweight runtime image that copies dist, exposes a stable frontend port, and starts a static file server suitable for SPA delivery.

Step 3: Verify Dockerfile shape

Run: sed -n '1,200p' frontend/Dockerfile Expected: final stage exposes a frontend port and contains a runnable CMD.

Task 2: Replace nginx topology with frontend topology

Files:

  • Modify: docker-compose.yaml

Step 1: Remove the nginx service

Delete the Nginx image, build, ports, and volume mounts.

Step 2: Add a frontend service

Build from frontend/Dockerfile, define a private-registry-backed FRONTEND_IMAGE default, and expose the frontend runtime port.

Step 3: Verify rendered compose

Run: docker compose config Expected: only db, backend, backend-init, and frontend render.

Task 3: Rewrite docs to match the new topology

Files:

  • Modify: README.md
  • Modify: docs/guides/release-checklist.md
  • Modify: docs/plans/2026-03-27-production-compose-design.md
  • Modify: docs/plans/2026-03-27-production-compose-implementation.md
  • Modify: docs/plans/2026-03-27-production-init-design.md
  • Modify: docs/plans/2026-03-27-production-init-implementation.md
  • Modify: docs/plans/2026-03-30-tcloud-private-registry-design.md
  • Modify: docs/plans/2026-03-30-tcloud-private-registry.md

Step 1: Remove repository-managed Nginx language

Replace every statement that says Nginx is the public entrypoint, serves the SPA, or is a published runtime image.

Step 2: Document the external reverse proxy expectation

Describe the runtime as frontend and backend containers behind an external proxy.

Step 3: Verify search results

Run: rg -n --hidden -g '!/.git' -S "nginx|ctms-nginx|NGINX_IMAGE|Nginx" README.md docker-compose.yaml .github scripts docs Expected: no active repository-managed Nginx references remain.

Task 4: Remove obsolete nginx files and verify end-to-end cleanup

Files:

  • Delete: nginx/Dockerfile
  • Delete: nginx/nginx.conf

Step 1: Delete the obsolete files

Remove the Nginx directory because nothing in the repository should depend on it anymore.

Step 2: Validate compose and script syntax

Run: docker compose config Expected: PASS

Step 3: Validate frontend and backend image references

Run: sed -n '1,160p' README.md Expected: deployment instructions mention frontend and backend, not nginx.