version: '3.8' services: frontend: build: context: ./surfsense_web dockerfile: Dockerfile ports: - "${FRONTEND_PORT:-3000}:3000" volumes: - ./surfsense_web:/app - /app/node_modules depends_on: - backend environment: - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL:-http://backend:8000} backend: build: context: ./surfsense_backend dockerfile: Dockerfile ports: - "${BACKEND_PORT:-8000}:8000" volumes: - ./surfsense_backend:/app depends_on: - db env_file: - ./surfsense_backend/.env environment: - DATABASE_URL=postgresql+asyncpg://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@db:5432/${POSTGRES_DB:-surfsense} - PYTHONPATH=/app - UVICORN_LOOP=asyncio - UNSTRUCTURED_HAS_PATCHED_LOOP=1 db: image: ankane/pgvector:latest ports: - "${POSTGRES_PORT:-5432}:5432" volumes: - postgres_data:/var/lib/postgresql/data environment: - POSTGRES_USER=${POSTGRES_USER:-postgres} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} - POSTGRES_DB=${POSTGRES_DB:-surfsense} pgadmin: image: dpage/pgadmin4 ports: - "${PGADMIN_PORT:-5050}:80" environment: - PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL:-admin@surfsense.com} - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD:-surfsense} volumes: - pgadmin_data:/var/lib/pgadmin depends_on: - db volumes: postgres_data: pgadmin_data: