x-web-base: &web-base
  image: ghcr.io/l5yth/potato-mesh-web-${POTATOMESH_IMAGE_ARCH:-linux-amd64}:latest
  environment:
    APP_ENV: ${APP_ENV:-production}
    RACK_ENV: ${RACK_ENV:-production}
    SITE_NAME: ${SITE_NAME:-PotatoMesh Demo}
    CHANNEL: ${CHANNEL:-#LongFast}
    FREQUENCY: ${FREQUENCY:-915MHz}
    MAP_CENTER: ${MAP_CENTER:-38.761944,-27.090833}
    MAX_DISTANCE: ${MAX_DISTANCE:-42}
    CONTACT_LINK: ${CONTACT_LINK:-#potatomesh:dod.ngo}
    FEDERATION: ${FEDERATION:-1}
    PRIVATE: ${PRIVATE:-0}
    API_TOKEN: ${API_TOKEN}
    INSTANCE_DOMAIN: ${INSTANCE_DOMAIN}
    DEBUG: ${DEBUG:-0}
  command: ["ruby", "app.rb", "-p", "41447", "-o", "0.0.0.0"]
  volumes:
    - potatomesh_data:/app/.local/share/potato-mesh
    - potatomesh_config:/app/.config/potato-mesh
    - potatomesh_logs:/app/logs
  restart: unless-stopped
  deploy:
    resources:
      limits:
        memory: 512M
        cpus: '0.5'
      reservations:
        memory: 256M
        cpus: '0.25'

x-ingestor-base: &ingestor-base
  image: ghcr.io/l5yth/potato-mesh-ingestor-${POTATOMESH_IMAGE_ARCH:-linux-amd64}:latest
  environment:
    CONNECTION: ${CONNECTION:-/dev/ttyACM0}
    CHANNEL_INDEX: ${CHANNEL_INDEX:-0}
    POTATOMESH_INSTANCE: ${POTATOMESH_INSTANCE:-http://web:41447}
    API_TOKEN: ${API_TOKEN}
    INSTANCE_DOMAIN: ${INSTANCE_DOMAIN}
    DEBUG: ${DEBUG:-0}
    FEDERATION: ${FEDERATION:-1}
    PRIVATE: ${PRIVATE:-0}
  volumes:
    - potatomesh_data:/app/.local/share/potato-mesh
    - potatomesh_config:/app/.config/potato-mesh
    - potatomesh_logs:/app/logs
    - /dev:/dev
  device_cgroup_rules:
    - 'c 166:* rwm' # ttyACM devices
    - 'c 188:* rwm' # ttyUSB devices
    - 'c 4:* rwm'   # ttyS devices
  privileged: false
  restart: unless-stopped
  deploy:
    resources:
      limits:
        memory: 256M
        cpus: '0.25'
      reservations:
        memory: 128M
        cpus: '0.1'

services:
  web:
    <<: *web-base
    network_mode: host

  ingestor:
    <<: *ingestor-base
    network_mode: host
    depends_on:
      - web
    extra_hosts:
      - "web:127.0.0.1"

  web-bridge:
    <<: *web-base
    container_name: potatomesh-web-bridge
    networks:
      - potatomesh-network
    ports:
      - "41447:41447"
    profiles:
      - bridge

  ingestor-bridge:
    <<: *ingestor-base
    container_name: potatomesh-ingestor-bridge
    networks:
      - potatomesh-network
    depends_on:
      - web-bridge
    profiles:
      - bridge

volumes:
  potatomesh_data:
    driver: local
  potatomesh_config:
    driver: local
  potatomesh_logs:
    driver: local

networks:
  potatomesh-network:
    driver: bridge
