All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m10s
125 lines
3.6 KiB
Markdown
125 lines
3.6 KiB
Markdown
# Docker Build Anleitung
|
|
|
|
## Multi-Stage Build
|
|
|
|
Das Dockerfile verwendet einen Multi-Stage Build mit zwei Stages:
|
|
|
|
### Stage 1: Builder
|
|
- **Base Image**: Node.js 24.7.0-alpine
|
|
- **Aufgabe**: Baut die Angular-Applikation
|
|
- Installiert Dependencies mit `npm ci`
|
|
- Führt `npm run build` aus
|
|
|
|
### Stage 2: Runner
|
|
- **Base Image**: nginx-unprivileged:alpine3.22
|
|
- **Aufgabe**: Serviert die statischen Dateien
|
|
- Kopiert die gebauten Dateien aus der Builder-Stage
|
|
- Läuft auf Port 8080
|
|
|
|
## Build Ausführen
|
|
|
|
### Empfohlen: Build-Script mit .env Integration
|
|
|
|
Das empfohlene Vorgehen ist die Verwendung des Build-Scripts, welches automatisch den Image-Namen und Tag aus der `.env` Datei liest:
|
|
|
|
```bash
|
|
cd docker
|
|
./build.sh
|
|
```
|
|
|
|
Das Script liest folgende Variablen aus der `.env` Datei:
|
|
- `REGISTRY_URL`: Die Registry-URL (z.B. gitea.moz-tech.de)
|
|
- `NAMESPACE`: Der Namespace/Benutzer (z.B. murat)
|
|
- `REPO_NAME`: Der Repository-Name (z.B. enerport-web-app)
|
|
- `IMAGE_TAG`: Das Image-Tag (z.B. latest, v1.0.0, dev)
|
|
|
|
Der vollständige Image-Name wird dann als `${REGISTRY_URL}/${NAMESPACE}/${REPO_NAME}:${IMAGE_TAG}` zusammengesetzt.
|
|
|
|
**Beispiel .env:**
|
|
```env
|
|
REGISTRY_URL=gitea.moz-tech.de
|
|
NAMESPACE=murat
|
|
REPO_NAME=enerport-web-app
|
|
IMAGE_TAG=latest
|
|
```
|
|
|
|
### Manueller Build
|
|
|
|
#### Vom docker/ Verzeichnis aus:
|
|
|
|
```bash
|
|
cd docker
|
|
docker build -f Dockerfile -t enerport-web-app ..
|
|
```
|
|
|
|
**Wichtig**: Der Build-Kontext muss das Parent-Verzeichnis (`..`) sein, damit alle Source-Dateien verfügbar sind.
|
|
|
|
#### Vom Root-Verzeichnis aus:
|
|
|
|
```bash
|
|
docker build -f docker/Dockerfile -t enerport-web-app .
|
|
```
|
|
|
|
## Container Starten
|
|
|
|
```bash
|
|
docker run -p 8080:8080 enerport-web-app
|
|
```
|
|
|
|
Die Applikation ist dann unter http://localhost:8080 erreichbar und leitet automatisch zur deutschen Lokalisierung um (http://localhost:8080/de/).
|
|
|
|
### Verfügbare Sprachen
|
|
|
|
Die Applikation unterstützt mehrere Sprachen durch i18n:
|
|
- **Deutsch (de)**: http://localhost:8080/de/
|
|
- **Deutsch-Deutschland (de-DE)**: http://localhost:8080/de-DE/
|
|
- **Englisch (en)**: http://localhost:8080/en/
|
|
|
|
## Image zur Registry pushen
|
|
|
|
Nach dem erfolgreichen Build kann das Image mit dem Push-Script zur Gitea Registry hochgeladen werden:
|
|
|
|
```bash
|
|
cd docker
|
|
./push.sh
|
|
```
|
|
|
|
Das Push-Script:
|
|
- ✅ Liest automatisch alle Registry-Daten aus der `.env` Datei
|
|
- ✅ Prüft ob das Image lokal existiert
|
|
- ✅ Authentifiziert sich bei der Gitea Registry mit Token
|
|
- ✅ Pusht das Image zur Registry
|
|
- ✅ Logout nach erfolgreichem Push
|
|
|
|
**Workflow:**
|
|
```bash
|
|
# 1. Image bauen
|
|
./build.sh
|
|
|
|
# 2. Image zur Registry pushen
|
|
./push.sh
|
|
```
|
|
|
|
## CI/CD mit Gitea Actions
|
|
|
|
Für automatische Builds bei jedem Commit auf den `main` Branch wurde ein Gitea Workflow eingerichtet:
|
|
|
|
📄 **Workflow-Datei:** `.gitea/workflows/build-and-push.yaml`
|
|
|
|
Der Workflow:
|
|
- ✅ Wird automatisch bei Push auf `main` ausgeführt
|
|
- ✅ Baut das Docker Image mit `build.sh`
|
|
- ✅ Pusht das Image zur Registry mit `push.sh`
|
|
- ✅ Verwendet Gitea Variables und Secrets (keine .env Datei in Git)
|
|
|
|
**Setup-Anleitung:** Siehe [GITEA_SETUP.md](GITEA_SETUP.md) für die Einrichtung der benötigten Gitea Variables und Secrets.
|
|
|
|
## Hinweise
|
|
|
|
- Die `.dockerignore` Datei im docker/ Verzeichnis verhindert, dass unnötige Dateien ins Image kopiert werden
|
|
- Das finale Image ist optimiert und enthält nur die gebauten statischen Dateien und Nginx
|
|
- Der Nginx-Container läuft unprivileged auf Port 8080 für erhöhte Sicherheit
|
|
- Die Scripts `build.sh` und `push.sh` nutzen die `.env` Datei für zentrale Konfiguration
|
|
- Das Gitea Token in der `.env` Datei sollte niemals in Git committed werden
|
|
- Für CI/CD werden Variables und Secrets aus Gitea verwendet (siehe GITEA_SETUP.md)
|