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:
1 parent
a7a67da040
commit
471679ff64
7 files changed
+30
-20
No files matched your search
+3
-3
@@ -2,8 +2,8 @@
|
|||||||
#
|
#
|
||||||
# Diese Datei gilt für beides: den Betrieb mit dem fertigen Abbild
|
# Diese Datei gilt für beides: den Betrieb mit dem fertigen Abbild
|
||||||
# (docker-compose.example.yml hier im Wurzelverzeichnis) und die Entwicklung
|
# (docker-compose.example.yml hier im Wurzelverzeichnis) und die Entwicklung
|
||||||
# aus dem Quelltext (deploy/docker-compose.yml, liest deploy/.env).
|
# aus dem Quelltext (build/docker-compose.yml, liest build/.env).
|
||||||
# Für die Entwicklung: cp .env.example deploy/.env
|
# Für die Entwicklung: cp .env.example build/.env
|
||||||
#
|
#
|
||||||
# Zwei Fallen beim Bearbeiten:
|
# Zwei Fallen beim Bearbeiten:
|
||||||
# $ im Wert → als $$ schreiben, sonst schneidet Compose ab
|
# $ im Wert → als $$ schreiben, sonst schneidet Compose ab
|
||||||
@@ -139,7 +139,7 @@ HONEYBAR_ORIGIN=
|
|||||||
# Aether – dann schickt der Browser die HoneyOS-Sitzung nicht mit.
|
# Aether – dann schickt der Browser die HoneyOS-Sitzung nicht mit.
|
||||||
HONEYBAR_KEY=
|
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
|
# Diese vier steuern den Office-Container aus dem Entwicklungs-Compose. Beim
|
||||||
# Betrieb mit eigenem Office-Container stehen sie in dessen Compose-Datei.
|
# Betrieb mit eigenem Office-Container stehen sie in dessen Compose-Datei.
|
||||||
#
|
#
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
# Secrets
|
# Secrets
|
||||||
deploy/.env
|
build/.env
|
||||||
.env
|
.env
|
||||||
|
|
||||||
# Aus den Beispielen kopiert – gehört in die Umgebung, nicht ins Repo.
|
# Aus den Beispielen kopiert – gehört in die Umgebung, nicht ins Repo.
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ aether/
|
|||||||
│ ├── pages/
|
│ ├── pages/
|
||||||
│ ├── api/ # Typed API-Client
|
│ ├── api/ # Typed API-Client
|
||||||
│ └── hooks/
|
│ └── hooks/
|
||||||
├── deploy/ # Docker Compose, Dockerfile, .env.example
|
├── build/ # Dockerfile + Compose zum Bauen aus dem Quelltext
|
||||||
└── CLAUDE.md
|
└── CLAUDE.md
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -156,7 +156,7 @@ Kein Commit ohne grüne Tests.
|
|||||||
|
|
||||||
## Docker & Secrets
|
## 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
|
- Secrets **nur** über `.env` / Compose-Env – nie im Image oder Repo
|
||||||
- Multi-Stage-Build: Builder-Stage (Go-Compiler) → Alpine final
|
- Multi-Stage-Build: Builder-Stage (Go-Compiler) → Alpine final
|
||||||
- `.env` ist in `.gitignore`; `.env.example` zeigt alle Keys ohne Werte
|
- `.env` ist in `.gitignore`; `.env.example` zeigt alle Keys ohne Werte
|
||||||
|
|||||||
@@ -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. |
|
| **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
|
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,
|
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
|
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
|
sie empfahl für `OFFICE_WOPI_URL` einen Wert, der mit Collabora nicht
|
||||||
funktioniert.
|
funktioniert.
|
||||||
@@ -73,7 +73,7 @@ cd aether
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp .env.example .env # beim Betreiben
|
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:
|
Ausfüllen musst du mindestens:
|
||||||
@@ -110,8 +110,8 @@ Beim ersten Start:
|
|||||||
Aus dem Quelltext bauen statt ziehen:
|
Aus dem Quelltext bauen statt ziehen:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f deploy/docker-compose.yml build app
|
docker compose -f build/docker-compose.yml build app
|
||||||
docker compose -f deploy/docker-compose.yml up -d
|
docker compose -f build/docker-compose.yml up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
Aktualisieren:
|
Aktualisieren:
|
||||||
@@ -313,9 +313,9 @@ nur `GET`/`POST`, und dann scheitert das Einbinden mit einem `405`.
|
|||||||
## Abbild bauen und veröffentlichen
|
## Abbild bauen und veröffentlichen
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# im Wurzelverzeichnis des Projekts, nicht in deploy/
|
# im Wurzelverzeichnis des Projekts, nicht in build/
|
||||||
IMG=gitea.honeyy.duckdns.org/docker/aether
|
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:$(date +%Y.%m.%d)
|
||||||
docker push $IMG:latest
|
docker push $IMG:latest
|
||||||
```
|
```
|
||||||
@@ -395,7 +395,7 @@ aether/
|
|||||||
│ ├── components/
|
│ ├── components/
|
||||||
│ ├── hooks/
|
│ ├── hooks/
|
||||||
│ └── pages/
|
│ └── pages/
|
||||||
├── deploy/
|
├── build/
|
||||||
│ ├── docker-compose.yml # app + postgres (kein Proxy-Container)
|
│ ├── docker-compose.yml # app + postgres (kein Proxy-Container)
|
||||||
│ ├── Dockerfile
|
│ ├── Dockerfile
|
||||||
│ └── .env.example
|
│ └── .env.example
|
||||||
|
|||||||
File renamed without changes.
@@ -1,16 +1,22 @@
|
|||||||
# Aether – Entwicklung: aus dem Quelltext bauen.
|
# Aether – Entwicklung: aus dem Quelltext bauen.
|
||||||
#
|
#
|
||||||
# docker compose -f deploy/docker-compose.yml build app
|
# docker compose -f build/docker-compose.yml build app
|
||||||
# docker compose -f deploy/docker-compose.yml up -d
|
# docker compose -f build/docker-compose.yml up -d
|
||||||
#
|
#
|
||||||
# Zum **Betreiben** ist docker-compose.example.yml im Wurzelverzeichnis
|
# Zum **Betreiben** ist docker-compose.example.yml im Wurzelverzeichnis
|
||||||
# gedacht: schlanker und ohne Quelltext, es zieht das fertige Abbild.
|
# gedacht: schlanker und ohne Quelltext, es zieht das fertige Abbild.
|
||||||
#
|
#
|
||||||
# Die Einstellungen kommen aus deploy/.env – als Vorlage dient die eine
|
# Die Einstellungen kommen aus build/.env – als Vorlage dient die eine
|
||||||
# .env.example im Wurzelverzeichnis: cp .env.example deploy/.env
|
# .env.example im Wurzelverzeichnis: cp .env.example build/.env
|
||||||
#
|
#
|
||||||
# Erklärungen zu allem hier: README.md
|
# 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:
|
services:
|
||||||
app:
|
app:
|
||||||
container_name: aether-app
|
container_name: aether-app
|
||||||
@@ -18,7 +24,7 @@ services:
|
|||||||
# Kontext ist das Wurzelverzeichnis – das Abbild braucht backend/ und
|
# Kontext ist das Wurzelverzeichnis – das Abbild braucht backend/ und
|
||||||
# frontend/, nicht nur diesen Ordner.
|
# frontend/, nicht nur diesen Ordner.
|
||||||
context: ..
|
context: ..
|
||||||
dockerfile: deploy/Dockerfile
|
dockerfile: build/Dockerfile
|
||||||
image: gitea.honeyy.duckdns.org/docker/aether:latest
|
image: gitea.honeyy.duckdns.org/docker/aether:latest
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file: .env
|
env_file: .env
|
||||||
@@ -88,6 +94,10 @@ services:
|
|||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
postgres_data:
|
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.
|
# "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
|
# Die Datenbank bleibt ein benanntes Volume: An ihre Dateien geht man nicht
|
||||||
# von Hand, und Postgres mag fremde Besitzer nicht.
|
# von Hand, und Postgres mag fremde Besitzer nicht.
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
# `docker compose stop office`.
|
# `docker compose stop office`.
|
||||||
#
|
#
|
||||||
# Hintergrund und Fallstricke: README.md
|
# 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:
|
services:
|
||||||
app:
|
app:
|
||||||
|
|||||||
Reference in new issue
Block a user