<@ULVA73B9P> kannst du mir ein komplettes docker-c...
# ask-marvin
m
@Marvin kannst du mir ein komplettes docker-compose geben welches ich zum lokalen testen von prefect benutzen kann
m
thought for 38.3 seconds
Basierend auf den Recherchen, hier ist ein komplettes
docker-compose.yml
Setup für eine lokale Prefect-Testumgebung:
Copy code
yaml
version: '3.8'

services:
  server:
    image: prefecthq/prefect:2-latest
    restart: always
    volumes:
      - prefect_data:/root/.prefect
    environment:
      - PREFECT_UI_API_URL=<http://localhost/api>
      - PREFECT_API_URL=<http://localhost/api>
      - PREFECT_SERVER_API_HOST=0.0.0.0
      - PREFECT_SERVER_API_PORT=4200
    ports:
      - "4200:4200"
    command: prefect server start

  nginx:
    image: nginx:latest
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - server

volumes:
  prefect_data:
Sie benötigen auch eine
nginx.conf
Datei im gleichen Verzeichnis:
Copy code
nginx
server {
    listen 80;
    server_name localhost;

    location /api/ {
        proxy_pass <http://server:4200/api/;>
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location / {
        proxy_pass <http://server:4200/;>
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Um diese Umgebung zu starten: 1. Speichern Sie beide Dateien in einem Verzeichnis 2. Öffnen Sie ein Terminal in diesem Verzeichnis 3. Führen Sie aus:
Copy code
bash
docker compose up -d
Nach dem Start können Sie auf die Prefect UI zugreifen unter: - http://localhost Für die Konfiguration Ihres Prefect Clients:
Copy code
bash
prefect config set PREFECT_API_URL=<http://localhost/api>
Einige wichtige Hinweise: - Diese Konfiguration verwendet Nginx als Reverse Proxy - Die Prefect-Daten werden in einem Docker-Volume persistiert - Der Server ist über Port 80 erreichbar - Die Konfiguration enthält die notwendigen Umgebungsvariablen für die korrekte Kommunikation zwischen UI und API Sie können die Logs überprüfen mit:
Copy code
bash
docker compose logs -f
Und die Services stoppen mit:
Copy code
bash
docker compose down
Wenn Sie die Daten komplett zurücksetzen möchten:
Copy code
bash
docker compose down -v
Diese Konfiguration ist ideal für lokale Entwicklung und Tests. Für Produktionsumgebungen würden Sie möglicherweise zusätzliche Sicherheitsmaßnahmen und Konfigurationen benötigen.
m
@Marvin kannst du mir eine variante mit postgres geben?
m
thought for 162.5 seconds
Hier ist eine erweiterte
docker-compose.yml
mit PostgreSQL:
Copy code
yaml
version: '3.8'

services:
  postgres:
    image: postgres:15
    restart: always
    environment:
      - POSTGRES_USER=prefect
      - POSTGRES_PASSWORD=prefect
      - POSTGRES_DB=prefect
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U prefect"]
      interval: 10s
      timeout: 5s
      retries: 5

  server:
    image: prefecthq/prefect:2-latest
    restart: always
    volumes:
      - prefect_data:/root/.prefect
    environment:
      - PREFECT_UI_API_URL=<http://localhost/api>
      - PREFECT_API_URL=<http://localhost/api>
      - PREFECT_SERVER_API_HOST=0.0.0.0
      - PREFECT_SERVER_API_PORT=4200
      # PostgreSQL Konfiguration
      - PREFECT_API_DATABASE_CONNECTION_URL=<postgresql+asyncpg://prefect:prefect@postgres:5432/prefect>
    ports:
      - "4200:4200"
    command: prefect server start
    depends_on:
      postgres:
        condition: service_healthy

  nginx:
    image: nginx:latest
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - server

volumes:
  postgres_data:
  prefect_data:
Die
nginx.conf
bleibt unverändert:
Copy code
nginx
server {
    listen 80;
    server_name localhost;

    location /api/ {
        proxy_pass <http://server:4200/api/;>
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location / {
        proxy_pass <http://server:4200/;>
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Die wichtigsten Änderungen und Hinweise: 1. Neuer PostgreSQL Service: - Verwendet PostgreSQL 15 - Eigenes Volume für Datenpersistenz - Healthcheck zur Überprüfung der Datenbankbereitschaft - Standardzugangsdaten (für Entwicklung): - Benutzer:
prefect
- Passwort:
prefect
- Datenbank:
prefect
2. Prefect Server Konfiguration: - Neue Umgebungsvariable für PostgreSQL-Verbindung - Wartet auf PostgreSQL-Bereitschaft durch
depends_on
condition Verwendung: 1. Dateien speichern und Terminal öffnen 2. Start der Services:
Copy code
bash
docker compose up -d
3. Überprüfen der Logs:
Copy code
bash
docker compose logs -f
4. Client-Konfiguration:
Copy code
bash
prefect config set PREFECT_API_URL=<http://localhost/api>
5. Zugriff auf die UI: - http://localhost Zum Stoppen und Aufräumen:
Copy code
bash
# Stoppen der Services
docker compose down

# Komplettes Aufräumen inkl. Volumes (löscht alle Daten!)
docker compose down -v
Wichtige Sicherheitshinweise: - Die verwendeten Zugangsdaten sind nur für Entwicklungszwecke geeignet - Für Produktionsumgebungen sollten Sie: - Sichere Passwörter verwenden - Umgebungsvariablen aus einer
.env
Datei laden - Zusätzliche Sicherheitsmaßnahmen implementieren - Backup-Strategien einrichten Sie können die PostgreSQL-Datenbank auch direkt erreichen über:
Copy code
bash
docker compose exec postgres psql -U prefect -d prefect
Diese Konfiguration bietet eine robustere Lösung mit persistenter Datenspeicherung in PostgreSQL, was besonders nützlich ist für: - Längerfristige Datenspeicherung - Bessere Skalierbarkeit - Einfachere Backups - Bessere Performance bei größeren Datenmengen