services:

  database:
    image: postgres:16-alpine
    restart: always
    env_file:
      - ./envs/postgres
    volumes:
      - ./configs/postgres/init/:/docker-entrypoint-initdb.d/
      - ./data/postgres/:/var/lib/postgresql/data/
    healthcheck:
      test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
      interval: 5s
      retries: 20

  redis:
    image: redis:alpine
    restart: always
    volumes:
      - ./data/redis/:/data/
    healthcheck:
      test: ["CMD", "redis-cli", "ping", "|", "grep", "PONG"]
      interval: 1s
      timeout: 5s
      retries: 5

  pds-fix-permission:
    image: alpine:latest
    volumes:
      - ./data/pds/:/data/
    command: chown 1000.1000 /data

  bsky-fix-permission:
    image: alpine:latest
    volumes:
      - ./data/bsky/:/data/
    command: chown 1000.1000 /data

  plc:
    ports:
      - 2582:3000
    build:
      context: ./repos/did-method-plc/
      dockerfile: packages/server/Dockerfile
    restart: always
    env_file:
      - ./envs/plc
    depends_on:
      database:
        condition: service_healthy

  pds:
    ports:
      - 2583:3000
    #image: itaru2622/bluesky-atproto-pds
    #image: ghcr.io/bluesky-social/pds:latest
    build:
      context: ./repos/atproto/
      dockerfile: services/pds/Dockerfile
    restart: always
    env_file:
      - ./envs/pds
    volumes:
      - ./data/pds/:/data/
    depends_on:
      database:
        condition: service_healthy
      pds-fix-permission:
        condition: service_completed_successfully

  bgs:
    ports:
      - 2470:2470
    build:
      context: ./repos/indigo/
      dockerfile: cmd/bigsky/Dockerfile
    restart: always
    env_file:
      - ./envs/bgs
    volumes:
      - ./data/bgs/:/data/
    depends_on:
      database:
        condition: service_healthy

  ozone:
    ports:
      - 2585:3000
    build:
      context: ./repos/atproto/
      dockerfile: services/ozone/Dockerfile
    restart: always
    command: node --enable-source-maps api.js
    volumes:
      - ./data/ozone/:/data/
      - ./repos/ozone.js:/app/services/ozone/api.js:ro
    env_file:
      - ./envs/ozone
    healthcheck:
      test: "wget -q --spider http://localhost:3000/xrpc/_health"
      interval: 5s
      retries: 20
    depends_on:
      database:
        condition: service_healthy

  ozone-daemon:
    build:
      context: ./repos/atproto/
      dockerfile: services/ozone/Dockerfile
    restart: always
    command: node --enable-source-maps daemon.js
    env_file:
      - ./envs/ozone
    depends_on:
      ozone:
        condition: service_healthy
      database:
        condition: service_healthy

  social-app:
    ports:
      - 8100:8100
        #image: itaru2622/bluesky-social-app
    build:
      context: ./repos/social-app/
      dockerfile: Dockerfile
    restart: always
    env_file:
      - ./envs/social-app
    command: "/usr/bin/bskyweb serve"

  bsky:
    ports:
      - 2584:2584
    image: itaru2622/bluesky-atproto-bsky
      #build:
      #  context: ./repos/atproto/
      #  dockerfile: services/bsky/Dockerfile
    restart: always
    env_file:
      - ./envs/bsky
    user: root
    volumes:
      - ./data/bsky/:/data/
        #      - ./repos/bsky.js:/app/services/bsky/api.js:ro
    command: node --enable-source-maps api.js
    depends_on:
      database:
        condition: service_healthy
      redis:
        condition: service_healthy
      bsky-fix-permission:
        condition: service_completed_successfully

  feed:
    ports:
      - 2586:2586
    build:
      context: ./repos/feed-generator/
    restart: always
    env_file:
      - ./envs/feed
    volumes:
      - ./data/feed/:/data/