services:
  relay:
    build: .
    container_name: nostr-ts-relay
    environment:
      DB_HOST: db
      DB_PORT: 5432
      DB_USER: nostr_ts_relay
      DB_PASSWORD: nostr_ts_relay
      DB_NAME: nostr_ts_relay
      DB_MIN_POOL_SIZE: 1
      DB_MAX_POOL_SIZE: 2
      NOSTR_CONFIG_DIR: /home/node/
      SERVER_PORT: 8008
      DEBUG: worker:event-message-handler,worker:web-socket-server-adapter
    user: node:node
    volumes:
      - $HOME/.nostr:/home/node/
    ports:
      - 8008:8008
    depends_on:
      db:
        condition: service_healthy
      migrations:
        condition: service_completed_successfully
    restart: on-failure
    networks:
      default:
        ipv4_address: 10.10.10.2
  db:
    image: postgres
    container_name: db
    environment:
      POSTGRES_USER: nostr_ts_relay
      POSTGRES_PASSWORD: nostr_ts_relay
    volumes:
      - pgdata:/var/lib/postgresql/data/
    networks:
      default:
        ipv4_address: 10.10.10.3
    restart: always
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U nostr_ts_relay"]
      interval: 5s
      timeout: 5s
      retries: 5
  migrations:
    image: node:18-alpine3.16
    container_name: migrations
    environment:
      DB_HOST: db
      DB_PORT: 5432
      DB_USER: nostr_ts_relay
      DB_PASSWORD: nostr_ts_relay
      DB_NAME: nostr_ts_relay
    entrypoint:
      - sh
      - -c
      - 'cd code && npm install -g knex@2.3.0 && npm install knex --quiet && npm run db:migrate'
    volumes:
      - ./package.json:/code/package.json
      - ./migrations:/code/migrations
      - ./knexfile.js:/code/knexfile.js
    depends_on:
      - db
    networks:
      default:
        ipv4_address: 10.10.10.254

networks:
  default:
    name: nostr-ts-relay
    ipam:
      driver: default
      config:
        - subnet: 10.10.10.0/24

volumes:
  pgdata: