version: '3.8' services: n8n: image: n8nio/n8n:1.76.1 # Aktuelle stabile Version (Pinning empfohlen!) container_name: n8n restart: always ports: - "5678:5678" environment: - GENERIC_TIMEZONE=${TIMEZONE} - TZ=${TIMEZONE} # Datenbank-Verbindung - DB_TYPE=postgresdb - DB_POSTGRESDB_HOST=postgres - DB_POSTGRESDB_PORT=5432 - DB_POSTGRESDB_DATABASE=${DB_NAME} - DB_POSTGRESDB_USER=${DB_USER} - DB_POSTGRESDB_PASSWORD=${DB_PASSWORD} # Webhook/Proxy Settings (Wichtig für externe Erreichbarkeit) - N8N_HOST=${DOMAIN_NAME} - N8N_PORT=5678 - N8N_PROTOCOL=https - WEBHOOK_URL=https://${DOMAIN_NAME}/ # Auto-Cleanup (Verhindert Datenbank-Explosion) - EXECUTIONS_DATA_PRUNE=true - EXECUTIONS_DATA_MAX_AGE=336 # Behalte Daten für 14 Tage (336 Stunden) - EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000 # Max 50k Einträge volumes: - n8n_data:/home/node/.n8n depends_on: postgres: condition: service_healthy networks: - n8n-net - npm-network postgres: image: postgres:16-alpine # Neueste stabile Postgres Version container_name: n8n-db restart: always environment: - POSTGRES_USER=${DB_USER} - POSTGRES_PASSWORD=${DB_PASSWORD} - POSTGRES_DB=${DB_NAME} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"] interval: 5s timeout: 5s retries: 5 networks: - n8n-net volumes: n8n_data: postgres_data: networks: n8n-net: internal: true npm-network: external: true