Initial commit from template
This commit is contained in:
220
.claude/commands/deploy.md
Normal file
220
.claude/commands/deploy.md
Normal file
@@ -0,0 +1,220 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user