diff --git a/apps/gluetun-qbittorrent/config.json b/apps/gluetun-qbittorrent/config.json new file mode 100644 index 0000000..7fa5fa5 --- /dev/null +++ b/apps/gluetun-qbittorrent/config.json @@ -0,0 +1,51 @@ +{ + "name": "Gluetun + qBittorrent (Mullvad VPN)", + "id": "gluetun-qbittorrent", + "available": true, + "short_desc": "Mullvad'a WireGuard ile baglanan Gluetun VPN gecidi + arkasinda calisan qBittorrent. Kill-switch dahil, tum torrent trafigi VPN'den geser.", + "author": "y1lm0z", + "port": 61235, + "categories": ["network", "utilities"], + "description": "Tek dosyada iki container: Gluetun, Mullvad'a WireGuard ile baglanip kill-switch (VPN kopunca internet de kesilir) sagliyor. qBittorrent ise kendi agini kullanmiyor, Gluetun'un ag namespace'ini 'network_mode: service:gluetun' ile paylasiyor - bu sayede tum torrent trafigi zorunlu olarak VPN tunelinden geciyor. qBittorrent, Gluetun VPN'e baglanip saglikli olana kadar baslamiyor (depends_on + healthcheck). WebUI'ye Gluetun'un actigi 61235 portundan erisiliyor.", + "tipi_version": 1, + "version": "latest", + "source": "https://github.com/qdm12/gluetun", + "website": "https://github.com/qdm12/gluetun-wiki", + "exposable": true, + "force_expose": false, + "https": false, + "no_gui": false, + "supported_architectures": ["arm64", "amd64"], + "form_fields": [ + { + "type": "password", + "label": "WireGuard Private Key", + "hint": "Mullvad hesabinda 'WireGuard configuration' sayfasindan indirdigin .conf dosyasindaki PrivateKey degeri", + "required": true, + "env_variable": "WIREGUARD_PRIVATE_KEY" + }, + { + "type": "text", + "label": "WireGuard Addresses", + "hint": "Ayni .conf dosyasindaki Address alani, IPv4 kismi (orn. 10.64.222.10/32)", + "placeholder": "10.64.222.10/32", + "required": true, + "env_variable": "WIREGUARD_ADDRESSES" + }, + { + "type": "text", + "label": "Sunucu Sehirleri (opsiyonel)", + "hint": "Virgulle ayrilmis Mullvad sehir adlari, orn: Bucharest,Amsterdam. Bos birakirsan rastgele sunucu secilir.", + "required": false, + "env_variable": "SERVER_CITIES" + }, + { + "type": "text", + "label": "Firewall Outbound Subnets", + "hint": "Docker ve LAN aginin WebUI'ye erisebilmesi icin izinli subnetler.", + "default": "172.16.0.0/12,192.168.0.0/16,10.0.0.0/8", + "required": false, + "env_variable": "FIREWALL_OUTBOUND_SUBNETS" + } + ] +} diff --git a/apps/gluetun-qbittorrent/docker-compose.yml b/apps/gluetun-qbittorrent/docker-compose.yml new file mode 100644 index 0000000..e055592 --- /dev/null +++ b/apps/gluetun-qbittorrent/docker-compose.yml @@ -0,0 +1,56 @@ +services: + gluetun: + image: qmcgaw/gluetun:latest + container_name: gluetun + cap_add: + - NET_ADMIN + devices: + - /dev/net/tun:/dev/net/tun + sysctls: + # Debian 13 + yeni kernel'de gorulen "default route not found" + # crash-loop hatasi icin: IPv6'yi bu container icin kapatiyoruz. + - net.ipv6.conf.all.disable_ipv6=1 + environment: + - VPN_SERVICE_PROVIDER=mullvad + - VPN_TYPE=wireguard + - WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY} + - WIREGUARD_ADDRESSES=${WIREGUARD_ADDRESSES} + - SERVER_CITIES=${SERVER_CITIES} + - FIREWALL_OUTBOUND_SUBNETS=${FIREWALL_OUTBOUND_SUBNETS:-172.16.0.0/12,192.168.0.0/16,10.0.0.0/8} + - TZ=${TZ} + ports: + # qBittorrent WebUI - host:container, ikisi ayni numara (61235) + - 61235:61235 + # qBittorrent torrent peer portu (TCP+UDP), asagidaki + # TORRENTING_PORT ile ayni olmak zorunda + - 61234:61234 + - 61234:61234/udp + volumes: + - ${APP_DATA_DIR}/data/gluetun:/gluetun + restart: unless-stopped + x-runtipi: + is_main: true + internal_port: 61235 + + qbittorrent: + image: lscr.io/linuxserver/qbittorrent:latest + container_name: qbittorrent + # Kendi agi yok, gluetun'un ag namespace'ini paylasiyor - tum + # trafik VPN tunelinden geciyor (kill switch qbittorrent'i de kapsar). + network_mode: "service:gluetun" + depends_on: + gluetun: + condition: service_healthy + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ} + - WEBUI_PORT=61235 + - TORRENTING_PORT=61234 + volumes: + - ${APP_DATA_DIR}/data/config:/config + - ${APP_DATA_DIR}/data/downloads:/downloads + restart: unless-stopped + +x-runtipi: + schema_version: 2 diff --git a/apps/gluetun-qbittorrent/metadata/description.md b/apps/gluetun-qbittorrent/metadata/description.md new file mode 100644 index 0000000..df1d0fd --- /dev/null +++ b/apps/gluetun-qbittorrent/metadata/description.md @@ -0,0 +1,33 @@ +# Gluetun + qBittorrent (Mullvad VPN) + +Tek uygulama, iki container: **Gluetun** (VPN geçidi) ve **qBittorrent** (torrent istemcisi). qBittorrent kendi ağını kullanmıyor, `network_mode: service:gluetun` ile Gluetun'un ağ namespace'ini paylaşıyor — bu yüzden tüm torrent trafiği zorunlu olarak Mullvad tüneli üzerinden geçiyor. VPN koparsa qBittorrent'in de interneti anında kesilir (kill switch). + +## Kurulum + +1. Mullvad hesabı sayfasından **WireGuard configuration** oluştur, indirilen `.conf` dosyasını aç. +2. `PrivateKey` değerini **WireGuard Private Key** alanına, `Address` değerinin IPv4 kısmını **WireGuard Addresses** alanına yapıştır. +3. İstersen **Sunucu Şehirleri** alanına bir şehir yaz (örn. `Bucharest`), boş bırakırsan rastgele seçilir. +4. Kur, başlat. Gluetun VPN'e bağlanana kadar qBittorrent otomatik bekliyor (`depends_on` + healthcheck), o yüzden ilk açılışta birkaç saniye WebUI'ye erişemeyebilirsin, normal. + +## Erişim + +``` +http://sunucu-ip:61235 +``` + +İlk girişte qBittorrent geçici bir şifre üretir, container loglarından (`docker logs qbittorrent`) görebilirsin. + +## Portlar + +- **61235** → WebUI (host ve container tarafında aynı numara) +- **61234** (TCP+UDP) → torrent peer portu + +Bu iki port bilinçli olarak yaygın kullanılan varsayılanlar (8080, 6881, 51413, 58846 gibi) ve Linux'un otomatik/ephemeral port aralığı (`32768-60999`) dışında seçildi — kalabalık bir sunucuda başka uygulamalarla çakışma ihtimalini azaltmak için. + +## Sonarr / Radarr entegrasyonu + +İndirme istemcisi olarak eklerken host adresi bu sunucu, port **61235**. `/downloads` klasörünü Sonarr/Radarr ile aynı host yoluyla paylaşırsan hardlink taşıma sorunsuz çalışır. + +## İleride başka bir şeyi VPN'lemek istersen + +Aynı `docker-compose.yml` dosyasına üçüncü bir servis ekleyip ona da `network_mode: "service:gluetun"` yazman yeterli — aynı dosyada oldukları için ekstra container ismi/proje eşleştirmesi gerekmiyor. O servisin ihtiyaç duyduğu portu **gluetun** servisinin `ports:` listesine eklemeyi unutma (ağı gerçekten sahiplenen o olduğu için port yayınlamayı da o yapmak zorunda).