185 lines
No EOL
4.2 KiB
Markdown
185 lines
No EOL
4.2 KiB
Markdown
# Tschunk Order - Docker Deployment
|
|
|
|
Diese Anleitung beschreibt, wie Sie die Tschunk Order Anwendung mit Docker Compose deployen können.
|
|
|
|
## Voraussetzungen
|
|
|
|
- Docker
|
|
- Docker Compose
|
|
|
|
## Projektstruktur
|
|
|
|
```
|
|
tschunkorder/
|
|
├── docker-compose.yml # Haupt-Konfiguration
|
|
├── frontend/
|
|
│ ├── Dockerfile # Frontend Container
|
|
│ ├── nginx.conf # Frontend Nginx-Konfiguration
|
|
│ └── .dockerignore
|
|
├── backend/
|
|
│ ├── Dockerfile # Backend Container
|
|
│ └── .dockerignore
|
|
└── nginx/
|
|
├── nginx.conf # Haupt-Nginx-Konfiguration
|
|
└── conf.d/
|
|
└── default.conf # Reverse Proxy-Konfiguration
|
|
```
|
|
|
|
## Services
|
|
|
|
### 1. Frontend (Vue.js + Vite)
|
|
- **Port**: Intern 80, extern über Nginx
|
|
- **Technologie**: Vue.js 3 mit Vite
|
|
- **Container**: `tschunk-frontend`
|
|
|
|
### 2. Backend (FastAPI)
|
|
- **Port**: Intern 8000, extern 8000 (optional)
|
|
- **Technologie**: FastAPI mit Uvicorn
|
|
- **Container**: `tschunk-backend`
|
|
|
|
### 3. Nginx Reverse Proxy
|
|
- **Port**: 80 (HTTP), 443 (HTTPS, optional)
|
|
- **Funktion**: Reverse Proxy für Frontend und Backend
|
|
- **Container**: `tschunk-nginx`
|
|
|
|
## Deployment
|
|
|
|
### 1. Anwendung starten
|
|
|
|
```bash
|
|
# Alle Services bauen und starten
|
|
docker-compose up --build
|
|
|
|
# Im Hintergrund starten
|
|
docker-compose up --build -d
|
|
```
|
|
|
|
### 2. Anwendung stoppen
|
|
|
|
```bash
|
|
# Services stoppen
|
|
docker-compose down
|
|
|
|
# Services und Volumes löschen
|
|
docker-compose down -v
|
|
```
|
|
|
|
### 3. Logs anzeigen
|
|
|
|
```bash
|
|
# Alle Logs
|
|
docker-compose logs
|
|
|
|
# Spezifischer Service
|
|
docker-compose logs frontend
|
|
docker-compose logs backend
|
|
docker-compose logs nginx
|
|
|
|
# Logs folgen
|
|
docker-compose logs -f
|
|
```
|
|
|
|
## Zugriff auf die Anwendung
|
|
|
|
- **Frontend**: http://localhost/ (oder IP-Adresse)
|
|
- **Backend API**: http://localhost/api/ (oder IP-Adresse)
|
|
- **WebSocket**: ws://localhost/api/ws (oder IP-Adresse)
|
|
- **Health Check**: http://localhost/health (oder IP-Adresse)
|
|
|
|
## API-Endpunkte
|
|
|
|
- `GET /api/orders` - Alle Bestellungen abrufen
|
|
- `POST /api/orders` - Neue Bestellung erstellen
|
|
- `DELETE /api/orders/{id}` - Bestellung löschen
|
|
- `GET /api/drinks` - Verfügbare Getränke
|
|
|
|
## WebSocket
|
|
|
|
Der WebSocket-Endpunkt ist unter `ws://localhost/api/ws` verfügbar und unterstützt:
|
|
- Echtzeit-Updates bei neuen/gelöschten Bestellungen
|
|
- Ping/Pong für Verbindungsüberwachung
|
|
- Bestellungen erstellen/löschen über WebSocket
|
|
|
|
## Konfiguration
|
|
|
|
### Umgebungsvariablen
|
|
|
|
#### Frontend
|
|
- `VITE_API_BASE_URL`: Backend API URL (Standard: http://backend:8000)
|
|
|
|
#### Backend
|
|
- `PYTHONUNBUFFERED`: Python Output nicht puffern (Standard: 1)
|
|
|
|
### Nginx-Konfiguration
|
|
|
|
Die Nginx-Konfiguration befindet sich in:
|
|
- `nginx/nginx.conf` - Haupt-Konfiguration
|
|
- `nginx/conf.d/default.conf` - Server-Konfiguration
|
|
|
|
#### Features
|
|
- Rate Limiting für API und WebSocket
|
|
- Gzip-Kompression
|
|
- Security Headers
|
|
- WebSocket-Support
|
|
- SPA-Routing für Frontend
|
|
- Vereinfachte Proxy-Logik (alle API-Endpunkte unter /api)
|
|
|
|
## Troubleshooting
|
|
|
|
### Container startet nicht
|
|
```bash
|
|
# Logs prüfen
|
|
docker-compose logs [service-name]
|
|
|
|
# Container neu bauen
|
|
docker-compose build --no-cache [service-name]
|
|
```
|
|
|
|
### Netzwerk-Probleme
|
|
```bash
|
|
# Netzwerk-Status prüfen
|
|
docker network ls
|
|
docker network inspect tschunkorder_tschunk-network
|
|
```
|
|
|
|
### Port-Konflikte
|
|
Falls Port 80 bereits belegt ist, ändern Sie in `docker-compose.yml`:
|
|
```yaml
|
|
nginx:
|
|
ports:
|
|
- "8080:80" # Statt "80:80"
|
|
```
|
|
|
|
## Entwicklung
|
|
|
|
### Hot Reload (Entwicklung)
|
|
Für die Entwicklung können Sie die Services einzeln starten:
|
|
|
|
```bash
|
|
# Backend mit Hot Reload
|
|
cd backend
|
|
uvicorn main:app --reload --host 0.0.0.0 --port 8000
|
|
|
|
# Frontend mit Hot Reload
|
|
cd frontend
|
|
npm run dev
|
|
```
|
|
|
|
### Datenbank-Persistenz
|
|
Die aktuelle Implementierung verwendet eine In-Memory-Datenbank. Für Produktionsumgebungen sollten Sie eine persistente Datenbank hinzufügen.
|
|
|
|
## Sicherheit
|
|
|
|
- Alle Services laufen in isolierten Containern
|
|
- Nginx bietet Rate Limiting und Security Headers
|
|
- Backend läuft als non-root User
|
|
- WebSocket-Verbindungen sind begrenzt
|
|
|
|
## Monitoring
|
|
|
|
### Health Checks
|
|
- Backend: Automatischer Health Check alle 30 Sekunden
|
|
- Nginx: `/health` Endpunkt
|
|
|
|
### Logs
|
|
Alle Services loggen in stdout/stderr und können über `docker-compose logs` abgerufen werden. |