version: "3.8" services: n8n: image: n8nio/n8n:latest restart: unless-stopped ports: - "5678:5678" environment: - N8N_HOST=localhost - N8N_PORT=5678 - N8N_PROTOCOL=http - WEBHOOK_URL=http://localhost:5678/ - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY:-change-me-in-production} # Database - DB_TYPE=postgresdb - DB_POSTGRESDB_HOST=postgres - DB_POSTGRESDB_PORT=5432 - DB_POSTGRESDB_DATABASE=n8n - DB_POSTGRESDB_USER=n8n - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD:-n8n_password} # Allow running shell commands (needed for our Python crawlers) - N8N_ALLOW_EXEC=true # Timezone - GENERIC_TIMEZONE=Australia/Sydney - TZ=Australia/Sydney volumes: - n8n_data:/home/node/.n8n # Mount our crawler code so N8N can execute it - ../crawlers:/opt/crawlers:ro - ../database:/opt/database depends_on: postgres: condition: service_healthy postgres: image: postgres:16-alpine restart: unless-stopped environment: - POSTGRES_DB=n8n - POSTGRES_USER=n8n - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-n8n_password} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U n8n"] interval: 5s timeout: 5s retries: 5 volumes: n8n_data: postgres_data: