# Docker Registry Credentials Testen

Dieses Dokument erklärt, wie du die Docker Registry Credentials testen kannst.

## Lokales Testen

### Voraussetzungen

1. Docker muss installiert und laufend sein
2. Curl muss verfügbar sein (wird automatisch installiert falls fehlend)

### Verwendung

```bash
# Setze die Credentials als Environment-Variablen
export REGISTRY_USER="admin"
export REGISTRY_PASSWORD="dein-registry-passwort"

# Führe das Test-Script aus
./scripts/test-registry-credentials.sh
```

### Mit expliziten Werten

```bash
REGISTRY_USER="admin" \
REGISTRY_PASSWORD="dein-passwort" \
REGISTRY_DOMAIN="registry.michaelschiemer.de" \
REGISTRY_HOST="94.16.110.151" \
REGISTRY_PORT="5000" \
./scripts/test-registry-credentials.sh
```

## Was wird getestet?

Das Script führt folgende Tests durch:

### 1. HTTP Connectivity
- Testet ob die Registry über HTTP erreichbar ist (`http://94.16.110.151:5000`)
- Erwartet Status 401 (Auth erforderlich) oder 200

### 2. HTTPS Connectivity
- Testet ob die Registry über HTTPS erreichbar ist (`https://registry.michaelschiemer.de`)
- Erwartet Status 401 (Auth erforderlich) oder 200

### 3. Docker Login über HTTP
- Versucht Docker Login über HTTP
- Benötigt `insecure-registry` Konfiguration im Docker-daemon

### 4. Docker Login über HTTPS
- Versucht Docker Login über HTTPS
- Keine zusätzliche Konfiguration nötig (empfohlen)

### 5. Registry API Zugriff
- Testet ob die Registry API funktioniert
- Listet verfügbare Repositories auf

## Test in CI/CD

### Via Gitea Workflow

Das Script kann auch in einem Gitea Workflow verwendet werden:

```yaml
- name: Test Registry Credentials
  shell: bash
  env:
    REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
    REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
  run: |
    ./scripts/test-registry-credentials.sh
```

### Workflow ausführen

Es gibt einen dedizierten Workflow `.gitea/workflows/test-registry.yml`:

1. Gehe zu: **Actions** → **Test Registry Credentials**
2. Klicke auf **Run workflow**
3. Der Workflow testet automatisch die Credentials aus Gitea Secrets

## Troubleshooting

### Problem: "REGISTRY_PASSWORD ist nicht gesetzt"

**Lösung:**
```bash
export REGISTRY_PASSWORD="dein-passwort"
```

### Problem: "Unauthorized (401)" beim Login

**Ursache:** Falsche Credentials

**Lösung:**
1. Prüfe `REGISTRY_USER` - sollte `admin` sein (oder der richtige Username)
2. Prüfe `REGISTRY_PASSWORD` - muss mit dem Passwort in `deployment/stacks/registry/auth/htpasswd` übereinstimmen
3. Prüfe Gitea Secrets:
   - Repository → Settings → Secrets
   - Stelle sicher, dass `REGISTRY_USER` und `REGISTRY_PASSWORD` korrekt sind

### Problem: "HTTP response to HTTPS client"

**Ursache:** Docker versucht HTTPS, aber Registry läuft auf HTTP

**Lösung:**
- Für HTTP: Docker-daemon muss mit `--insecure-registry` konfiguriert werden
- Oder verwende HTTPS-Zugriff über `registry.michaelschiemer.de` (empfohlen)

### Problem: "Registry nicht erreichbar"

**Ursache:** Registry läuft nicht oder Netzwerk-Problem

**Lösung:**
```bash
# Prüfe ob Registry läuft
docker ps | grep registry

# Prüfe Registry-Logs
docker logs registry

# Prüfe Netzwerk
curl -v http://94.16.110.151:5000/v2/
```

### Problem: "404" bei HTTPS

**Ursache:** Traefik-Routing ist nicht richtig konfiguriert

**Lösung:**
1. Prüfe Traefik Labels in `deployment/stacks/registry/docker-compose.yml`
2. Prüfe ob Registry im `traefik-public` Netzwerk ist
3. Prüfe DNS-Konfiguration für `registry.michaelschiemer.de`

## Passwort prüfen/ändern

### Passwort auf dem Server prüfen

```bash
ssh deploy@94.16.110.151
cd ~/deployment/stacks/registry
cat auth/htpasswd
```

### Neues Passwort setzen

```bash
ssh deploy@94.16.110.151
cd ~/deployment/stacks/registry

# Neues Passwort setzen
htpasswd -B auth/htpasswd admin

# Registry neu starten
docker compose restart registry
```

Dann in Gitea Secrets aktualisieren:
- Repository → Settings → Secrets
- `REGISTRY_PASSWORD` mit neuem Passwort aktualisieren

## Script-Output

### Erfolgreich

```
✅ Docker ist verfügbar
✅ curl ist verfügbar
✅ Registry erreichbar über HTTPS (Status: 401 - Auth erforderlich, das ist gut!)
✅ Docker Login erfolgreich!
✅ Credentials sind korrekt und funktionieren!
```

### Fehlgeschlagen

```
❌ Docker Login fehlgeschlagen (Exit Code: 1)
⚠️  Fehler: Unauthorized (401)
ℹ️  Die Credentials sind falsch:
ℹ️    - Username: admin
ℹ️    - Password Länge: 24 Zeichen
```

## Integration in CI/CD

Das Script kann in jedem Workflow-Step verwendet werden:

```yaml
- name: Verify Registry Access
  env:
    REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
    REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
  run: |
    ./scripts/test-registry-credentials.sh
```

Falls das Script fehlschlägt (Exit Code 1), wird der Workflow gestoppt und du bekommst klare Fehlermeldungen.
