# DroppedNeedle example compose. # # DroppedNeedle downloads through your OWN slskd (Soulseek) and/or SABnzbd (Usenet); it # doesn't run either for you. Start them yourself, then connect them under # Settings > Download Client. A commented-out slskd sidecar is at the bottom. # Full walkthrough: the Setup section of the README. services: droppedneedle: image: droppedneedle/droppedneedle:latest # :dev is built from main on every push and may break. container_name: droppedneedle environment: - PUID=1000 # your host user/group; run `id` to find them (Unraid: usually 99/100) - PGID=1000 # ignored if you start the container with Docker --user - UMASK=027 # owner rw, group r, others none; use 002 for group-writable media - PORT=8688 # must match the container port under "ports" - TZ=Etc/UTC # e.g. America/New_York, Europe/London - SLSKD_DOWNLOADS_PATH=/data/slskd/complete # path inside the common media mount below # - BIND_HOST=auto # dual-stack (IPv4 + IPv6) listener; set 0.0.0.0 to pin IPv4 only # - TRUSTED_PROXY_IPS=172.17.0.1 # your reverse proxy's IP/CIDR; defaults to the loopbacks 127.0.0.1,::1 ports: - "8688:8688" # host:container; publishes on IPv4 and IPv6 when the Docker daemon has IPv6 enabled volumes: - ./config:/app/config # config + database - ./cache:/app/cache # cover art and metadata cache - ./plugins:/app/plugins # installed plugins; omit and they vanish on recreate # One common-parent mount keeps the library and completed downloads on one container # mount boundary, enabling fast atomic moves. Configure the library root as /data/music. # Avoid nested binds beneath /data: they create new mount boundaries even on one disk. - /path/to/media:/data:rw # OPTIONAL drop-import staging. Put its host path beneath /path/to/media and map it to # /app/imports if you need uploads awaiting a manual match to survive recreation. - /path/to/media/imports:/app/imports # OPTIONAL (Usenet): point the SABnzbd Downloads mount setting at # /data/sabnzbd/complete so it also uses this common media mount. restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8688/health"] interval: 30s timeout: 10s # The first start after an upgrade may migrate a large library before the API opens. start_period: 10m retries: 3 # Optional: run slskd alongside DroppedNeedle (you manage slskd and its shares). # slskd: # image: slskd/slskd:0.25.1 # pinned; requires >= 0.25.0 # container_name: droppedneedle-slskd # restart: unless-stopped # ports: # - "5030:5030" # volumes: # - ./slskd/config:/app # slskd.yml lives here # # slskd needs at least one shared folder (slskd.yml: shares.directories) or Soulseek # # bans it. Its downloads dir here is /downloads, so point the service's slskd mount # # above at the corresponding host path beneath the common media parent. # - /path/to/media/slskd/complete:/downloads:rw # environment: # - SLSKD_REMOTE_CONFIGURATION=true