# A sample: ipx with its database in SQLite, and ipx-web, the page, in front of it. Build both # images first (`docker build -t ipx .` and `docker build -f Dockerfile.web -t ipx-web .`), then # `docker compose up -d`, and sign in at http://:8099 as admin / ipodderx. # docs/configuration.md has the rest, Postgres included. services: ipx: image: ipx container_name: ipx restart: unless-stopped environment: # Who owns the files it writes. 99:100 is Unraid's nobody:users. PUID: "99" PGID: "100" TZ: "UTC" # For Postgres instead of SQLite: # IPX_DATABASE_URL: "postgres://ipx:password@db-host:5432/ipx" # No web port of its own: ipx-web is the way in, and passes the API on to it. ports: - "6881:6881/tcp" # BitTorrent peers - "6881:6881/udp" # DHT volumes: - ./config:/config # config.toml, written on first start - ./data:/data # state.db - ./downloads:/downloads healthcheck: test: ["CMD", "ipx", "status"] interval: 30s timeout: 5s retries: 3 start_period: 10s ipx-web: image: ipx-web container_name: ipx-web restart: unless-stopped environment: IPX_UPSTREAM: "ipx:8099" # Behind Cloudflare Access only: where cloudflared's requests come from, the one address # whose Cf-Access-* headers are passed on. docs/sso.md says how to find it. # TUNNEL_PEER: "192.168.64.1" # Traces to an OpenTelemetry collector, a span for each request, continued into ipx: # WEB_TRACING: "on" # OTEL_EXPORTER_OTLP_ENDPOINT: "http://collector:4318" # OTEL_EXPORTER_OTLP_PROTOCOL: "http/protobuf" # OTEL_SERVICE_NAME: "ipx-web" ports: - "8099:8080" # the web UI depends_on: - ipx healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:8080/favicon.png"] interval: 30s timeout: 5s retries: 3