Baseline standards: design, SOP, CI policy
This commit is contained in:
96
README.md
Normal file
96
README.md
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
# wlkns-dev-standards
|
||||||
|
|
||||||
|
## Zweck
|
||||||
|
Dieses Repository definiert **verbindliche Entwicklungs‑, Design‑ und CI‑Standards** für Software‑Projekte.
|
||||||
|
|
||||||
|
Es ist kein Projekt‑Template im engeren Sinn, sondern ein **Meta‑Repository**:
|
||||||
|
- Referenz
|
||||||
|
- Regelwerk
|
||||||
|
- Entscheidungsgrundlage
|
||||||
|
- Qualitätsmaßstab
|
||||||
|
|
||||||
|
Alles, was hier beschrieben ist, gilt als **Best Practice** und ist projektübergreifend anwendbar.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Zielgruppe
|
||||||
|
- Einzelentwickler mit professionellem Anspruch
|
||||||
|
- kleine Teams
|
||||||
|
- Homelab‑ und Infrastruktur‑Projekte
|
||||||
|
- Open‑Source‑Projekte mit Fokus auf Wartbarkeit
|
||||||
|
|
||||||
|
Nicht Zielgruppe:
|
||||||
|
- Prototypen ohne Langzeitanspruch
|
||||||
|
- schnelle Wegwerf‑Skripte
|
||||||
|
- „Hauptsache läuft“-Setups
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Grundprinzipien
|
||||||
|
|
||||||
|
- **Klarheit vor Cleverness**
|
||||||
|
- **Reproduzierbarkeit vor Geschwindigkeit**
|
||||||
|
- **Ein erlaubter Weg statt vieler Optionen**
|
||||||
|
- **Explizite Regeln statt impliziter Annahmen**
|
||||||
|
|
||||||
|
Wenn ein Prozess nur funktioniert, weil man weiß, *wie er gemeint ist*, ist er falsch.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Struktur des Repositories
|
||||||
|
|
||||||
|
```text
|
||||||
|
wlkns-dev-standards/
|
||||||
|
├─ design/ # Design‑System & UI‑Prinzipien
|
||||||
|
├─ sop/ # Standard Operating Procedures
|
||||||
|
├─ ci/ # CI‑Regeln & Gate‑Policies
|
||||||
|
├─ templates/ # Referenz‑ & Start‑Templates
|
||||||
|
├─ README.md
|
||||||
|
└─ CHANGELOG.md
|
||||||
|
```
|
||||||
|
|
||||||
|
Jeder Ordner ist thematisch abgeschlossen und unabhängig nutzbar.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Nutzung
|
||||||
|
|
||||||
|
Dieses Repository wird **nicht eingebunden**, sondern **referenziert**.
|
||||||
|
|
||||||
|
Typische Nutzung:
|
||||||
|
- als Entscheidungsgrundlage bei neuen Projekten
|
||||||
|
- als Review‑Maßstab
|
||||||
|
- als Quelle für Templates
|
||||||
|
- als Dokumentation für Dritte
|
||||||
|
|
||||||
|
Empfohlen:
|
||||||
|
- relevante Dokumente im Projekt verlinken
|
||||||
|
- Templates kopieren, nicht verändern
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Versionierung
|
||||||
|
|
||||||
|
Änderungen an Regeln oder Standards werden:
|
||||||
|
- dokumentiert
|
||||||
|
- versioniert
|
||||||
|
- rückwirkend nachvollziehbar gehalten
|
||||||
|
|
||||||
|
Siehe: `CHANGELOG.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Aktueller Reifegrad: **aktiv in Entwicklung**
|
||||||
|
|
||||||
|
Inhalte gelten als stabil, sofern nicht explizit anders gekennzeichnet.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Lizenz & Veröffentlichung
|
||||||
|
|
||||||
|
Das Repository ist derzeit **privat**, wird jedoch mit dem Anspruch gepflegt, jederzeit öffentlich nutzbar zu sein.
|
||||||
|
|
||||||
|
Keine Inhalte setzen interne Systeme, Namen oder proprietäre Werkzeuge voraus.
|
||||||
|
|
||||||
168
ci/ci_policy.md
Normal file
168
ci/ci_policy.md
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
# CI_POLICY.md
|
||||||
|
|
||||||
|
## Zweck
|
||||||
|
Diese CI‑Policy definiert **verbindliche Regeln für Continuous Integration** in allen Projekten, die den wlkns‑Standards folgen.
|
||||||
|
|
||||||
|
CI ist hier kein Komfort‑Feature, sondern ein **Qualitäts‑ und Sicherheits‑Gate**.
|
||||||
|
|
||||||
|
Wenn die CI rot ist, ist das Ergebnis **nicht auslieferbar**. Diskussion zwecklos.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Grundhaltung
|
||||||
|
|
||||||
|
- CI ersetzt kein Denken
|
||||||
|
- CI erzwingt Mindestqualität
|
||||||
|
- CI ist reproduzierbar
|
||||||
|
- CI ist deterministisch
|
||||||
|
|
||||||
|
Eine Pipeline darf **nichts tun**, was lokal nicht ebenfalls prüfbar ist.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Single Source of Truth
|
||||||
|
|
||||||
|
Die fachliche Prüflogik liegt **nicht** in der CI‑Pipeline selbst.
|
||||||
|
|
||||||
|
**Regel:**
|
||||||
|
> Alles, was die CI prüft, muss lokal über definierte Befehle prüfbar sein.
|
||||||
|
|
||||||
|
Bevorzugt:
|
||||||
|
- `make check`
|
||||||
|
- `make test`
|
||||||
|
- `make lint`
|
||||||
|
|
||||||
|
Die CI ruft diese Targets lediglich auf.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Mindest‑Stages (verpflichtend)
|
||||||
|
|
||||||
|
Jede Pipeline besteht mindestens aus folgenden Stages:
|
||||||
|
|
||||||
|
1. **Preflight / Validation**
|
||||||
|
2. **Lint / Static Checks**
|
||||||
|
3. **Tests**
|
||||||
|
4. **Build**
|
||||||
|
|
||||||
|
Optional (projektspezifisch):
|
||||||
|
- Security‑Scans
|
||||||
|
- Image‑Scans
|
||||||
|
- Deployment
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Stage 1 – Preflight
|
||||||
|
|
||||||
|
Ziel:
|
||||||
|
- Validierung der Projektstruktur
|
||||||
|
- Prüfung der Voraussetzungen
|
||||||
|
|
||||||
|
Typische Checks:
|
||||||
|
- benötigte Dateien vorhanden
|
||||||
|
- `.env.example` vollständig
|
||||||
|
- keine Secrets im Repository
|
||||||
|
- Tool‑Versionen kompatibel
|
||||||
|
|
||||||
|
Fehlschlag ⇒ sofortiger Abbruch.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Stage 2 – Lint / Static Checks
|
||||||
|
|
||||||
|
Ziel:
|
||||||
|
- einheitlicher Stil
|
||||||
|
- frühe Fehlererkennung
|
||||||
|
|
||||||
|
Regeln:
|
||||||
|
- Linter sind Pflicht
|
||||||
|
- Projekt‑spezifische Regeln sind erlaubt
|
||||||
|
- Warnungen dürfen **nicht** ignoriert werden
|
||||||
|
|
||||||
|
Ein Projekt ohne Linter gilt als unvollständig.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Stage 3 – Tests
|
||||||
|
|
||||||
|
Ziel:
|
||||||
|
- funktionale Korrektheit
|
||||||
|
- Schutz vor Regressionen
|
||||||
|
|
||||||
|
Regeln:
|
||||||
|
- automatisiert
|
||||||
|
- reproduzierbar
|
||||||
|
- ohne Seiteneffekte
|
||||||
|
|
||||||
|
Keine Tests bedeutet:
|
||||||
|
- kein Merge
|
||||||
|
- kein Release
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Stage 4 – Build
|
||||||
|
|
||||||
|
Ziel:
|
||||||
|
- verifizierbare Artefakte
|
||||||
|
|
||||||
|
Regeln:
|
||||||
|
- Build muss lokal reproduzierbar sein
|
||||||
|
- bei Containern: Image baubar
|
||||||
|
- kein Push bei Fehlschlag
|
||||||
|
|
||||||
|
Ein erfolgreicher Build bestätigt **technische Lieferfähigkeit**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Merge‑ & Release‑Regeln
|
||||||
|
|
||||||
|
- Merges nur bei grüner Pipeline
|
||||||
|
- Releases nur aus validierten Commits
|
||||||
|
- kein Bypass der CI
|
||||||
|
|
||||||
|
**Regel:**
|
||||||
|
> Ein Commit ohne grüne CI existiert nicht.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tool‑Neutralität
|
||||||
|
|
||||||
|
Diese Policy ist bewusst **CI‑System‑agnostisch**.
|
||||||
|
|
||||||
|
Unterstützte Umgebungen (Beispiele):
|
||||||
|
- GitHub Actions
|
||||||
|
- Gitea Actions
|
||||||
|
- GitLab CI
|
||||||
|
|
||||||
|
Die Regeln bleiben identisch – nur die Syntax ändert sich.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verhältnis zu SOPs
|
||||||
|
|
||||||
|
Diese CI‑Policy ergänzt die bestehenden SOPs.
|
||||||
|
|
||||||
|
Beispiel:
|
||||||
|
- Container‑SOP definiert `make check`
|
||||||
|
- CI ruft exakt dieses Target auf
|
||||||
|
|
||||||
|
Keine doppelte Logik. Keine Abweichungen.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Anti‑Patterns
|
||||||
|
|
||||||
|
- CI mit Projekt‑spezifischer Logik
|
||||||
|
- Checks nur in der CI, nicht lokal
|
||||||
|
- manuelles Überspringen von Stages
|
||||||
|
- „temporär deaktivierte“ Tests
|
||||||
|
|
||||||
|
Wenn die CI im Weg ist, ist das Problem **nicht** die CI.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Version: **v1.0 (Baseline)**
|
||||||
|
|
||||||
|
Änderungen an dieser Policy sind selten, bewusst und versioniert vorzunehmen.
|
||||||
142
design/DESIGN.md
Normal file
142
design/DESIGN.md
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
# DESIGN.md
|
||||||
|
|
||||||
|
## Ziel
|
||||||
|
Dieses Dokument definiert das **visuelle und strukturelle Design‑Fundament** für alle Projekte, die sich an den wlkns‑Standards orientieren.
|
||||||
|
|
||||||
|
Ziel ist kein Show‑Design, sondern:
|
||||||
|
- hohe Lesbarkeit
|
||||||
|
- geringe kognitive Last
|
||||||
|
- langfristige Wartbarkeit
|
||||||
|
- klare Wiedererkennbarkeit
|
||||||
|
|
||||||
|
Design ist hier **Arbeitsmittel**, kein Selbstzweck.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Grundhaltung
|
||||||
|
|
||||||
|
- **Light‑Mode first**
|
||||||
|
- ruhig, technisch, sachlich
|
||||||
|
- modern, aber nicht modisch
|
||||||
|
- funktional vor dekorativ
|
||||||
|
|
||||||
|
Merksatz:
|
||||||
|
> Sieht gut aus. Stört nicht. Funktioniert.
|
||||||
|
|
||||||
|
Dark Mode ist optional und wird **abgeleitet**, nicht gleichwertig entworfen.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Farb‑System
|
||||||
|
|
||||||
|
### Design‑Prinzipien
|
||||||
|
- Farbe transportiert Bedeutung
|
||||||
|
- keine rein dekorativen Farben
|
||||||
|
- Akzentfarben sparsam einsetzen
|
||||||
|
- Rot ist Fehlerfarbe – immer
|
||||||
|
|
||||||
|
### Farb‑Tokens (Light Mode)
|
||||||
|
|
||||||
|
**Primärfarbe (Identität)**
|
||||||
|
- `--color-primary: #1F2A37;`
|
||||||
|
Verwendung: Header, Navigation, Überschriften
|
||||||
|
|
||||||
|
**Akzentfarbe (Interaktion)**
|
||||||
|
- `--color-accent: #0EA5A4;`
|
||||||
|
Verwendung: Links, aktive Zustände, Fokus
|
||||||
|
|
||||||
|
**Statusfarben**
|
||||||
|
- Success: `#16A34A`
|
||||||
|
- Warning: `#D97706`
|
||||||
|
- Error: `#DC2626`
|
||||||
|
|
||||||
|
**Neutrale Farben**
|
||||||
|
- Background: `#F8FAFC`
|
||||||
|
- Surface: `#FFFFFF`
|
||||||
|
- Border: `#E5E7EB`
|
||||||
|
- Text Primary: `#111827`
|
||||||
|
- Text Secondary: `#4B5563`
|
||||||
|
|
||||||
|
Farben dürfen nur aus diesem Set verwendet werden.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Typografie
|
||||||
|
|
||||||
|
### Grundsatz
|
||||||
|
Lesbarkeit schlägt Individualität.
|
||||||
|
|
||||||
|
### Schriftarten
|
||||||
|
- **Primary UI Font:** Inter
|
||||||
|
- **Code / Monospace:** JetBrains Mono
|
||||||
|
|
||||||
|
### Schriftschnitte
|
||||||
|
- Headings: SemiBold
|
||||||
|
- Body: Regular
|
||||||
|
- Hervorhebung: Medium
|
||||||
|
|
||||||
|
### Regeln
|
||||||
|
- maximal eine Schriftfamilie pro Kontext
|
||||||
|
- keine verspielten Fonts
|
||||||
|
- keine Schriftmischung ohne funktionalen Grund
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Layout‑Prinzipien
|
||||||
|
|
||||||
|
- 8‑px‑Grid
|
||||||
|
- Weißraum vor Linien
|
||||||
|
- Inhalte in klaren Sections
|
||||||
|
- visuelle Hierarchie vor Rahmen
|
||||||
|
|
||||||
|
### Komponenten‑Denken
|
||||||
|
- Header
|
||||||
|
- Content‑Bereich
|
||||||
|
- Status / Feedback
|
||||||
|
|
||||||
|
Jede Oberfläche soll sich **vorhersehbar** anfühlen.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Interaktion & Feedback
|
||||||
|
|
||||||
|
- Hover‑Effekte sind dezent
|
||||||
|
- Animationen nur, wenn sie Information transportieren
|
||||||
|
- Fokus‑Zustände müssen sichtbar sein
|
||||||
|
|
||||||
|
Kein visuelles Feedback ohne funktionale Bedeutung.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Do / Don’t
|
||||||
|
|
||||||
|
### Do
|
||||||
|
- konsistente Abstände
|
||||||
|
- klare Typo‑Hierarchien
|
||||||
|
- ruhige Farbflächen
|
||||||
|
|
||||||
|
### Don’t
|
||||||
|
- harte Kontraste ohne Grund
|
||||||
|
- Schatten als Deko
|
||||||
|
- mehr als eine Akzentfarbe pro Screen
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Geltungsbereich
|
||||||
|
|
||||||
|
Dieses Design‑System gilt für:
|
||||||
|
- Web‑Oberflächen
|
||||||
|
- Desktop‑GUIs
|
||||||
|
- Dokumentation
|
||||||
|
- Status‑Dashboards
|
||||||
|
|
||||||
|
CLI‑Ausgaben orientieren sich an denselben Prinzipien (Lesbarkeit, Klarheit, Zurückhaltung).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Version: **v1.0 (Baseline)**
|
||||||
|
|
||||||
|
Änderungen am Design‑Fundament erfolgen bewusst, versioniert und dokumentiert.
|
||||||
|
|
||||||
226
sop/container-deployment.md
Normal file
226
sop/container-deployment.md
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
# SOP: Container Deployment (Makefile‑Driven)
|
||||||
|
|
||||||
|
**Status:** Operational
|
||||||
|
**Geltungsbereich:** generisch, projekt‑ und technologieübergreifend
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Zweck
|
||||||
|
Dieses Dokument definiert ein **verbindliches Standard Operating Procedure (SOP)** für containerbasierte Applikationen.
|
||||||
|
|
||||||
|
Ziel ist ein Deployment‑Ansatz, der:
|
||||||
|
- reproduzierbar
|
||||||
|
- sicher
|
||||||
|
- nachvollziehbar
|
||||||
|
- CI‑fähig
|
||||||
|
- agentenfähig
|
||||||
|
|
||||||
|
ist – unabhängig von Projekt, Teamgröße oder Hosting‑Umgebung.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Grundprinzip
|
||||||
|
|
||||||
|
Das Setup basiert auf einer **strikten Trennung von Verantwortlichkeiten**:
|
||||||
|
|
||||||
|
- **Konfiguration:** `.env`
|
||||||
|
- **Orchestrierung:** Docker Compose
|
||||||
|
- **Steuerung & Validierung:** Makefile
|
||||||
|
- **Ausführung:** Container
|
||||||
|
|
||||||
|
Das **Makefile ist die einzige erlaubte Benutzerschnittstelle** und damit die Single Source of Truth.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. Voraussetzungen & Systemanforderungen
|
||||||
|
|
||||||
|
### 0.1 Zielsystem
|
||||||
|
- Linux (empfohlen)
|
||||||
|
- Ubuntu ≥ 22.04
|
||||||
|
- Debian ≥ 12
|
||||||
|
- macOS / Windows (eingeschränkt, nicht offiziell supported)
|
||||||
|
|
||||||
|
### 0.2 Erforderliche Software
|
||||||
|
| Tool | Mindestversion | Zweck |
|
||||||
|
|-----|----------------|-------|
|
||||||
|
| Docker Engine | ≥ 24.x | Container Runtime |
|
||||||
|
| Docker Compose Plugin | ≥ 2.x | Orchestrierung |
|
||||||
|
| GNU Make | ≥ 4.x | Steuerung & Validierung |
|
||||||
|
| curl | aktuell | Healthchecks |
|
||||||
|
| lsof / ss | systemabhängig | Port‑Prüfung |
|
||||||
|
|
||||||
|
### 0.3 Berechtigungen
|
||||||
|
- Benutzer ist Mitglied der `docker`‑Gruppe **oder** darf Docker via sudo ausführen
|
||||||
|
- Schreibrechte im Projektverzeichnis
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Projektstruktur (Baseline)
|
||||||
|
|
||||||
|
```text
|
||||||
|
project/
|
||||||
|
├── Dockerfile
|
||||||
|
├── docker-compose.yml
|
||||||
|
├── Makefile
|
||||||
|
├── .env.example
|
||||||
|
├── .env # lokal, nicht versioniert
|
||||||
|
└── app/ # Anwendungscode
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Dockerfile – Image‑Definition
|
||||||
|
|
||||||
|
### Prinzip: Multi‑Stage Build
|
||||||
|
|
||||||
|
**Warum?**
|
||||||
|
- kleinere Images
|
||||||
|
- reduzierte Angriffsfläche
|
||||||
|
- saubere Trennung von Build‑ und Runtime‑Abhängigkeiten
|
||||||
|
|
||||||
|
### Referenz‑Dockerfile (Beispiel)
|
||||||
|
|
||||||
|
```dockerfile
|
||||||
|
# Stage 1: Build
|
||||||
|
FROM node:18-alpine AS builder
|
||||||
|
WORKDIR /build
|
||||||
|
|
||||||
|
COPY package*.json ./
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# Stage 2: Runtime
|
||||||
|
FROM node:18-alpine
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY --from=builder /build/dist ./dist
|
||||||
|
COPY --from=builder /build/package*.json ./
|
||||||
|
RUN npm install --omit=dev
|
||||||
|
|
||||||
|
RUN addgroup -S app && adduser -S app -G app
|
||||||
|
USER app
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
CMD ["node", "dist/server.js"]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Regeln
|
||||||
|
- Build‑Tools gehören **nicht** ins Runtime‑Image
|
||||||
|
- Runtime‑Container laufen **nicht als root**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. docker‑compose.yml – Orchestrierung
|
||||||
|
|
||||||
|
Docker Compose beschreibt **ausschließlich den Zielzustand** der Laufzeitumgebung.
|
||||||
|
|
||||||
|
> Compose ist deklarativ. Keine Logik. Keine Prüfungen.
|
||||||
|
|
||||||
|
### Referenz
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- "${PORT}:8080"
|
||||||
|
environment:
|
||||||
|
- APP_URL=http://localhost:${PORT}
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
```
|
||||||
|
|
||||||
|
### Regeln
|
||||||
|
- Ports niemals hardcoden
|
||||||
|
- Konfiguration ausschließlich über ENV
|
||||||
|
- Healthcheck ist Pflicht
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Makefile – Steuerung & Kontrolle
|
||||||
|
|
||||||
|
Das Makefile ist die **zentrale Kontrollinstanz**.
|
||||||
|
|
||||||
|
### Referenz
|
||||||
|
|
||||||
|
```make
|
||||||
|
-include .env
|
||||||
|
export
|
||||||
|
|
||||||
|
PORT ?= 8080
|
||||||
|
|
||||||
|
.PHONY: build check up up-safe down logs health
|
||||||
|
|
||||||
|
build:
|
||||||
|
docker compose build
|
||||||
|
|
||||||
|
check:
|
||||||
|
@docker compose version > /dev/null
|
||||||
|
@test -f .env || (echo ".env missing" && exit 1)
|
||||||
|
|
||||||
|
up:
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
up-safe: check
|
||||||
|
$(MAKE) up
|
||||||
|
|
||||||
|
down:
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
logs:
|
||||||
|
docker compose logs -f
|
||||||
|
|
||||||
|
health:
|
||||||
|
@docker inspect --format='{{json .State.Health.Status}}' \
|
||||||
|
$$(docker compose ps -q app)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Zentrale Regeln
|
||||||
|
- `make up-safe` ist der **einzige erlaubte Startpunkt**
|
||||||
|
- Direkte Nutzung von `docker compose` ist untersagt
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. CI‑Gate‑Policy
|
||||||
|
|
||||||
|
Die CI nutzt **dieselben Prüfregeln** wie der lokale Preflight‑Check.
|
||||||
|
|
||||||
|
### Prüfungen
|
||||||
|
- Dockerfile baubar
|
||||||
|
- Compose valide
|
||||||
|
- `.env.example` vollständig
|
||||||
|
- keine Secrets im Repository
|
||||||
|
- Build erfolgreich
|
||||||
|
|
||||||
|
### Regel
|
||||||
|
> Merge oder Deployment nur bei grüner Pipeline.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Anti‑Patterns (verboten)
|
||||||
|
|
||||||
|
- direkter Aufruf von `docker compose up`
|
||||||
|
- hardcodierte Ports
|
||||||
|
- Logik im Compose‑File
|
||||||
|
- Secrets im Repository
|
||||||
|
- Root‑User im Runtime‑Container
|
||||||
|
- fehlende Healthchecks
|
||||||
|
|
||||||
|
**Merksatz:**
|
||||||
|
> Wenn etwas schneller geht, weil es Prüfungen umgeht – ist es falsch.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Fazit
|
||||||
|
|
||||||
|
Dieses SOP definiert einen kontrollierten, sicheren und reproduzierbaren Weg für Container‑Deployments.
|
||||||
|
|
||||||
|
Kein Komfort auf Kosten von Stabilität.
|
||||||
|
Kein Start ohne Prüfung.
|
||||||
|
Keine Magie – nur Disziplin.
|
||||||
|
|
||||||
Reference in New Issue
Block a user