Compare commits

...
7 Commits
Author SHA1 Message Date
y1lm0z e726709f61 Merge branch 'main' of https://git.y1lm0z.me/y1lm0z/Runtipi-store
merg
2026-09-06 17:02:12 +03:00
y1lm0z fbb2527b52 lidar - ytd 2026-09-06 17:00:30 +03:00
y1lm0z c0e6aa94b5 apps/gluetun-qbittorrent/config.json Güncelle 2026-08-29 10:20:17 +00:00
y1lm0z f5c4625e9b qbit + VPN 2026-08-29 13:15:35 +03:00
y1lm0z 2b84aa90e1 qbit + VPN 2026-08-29 13:15:01 +03:00
y1lm0z 97ec948b3c qbit + VPN 2026-08-29 12:57:00 +03:00
y1lm0z 9fcdce389d qbit + VPN 2026-08-29 00:46:50 +03:00
7 changed files with 154 additions and 29 deletions
+12 -11
View File
@@ -1,14 +1,14 @@
{
"name": "Gluetun + qBittorrent (Mullvad VPN)",
"name": "Gluetun + qBittorrent (ProtonVPN)",
"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.",
"short_desc": "ProtonVPN'e WireGuard ile baglanan Gluetun VPN gecidi + arkasinda calisan qBittorrent. Kill-switch + otomatik NAT-PMP port forwarding dahil.",
"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.",
"description": "Tek dosyada iki container: Gluetun, ProtonVPN'e 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 - tum torrent trafigi zorunlu olarak VPN tunelinden geciyor. ProtonVPN'in NAT-PMP port forwarding'i sayesinde Gluetun periyodik olarak port ister ve degistiginde qBittorrent'in dinleme portunu otomatik gunceller (VPN_PORT_FORWARDING_UP_COMMAND) - elle hicbir sey yapman gerekmez, seed performansi icin kritik olan bu ozellik Mullvad'da yoktu. qBittorrent, Gluetun VPN'e baglanip saglikli olana kadar baslamiyor. WebUI'ye Gluetun'un actigi 61235 portundan erisiliyor.",
"tipi_version": 1,
"version": "latest",
"version": "1.0.2",
"source": "https://github.com/qdm12/gluetun",
"website": "https://github.com/qdm12/gluetun-wiki",
"exposable": true,
@@ -20,30 +20,31 @@
{
"type": "password",
"label": "WireGuard Private Key",
"hint": "Mullvad hesabinda 'WireGuard configuration' sayfasindan indirdigin .conf dosyasindaki PrivateKey degeri",
"hint": "ProtonVPN hesabi -> Downloads -> WireGuard configuration. P2P destekli (cift ok ikonlu) bir sunucu sec ve config olustururken 'NAT-PMP (Port Forwarding)' secenegini MUTLAKA ac, yoksa port forwarding calismaz. 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",
"hint": "Ayni .conf dosyasindaki Address alani, IPv4 kismi (orn. 10.2.0.2/32)",
"placeholder": "10.2.0.2/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.",
"label": "Sunucu Ulkeleri",
"hint": "ONEMLI: bos birakma - bos birakirsan Gluetun P2P desteklemeyen bir sunucuya baglanabilir ve port forwarding hic calismaz. Virgulle ayrilmis ulke adlari, orn: Netherlands,Switzerland",
"default": "Netherlands",
"required": false,
"env_variable": "SERVER_CITIES"
"env_variable": "SERVER_COUNTRIES"
},
{
"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",
"default": "172.16.0.0/12,192.168.0.0/16",
"required": false,
"env_variable": "FIREWALL_OUTBOUND_SUBNETS"
}
+21 -8
View File
@@ -11,20 +11,31 @@ services:
# crash-loop hatasi icin: IPv6'yi bu container icin kapatiyoruz.
- net.ipv6.conf.all.disable_ipv6=1
environment:
- VPN_SERVICE_PROVIDER=mullvad
- VPN_SERVICE_PROVIDER=protonvpn
- 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}
- SERVER_COUNTRIES=${SERVER_COUNTRIES:-Netherlands}
# Sadece P2P/port-forwarding destekleyen sunuculari sec - bu
# olmadan Gluetun rastgele (P2P desteklemeyen) bir sunucuya
# baglanip port forwarding'i sonsuza kadar "starting" durumunda
# birakabiliyor.
- PORT_FORWARD_ONLY=on
- FIREWALL_OUTBOUND_SUBNETS=${FIREWALL_OUTBOUND_SUBNETS:-172.16.0.0/12,192.168.0.0/16}
- TZ=${TZ}
# ProtonVPN'in NAT-PMP port forwarding'i: Gluetun otomatik port
# ister, degistiginde asagidaki komutla qBittorrent'in dinleme
# portunu ANINDA gunceller - elle hicbir sey yapman gerekmiyor.
- VPN_PORT_FORWARDING=on
- VPN_PORT_FORWARDING_PROVIDER=protonvpn
- VPN_PORT_FORWARDING_UP_COMMAND=/bin/sh -c 'wget -O- -nv --retry-connrefused --post-data "json={\"listen_port\":{{PORTS}}}" http://127.0.0.1:61235/api/v2/app/setPreferences'
ports:
# qBittorrent WebUI - host:container, ikisi ayni numara (61235)
# Sadece WebUI'yi host'a aciyoruz. Torrent peer portu artik ProtonVPN'in
# NAT-PMP ile atadigi DINAMIK port - bu, VPN tunelinin (tun0) uzerinden
# geliyor, Docker'in host network'unden degil, o yuzden burada ayrica
# bir port yayinlamaya gerek yok (Gluetun kendi firewall'unda otomatik
# izin veriyor).
- 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
@@ -46,6 +57,8 @@ services:
- PGID=1000
- TZ=${TZ}
- WEBUI_PORT=61235
# Baslangic degeri - Gluetun VPN_PORT_FORWARDING_UP_COMMAND ile
# baglanir baglanmaz gercek atanan portla otomatik degistiriyor.
- TORRENTING_PORT=61234
volumes:
- ${APP_DATA_DIR}/data/config:/config
@@ -1,13 +1,23 @@
# Gluetun + qBittorrent (Mullvad VPN)
# Gluetun + qBittorrent (ProtonVPN)
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).
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 ProtonVPN tüneli üzerinden geçiyor. VPN koparsa qBittorrent'in de interneti anında kesilir (kill switch).
**Fark yaratan özellik:** ProtonVPN, NAT-PMP ile gerçek port forwarding destekliyor (Mullvad 2023'te bunu kaldırmıştı). Gluetun bu portu otomatik ister ve her değiştiğinde qBittorrent'in dinleme portunu **kendisi günceller** — seed performansı için kritik olan bu adım tamamen otomatik.
## Kurulum
1. Mullvad hesabı sayfasından **WireGuard configuration** oluştur, indirilen `.conf` dosyasını.
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.
1. ProtonVPN hesabı**Downloads → WireGuard configuration** sayfasına git.
2. **P2P destekli bir sunucu seç** (çift ok ikonlu olanlar).
3. Config oluştururken **"NAT-PMP (Port Forwarding)"** seçeneğini mutlaka aç — bunu atlarsan port forwarding hiç çalışmaz.
4. İndirilen `.conf` dosyasından `PrivateKey`**WireGuard Private Key**, `Address`'in IPv4 kısmı**WireGuard Addresses** alanına.
5. İstersen **Sunucu Ülkeleri** alanına bir ülke yaz (örn. `Netherlands`), boş bırakırsan rastgele P2P sunucu seçilir.
6. Kur, başlat.
## Kurulumdan SONRA yapman gereken tek manuel adım
qBittorrent WebUI → **Options → Web UI → Authentication****"Bypass authentication for clients on localhost"** kutusunu işaretle, kaydet.
Bu şart, çünkü Gluetun port değiştiğinde qBittorrent'in API'sine `127.0.0.1` üzerinden (aynı ağ namespace'i içinden) istek atıyor — bu kutu işaretli değilse Gluetun'un isteği kimlik doğrulamada takılır, port senkronu sessizce başarısız olur.
## Erişim
@@ -19,10 +29,8 @@ http://sunucu-ip:61235
## 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.
- **61235** → WebUI (host ve container tarafında aynı numara, tek yayınlanan port)
- Torrent peer portu artık **sabit değil** — ProtonVPN'in NAT-PMP ile dinamik atadığı port, VPN tüneli üzerinden geliyor (host'ta ayrıca port yayınlamaya gerek yok). Gluetun loglarında (`docker logs gluetun | grep -i port`) hangi portun atandığını görebilirsin.
## Sonarr / Radarr entegrasyonu
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

@@ -0,0 +1,58 @@
{
"name": "Lidarr YouTube Downloader",
"id": "lidarr-youtube-downloader",
"available": true,
"short_desc": "Fills in missing Lidarr albums by downloading them from YouTube",
"author": "Angrido",
"port": 5000,
"categories": ["media"],
"description": "Lidarr YouTube Downloader is a free, self-hosted bridge between Lidarr and YouTube. It searches YouTube for albums that Lidarr is missing, scores the best audio match, downloads it at up to 320 kbps using yt-dlp, tags it with full ID3 metadata (MusicBrainz IDs, cover art, track numbers) and imports it back into your Lidarr library. It can also run as a native Lidarr download client (emulating a Newznab indexer + SABnzbd) so Lidarr handles search, grab and import automatically. Includes a scheduler, AcoustID fingerprint verification, and Telegram/Discord notifications.",
"tipi_version": 1,
"version": "1.8.6",
"source": "https://github.com/Angrido/Lidarr-YouTube-Downloader",
"website": "https://github.com/Angrido/Lidarr-YouTube-Downloader",
"exposable": true,
"force_expose": false,
"no_gui": false,
"supported_architectures": ["arm64", "amd64"],
"form_fields": [
{
"type": "text",
"label": "Lidarr URL",
"hint": "Full URL to your Lidarr instance, including port",
"placeholder": "http://192.168.1.10:8686",
"required": true,
"env_variable": "LIDARR_URL"
},
{
"type": "password",
"label": "Lidarr API Key",
"hint": "Found in Lidarr under Settings -> General -> Security",
"required": true,
"env_variable": "LIDARR_API_KEY"
},
{
"type": "text",
"label": "Download folder (host path)",
"hint": "Host path where new tracks are temporarily saved before import, e.g. /mnt/data/Downloads",
"placeholder": "/mnt/data/Downloads",
"required": true,
"env_variable": "DOWNLOAD_HOST_PATH"
},
{
"type": "text",
"label": "Music library folder (host path)",
"hint": "Host path of your Lidarr music library, must match the path Lidarr itself uses",
"placeholder": "/mnt/data/Media/Music",
"required": true,
"env_variable": "MUSIC_HOST_PATH"
},
{
"type": "text",
"label": "Umask",
"default": "002",
"required": false,
"env_variable": "APP_UMASK"
}
]
}
@@ -0,0 +1,24 @@
services:
lidarr-youtube-downloader:
image: angrido/lidarr-downloader:latest
environment:
- LIDARR_URL=${LIDARR_URL}
- LIDARR_API_KEY=${LIDARR_API_KEY}
- DOWNLOAD_PATH=/DATA/Downloads
- LIDARR_PATH=/music
- YT_COOKIES_FILE=/cookies/cookies.txt
- PUID=${UID}
- PGID=${GID}
- UMASK=${APP_UMASK}
- TZ=${TZ}
volumes:
- ${APP_DATA_DIR}/config:/config
- ${APP_DATA_DIR}/cookies:/cookies
- ${DOWNLOAD_HOST_PATH}:/DATA/Downloads
- ${MUSIC_HOST_PATH}:/music
x-runtipi:
is_main: true
internal_port: 5000
x-runtipi:
schema_version: 2
@@ -0,0 +1,21 @@
# Lidarr YouTube Downloader
A free, open-source bridge between [Lidarr](https://lidarr.audio/) and YouTube that fills the gaps in your self-hosted music library. Powered by yt-dlp, MusicBrainz, iTunes and AcoustID, it searches YouTube for your missing albums, scores the best audio match, downloads it at up to 320 kbps, writes complete ID3 metadata with embedded artwork, and triggers a Lidarr import.
## Features
- Smart YouTube matching (title similarity, duration, official-channel boost, forbidden-word filtering)
- Optional AcoustID/chromaprint fingerprint verification before import
- Full ID3 / MP4 tagging with MusicBrainz IDs and iTunes cover art
- Can register inside Lidarr as a native download client (Newznab indexer + SABnzbd emulation) so Lidarr drives search/grab/import itself
- Built-in scheduler for auto-discovery of new missing albums
- Telegram & Discord notifications
- Manual YouTube URL / playlist import with audio preview
## Setup notes
1. After install, open the app and go to **Settings** to fine-tune audio format, concurrency, match threshold, scheduler and notifications.
2. **Lidarr URL** and **Lidarr API key** are required (find the API key in Lidarr → Settings → General → Security).
3. **Download folder** and **Music library folder** must be host paths reachable by both this app and your Lidarr container — ideally the exact same path Lidarr itself uses for its library, to avoid import path mismatches.
4. If YouTube returns "Sign in to confirm you're not a bot", export a `cookies.txt` (Netscape format, throwaway Google account) and drop it into this app's data folder under `cookies/cookies.txt` — it's already mounted and referenced automatically.
5. To use this app as a native Lidarr download client instead of just pushing files in, follow the "Use as a Lidarr download client" section in the [project README](https://github.com/Angrido/Lidarr-YouTube-Downloader#-use-as-a-lidarr-download-client).
**Disclaimer:** provided for personal, educational use to manage your own music library. You are responsible for complying with copyright law and YouTube's Terms of Service.