version: '3.9'
services:
  jekyll:
    image: jekyll/jekyll:4.0
    container_name: pages
    restart: always
    volumes:
      - .:/usr/src/robosats
    command: bash -c "cd /usr/src/robosats/docs/
            && bundle install
            && bundle exec jekyll serve --force_polling -H 0.0.0.0 -P 4000"
    ports:
      - 4000:4000

  redis:
    image: redis:6.2.6
    container_name: redis
    restart: always
    volumes:
      - redisdata:/data
    network_mode: service:tor

  backend:
    build: .
    image: backend
    container_name: django-dev
    restart: always
    depends_on:
      - bitcoind
      - lnd
      - redis
    environment:
      DEVELOPMENT: 1
    volumes:
      - .:/usr/src/robosats
      - ./node/lnd:/lnd
      - ./node/cln:/cln
    network_mode: service:tor
    command: python3 -u manage.py runserver 0.0.0.0:8000

  frontend:
    build: ./frontend
    container_name: npm-dev
    restart: always
    command: npm run dev
    volumes:
      - ./frontend:/usr/src/frontend
      - ./mobile:/usr/src/mobile

  nodeapp: # Umbrel / Citadel app
    build: ./nodeapp
    container_name: nodeapp-dev
    restart: always
    environment:
      TOR_PROXY_IP: 127.0.0.1
      TOR_PROXY_PORT: 9050
    network_mode: service:tor
    volumes:
      - ./nodeapp/:/usr/src/robosats/
      - ./nodeapp/nginx.conf:/etc/nginx/nginx.conf
      - ./frontend/static:/usr/src/robosats/static

  clean-orders:
    image: backend
    restart: always
    container_name: clord-dev
    environment:
      SKIP_COLLECT_STATIC: "true"
    command: python3 manage.py clean_orders
    volumes:
      - .:/usr/src/robosats
      - ./node/lnd:/lnd
      - ./node/cln:/cln
    network_mode: service:tor

  follow-invoices:
    image: backend
    container_name: invo-dev
    restart: always
    depends_on:
      - bitcoind
      - lnd
    environment:
      SKIP_COLLECT_STATIC: "true"
    command: python3 manage.py follow_invoices
    volumes:
      - .:/usr/src/robosats
      - ./node/lnd:/lnd
      - ./node/cln:/cln
    network_mode: service:tor

  telegram-watcher:
    image: backend
    container_name: tg-dev
    restart: always
    environment:
      SKIP_COLLECT_STATIC: "true"
    command: python3 manage.py telegram_watcher
    volumes:
      - .:/usr/src/robosats
      - ./node/lnd:/lnd
      - ./node/cln:/cln
    network_mode: service:tor

  celery-worker:
    image: backend
    container_name: cele-worker-dev
    restart: always
    environment:
      REDIS_URL: redis://localhost:6379
      SKIP_COLLECT_STATIC: "true"
    volumes:
      - .:/usr/src/robosats
      - ./node/lnd:/lnd
      - ./node/cln:/cln
    command: celery -A robosats worker --loglevel=INFO --concurrency 4 --max-tasks-per-child=4 --max-memory-per-child=200000
    depends_on:
      - redis
    network_mode: service:tor

  celery-beat:
    image: backend
    container_name: cele-beat-dev
    restart: always
    environment:
      REDIS_URL: redis://localhost:6379
      SKIP_COLLECT_STATIC: "true"
    command: celery -A robosats beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
    volumes:
      - .:/usr/src/robosats
      - ./node/lnd:/lnd
      - ./node/cln:/cln
    depends_on:
      - redis
    network_mode: service:tor

  i2p:
    image: geti2p/i2p
    container_name: i2p-dev
    network_mode: host
    volumes:
      - ./node/i2p/i2pconfig:/i2p/.i2p

  tor:
    build: ./docker/tor
    container_name: tor-dev
    restart: always
    environment:
      LOCAL_USER_ID: 1000
      LOCAL_GROUP_ID: 1000
    volumes:
      - ./node/tor/data:/var/lib/tor
      - ./node/tor/config:/etc/tor
    ports:
      - 8000:8000     # dev frontend build
      - 12596:12596   # umbrel frontend

  lnd:
    build: ./docker/lnd
    restart: always
    network_mode: service:tor
    container_name: lnd-dev
    depends_on:
      - tor
      - bitcoind
    volumes:
      - ./node/tor/data:/var/lib/tor
      - ./node/tor/config:/etc/tor
      - ./node/lnd:/home/lnd/.lnd
      - ./node/lnd:/root/.lnd
    command: lnd
    environment:
      LOCAL_USER_ID: 1000
      LOCAL_GROUP_ID: 1000
      LND_RPC_PORT: 10009
      LND_REST_PORT: 8080
      AUTO_UNLOCK_PWD: ${AUTO_UNLOCK_PWD}

  cln:
    build: ./docker/cln
    restart: always
    network_mode: service:tor
    container_name: cln-dev
    depends_on:
      - tor
      - bitcoind
      # - postgres-cln
    volumes:
      - ./node/tor/data:/var/lib/tor
      - ./node/tor/config:/etc/tor
      - ./node/cln:/root/.lightning
      - ./node/bitcoin:/root/.bitcoin
    command: lightningd

  bitcoind:
    build: ./docker/bitcoind
    container_name: btc-dev
    restart: always
    environment:
      LOCAL_USER_ID: 1000
      LOCAL_GROUP_ID: 1000
    depends_on:
      - tor
    network_mode: service:tor
    volumes:
      - ./node/tor/data:/var/lib/tor:ro
      - ./node/tor/config:/etc/tor:ro
      - ./node/bitcoin:/home/bitcoin/.bitcoin

  postgres:
    image: postgres:14.2-alpine
    container_name: sql-dev
    restart: always
    environment:
      POSTGRES_PASSWORD: example
    network_mode: service:tor
    volumes:
      - ./node/db:/var/lib/postgresql/data

  # # Postgresql for CLN
  # postgres-cln:
  #   image: postgres:14.2-alpine
  #   container_name: cln-sql-dev
  #   restart: always
  #   environment:
  #     PGUSER: user
  #     PGDATABASE: cln
  #     POSTGRES_PASSWORD: pass
  #     PGPORT: 5433
  #   network_mode: service:tor
  #   volumes:
  #     - ./node/cln-db:/var/lib/postgresql/data

volumes:
  redisdata: