# OpenCRM Docker Deployment

## Schnellstart

1. **Umgebungsvariablen konfigurieren:**
   ```bash
   cd docker
   cp .env.example .env
   nano .env  # Sichere Werte setzen
   ```

2. **Container starten (erster Start mit RUN_SEED=true):**
   ```bash
   docker compose up -d
   ```

   Beim ersten Start wird automatisch:
   - Auf die Datenbank gewartet
   - Migrationen ausgeführt
   - Seed-Daten geladen (wenn `RUN_SEED=true`)

3. **Nach erfolgreicher Installation:**
   ```bash
   # RUN_SEED in .env auf false setzen
   sed -i 's/RUN_SEED=true/RUN_SEED=false/' .env
   ```

4. **Anwendung aufrufen:**
   - Mit Domain: `https://your-domain.com`
   - Lokal: `http://localhost`

5. **Login:**
   - E-Mail: `admin@admin.com`
   - Passwort: `admin`

## Architektur

```
                    ┌─────────────┐
                    │   Caddy     │
                    │  (SSL/TLS)  │
                    │   :80/:443  │
                    └──────┬──────┘
                           │
                    ┌──────▼──────┐
                    │   OpenCRM   │
                    │   (Node.js) │
                    │    :3001    │
                    └──────┬──────┘
                           │
                    ┌──────▼──────┐
                    │   MariaDB   │
                    │    :3306    │
                    └─────────────┘
```

## Befehle

### Container verwalten
```bash
# Starten
docker compose up -d

# Stoppen
docker compose down

# Logs anzeigen
docker compose logs -f app

# Neustart
docker compose restart app
```

### Datenbank
```bash
# Migration ausführen
docker compose exec app npx prisma migrate deploy

# Seed-Daten laden
docker compose exec app npx tsx prisma/seed.ts

# Prisma Studio (Datenbank-UI)
docker compose exec app npx prisma studio
```

### Backup & Restore
```bash
# Backup-Verzeichnis ist unter /app/backups gemountet
# Backups werden über die Anwendung erstellt/wiederhergestellt
```

### Update
```bash
# Image neu bauen und Container aktualisieren
docker compose build --no-cache
docker compose up -d
# Migrationen werden automatisch beim Start ausgeführt
```

## Volumes

| Volume | Beschreibung |
|--------|--------------|
| `mariadb_data` | Datenbank-Dateien |
| `uploads_data` | Hochgeladene Dokumente |
| `backups_data` | Backup-Dateien |
| `caddy_data` | SSL-Zertifikate |
| `caddy_config` | Caddy-Konfiguration |

## SSL-Zertifikat

Caddy holt automatisch ein Let's Encrypt Zertifikat wenn:
- Die Domain in `.env` korrekt gesetzt ist
- Port 80 und 443 von außen erreichbar sind
- DNS auf den Server zeigt

Für lokale Entwicklung mit `DOMAIN=localhost` wird ein selbstsigniertes Zertifikat verwendet.

## Troubleshooting

### Container startet nicht
```bash
docker compose logs app
```

### Datenbank-Verbindung fehlgeschlagen
```bash
# Warten bis MariaDB bereit ist
docker compose logs db
```

### SSL-Zertifikat Probleme
```bash
docker compose logs caddy
# Caddy-Daten zurücksetzen
docker compose down
docker volume rm opencrm_caddy_data opencrm_caddy_config
docker compose up -d
```
