# Standalone compose for Package 1 (Basic Communication). # Prereq: build the base image first: # docker build -f sanad-base/Dockerfile -t sanad-base:latest .. # Then from Packages/: # docker compose -f Sanad_Package_1/docker-compose.p1.yml up --build # # (The top-level Packages/docker-compose.yml wires this under the `p1` profile.) services: p1: build: context: .. # = Project/Packages dockerfile: Sanad_Package_1/Dockerfile args: BASE_IMAGE: sanad-base:latest image: sanad-p1:latest container_name: sanad-p1 # Host networking is REQUIRED — the G1 DDS link + Gemini cloud + chest audio. network_mode: host restart: on-failure environment: SANAD_PACKAGE: P1 SANAD_DASHBOARD_PORT: "8011" SANAD_DASHBOARD_HOST: "0.0.0.0" SANAD_VOICE_BRAIN: gemini SANAD_AUDIO_PROFILE: "${SANAD_AUDIO_PROFILE:-builtin}" # builtin (chest) | plugged (USB/Anker) SANAD_DDS_INTERFACE: "${SANAD_DDS_INTERFACE:-eth0}" SANAD_LICENSE: /etc/sanad/sanad.lic SANAD_PUBKEY: /etc/sanad/pubkey.ed25519 SANAD_LICENSE_BIND: "${SANAD_LICENSE_BIND:-0}" # SANAD_LANGUAGE overrides the license `language` feature if set: SANAD_LANGUAGE: "${SANAD_LANGUAGE:-}" devices: - "/dev/snd:/dev/snd" # USB/plugged audio (Anker) via ALSA/Pulse volumes: - "${SANAD_LICENSE_FILE:-./licensing/sanad.lic.example}:/etc/sanad/sanad.lic:ro" - "../Sanad/data:/app/Sanad/data" # faces/recordings/state persist on host # Optional chest-audio over DDS — mount the vendored SDK if using 'builtin': # - "${UNITREE_SDK_DIR:-/home/unitree/unitree_sdk2_python}:/opt/unitree_sdk2_python:ro"