125 lines
4.4 KiB
Markdown
125 lines
4.4 KiB
Markdown
# q-buffer
|
||
|
||
q-buffer, qBittorrent üzerinde torrentleri kontrollü şekilde döngüye almayı ve peer kısıtlamasını otomatikleştirmeyi amaçlayan bir uygulamadır. Buffer ekranında torrent seçip loop akışını başlatabilir, Timer ekranında etiket bazlı otomatik silme kuralları tanımlayabilirsiniz.
|
||
|
||
## Neler yapar?
|
||
|
||
- qBittorrent WebUI API ile bağlanır, aktif torrent listesini gösterir.
|
||
- Seçilen torrent için loop (indir → sil → yeniden ekle) işlemini yönetir.
|
||
- Allow IP kuralıyla agresif peer kısıtlaması uygular (destek varsa ban).
|
||
- Timer kurallarıyla etiket bazlı seed süresi dolan torrentleri otomatik siler.
|
||
- Gerçek zamanlı durum, log ve metrikleri UI üzerinden gösterir.
|
||
|
||
## Hızlı Başlangıç
|
||
|
||
1) `.env.example` dosyasını `.env` olarak kopyalayın ve değerleri doldurun.
|
||
2) Geliştirme ortamını başlatın:
|
||
|
||
```bash
|
||
./scripts/bootstrap.sh --dev-mode
|
||
```
|
||
|
||
3) Açın:
|
||
|
||
- Web: http://localhost:5173
|
||
- API/Socket: http://localhost:3001
|
||
|
||
## Watcher Notu
|
||
|
||
`Watcher` akışı `wscraper -> scrapling -> Playwright` zincirini kullanır. Playwright DNS ve browser bağımlılıklarını Docker içine taşımak yerine `wscraper-service` host makinede çalışır; `web` ve `server` ise Docker içinde kalır. `server`, host servisle `http://host.docker.internal:8787` üzerinden konuşur.
|
||
|
||
`bootstrap.sh` şu işleri tek komutta yapar:
|
||
|
||
- Docker servislerini `up --build` ile kaldırır
|
||
- host `wscraper-service` için Python venv hazırlar
|
||
- eksik Python paketlerini ve Playwright bağımlılıklarını kurar
|
||
- `wscraper-service`i başlatır
|
||
|
||
`wscraper-service` kurulumu her çalıştırmada sıfırdan yapılmaz. Kurulum daha önce tamamlandıysa script sadece kontrol eder ve eksik yoksa yeniden kurmaz.
|
||
|
||
Host makinede Python 3.10+ gerekir. Script sırasıyla `python3.12`, `python3.11`, `python3.10`, `python3` ikililerini dener ve uygun ilk sürümü seçer. Gerekirse `.env` içine `WSCRAPER_SERVICE_PYTHON_BIN=python3.12` benzeri açık bir değer verebilirsiniz.
|
||
|
||
Kullanılabilir bayraklar:
|
||
|
||
```bash
|
||
./scripts/bootstrap.sh --dev-mode
|
||
./scripts/bootstrap.sh --prod-mode
|
||
./scripts/bootstrap.sh --dev-mode --skip-wscraper-install
|
||
./scripts/bootstrap.sh --dev-mode --restart-wscraper
|
||
```
|
||
|
||
Docker tarafında normal ağ erişimi hâlâ gereklidir. DNS problemi yaşarsanız Docker Desktop içinde sabit resolver (`8.8.8.8`, `1.1.1.1`) tanımlayın. Docker DNS doğru ayarlanmamışsa:
|
||
|
||
- `pnpm install`
|
||
- image pull işlemleri
|
||
- container içi paket kurulumları
|
||
|
||
kurulum sırasında kırılabilir.
|
||
|
||
Önerilen Docker Engine ayarı:
|
||
|
||
```json
|
||
{
|
||
"builder": {
|
||
"gc": {
|
||
"defaultKeepStorage": "20GB",
|
||
"enabled": true
|
||
}
|
||
},
|
||
"experimental": false,
|
||
"dns": ["8.8.8.8", "1.1.1.1"]
|
||
}
|
||
```
|
||
|
||
Docker Desktop yeniden başladıktan sonra şu testler başarılı olmalıdır:
|
||
|
||
```bash
|
||
docker run --rm alpine nslookup registry-1.docker.io
|
||
docker run --rm alpine nslookup files.pythonhosted.org
|
||
docker run --rm alpine nslookup cdn.playwright.dev
|
||
```
|
||
|
||
Host servis için kullanılacak ortam değişkenleri:
|
||
|
||
- `WSCRAPER_SERVICE_BASE_URL` varsayılan: `http://host.docker.internal:8787`
|
||
- `WSCRAPER_SERVICE_TOKEN` varsayılan: boş
|
||
- `WSCRAPER_SERVICE_HOST` varsayılan: `0.0.0.0`
|
||
- `WSCRAPER_SERVICE_PORT` varsayılan: `8787`
|
||
- `WSCRAPER_SERVICE_PYTHON_BIN` örnek: `python3.12`
|
||
|
||
## Kullanım (Buffer)
|
||
|
||
1) qBittorrent’te torrentleri ekleyin (UI listeye düşer).
|
||
2) Loop yapmak istediğiniz torrent için listede **upload ikonu**na tıklayın ve `.torrent` dosyasını seçin.
|
||
- Bu işlem torrent dosyasını arşivler.
|
||
- **Arşiv yüklenmeden Loop Setup başlamaz.**
|
||
3) Allow IP, Loop sayısı ve Delay değerlerini girip **Start**’a basın.
|
||
|
||
## Kullanım (Timer)
|
||
|
||
1) Etiketleri qBittorrent’te oluşturun (radarr, tv-sonarr gibi).
|
||
2) Timer ekranında etiket seçip seed süresi kuralı ekleyin.
|
||
3) Süresi dolan torrentler qBittorrent ve diskten silinir.
|
||
|
||
## Production
|
||
|
||
```bash
|
||
./scripts/bootstrap.sh --prod-mode
|
||
```
|
||
|
||
Ardından http://localhost:3001
|
||
|
||
## Ortam Değişkenleri
|
||
|
||
- `QBIT_BASE_URL`, `QBIT_USERNAME`, `QBIT_PASSWORD`
|
||
- `APP_USERNAME`, `APP_PASSWORD`, `JWT_SECRET`
|
||
- `POLL_INTERVAL_MS`, `ENFORCE_INTERVAL_MS`, `DEFAULT_DELAY_MS`, `MAX_LOOP_LIMIT`
|
||
- `WEB_ALLOWED_HOSTS` (ör: `localhost,qbuffer.bee,qbuffer.panda`)
|
||
- `WSCRAPER_SERVICE_BASE_URL`, `WSCRAPER_SERVICE_TOKEN`
|
||
|
||
## Klasör Yapısı
|
||
|
||
- `apps/server`: Express API + socket.io
|
||
- `apps/web`: Vite React UI
|
||
- `data`: JSON DB, loglar, arşivlenen torrent dosyaları
|