version: "3.8" services: postgres: image: postgres:16-alpine env_file: - .env environment: POSTGRES_USER: artdag POSTGRES_DB: artdag volumes: - postgres_data:/var/lib/postgresql/data networks: - internal healthcheck: test: ["CMD-SHELL", "pg_isready -U artdag"] interval: 5s timeout: 5s retries: 5 deploy: placement: constraints: - node.labels.gpu != true ipfs: image: ipfs/kubo:latest ports: - "4002:4001" # Swarm TCP (4002 external, L1 uses 4001) - "4002:4001/udp" # Swarm UDP volumes: - ipfs_data:/data/ipfs networks: - internal - externalnet # For gateway access deploy: replicas: 1 restart_policy: condition: on-failure placement: constraints: - node.labels.gpu != true l2-server: image: registry.rose-ash.com:5000/l2-server:latest env_file: - .env environment: - ARTDAG_DATA=/data/l2 - IPFS_API=/dns/ipfs/tcp/5001 - ANCHOR_BACKUP_DIR=/data/anchors # DATABASE_URL, ARTDAG_DOMAIN, ARTDAG_USER, JWT_SECRET from .env file volumes: - l2_data:/data/l2 # Still needed for RSA keys - anchor_backup:/data/anchors # Persistent anchor proofs (survives DB wipes) networks: - internal - externalnet depends_on: - postgres - ipfs deploy: replicas: 1 restart_policy: condition: on-failure placement: constraints: - node.labels.gpu != true volumes: l2_data: postgres_data: ipfs_data: anchor_backup: # Persistent - don't delete when resetting DB networks: internal: externalnet: external: true