Telegram Bot ile Proxy İzleme: Başlangıç için Adım Adım Kılavuz
Makale içeriği
- Giriş
- Ön hazırlık
- Temel kavramlar
- Adım 1: telegram'da bot oluşturma ve erişimi ayarlama
- Adım 2: python ortamını ve proje yapısını hazırlama
- Adım 3: proxy kontrol modülünü yazma: bağlantı, latency, ip, coğrafi konum
- Adım 4: sqlite veritabanını ve geçmiş günlüğünü ayarlama
- Adım 5: aiogram 3 üzerinde telegram botunun gerçekleştirilmesi
- Adım 6: apscheduler'da kontrol planlayıcısı
- Adım 7: tüm bileşenleri main.py'de birleştirin
- Adım 8: bildirim formatı ve proxy gruplama
- Adım 9: vps'ye dağıtım (ubuntu) ve otomatik başlatma
- Sonuç kontrolü
- Tipik hatalar ve çözümleri
- Ek olanaklar
- Sss
- Sonuç
Giriş
Bu adım adım rehber ile sıfırdan tamamen çalışan bir Telegram botu oluşturacaksınız. Bu bot, bir proxy listesini otomatik olarak izler, yanıt sürelerini ölçer, dönüşüm sonrası IP değişikliğini tespit eder, ip-api.com servisi aracılığıyla coğrafi konumu kontrol eder ve sorunlar ve degrade durumları olduğunda Telegram'a bildirim gönderir. Fikirden VPS üzerinde otomatik başlatma, SQLite ile geçmiş kaydı ve uptime istatistikleri ve günlüklerin dışa aktarımı için basit bir kontrol paneline kadar adım adım geçeceğiz.
Rehber, yeni başlayanlar için tasarlanmıştır ancak ileri düzey öğeler de içermektedir. Eğer daha önce bir bot yazmadıysanız endişelenmeyin: her adımı detaylı bir şekilde inceleyeceğiz, nedenini açıklayacağız ve sonucu nasıl kontrol edeceğimizi öğreteceğiz. Kılavuzun sonunda, her 5-15 dakikada bir çalışan, proxy'leri bölgelere ve türlerine göre gruplayabilen ve Telegram'a bilgilendirici uyarılar gönderebilen, stabil bir proxy izleme aracına sahip olacaksınız.
Başlamadan önce, terminali nasıl açacağınızı, programları nasıl kuracağınızı ve dosya ve klasör nasıl yaratacağınızı bilmek faydalı olacaktır. Diğer her şeyi açıklayacağız. Tüm adımların tamamlanması yaklaşık 4 ila 8 saat sürer, bu süreye ortamın ayarlanması, kod yazma, testler ve dağıtım dahildir. Eğer zaten bir VPS'niz var ve Python konusunda temel becerileriniz varsa, süreniz kısalır.
Kılavuzun sonunda elde edeceğiniz şeyler: aiogram 3 ile çalışan bir Telegram botu, aiohttp ile asenkron kontrol modülü, dönemsel görevler için APScheduler, günlük ve istatistiklerle SQLite veritabanı, temel kriterleri barındıran basit bir web kontrol paneli ve fonksiyonelliği genişletmeye yönelik bakım ve geliştirme talimatları.
Tavsiye: Kılavuzu adım adım ilerleyerek takip etmek en iyisidir. Her aşamada, her şeyin doğru çalıştığından emin olmanız için kontrol ekledik.
Ön Hazırlık
Kodu yazmadan önce, gerekli tüm araçları ve ortamı hazırlayalım. Bu, rastgele hatalardan kaçınmanıza ve zaman kazandırmanıza yardımcı olacak.
Gerekli Araçlar, Programlar ve Erişimler
- Botu oluşturmak ve bildirim almak için bir Telegram hesabı.
- VPS veya Linux (Ubuntu 22.04 veya 24.04 öncelikli) kullanan yerel bir bilgisayar. Windows ve macOS üzerinde de çalışabilir, ancak dağıtımı Ubuntu üzerinde göstereceğiz.
- Python 3.11 veya daha yenisi. Versiyonunu python3 --version komutu ile kontrol edeceğiz.
- Paketleri kurmak için terminal ve temel sudo yetkileri.
- İzlenecek proxy listesi, formatı host:port, eğer gerekiyorsa kullanıcı adı ve şifre. HTTP, HTTPS ve SOCKS5'i destekleyeceğiz.
Sistem Gereksinimleri
- 1 CPU, 512-1024 MB RAM, 5-15 dakikalık aralıklarla 50-200 proxy için yeterlidir. Binlerce proxy için 2 CPU ve 2 GB RAM daha iyidir.
- Diskte 1 GB boş alan. SQLite hafif bir sistemdir, ancak günlükler büyür.
- Açık bir internet bağlantısı. Telegram API'sine ve proxy'lerinize erişim gereklidir. ip-api.com için çıkış HTTP erişimi gerekir.
Kurulması Gerekenler
- Python 3.11+ ve sanal ortam için venv.
- Bağımlılıkların kurulması için pip.
- Kütüphaneler: aiogram versiyonu 3, aiohttp, APScheduler, aiosqlite, python-dotenv (rahat yapılandırma için), uvloop (Linux için opsiyonel), yarl (sıklıkla bağımlılık olarak gelir).
Yedekleme Oluşturma
Başlangıçta yedekleme kritik değildir. Bot çalışmaya başladıktan sonra, günlükler ve ayarlarla basit bir SQLite yedekleme ayarlamamız gerekir. Bu, hatalı güncellemeler veya dosya hasarı durumunda geri dönmenizi sağlar.
⚠️ Dikkat: SQLite tek bir dosyadır. Beklenmedik bir güç kesilmesi durumunda bozulursa, yeni kayıtları kaybedebilirsiniz. Bu yüzden VPS üzerinde cron veya systemd zamanlayıcıları aracılığıyla dosya yedekleme işlemini otomatik hale getirmelisiniz. Bu konuda basit bir script'i sonunda göstereceğiz.
Temel Kavramlar
Karışıklığı önlemek için, ana terimlerle ve çalışma prensipleriyle anlaşalım.
- Proxy - İsteklerinizin geçtiği aracı sunucu. HTTP, HTTPS ve SOCKS5 türleri vardır. Proxy, kullanıcı adı:şifre ya da IP bağlılığı ile oturum açmayı gerektirebilir.
- Latency (gecikme) - Proxy üzerinden yaptığımız isteğin yanıtını alma zamanıdır. Milisaniye cinsinden ölçülür. Ne kadar azsa o kadar iyidir.
- IP Değişimi - Bazı proxy'ler periyodik olarak dış IP adresini değiştirir. Botumuz bu değişiklikleri izlemeli ve eğer IP beklenmedik bir şekilde değişirse ya da beklenen bölge ile uyuşmuyorsa bildirim göndermelidir.
- Coğrafi Konum (Geo) - IP adresinin ülke, şehir ve operatörü. IP üzerinden ip-api.com servisiyle alınır. Bu, proxy'nizin istenilen ülkede olduğunu kontrol etmenize yardımcı olur.
- Degradasyon - Proxy yanıt veriyor, ancak normalden çok daha yavaş ya da sık hatalarla. DOWN (tamamen erişilemez) ve DEGRADED (çalışıyor ama kötü) olarak ayırt edeceğiz.
- aiogram 3 - Telegram botları için modern asenkron kütüphane. Basit, hızlı, 2026 yılında Telegramdaki tüm güncel özellikleri destekliyor.
- aiohttp - Zaman aşımı ve proxy desteği ile asenkron HTTP istekleri.
- APScheduler - N dakikada bir kontrolleri başlatacak görev planlayıcısı.
- SQLite - Gömülü veritabanı. Tek bir dosya, hızlı ve sunucu kurulumu gerektirmiyor. Yerel günlük ve istatistikler için oldukça uygundur.
Botun çalışma prensibi şöyledir: Programlama ile bot, proxy listesini alır, her bir proxy üzerinden hızlı test istekleri yapar, yanıt süresini ölçer, dış IP'yi ve coğrafi verileri alır, sonuçları SQLite'a kaydeder. Proxy düştüğünde veya önemli ölçüde degrade olduğunda, bot düzgün bir mesaj oluşturur ve Telegram'a gönderir. Ayrıca bot, sohbetten gelen komutlara yanıt verir: durumu göster, uptime, son hataları, CSV dışa aktar, proxy ekle veya devre dışı bırak, aralığı değiştir.
Tavsiye: ip-api.com limitlerini aşmamak için (genellikle ücretsiz seviyede dakikada 45 isteğe izin verilir), geo verileri için bir önbellek ve coğrafi konum isteklerinizi sınırlayacağız. Bu, çalışmayı yavaşlatmayacak, ama engellenmeyi önleyecektir.
Adım 1: Telegram'da Bot Oluşturma ve Erişimi Ayarlama
Aşama Hedefi
Telegram botunun token'ını almak ve botun olayları hakkında mesaj gönderebileceği özel bir sohbet oluşturmak.
Adım Adım Talimatlar
- Telefonunuzda veya bilgisayarınızda Telegram uygulamasını açın.
- Ara çubuğuna BotFather yazın ve mavi onay simgesi olan resmi hesabı açın.
- Başlat'a tıklayın veya /start komutunu yazın, ardından /newbot komutunu girin.
- Botunuza bir isim verin. Örneğin: ProxyMonitorBot.
- Bot için bot ile biten benzersiz bir kullanıcı adı oluşturun. Örneğin: proxy_monitor_helper_bot.
- Verilen token'ı kopyalayın. Bu, iki nokta ile ayrılmış harf ve rakamlardan oluşan bir dizi gibi görünecektir.
- Botun bildirim göndereceği özel bir sohbet veya grup oluşturun. Botu oraya ekleyin.
- Sohbette herhangi bir mesaj yazın, böylece sohbet, hesabınız için listede belirecektir.
- Bota diyalog açın ve başlatmak için Start'a tıklayın.
Önemli Noktalar: Token'ınızı gizli tutun. Hiç kimseye vermeyin. Token sızdığında kötü niyetli kişiler botunuza erişim sağlayabilir. Eğer token'ınız sızarsa, BotFather'da /revoke seçeneğini seçerek yeni bir tane alın.
Tavsiye: Uyarılar için yalnızca sizin ve botun bulunduğu ayrı bir grup oluşturun. Böylece bildirimler diğer mesajlar arasında kaybolmaz.
✅ Kontrol: Token'ı aldınız ve botu gerekli sohbete eklediniz. Bot, kişisel diyalogda /start komutuna yanıt veriyor.
Olası Sorunlar ve Çözümleri
- Proble: Bot /start komutuna yanıt vermiyor. Sebep: Start'a tıklamadınız ya da token kodda yanlış girildi. Çözüm: Botun etkin olduğundan emin olun ve daha sonra .env dosyasında token'ı doğru belirttiğimizden emin olun.
- Proble: Sohbet ID'sini göremiyorsunuz. Sebep: Henüz almadık. Çözüm: Daha sonra botun içindeki komut otomatik olarak chat_id'yi gösterecektir.
Adım 2: Python Ortamını ve Proje Yapısını Hazırlama
Aşama Hedefi
Proje için bir çalışma klasörü oluşturmak, sanal Python 3.11+ ortamı oluşturmak, bağımlılıkları yüklemek, yapılandırmayı ayarlamak ve klasör yapısını oluşturmak.
Adım Adım Talimatlar
- Terminali açın veya VPS'ye SSH ile bağlanın.
- Python versiyonunu kontrol edin: python3 --version. Eğer versiyon 3.11'den düşükse, güncel version'ı yükleyin.
- Ubuntu üzerinde şu komutu uygulayın: sudo apt update; sudo apt install -y python3.11 python3.11-venv python3-pip.
- Proje klasörünü oluşturun: mkdir proxy-monitor-bot; cd proxy-monitor-bot.
- Sanal ortam yaratın: python3.11 -m venv .venv.
- Ortamı aktifleştirin: source .venv/bin/activate.
- pip'yi güncelleyin: pip install --upgrade pip.
- Bağımlılıkları yükleyin: pip install aiogram aiohttp aiosqlite APScheduler python-dotenv uvloop.
- Klasör yapısını oluşturun: mkdir app app/modules app/db app/bot app/web.
- Dosyaları oluşturun: touch app/__init__.py app/config.py app/main.py app/modules/proxy_checker.py app/db/models.py app/db/migrations.py app/bot/handlers.py app/bot/notifications.py app/scheduler.py app/web/server.py .env .env.example README.md.
Temel Yapılandırma
.env dosyasını açın ve anahtarları ekleyin (değerleri kendinizle değiştirin):
BOT_TOKEN=bot_tokeniniz TELEGRAM_CHAT_ID=sayı ya da boş bırak DB_PATH=./data/monitor.db PROBE_TIMEOUT=8 PROBE_RETRIES=2 CHECK_INTERVAL_MINUTES=10 GEO_CACHE_TTL_HOURS=24 IP_API_URL=http://ip-api.com/json PROXY_CONCURRENCY=20 GEO_CONCURRENCY=10 DASHBOARD_HOST=0.0.0.0 DASHBOARD_PORT=8080
.env dosyasını .env.example olarak kopyalayın ve gizli bilgileri silin, böylece projeyi token olmadan paylaşmanız kolaylaşır.
Tavsiye: .env dosyasını sürüm kontrol sisteminin dışına çıkartın. .gitignore dosyasına .env ekleyin ki token'ı yanlışlıkla yüklemeyin.
Minimum Kodu Yapılandırması
app/config.py dosyası çevresel değişkenleri okuyacak ve yapılandırmayı sağlayacak. app/main.py dosyası, botu, zamanlayıcıyı ve web kontrol panelini başlatacak. proxy_checker.py modülü tüm kontrolleri gerçekleştirecek. db klasöründe SQLite modelleri ve göçleri yer alacak. bot klasöründe komut işleyicileri ve bildirim gönderimi yapılacak. web klasöründe basit bir web sunucusu çalıştırılacak.
✅ Kontrol: Sizde bir sanal ortam mevcut, bağımlılıklar yüklü, bir .env dosyası oluşturdunuz ve proje yapısı listelenen ile eşleşiyor. Komut python -c "import aiogram, aiohttp, aiosqlite; print('ok')" ile ok'u görmelisiniz.
Olası Sorunlar ve Çözümleri
- Proble: pip SSL hatası veya erişim hatası veriyor. Sebep: İnternete erişim yok. Çözüm: Ağı kontrol edin veya pip için yerel bir ayna kullanın.
- Proble: Python 3.11 mevcut değil. Sebep: Eski işletim sistemi. Çözüm: Sistemi güncelleyin veya Python'u deadsnakes PPA ya da pyenv ile yükleyin.
Adım 3: Proxy Kontrol Modülünü Yazma: Bağlantı, Latency, IP, Coğrafi Konum
Aşama Hedefi
Proxy'leri hızla ve güvenilir bir şekilde kontrol eden asenkron bir modül oluşturmak: proxy üzerinden test HTTP isteği yapabilmeli, gecikmeyi ölçebilmeli, dış IP'yi öğrenebilmeli, ip-api.com üzerinden istek yapabilmeli, coğrafi verileri önbelleğe alabilmeli ve hataları düzgün bir şekilde işleyebilmelidir.
Ana Fikirler
- Erişebilirliği kontrol etmek için basit bir kaynağa, örneğin https://api.ipify.org adresine veya hızlı bir echo uç noktasına istek yapıyoruz. Önce IP almak için web servisini, ardından geo için ip-api.com'u seçeceğiz. Tam tersini de yapabiliriz.
- Varsayılan olarak zaman aşımı 8 saniye, deneme sayısı 2. Bu ayarlar .env üzerinden yapılandırılabilir.
- aiohttp proxy ile iyi çalışıyor: ClientSession.request'e proxy parametresini gönderin.
- Coğrafi konum için, IP bazında verileri 24 saat boyunca önbelleğe alıyoruz, böylece limitimizi harcamıyoruz.
- Kontrolleri paralel olarak yapıyoruz, ancak eşzamanlılığı semafor ile sınırlıyoruz, böylece bağlantıları aşırı yüklemiyoruz ve ip-api limitlerine takılmıyoruz.
Detaylı Talimatlar
- app/modules/proxy_checker.py dosyasını açın.
- Proxy modelini sözlük olarak tanımlayın: id, label, type (http, https, socks5), endpoint (host:port), username, password, region, group, expected_country, last_ip.
- type, host, port ve isteğe bağlı olarak username:password'dan proxy_url oluşturacak asenkron bir build_proxy_url fonksiyonu oluşturun.
- save_delay parametresi ile dış IP'yi almak için proxy_url üzerinden fetch_ip(session, proxy_url) isimli asenkron bir fonksiyon oluşturun. IP'nizi JSON olarak döndüren https://api.ipify.org?format=json adresini kullanın. Zamanı çağrıdan önce ve cevapta ölçerek latency'yi elde edin.
- Geo verileri için önbellek oluşturarak, bellek içinde bir sözlük ve SQLite'de bir tablo oluşturun, böylece yeniden başlatmalarda önbelleği kaybetmeyin. Anahtar - IP, değer - ülke, şehir, organizasyon ve önbellekleme zamanının JSON şeklindedir.
- ip için ip-api.com/json/{ip}?fields=status,country,countryCode,regionName,city,org,query adresine GET isteği yapacak fetch_geo(session, ip) fonksiyonunu oluşturun. Statü fail ise hata belirtisi dönecektir. Başarılıysa geo verilerini döndürün.
- proxy için check_proxy(proxy) fonksiyonunu gerçekleştirin: proxy_url oluştur, IP almak için zaman aşımı ile dene, latency'yi ölç, ardından geo verilerini (önbellekten ya da ağdan) topla, sonucu oluştur: erişilebilirlik (ok), gecikme milisaniye olarak, dış IP, ülke ve şehir, ve sonuç tipi: UP, DEGRADED ya da DOWN.
- DEGRADED kriterlerini belirleyin: eğer latency belirli bir eşiğin üzerindeyse, örneğin 1500-2000 ms veya son kontrollerde hata oranı belirginse. Basitlik açısından: eğer yanıt varsa, ancak latency 2 saniyeden fazlaysa - DEGRADED, aksi takdirde UP. Eğer yanıt yoksa - DOWN.
- Günlüğü kaydetmek için detaylı sonuçları döndürün: timestamp, proxy_id, status, latency_ms ya da None, ip ya da None, geo ya da None, error_reason, changed_ip (True veya False, eğer IP önceki ile farklıysa), changed_geo (ülke değiştiyse), region, group, type.
- Hata işleme ekleyin: asyncio.TimeoutError, aiohttp.ClientConnectorError, aiohttp.ClientHttpProxyError, aiohttp.ClientProxyConnectionError, sock errors. error_reason alanına kısa bir açıklama yazın.
Örnek Kod (basitleştirilmiş, tek satırda)
Temel mantık için burada sıkıştırılmış bir örnek: import asyncio, time, json, aiohttp; async def check_proxy(proxy, cfg, geo_cache, sem): async with sem: start=time.perf_counter(); purl=f"{proxy['type']}://{proxy.get('username', '')+(':'+proxy.get('password','') if proxy.get('username') else '')+'@' if proxy.get('username') else ''}{proxy['endpoint']}"; timeout=aiohttp.ClientTimeout(total=cfg['PROBE_TIMEOUT']); try: async with aiohttp.ClientSession(timeout=timeout) as s: t0=time.perf_counter(); async with s.get('https://api.ipify.org?format=json', proxy=purl, ssl=False) as r: data=await r.json(); ip=data.get('ip'); latency=int((time.perf_counter()-t0)*1000); if not ip: raise Exception('no-ip'); geo=geo_cache.get(ip); if not geo or geo['ts'] Gerçek kodda, SQLite'de loglama ve GEO istekleri için semaforlar ekleyeceğiz, ayrıca düzgün zaman aşım ve tekrar deneme işlemleri gerçekleştireceğiz. ⚠️ Dikkat: ip-api.com'a çok fazla eşzamanlı istek göndermeyin. Eğer yüzlerce proxy içeren bir listeniz varsa sonuçları önbelleğe alın ve eşzamanlılığı sınırlayın. Bu, limitlere ve hatalara karşı korur. ✅ Kontrol: Tek bir test proxy için check_proxy fonksiyonunu manuel olarak çağırın ve sonucu yazdırın. UP veya DEGRADED statüsünü görmelisiniz. Proxy listesini, kontrol geçmişini, olayları, geo önbelleğini ve ayarları tutmak için SQLite'de tablolar oluşturmak. Bu, size detaylı istatistik ve grafikler oluşturma imkanı verecektir. CREATE TABLE IF NOT EXISTS proxies (id INTEGER PRIMARY KEY AUTOINCREMENT, label TEXT, type TEXT, endpoint TEXT, username TEXT, password TEXT, region TEXT, group_name TEXT, expected_country TEXT, last_ip TEXT, enabled INTEGER DEFAULT 1, created_at INTEGER, updated_at INTEGER); CREATE TABLE IF NOT EXISTS checks (id INTEGER PRIMARY KEY AUTOINCREMENT, proxy_id INTEGER, ts INTEGER, status TEXT, latency_ms INTEGER, ip TEXT, country TEXT, city TEXT, org TEXT, error_reason TEXT, FOREIGN KEY(proxy_id) REFERENCES proxies(id)); CREATE INDEX IF NOT EXISTS idx_checks_proxy_ts ON checks(proxy_id, ts); CREATE TABLE IF NOT EXISTS incidents (id INTEGER PRIMARY KEY AUTOINCREMENT, proxy_id INTEGER, opened_at INTEGER, closed_at INTEGER, kind TEXT, last_status TEXT, last_message TEXT, active INTEGER, FOREIGN KEY(proxy_id) REFERENCES proxies(id)); CREATE TABLE IF NOT EXISTS geo_cache (ip TEXT PRIMARY KEY, country TEXT, city TEXT, org TEXT, ts INTEGER); CREATE TABLE IF NOT EXISTS settings (key TEXT PRIMARY KEY, value TEXT); Tavsiye: Eğer proxy listenizi CSV veya JSON formatında saklıyorsanız, veritabanına kolay bir içe aktarma aracı ekleyin: Basit bir script dosyayı okur ve proxies tablosuna kayıt ekler. ✅ Kontrol: init_db fonksiyonunu çalıştırın ve DB_PATH'ta veritabanı dosyasının oluştuğundan emin olun. Tabloların oluşturulup oluşturulmadığını kontrol edin; proxy tablosundan select count(*) sorgusu çalıştırıp 0 yanıtı alın. Komutlara yanıt veren, sohbetinize bildirim gönderebilen ve .env dosyasından ayarları okuyan bir bot oluşturun. Temel komutları ayarlayalım: /start, /status, /chatid, /addproxy, /list, /enable, /disable, /interval, /export. app/bot/notifications.py dosyasında, olaylarla ilgili bir mesaj oluşturan notify_change fonksiyonunu yapın. Örnek bir mesaj: Proxy: EU-1 (http) Bölge: EU Grup: EUROPE Durum: DOWN Sebep: zaman aşımı Son IP: 203.0.113.45 Beklenen: ülke DE Alınan: ülke NL Zaman: 2026-02-01 12:34:56 Latency: n/a. UP için UP etiketini, DEGRADED için DEGRADED etiketini kullanın. Öncelik sırasına göre sıralama ekleyin: önce DOWN, sonra DEGRADED, daha sonra IP değişikliği ve coğrafi değişiklik. Mesajları görsel bir şekilde daha anlaşılır hale getirmek için ✅, ⚠️ ve ❌ emojileri ekleyin. TELEGRAM_CHAT_ID tanımlanmadan mevcut sohbetten gönderin, geminiz aleyhine kaydedin. Üretim ortamında, chat_id'yi .env ile sabitlemek daha iyidir. Tavsiye: Gruplar için botun mesaj gönderebilmesi için yazma hakkına ihtiyacı olabilir. Botun mesaj atmasına izin verildiğinden emin olun. ✅ Kontrol: Botu yerel olarak başlatın ve /chatid gönderin. Sayısal bir kimlik almalısınız. .env dosyasındaki TELEGRAM_CHAT_ID'yi ayarlayın. /start ve /status gönderin. Bot yanıt vermelidir. /list komutu başlangıçta boş olabilir, bu normaldir. Tüm açılan proxy'lerin mevcut ayarlarla 5-15 dakikada bir kontrol edilmesi için periyodik kontroller ayarlamak, kontrol geçmişini kaydetmek ve değişikliklerde uyarı göndermek. Tavsiye: Pik yükü azaltmak ve tam zamanlı senkronizasyon sorunlarından kaçınmak için 0-60 saniye arasında rastgele bir jitter ekleyin. ✅ Kontrol: CHECK_INTERVAL_MINUTES=1 değerini geçici olarak ayarlayın ve uygulamayı başlatın. Günlüklerde her dakikada bir kontrol gerçekleştirildiğini ve checks tablosuna yeni satırların eklendiğini görmelisiniz. Uygulamayı bir araya getirin: yapılandırma, DB, bot, kontrol modülü, zamanlayıcı ve web kontrol paneli. Doğru başlatmayı ve durdurmayı sağlayın, bitiş sinyallerini işleyin. Kısaca başlatma mantığı: import asyncio, logging; async def main(): await init_db(...); dp=Dispatcher(); dp.include_router(router); scheduler=AsyncIOScheduler(); scheduler.add_job(run_checks, 'interval', minutes=interval); scheduler.start(); await asyncio.gather(dp.start_polling(bot), start_web_server(), wait_for_signals(scheduler)); asyncio.run(main()). Tavsiye: INFO ve WARN seviyelerinde detaylı loglama ekleyin. Bu, başlatma sırasında ve kontroller gerçekleştirilirken neler olduğunu hızlıca anlamanıza yardımcı olacaktır. ✅ Kontrol: python app/main.py dosyasını çalıştırın. Bot, /start komutuna yanıt vermelidir, web kontrol paneli http://localhost:8080 adresinde açılmalı ve zamanlayıcı kontroller aralığında başlamalıdır. Bildirimlerin anlaşılır, kompakt ve bilgilendirici olmasını sağlamak. Mesajların yapılandırılabilir olması için proxy'leri bölgelere ve türlere gruplamak. ✅ Kontrol: Geçici olarak bir proxy'yi çalışmayan bir endpoint ile değiştirin. Kontrol ardından bir DOWN bildirimi alınıyor. Proxy'yi çalışır hale geri döndürdüğünüzde, IP ve ülke değişikliği durumunu bildiren bir bildirim alacaksınız. Boti uzaktan sunucuda çalıştırmak, systemd üzerinden otomatik başlatma ayarlamak, loglama sağlamak ve güncellemeleri kolaylaştırmak. Tavsiye: Eğer uvloop kullanıyorsanız, sanal ortamda kurulu olduğundan emin olun. Windows'ta uvloop kullanılmaz, Linux'ta performansı artırır. ✅ Kontrol: Bot, başlatılan servisten /start komutuna yanıt vermelidir. Günlüklerde zamanlayıcının ve web kontrol panelinin port 8080'de dinlemede olduğunu görmelisiniz. ✅ Kontrol: Eğer kontrol listesindeki tüm maddeler geçiyorsa ve test senaryoları çalışıyorsa, botunuz başarıyla dağıtılmış ve izleme görevlerini düzenli olarak yerine getiriyor demektir. app/web/server.py içinde aiohttp.web sunucusunu başlatın. Ana sayfada kritik bilgileri görüntüleyin: toplam proxy sayısı, kaç tane UP, DOWN, DEGRADED, ortalama latency, 24 saatlik uptime. /export?from=ts&to=ts endpointini CSV dışa aktarma işlemi için oluşturun. Minimum HTML, basit bir liste ve durumu gösteren bir tablo ile sınırlı olabilir. Grafik görselleştirmesi daha sonra basit SVG'ler yoluyla eklenebilir. Tavsiye: Dashboard'da bir buton ekleyin, bu buton zamanlama değerlerini değiştirerek ayarları hızlandırır. Veritabanının yedekleme script: tar -czf backup-$(date +%F).tar.gz data/monitor.db. Günlük yedekleme cron veya systemd timer'ları ile ayarlanabilir. En az 7 arşivi saklayın. ⚠️ Dikkat: Veritabanı dosyasını anlık düzenlemeyin. Manuel düzenlemeler için servisi durdurun, yedek alın, düzenleyip tekrar başlatın. Fikirden çalışan bir çözüme kadar olan süreci tamamladınız: aiogram 3 üzerinde bir Telegram botu oluşturdunuz, aiohttp ile proxy kontrol modülü yazdınız, APScheduler'ı planlayıcı olarak ayarladınız, SQLite'da geçmişi kaydettiniz, düşme, degrade, IP ve coğrafi konum bildirimlerini gerçekleştirdiniz, uygulamayı VPS üzerinde dağıtımını yaptınız ve systemd üzerinden otomatik başlatmayı sağladınız, basit bir web kontrol paneli ile günlükleri dışa aktarma işlemini eklediniz. Şimdi ölçeklenebilir bir araca sahipsiniz: grupları ayırabilir, eşik değerlerini ayarlayabilir, grafik ve raporlar ekleyebilir, PostgreSQL'e yükleri artırırken geçirebilirsiniz. Bir sonraki adım, bakım otomasyonu olacak: günlük döngüsü ayarları, veritabanında günlük yedeklemeler, botun kendisini VPS sistemi metrikleri ile izleme. Daha ileriye gidebilirsiniz: bot komutlarına erişim için rol tabanlı model eklemek, grupların SLA raporları eklemek, alternatif coğrafi veri kaynaklarına bağlanmak ve mevcut bir kütüphane aracılığıyla web arayüzü oluşturmak. İyi şanslar ve proxy'lerinizin kararlı uptime'ı!Olası Sorunlar ve Çözümleri
Adım 4: SQLite Veritabanını ve Geçmiş Günlüğünü Ayarlama
Aşama Hedefi
Veritabanı Yapısı
Detaylı Talimatlar
Örnek SQL (tek satırda)
Olası Sorunlar ve Çözümleri
Adım 5: aiogram 3 üzerinde Telegram Botunun Gerçekleştirilmesi
Aşama Hedefi
Detaylı Talimatlar
Bildirim Gönderimi
Olası Sorunlar ve Çözümleri
Adım 6: APScheduler'da Kontrol Planlayıcısı
Aşama Hedefi
Detaylı Talimatlar
Tavsiye:
Olası Sorunlar ve Çözümleri
Adım 7: Tüm Bileşenleri main.py'de Birleştirin
Aşama Hedefi
Detaylı Talimatlar
Olası Sorunlar ve Çözümleri
Adım 8: Bildirim Formatı ve Proxy Gruplama
Aşama Hedefi
Bildirim Formatı
Proxy Gruplama
Uygulama
Olası Sorunlar ve Çözümleri
Adım 9: VPS'ye Dağıtım (Ubuntu) ve Otomatik Başlatma
Aşama Hedefi
VPS Hazırlığı
systemd Servisi
Olası Sorunlar ve Çözümleri
Sonuç Kontrolü
Kontrol Listesi
Test Etme
Başarıyla Tamamlanma Göstergeleri
Tipik Hatalar ve Çözümleri
Ek Olanaklar
İleri Düzey Ayarlar
Optimizasyon
Basit Kontrol Paneli
Yedeklemeler
SSS
Sonuç