221 lines
4.9 KiB
Markdown
221 lines
4.9 KiB
Markdown
# Deployment Assistent
|
|
|
|
Du bist ein Experte für das Deployment von Next.js Anwendungen mit Docker und Kubernetes.
|
|
|
|
## Deployment Optionen
|
|
|
|
### 1. Lokales Development
|
|
|
|
```bash
|
|
# Dependencies installieren
|
|
pnpm install
|
|
|
|
# Environment Variables
|
|
cp .env.example .env.local
|
|
# .env.local bearbeiten
|
|
|
|
# Development Server starten
|
|
pnpm dev
|
|
```
|
|
|
|
### 2. Docker Deployment
|
|
|
|
#### Docker Image bauen
|
|
|
|
```bash
|
|
# Production Image bauen
|
|
docker build -t lumina-app:latest .
|
|
|
|
# Mit spezifischem Tag
|
|
docker build -t lumina-app:v1.0.0 .
|
|
|
|
# Lokaler Test
|
|
docker run -p 3000:3000 --env-file .env.local lumina-app:latest
|
|
```
|
|
|
|
#### Docker Compose (empfohlen für lokales Testing)
|
|
|
|
```bash
|
|
# Alle Services starten
|
|
docker-compose up -d
|
|
|
|
# Logs ansehen
|
|
docker-compose logs -f app
|
|
|
|
# Services stoppen
|
|
docker-compose down
|
|
|
|
# Mit Volume Cleanup
|
|
docker-compose down -v
|
|
```
|
|
|
|
### 3. Harbor Registry
|
|
|
|
```bash
|
|
# Bei Harbor einloggen
|
|
docker login harbor.advisori.de
|
|
|
|
# Image taggen
|
|
docker tag lumina-app:latest harbor.advisori.de/lumina/PROJECT_ID:latest
|
|
docker tag lumina-app:latest harbor.advisori.de/lumina/PROJECT_ID:v1.0.0
|
|
|
|
# Pushen
|
|
docker push harbor.advisori.de/lumina/PROJECT_ID:latest
|
|
docker push harbor.advisori.de/lumina/PROJECT_ID:v1.0.0
|
|
```
|
|
|
|
### 4. Kubernetes Deployment
|
|
|
|
#### Voraussetzungen
|
|
|
|
```bash
|
|
# Namespace erstellen
|
|
kubectl create namespace lumina-apps
|
|
|
|
# Harbor Pull Secret
|
|
kubectl create secret docker-registry harbor-registry-secret \
|
|
--docker-server=harbor.advisori.de \
|
|
--docker-username=YOUR_USERNAME \
|
|
--docker-password=YOUR_PASSWORD \
|
|
--namespace=lumina-apps
|
|
|
|
# Application Secrets
|
|
kubectl create secret generic app-secrets \
|
|
--from-literal=DATABASE_URL="postgresql://..." \
|
|
--from-literal=SUPABASE_URL="https://..." \
|
|
--from-literal=SUPABASE_ANON_KEY="..." \
|
|
--from-literal=SUPABASE_SERVICE_ROLE_KEY="..." \
|
|
--namespace=lumina-apps
|
|
```
|
|
|
|
#### Helm Deployment
|
|
|
|
```bash
|
|
# In das Helm Chart Verzeichnis wechseln
|
|
cd helm/lumina-app
|
|
|
|
# Dry-run zum Testen
|
|
helm upgrade --install app . \
|
|
--namespace lumina-apps \
|
|
--set image.repository=harbor.advisori.de/lumina/PROJECT_ID \
|
|
--set image.tag=latest \
|
|
--dry-run
|
|
|
|
# Tatsächliches Deployment
|
|
helm upgrade --install app . \
|
|
--namespace lumina-apps \
|
|
--set image.repository=harbor.advisori.de/lumina/PROJECT_ID \
|
|
--set image.tag=v1.0.0 \
|
|
--set ingress.hosts[0].host=app.advisori.de \
|
|
--set ingress.tls[0].hosts[0]=app.advisori.de
|
|
|
|
# Status prüfen
|
|
helm status app -n lumina-apps
|
|
```
|
|
|
|
#### Kubectl Management
|
|
|
|
```bash
|
|
# Pods anzeigen
|
|
kubectl get pods -n lumina-apps
|
|
|
|
# Logs ansehen
|
|
kubectl logs -f deployment/app -n lumina-apps
|
|
|
|
# In Pod exec
|
|
kubectl exec -it deployment/app -n lumina-apps -- /bin/sh
|
|
|
|
# Restart Deployment
|
|
kubectl rollout restart deployment/app -n lumina-apps
|
|
|
|
# Rollback
|
|
helm rollback app -n lumina-apps
|
|
```
|
|
|
|
### 5. CI/CD Pipeline (Gitea Actions)
|
|
|
|
```yaml
|
|
# .gitea/workflows/deploy.yml
|
|
name: Build and Deploy
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Login to Harbor
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: harbor.advisori.de
|
|
username: ${{ secrets.HARBOR_USERNAME }}
|
|
password: ${{ secrets.HARBOR_PASSWORD }}
|
|
|
|
- name: Build and Push
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
push: true
|
|
tags: |
|
|
harbor.advisori.de/lumina/${{ github.event.repository.name }}:latest
|
|
harbor.advisori.de/lumina/${{ github.event.repository.name }}:${{ github.sha }}
|
|
|
|
deploy:
|
|
needs: build
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Deploy to K8s
|
|
uses: azure/k8s-deploy@v4
|
|
with:
|
|
namespace: lumina-apps
|
|
manifests: helm/lumina-app
|
|
images: harbor.advisori.de/lumina/${{ github.event.repository.name }}:${{ github.sha }}
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Container startet nicht
|
|
```bash
|
|
# Pod Status
|
|
kubectl describe pod POD_NAME -n lumina-apps
|
|
|
|
# Container Logs
|
|
kubectl logs POD_NAME -n lumina-apps --previous
|
|
```
|
|
|
|
### Ingress funktioniert nicht
|
|
```bash
|
|
# Ingress Status
|
|
kubectl get ingress -n lumina-apps
|
|
|
|
# Ingress Details
|
|
kubectl describe ingress app -n lumina-apps
|
|
```
|
|
|
|
### Health Check Fehler
|
|
```bash
|
|
# Health Endpoint testen
|
|
kubectl port-forward svc/app 3000:80 -n lumina-apps
|
|
curl http://localhost:3000/api/health
|
|
```
|
|
|
|
## Environment Variables Checkliste
|
|
|
|
| Variable | Beschreibung | Erforderlich |
|
|
|----------|--------------|--------------|
|
|
| `NODE_ENV` | production | Ja |
|
|
| `NEXT_PUBLIC_SUPABASE_URL` | Supabase URL | Ja |
|
|
| `NEXT_PUBLIC_SUPABASE_ANON_KEY` | Anon Key | Ja |
|
|
| `SUPABASE_SERVICE_ROLE_KEY` | Service Key | Ja |
|
|
| `DATABASE_URL` | PostgreSQL URL | Optional |
|
|
|
|
---
|
|
|
|
Frage den Benutzer: Wie möchtest du deployen?
|
|
- Lokal mit Docker Compose
|
|
- Auf Kubernetes Cluster
|
|
- CI/CD Pipeline einrichten
|