refactor(repo): deploy/ heißt jetzt build/ – der Name sagte das Gegenteil

"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 <noreply@anthropic.com>
This commit is contained in:
marcandClaude Opus 5 committed 2026-09-02 09:24:09 +02:00
1 parent a7a67da040
commit 471679ff64
7 files changed
+30 -20

No files matched your search

+3 -3
View File
@@ -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.
#
+1 -1
View File
@@ -1,5 +1,5 @@
# Secrets
deploy/.env
build/.env
.env
# Aus den Beispielen kopiert – gehört in die Umgebung, nicht ins Repo.
+2 -2
View File
@@ -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
+8 -8
View File
@@ -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
File renamed without changes.
@@ -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.
+1 -1
View File
@@ -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: