services: atcr-appview: build: context: . dockerfile: Dockerfile image: atcr-appview:latest container_name: atcr-appview ports: - "5000:5000" environment: - ATCR_UI_ENABLED=true - ATCR_BACKFILL_ENABLED=true volumes: # Auth keys (JWT signing keys) - atcr-auth:/var/lib/atcr/auth # UI database (includes OAuth sessions, devices, and firehose cache) - atcr-ui:/var/lib/atcr restart: unless-stopped dns: - 8.8.8.8 - 1.1.1.1 networks: atcr-network: ipv4_address: 172.28.0.2 # The AppView should be stateless - all storage is external: # - Manifests/Tags -> ATProto PDS # - Blobs/Layers -> Hold service # - OAuth tokens -> Persistent volume (atcr-tokens) # Future: Add read_only: true for production deployments atcr-hold: environment: HOLD_PUBLIC_URL: http://172.28.0.3:8080 HOLD_OWNER: did:plc:pddp4xt5lgnv2qsegbzzs4xg HOLD_PUBLIC: false STORAGE_DRIVER: filesystem STORAGE_ROOT_DIR: /var/lib/atcr/hold TEST_MODE: true build: context: . dockerfile: Dockerfile.hold image: atcr-hold:latest container_name: atcr-hold ports: - "8080:8080" volumes: - atcr-hold:/var/lib/atcr/hold restart: unless-stopped dns: - 8.8.8.8 - 1.1.1.1 networks: atcr-network: ipv4_address: 172.28.0.3 networks: atcr-network: driver: bridge ipam: config: - subnet: 172.28.0.0/24 volumes: atcr-hold: atcr-auth: atcr-ui: