3.0 KiB
3.0 KiB
UI Service - Docker
FastAPI + Jinja2 + HTMX Dashboard für Home Automation
Build
docker build -t ui:dev -f apps/ui/Dockerfile .
Run
Lokal
docker run --rm -p 8002:8002 -e API_BASE=http://localhost:8001 ui:dev
Docker Compose
services:
ui:
build:
context: .
dockerfile: apps/ui/Dockerfile
ports:
- "8002:8002"
environment:
- API_BASE=http://api:8001
depends_on:
- api
Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: ui
spec:
replicas: 2
selector:
matchLabels:
app: ui
template:
metadata:
labels:
app: ui
spec:
containers:
- name: ui
image: ui:dev
ports:
- containerPort: 8002
env:
- name: API_BASE
value: "http://api-service:8001"
livenessProbe:
httpGet:
path: /health
port: 8002
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 8002
initialDelaySeconds: 3
periodSeconds: 5
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
name: ui-service
spec:
selector:
app: ui
ports:
- protocol: TCP
port: 8002
targetPort: 8002
type: LoadBalancer
Umgebungsvariablen
| Variable | Default | Beschreibung |
|---|---|---|
API_BASE |
http://api:8001 |
URL des API-Services |
UI_PORT |
8002 |
Port der UI-Anwendung |
PYTHONDONTWRITEBYTECODE |
1 |
Keine .pyc Files |
PYTHONUNBUFFERED |
1 |
Unbuffered Output |
Endpoints
GET /- DashboardGET /health- Health CheckGET /dashboard- Dashboard (alias)
Security
- Container läuft als non-root User
app(UID: 10001) - Minimales Python 3.11-slim Base Image
- Keine unnötigen System-Pakete
- Health Check integriert
Features
- ✅ FastAPI Backend
- ✅ Jinja2 Templates
- ✅ HTMX für reactive UI
- ✅ Server-Sent Events (SSE)
- ✅ Responsive Design
- ✅ Docker & Kubernetes ready
- ✅ Health Check Endpoint
- ✅ Non-root Container
- ✅ Configurable API Backend
Entwicklung
Lokales Testing
# Build
docker build -t ui:dev -f apps/ui/Dockerfile .
# Run
docker run -d --name ui-test -p 8002:8002 -e API_BASE=http://localhost:8001 ui:dev
# Logs
docker logs -f ui-test
# Health Check
curl http://localhost:8002/health
# Cleanup
docker stop ui-test && docker rm ui-test
Tests
bash /tmp/test_ui_dockerfile.sh
Troubleshooting
Container startet nicht
docker logs ui-test
Health Check schlägt fehl
docker exec ui-test curl http://localhost:8002/health
API_BASE nicht korrekt
docker logs ui-test 2>&1 | grep "UI using API_BASE"
Non-root Verifizieren
docker exec ui-test id
# Sollte zeigen: uid=10001(app) gid=10001(app)