From 6517c8fb7198c1cb6a405178f31e394ec072300e Mon Sep 17 00:00:00 2001 From: Claude Fable 5 Date: Sat, 4 Jul 2026 15:20:58 +0200 Subject: [PATCH] Update topology: non-prod stages on the VPS, Prod host decided at go-live Kickoff update by the project owner: test.dorfteich.cloud and int.dorfteich.cloud run on the VPS 188.245.116.44 (DNS for *.dorfteich.cloud and *.dorfteich.online already points there); the Prod host for dorfteich.online is chosen at go-live. Dev runs locally via Docker. Affects deployment.md, roadmap.md, and ADR 0014; the matching Gitea issues (#8, #9, #87, #89) were updated in place. Co-Authored-By: Claude Fable 5 --- docs/architecture/adr/0014-gitea-actions-cicd.md | 12 +++++++----- docs/architecture/deployment.md | 16 +++++++++------- docs/architecture/roadmap.md | 5 +++-- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/docs/architecture/adr/0014-gitea-actions-cicd.md b/docs/architecture/adr/0014-gitea-actions-cicd.md index d51a535..bea1b01 100644 --- a/docs/architecture/adr/0014-gitea-actions-cicd.md +++ b/docs/architecture/adr/0014-gitea-actions-cicd.md @@ -7,15 +7,17 @@ The project is hosted on a self-managed Gitea (`gitea.101010.cloud`). Environments (kickoff): Dev runs locally on contributors' machines; -Test, Int, and Prod run as separate Compose stacks on the LEISINGER host -initially, with Prod moving to a dedicated host at go-live (architecture -must keep that move cheap). Contributors include AI coding sessions — -gates must be automated and objective wherever possible. +Test and Int run as separate Compose stacks on the operator's VPS +(`188.245.116.44`, domains `test.dorfteich.cloud` / `int.dorfteich.cloud`); +the Prod host (`dorfteich.online`) is decided at go-live — the VPS or a +dedicated host — so the architecture must keep that choice and any later +move cheap. Contributors include AI coding sessions — gates must be +automated and objective wherever possible. ## Decision - **Gitea Actions** is the CI/CD system (GitHub-Actions-compatible syntax); - an act_runner runs on LEISINGER with Docker access. + an act_runner runs on the VPS (`188.245.116.44`) with Docker access. - **Images** are built once per change and promoted, never rebuilt per stage: pushed to the **Gitea container registry** (`gitea.101010.cloud/stwaidele/dorfteich-{web,api,collab}`), tagged with diff --git a/docs/architecture/deployment.md b/docs/architecture/deployment.md index 618e165..7f31785 100644 --- a/docs/architecture/deployment.md +++ b/docs/architecture/deployment.md @@ -1,9 +1,11 @@ # Deployment architecture Four stages, one Compose definition. Foundational decisions: ADR 0014 -(CI/CD), ADR 0015 (backup), kickoff topology decision (Dev local; Test, Int, -Prod on the LEISINGER host initially; Prod moves to a dedicated host at -go-live). +(CI/CD), ADR 0015 (backup), kickoff topology decision (Dev local on the +developer's machine; Test and Int on the operator's VPS `188.245.116.44`; +the Prod host is decided at go-live — the architecture must keep that +choice and any later move cheap). DNS status: `*.dorfteich.online` and +`*.dorfteich.cloud` already point to the VPS. ## The Compose stack @@ -40,10 +42,10 @@ Self-hosters without a proxy can enable the optional `caddy` Compose profile | Stage | Where | Domain | Purpose | Data | | --- | --- | --- | --- | --- | -| **Dev** | contributor machine | `localhost` | feature work; hot reload via `compose.dev.yml` overlay (source mounts, vite dev server) | fixtures/seed script | -| **Test** | LEISINGER, `/home/DOCKER/dorfteich-test/` | `dorfteich-test.101010.cloud` | auto-deploy target of `main`; e2e suite runs here | reset-able; seeded | -| **Int** | LEISINGER, `/home/DOCKER/dorfteich-int/` | `dorfteich-int.101010.cloud` | stable preview; manual/exploratory testing; release candidates | persistent test data | -| **Prod** | LEISINGER initially → dedicated host at go-live | `dorfteich.online` | public flagship instance | real data; full backup + mirror | +| **Dev** | contributor machine (e.g. the operator's MacBook), Docker Desktop | `localhost` | feature work; hot reload via `compose.dev.yml` overlay (source mounts, vite dev server) | fixtures/seed script | +| **Test** | VPS `188.245.116.44`, `/home/DOCKER/dorfteich-test/` | `test.dorfteich.cloud` | auto-deploy target of `main`; e2e suite runs here | reset-able; seeded | +| **Int** | VPS `188.245.116.44`, `/home/DOCKER/dorfteich-int/` | `int.dorfteich.cloud` | stable preview; manual/exploratory testing; release candidates | persistent test data | +| **Prod** | host decided at go-live (M8): the VPS or a dedicated host | `dorfteich.online` | public flagship instance | real data; full backup + mirror | Stage layout follows the operator's Docker host convention: compose file + `.env` under `/home/DOCKER/dorfteich-/`, bulk data diff --git a/docs/architecture/roadmap.md b/docs/architecture/roadmap.md index bb3e82e..526fd5e 100644 --- a/docs/architecture/roadmap.md +++ b/docs/architecture/roadmap.md @@ -14,9 +14,10 @@ Goal: empty but deployed. Monorepo scaffold (pnpm, ESLint/Prettier, Vitest, Playwright), NestJS api with `/healthz` + Prisma + first migration, React SPA shell with routing + i18n scaffold (ADR 0012), Dockerfiles + Compose stack + dev overlay, Gitea Actions pipeline (lint/test/build → images → -deploy Test → e2e smoke → promote Int), stage setup on LEISINGER. +deploy Test → e2e smoke → promote Int), stage setup on the VPS +(`188.245.116.44`). **Exit criterion**: a commit to `main` automatically reaches -`dorfteich-test.101010.cloud` and shows a styled "hello" shell. +`test.dorfteich.cloud` and shows a styled "hello" shell. ## M1 — Accounts & authentication (`auth`, `backend`, `frontend`)