From 471679ff64410746671f083e7f287b5d33f2821a Mon Sep 17 00:00:00 2001 From: marc Date: Wed, 2 Sep 2026 09:24:09 +0200 Subject: [PATCH] =?UTF-8?q?refactor(repo):=20deploy/=20hei=C3=9Ft=20jetzt?= =?UTF-8?q?=20build/=20=E2=80=93=20der=20Name=20sagte=20das=20Gegenteil?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "deploy" klang nach Ausrollen, drin steht das Gegenteil: das Bau-Rezept und das Compose, das aus dem Quelltext baut. Ausgerollt wird mit docker-compose.example.yml im Wurzelverzeichnis. Marc ist genau darüber gestolpert. Zwei Dinge mussten dafür vorher fest werden, sonst hätte das Umbenennen die Entwicklungsdatenbank gekostet: Compose leitet den Projektnamen aus dem Ordnernamen ab und hätte unter "build" ein neues, leeres Projekt mit neuem, leerem Volume angelegt. Der Projektname steht deshalb jetzt im Compose (name: aether), und das Volume trägt seinen alten Namen ausdrücklich weiter (deploy_postgres_data) – unschön, aber die Daten bleiben. Ebenfalls angepasst: .gitignore. Dort stand deploy/.env; nach dem Umbenennen wäre build/.env nur noch von der allgemeinen .env-Zeile gedeckt gewesen. Nachgeprüft nach dem Umzug: Abbild baut, Stapel startet, 113 Dateien in der Datenbank wie vorher, Volume unverändert deploy_postgres_data, GET / → 200. Co-Authored-By: Claude Opus 5 --- .env.example | 6 +++--- .gitignore | 2 +- CLAUDE.md | 4 ++-- README.md | 16 ++++++++-------- {deploy => build}/Dockerfile | 0 {deploy => build}/docker-compose.yml | 20 +++++++++++++++----- docker-compose.example.yml | 2 +- 7 files changed, 30 insertions(+), 20 deletions(-) rename {deploy => build}/Dockerfile (100%) rename {deploy => build}/docker-compose.yml (79%) diff --git a/.env.example b/.env.example index 837d782..d26b772 100644 --- a/.env.example +++ b/.env.example @@ -2,8 +2,8 @@ # # Diese Datei gilt für beides: den Betrieb mit dem fertigen Abbild # (docker-compose.example.yml hier im Wurzelverzeichnis) und die Entwicklung -# aus dem Quelltext (deploy/docker-compose.yml, liest deploy/.env). -# Für die Entwicklung: cp .env.example deploy/.env +# aus dem Quelltext (build/docker-compose.yml, liest build/.env). +# Für die Entwicklung: cp .env.example build/.env # # Zwei Fallen beim Bearbeiten: # $ im Wert → als $$ schreiben, sonst schneidet Compose ab @@ -139,7 +139,7 @@ HONEYBAR_ORIGIN= # Aether – dann schickt der Browser die HoneyOS-Sitzung nicht mit. HONEYBAR_KEY= -# ══ Nur für deploy/docker-compose.yml ═════════════════════════════════════════ +# ══ Nur für build/docker-compose.yml ══════════════════════════════════════════ # Diese vier steuern den Office-Container aus dem Entwicklungs-Compose. Beim # Betrieb mit eigenem Office-Container stehen sie in dessen Compose-Datei. # diff --git a/.gitignore b/.gitignore index 58cc639..01c71c7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Secrets -deploy/.env +build/.env .env # Aus den Beispielen kopiert – gehört in die Umgebung, nicht ins Repo. diff --git a/CLAUDE.md b/CLAUDE.md index 4cf75e3..5cf9087 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -36,7 +36,7 @@ aether/ │ ├── pages/ │ ├── api/ # Typed API-Client │ └── hooks/ -├── deploy/ # Docker Compose, Dockerfile, .env.example +├── build/ # Dockerfile + Compose zum Bauen aus dem Quelltext └── CLAUDE.md ``` @@ -156,7 +156,7 @@ Kein Commit ohne grüne Tests. ## Docker & Secrets -- **Backend immer via Docker starten/laufen lassen (`docker compose ...` in `deploy/`), nie `go run`.** Der Host hat kein Go-Toolchain installiert; Builds/Compile-Checks laufen über das `golang:1.25-alpine`-Image. Migrations + DB-Verbindung sind auf die Compose-Umgebung ausgelegt. +- **Backend immer via Docker starten/laufen lassen (`docker compose -f build/docker-compose.yml ...`), nie `go run`.** Der Host hat kein Go-Toolchain installiert; Builds/Compile-Checks laufen über das `golang:1.25-alpine`-Image. Migrations + DB-Verbindung sind auf die Compose-Umgebung ausgelegt. - Secrets **nur** über `.env` / Compose-Env – nie im Image oder Repo - Multi-Stage-Build: Builder-Stage (Go-Compiler) → Alpine final - `.env` ist in `.gitignore`; `.env.example` zeigt alle Keys ohne Werte diff --git a/README.md b/README.md index cf251f6..d7da744 100644 --- a/README.md +++ b/README.md @@ -42,11 +42,11 @@ Zwei Wege, je nachdem was du vorhast: | | | |---|---| | **Betreiben** | `docker-compose.example.yml` im Wurzelverzeichnis. Zieht das fertige Abbild, braucht keinen Quelltext. | -| **Entwickeln** | `deploy/docker-compose.yml`. Baut aus dem Quelltext. | +| **Entwickeln** | `build/docker-compose.yml`. Baut aus dem Quelltext. | Die **`.env.example` im Wurzelverzeichnis gilt für beide** – eine Datei, alle Einstellungen. Sie lag bis zum 02.09.2026 doppelt vor (einmal schlank hier, -einmal vollständig unter `deploy/`), und die beiden liefen auseinander: Der +einmal vollständig im Bau-Ordner), und die beiden liefen auseinander: Der produktiven fehlten am Ende zwölf Schlüssel, darunter `SESSION_MAX_AGE`, und sie empfahl für `OFFICE_WOPI_URL` einen Wert, der mit Collabora nicht funktioniert. @@ -73,7 +73,7 @@ cd aether ```bash cp .env.example .env # beim Betreiben -cp .env.example deploy/.env # beim Entwickeln (dorthin schaut das Compose) +cp .env.example build/.env # beim Entwickeln (dorthin schaut das Compose) ``` Ausfüllen musst du mindestens: @@ -110,8 +110,8 @@ Beim ersten Start: Aus dem Quelltext bauen statt ziehen: ```bash -docker compose -f deploy/docker-compose.yml build app -docker compose -f deploy/docker-compose.yml up -d +docker compose -f build/docker-compose.yml build app +docker compose -f build/docker-compose.yml up -d ``` Aktualisieren: @@ -313,9 +313,9 @@ nur `GET`/`POST`, und dann scheitert das Einbinden mit einem `405`. ## Abbild bauen und veröffentlichen ```bash -# im Wurzelverzeichnis des Projekts, nicht in deploy/ +# im Wurzelverzeichnis des Projekts, nicht in build/ IMG=gitea.honeyy.duckdns.org/docker/aether -docker build -f deploy/Dockerfile -t $IMG:$(date +%Y.%m.%d) -t $IMG:latest . +docker build -f build/Dockerfile -t $IMG:$(date +%Y.%m.%d) -t $IMG:latest . docker push $IMG:$(date +%Y.%m.%d) docker push $IMG:latest ``` @@ -395,7 +395,7 @@ aether/ │ ├── components/ │ ├── hooks/ │ └── pages/ -├── deploy/ +├── build/ │ ├── docker-compose.yml # app + postgres (kein Proxy-Container) │ ├── Dockerfile │ └── .env.example diff --git a/deploy/Dockerfile b/build/Dockerfile similarity index 100% rename from deploy/Dockerfile rename to build/Dockerfile diff --git a/deploy/docker-compose.yml b/build/docker-compose.yml similarity index 79% rename from deploy/docker-compose.yml rename to build/docker-compose.yml index 2321add..b131dd2 100644 --- a/deploy/docker-compose.yml +++ b/build/docker-compose.yml @@ -1,16 +1,22 @@ # Aether – Entwicklung: aus dem Quelltext bauen. # -# docker compose -f deploy/docker-compose.yml build app -# docker compose -f deploy/docker-compose.yml up -d +# docker compose -f build/docker-compose.yml build app +# docker compose -f build/docker-compose.yml up -d # # Zum **Betreiben** ist docker-compose.example.yml im Wurzelverzeichnis # gedacht: schlanker und ohne Quelltext, es zieht das fertige Abbild. # -# Die Einstellungen kommen aus deploy/.env – als Vorlage dient die eine -# .env.example im Wurzelverzeichnis: cp .env.example deploy/.env +# Die Einstellungen kommen aus build/.env – als Vorlage dient die eine +# .env.example im Wurzelverzeichnis: cp .env.example build/.env # # Erklärungen zu allem hier: README.md +# Der Projektname steht hier fest und wird **nicht** aus dem Ordnernamen +# abgeleitet. Sonst hinge er daran, wie der Ordner gerade heißt: Beim +# Umbenennen von deploy/ nach build/ hätte Compose ein neues, leeres Projekt +# angelegt – mit einer neuen, leeren Datenbank. +name: aether + services: app: container_name: aether-app @@ -18,7 +24,7 @@ services: # Kontext ist das Wurzelverzeichnis – das Abbild braucht backend/ und # frontend/, nicht nur diesen Ordner. context: .. - dockerfile: deploy/Dockerfile + dockerfile: build/Dockerfile image: gitea.honeyy.duckdns.org/docker/aether:latest restart: unless-stopped env_file: .env @@ -88,6 +94,10 @@ services: volumes: postgres_data: + # Fester Name, aus demselben Grund. Er stammt noch aus der Zeit, als der + # Ordner „deploy" hieß – umbenennen hieße hier: neues Volume, leere + # Datenbank. Der unschöne Name ist der Preis dafür, die Daten zu behalten. + name: deploy_postgres_data # "data" ist bewusst weg – die Dateien liegen unter DATA_PATH auf dem Wirt. # Die Datenbank bleibt ein benanntes Volume: An ihre Dateien geht man nicht # von Hand, und Postgres mag fremde Besitzer nicht. diff --git a/docker-compose.example.yml b/docker-compose.example.yml index cc2508c..984d255 100644 --- a/docker-compose.example.yml +++ b/docker-compose.example.yml @@ -16,7 +16,7 @@ # `docker compose stop office`. # # Hintergrund und Fallstricke: README.md -# Aus dem Quelltext bauen statt ziehen: deploy/docker-compose.yml +# Aus dem Quelltext bauen statt ziehen: build/docker-compose.yml services: app: