Files
q-buffer/README.md

190 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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) İlk kurulumda `wscraper-service` tarafını okuyun: `Watcher` özelliği için host makinede Python 3.10+ gerekir.
3) Geliştirme ortamını başlatın:
```bash
./scripts/bootstrap.sh --dev-mode
```
4) 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.
### İlk Kurulumda wscraper Yapılandırması
Bu bölüm ilk kez `q-buffer` kuranlar içindir. Sık karışan nokta şu:
- `bin/wscraper/` dizini scraper paketinin kendisidir
- `bin/wscraper-service/server.py`, `q-buffer` backend'in çağırdığı host servisidir
- yani `wscraper` dizininde yalnızca `server.py` yok; asıl tracker adapter kodları `bin/wscraper/src/wscraper/...` altındadır
Mevcut geçici kurulum modeli:
- önce `q-buffer` repo clone edilir
- sonra `wscraper` repo ayrıca clone edilir
- clone edilen `wscraper` kodu `q-buffer/bin/wscraper` altına yerleştirilir
Yani yeni bir makinede yalnızca `q-buffer` clone etmek şu an yeterli değildir; `wscraper` kaynak kodunun da ayrıca gelmesi gerekir.
İlk kurulum adımları:
1. `q-buffer` repo'yu clone edin.
2. `wscraper` repo'yu ayrıca clone edin ve `q-buffer/bin/wscraper` altına yerleştirin.
3. `.env.example` dosyasını `.env` olarak kopyalayın.
4. qBittorrent ve uygulama auth ayarlarını doldurun.
5. watcher servis ayarlarını kontrol edin:
- `WSCRAPER_SERVICE_BASE_URL=http://host.docker.internal:8787`
- `WSCRAPER_SERVICE_TOKEN=` boş bırakılabilir
- `WSCRAPER_SERVICE_HOST=0.0.0.0`
- `WSCRAPER_SERVICE_PORT=8787`
- `WSCRAPER_SERVICE_PYTHON_BIN=python3.12`
6. `q-buffer/bin/wscraper` altında şu dosyaların geldiğini doğrulayın:
- `pyproject.toml`
- `setup.py`
- `src/wscraper/cli.py`
- `src/wscraper/sites/happyfappy.py`
- `src/wscraper/sites/privatehd.py`
7. Host makinede uygun Python sürümü olduğundan emin olun:
- `python3.12 --version`
- yoksa `python3.11` veya `python3.10`
8. Repo root'ta şu komutu çalıştırın:
```bash
./scripts/bootstrap.sh --dev-mode
```
Bu komut şunları yapar:
- Docker `web` ve `server` servislerini `up --build` ile başlatır
- host'ta `.runtime/wscraper-service/.venv` oluşturur
- `scrapling[fetchers]` kurar
- `scrapling install` çalıştırır
- `bin/wscraper-service/server.py` sürecini başlatır
Kurulumdan sonra kontrol edilecekler:
```bash
curl http://127.0.0.1:8787/health
docker compose -f docker-compose.dev.yml ps
```
İlk komutta `{"ok":true,...}` benzeri cevap, ikinci komutta `server` ve `web` container'ları görülmelidir.
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`
Daha detaylı `wscraper` dökümü için:
- [bin/wscraper/README.md](/Users/wisecolt-macmini/Project/q-buffer/bin/wscraper/README.md)
## Kullanım (Buffer)
1) qBittorrentte 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 qBittorrentte 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ı