services: amule: image: ngosang/amule:latest container_name: amule ports: - "4662:4662" # ED2K TCP - "4665:4665/udp" # ED2K UDP (global search) - "4672:4672/udp" # ED2K UDP environment: - PUID=1000 - PGID=1000 - TZ=Europe/Rome - GUI_PWD=${AMULE_PASSWORD:-admin} - WEBUI_PWD=${AMULE_PASSWORD:-admin} - INCOMING_DIR=/downloads - TEMP_DIR=/downloads/temp volumes: - ./data/aMule/config:/home/amule/.aMule - ./data/aMule/incoming:/downloads - ./data/aMule/temp:/downloads/temp stop_grace_period: 30s restart: unless-stopped rtorrent: image: crazymax/rtorrent-rutorrent:latest container_name: rtorrent ports: - "127.0.0.1:8000:8000" # XML-RPC (localhost only) - "6881:6881" # BitTorrent - "6881:6881/udp" # BitTorrent DHT - "50000:50000" # Incoming connections volumes: - ./data/rTorrent/config:/data - ./data/rTorrent/downloads:/downloads environment: - PUID=1000 - PGID=1000 - TZ=Europe/Rome restart: unless-stopped qbittorrent: image: linuxserver/qbittorrent:latest container_name: qbittorrent ports: - "127.0.0.1:8080:8080" # WebUI - "6882:6882" # BitTorrent - "6882:6882/udp" # BitTorrent DHT volumes: - ./data/qBittorrent/config:/config - ./data/qBittorrent/downloads:/downloads environment: - PUID=1000 - PGID=1000 - TZ=Europe/Rome - WEBUI_PORT=8080 - TORRENTING_PORT=6882 restart: unless-stopped amutorrent: image: g0t3nks/amutorrent:latest user: "1000:1000" container_name: amutorrent depends_on: - amule - rtorrent - qbittorrent ports: - "${PORT:-4000}:${PORT:-4000}" # For additional environment variables (Deluge, Sonarr, Radarr, auth, etc.) # see .env.example. Copy it to .env and uncomment what you need. env_file: - path: .env required: false environment: - NODE_ENV=production - PORT=${PORT:-4000} # Bundled client connections - AMULE_ENABLED=true - AMULE_HOST=amule - AMULE_PORT=4712 - AMULE_PASSWORD=${AMULE_PASSWORD:-admin} - RTORRENT_ENABLED=true - RTORRENT_HOST=rtorrent - RTORRENT_PORT=8000 - RTORRENT_PATH=/RPC2 - QBITTORRENT_ENABLED=true - QBITTORRENT_HOST=qbittorrent - QBITTORRENT_PORT=8080 - QBITTORRENT_USERNAME=admin - QBITTORRENT_PASSWORD= # Set via qBittorrent WebUI: Tools > Options > Web UI > Authentication - PROWLARR_ENABLED=true - PROWLARR_URL=http://prowlarr:9696 volumes: - ./logs:/usr/src/app/server/logs - ./data:/usr/src/app/server/data # Event Scripting: Edit scripts/custom.sh to run your own scripts on events # - ./scripts:/usr/src/app/scripts # Download directories (optional): Required for moving/deleting files (clients without native APIs) - ./data/aMule/incoming:/downloads/aMule - ./data/rTorrent/downloads:/downloads/rTorrent healthcheck: test: ["CMD", "node", "-e", "require('http').get('http://localhost:' + (process.env.PORT || 4000) + '/health', r => r.statusCode === 200 ? process.exit(0) : process.exit(1)).on('error', () => process.exit(1))"] interval: 30s timeout: 5s retries: 3 restart: unless-stopped # Optional: Prowlarr for torrent search (results go to rTorrent or qBittorrent) prowlarr: image: linuxserver/prowlarr:latest container_name: prowlarr environment: - PUID=1000 - PGID=1000 - TZ=Europe/Rome volumes: - ./data/prowlarr/config:/config ports: - "9696:9696" restart: unless-stopped # Optional: GeoIP database updater # Requires free MaxMind license: https://www.maxmind.com/en/geolite-free-ip-geolocation-data geoip: image: crazymax/geoip-updater:latest container_name: geoip-updater environment: - EDITION_IDS=GeoLite2-ASN,GeoLite2-City,GeoLite2-Country - LICENSE_KEY=YOUR_LICENSE_KEY # Replace with your MaxMind license key - DOWNLOAD_PATH=/data - SCHEDULE=0 0 * * 0 # Weekly on Sunday at midnight - LOG_LEVEL=info - LOG_JSON=false volumes: - ./data/geoip:/data restart: unless-stopped