Jak stworzyć bota Telegram do monitorowania proxy: krok po kroku dla początkujących
Spis treści
- Wprowadzenie
- Wstępne przygotowanie
- Podstawowe pojęcia
- Krok 1: tworzymy bota w telegramie i konfigurujemy dostęp
- Krok 2: przygotowujemy środowisko pythona i strukturę projektu
- Krok 3: pisanie modułu sprawdzania proxy: połączenie, latencja, ip, geolokalizacja
- Krok 4: konfiguracja bazy sqlite i logowanie historii
- Krok 5: realizujemy bota telegrama w aiogram 3
- Krok 6: planner zadań na apscheduler
- Krok 7: integracja wszystkich części w punkcie wejścia main.py
- Krok 8: format powiadomień i grupowanie proxy
- Krok 9: wdrożenie na vps (ubuntu) i automatyczne uruchamianie
- Sprawdzanie wyników
- Typowe błędy i rozwiązania
- Dodatkowe możliwości
- Faq
- Podsumowanie
Wprowadzenie
W tym przewodniku krok po kroku stworzysz od zera w pełni działającego bota Telegram, który automatycznie monitoruje listę proxy, mierzy czas odpowiedzi, wykrywa zmiany IP po rotacji, sprawdza geolokalizację przez serwis ip-api.com i wysyła widoczne powiadomienia w Telegramie w przypadku problemów lub degradacji. Przeprowadzimy Cię krok po kroku od pomysłu do wdrożenia na VPS z automatycznym uruchamianiem, historią w SQLite i prostym panelem z statystykami dostępności i eksportem logów.
Przewodnik jest przeznaczony dla początkujących, z elementami dla bardziej zaawansowanych. Jeśli nigdy nie pisałeś bota, nie martw się: omówimy każdy krok, wyjaśnimy, dlaczego jest potrzebny i jak sprawdzić wynik. Na koniec otrzymasz stabilne narzędzie do monitorowania proxy, które działa według harmonogramu co 5–15 minut, potrafi grupować proxy według regionów i typów oraz wysyła informacyjne alerty do Twojego Telegramu.
Przed rozpoczęciem warto wiedzieć, jak otworzyć terminal, jak instalować programy oraz jak tworzyć foldery i pliki. Wszystko inne wyjaśnimy. Wykonanie wszystkich kroków zajmie orientacyjnie od 4 do 8 godzin, w tym konfigurację środowiska, pisanie kodu, testy i wdrożenie. Jeśli masz już VPS i podstawowe umiejętności w Pythonie, dasz radę szybciej.
Na koniec przewodnika otrzymasz: działającego bota Telegrama w aiogram 3, asynchroniczny moduł do sprawdzeń na aiohttp, planner APScheduler do zadań cyklicznych, bazę danych SQLite z logami i statystykami, prosty web-dashboard z głównymi wskaźnikami i eksportem do CSV, instrukcje dotyczące utrzymania i rozszerzania funkcjonalności.
Porada: Lepiej przechodzić przez przewodnik krok po kroku, nie pomijając etapów. Po każdym etapie dodaliśmy kontrole, abyś od razu upewnił się, że wszystko działa.
Wstępne przygotowanie
Przed rozpoczęciem pisania kodu przygotujemy wszystkie niezbędne narzędzia i środowisko. To pozwoli uniknąć przypadkowych błędów i zaoszczędzi czas.
Niezbędne narzędzia, programy i dostęp
- Konto Telegram do stworzenia bota i otrzymywania powiadomień.
- VPS lub lokalny komputer z systemem Linux (preferowane Ubuntu 22.04 lub 24.04). Można także na Windows i macOS, ale wdrożenie pokażemy na Ubuntu.
- Python 3.11 lub nowszy. Sprawdzimy wersję poleceniem python3 --version.
- Terminal i podstawowe uprawnienia sudo do instalacji pakietów.
- Lista proxy do monitorowania w formacie host:port, plus login i hasło, jeśli wymagane. Obsługiwane są HTTP, HTTPS i SOCKS5.
Wymagania systemowe
- 1 CPU, 512–1024 MB RAM wystarcza dla 50–200 proxy przy interwale 5–15 minut. Dla tysięcy proxy lepiej 2 CPU i 2 GB RAM.
- Wolne miejsce na dysku od 1 GB. SQLite jest lekka, ale logi rosną.
- Otwarty dostęp do internetu. Dostęp do API Telegrama i Twoich proxy jest obowiązkowy. Dla ip-api.com wymagany jest wychodzący dostęp HTTP.
Co należy zainstalować
- Python 3.11+ i venv dla wirtualnego środowiska.
- pip do instalacji zależności.
- Biblioteki: aiogram w wersji 3, aiohttp, APScheduler, aiosqlite, python-dotenv (dla wygodnej konfiguracji), uvloop (opcjonalnie dla Linux), yarl (często jako zależność).
Tworzenie kopii zapasowych
Na początku tworzenie kopii zapasowych nie jest krytyczne. Po uruchomieniu bota koniecznie skonfigurujemy prostą kopię zapasową bazy SQLite z logami i ustawieniami. To pozwoli na cofnięcie się w przypadku błędnej aktualizacji lub uszkodzenia pliku.
⚠️ Uwaga: SQLite to jeden plik. Jeśli ulegnie on uszkodzeniu przy niespodziewanym braku zasilania, można stracić świeże zapisy. Dlatego na VPS włącz automatyczne codzienne tworzenie kopii zapasowej pliku bazy za pomocą cron lub timerów systemd. Pokażemy prosty skrypt do tego na końcu.
Podstawowe pojęcia
Aby się nie pogubić, ustalmy kluczowe terminy i zasady działania.
- Proxy (Proxy) — serwer pośredniczący, przez który przechodzą Twoje zapytania. Mogą być HTTP, HTTPS i SOCKS5. Proxy może wymagać autoryzacji login:hasło lub pracy przez przypisanie IP.
- Latency (opóźnienie) — czas, w którym wykonujemy zapytanie przez proxy i otrzymujemy odpowiedź. Mierzymy w milisekundach. Im mniej, tym lepiej.
- Rotacja IP — niektóre proxy okresowo zmieniają zewnętrzny adres IP. Nasz bot powinien monitorować te zmiany i informować, jeśli IP zmieniło się niespodziewanie lub nie zgadza się z oczekiwanym regionem.
- Geolokalizacja (Geo) — kraj, miasto i operator adresu IP. Otrzymujemy przez serwis ip-api.com na podstawie IP. To pomoże upewnić się, że Twoje proxy znajduje się w odpowiednim kraju.
- Degradacja — proxy odpowiada, ale znacznie wolniej niż normalnie lub z częstymi błędami. Będziemy rozróżniać DOWN (całkowicie niedostępny) i DEGRADED (działa, ale źle).
- aiogram 3 — nowoczesna asynchroniczna biblioteka do botów Telegram. Prosta, szybka, obsługuje wszystkie aktualne funkcje Telegramu w 2026 roku.
- aiohttp — asynchroniczne zapytania HTTP z czasem oczekiwania i wsparciem dla proxy.
- APScheduler — planista zadań, który uruchomi kontrole zgodnie z harmonogramem co N minut.
- SQLite — wbudowana baza danych. Jedno plik, szybko i bez instalacji serwera. Doskonała do lokalnych logów i statystyk.
Princip działania bota jest taki: zgodnie z harmonogramem bot pobiera listę proxy, wykonuje szybkie testowe zapytania przez każde proxy, mierzy czas, uzyskuje zewnętrzny IP i dane geograficzne, zapisuje wyniki w SQLite. Jeśli proxy padło lub znacznie się pogorszyło, bot formuje starannie skonstruowaną wiadomość i wysyła ją do Telegramu. Dodatkowo bot reaguje na polecenia z czatu: pokazuje status, dostępność, ostatnie błędy, eksportuje CSV, dodaje lub wyłącza proxy, zmienia interwał.
Porada: Aby nie przekroczyć limitów ip-api.com (zazwyczaj 45 zapytań na minutę dla darmowego poziomu), wdrożymy pamięć geodanych i ograniczenie równoległych zapytań geolokalizacji. To nie spowolni działania, ale ochroni przed zablokowaniem.
Krok 1: Tworzymy bota w Telegramie i konfigurujemy dostęp
Cel etapu
Uzyskać token bota Telegrama i stworzyć prywatny czat do powiadomień, aby później bot mógł wysyłać wiadomości o incydentach.
Instrukcja krok po kroku
- Otwórz aplikację Telegram na telefonie lub komputerze.
- W pasku wyszukiwania wpisz BotFather i otwórz oficjalne konto z niebieską zakładką.
- Naciśnij Start lub wpisz komendę /start, następnie wpisz /newbot.
- Wymyśl nazwę bota. Na przykład: ProxyMonitorBot.
- Wymyśl unikalną nazwę użytkownika bota, kończącą się na bot. Na przykład: proxy_monitor_helper_bot.
- Skopiuj wydany token. Wygląda jak zestaw znaków i cyfr oddzielonych dwukropkiem.
- Stwórz prywatny czat lub grupę, do której bot będzie wysyłał powiadomienia. Dodaj bota do czatu.
- Napisz w czacie dowolną wiadomość, aby czat pojawił się na liście dla Twojego konta.
- Otwórz u bota okno dialogowe i naciśnij Start, aby go aktywować.
Ważne kwestie: Token przechowuj w tajemnicy. Nie przekazuj nikomu. Przy wycieku tokenu, osoba niepowołana może zarządzać Twoim botem. Jeśli token został skompromitowany, wybierz /revoke w BotFatherze i uzyskaj nowy.
Porada: Utwórz osobną grupę dla alertów, w której będziesz tylko Ty i bot. Tak powiadomienia nie zginą wśród innych wiadomości.
✅ Weryfikacja: Otrzymałeś token i dodałeś bota do wymaganego czatu. Bot odpowiada na komendę /start w osobnym dialogu.
Możliwe problemy i rozwiązania
- Problem: Bot nie odpowiada na /start. Przyczyna: Nie nacisnąłeś Start lub token został podany niepoprawnie w kodzie. Rozwiązanie: Sprawdź, czy bot jest aktywowany, a później prawidłowo wskażemy token w pliku .env.
- Problem: Nie widzisz chat ID. Przyczyna: Jeszcze go nie otrzymaliśmy. Rozwiązanie: Później komenda w bocie automatycznie pokaże chat_id.
Krok 2: Przygotowujemy środowisko Pythona i strukturę projektu
Cel etapu
Stworzyć roboczy folder projektu, wirtualne środowisko Python 3.11+, zainstalować zależności, skonfigurować ustawienia i strukturę katalogów.
Instrukcja krok po kroku
- Otwórz terminal na swoim komputerze lub połącz się z VPS przez SSH.
- Sprawdź wersję Pythona poleceniem: python3 --version. Jeśli wersja jest niższa niż 3.11, zainstaluj aktualną.
- Na Ubuntu wykonaj: sudo apt update; sudo apt install -y python3.11 python3.11-venv python3-pip.
- Utwórz folder projektu: mkdir proxy-monitor-bot; cd proxy-monitor-bot.
- Utwórz wirtualne środowisko: python3.11 -m venv .venv.
- Aktywuj środowisko: source .venv/bin/activate.
- Zaktualizuj pip: pip install --upgrade pip.
- Zainstaluj zależności: pip install aiogram aiohttp aiosqlite APScheduler python-dotenv uvloop.
- Utwórz strukturę folderów: mkdir app app/modules app/db app/bot app/web.
- Utwórz pliki: 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.
Podstawowa konfiguracja
Otwórz plik .env i dodaj klucze (zmień wartości na swoje):
BOT_TOKEN=twój_token_z_BotFather TELEGRAM_CHAT_ID=numer_lub_zostaw_puste 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
Skopiuj .env do .env.example i usuń sekrety, aby wygodnie dzielić się projektem bez tokenów.
Porada: Przechowuj plik .env poza systemem kontroli wersji. Dodaj .env do .gitignore, aby przypadkowo nie załadować tokenu do repozytorium.
Minimalna struktura kodu
Plik app/config.py będzie odczytywał zmienne środowiskowe i dostarczał konfigurację. Plik app/main.py uruchomi bota, planistę i web-dashboard. Moduł proxy_checker.py przeprowadzi wszystkie kontrole. W folderze db umieścimy modele i migracje SQLite. W bot napiszemy obsługiwacze komend i wysyłanie powiadomień. W web uruchomimy prosty serwer webowy z statystykami i eksportem.
✅ Weryfikacja: Masz wirtualne środowisko, zainstalowane zależności, utworzony plik .env, a struktura projektu odpowiada wymienionej. Komenda python -c "import aiogram, aiohttp, aiosqlite; print('ok')" выводит ok.
Możliwe problemy i rozwiązania
- Problem: pip zgłasza błąd SSL lub niedostępność. Przyczyna: Brak dostępu do internetu. Rozwiązanie: Sprawdź sieć lub użyj lokalnego lustra pip.
- Problem: Python 3.11 niedostępny. Przyczyna: Stary system. Rozwiązanie: Zaktualizuj system lub zainstaluj Pythona przez deadsnakes PPA lub pyenv.
Krok 3: Pisanie modułu sprawdzania proxy: połączenie, latencja, IP, geolokalizacja
Cel etapu
Stworzyć asynchroniczny moduł, który szybko i niezawodnie sprawdza proxy: potrafi wykonać testowe zapytanie HTTP przez proxy, zmierzyć opóźnienie, uzyskać zewnętrzny IP, wykonać zapytanie do ip-api.com, skasować dane geograficzne i poprawnie obsługiwać błędy.
Kluczowe pomysły
- Aby sprawdzić dostępność, wykonaj zapytanie do lekkiego zasobu, na przykład https://api.ipify.org lub dowolnego szybkiego echo-endpointu. Wybierzemy uzyskanie IP przez serwis, a następnie geo przez ip-api.com. Można także w drugą stronę.
- Czas oczekiwania ustawiamy na 8 sekund domyślnie, prób 2. Te parametry można dostosować przez .env.
- aiohttp wygodnie działa z proxy: przekazujemy parametr proxy w ClientSession.request.
- Dla geolokalizacji kasujemy dane na 24 godziny na podstawie IP, aby nie tracić limitu.
- Równolegle sprawdzamy, ale ograniczamy jednoczesność semaforem, aby nie przeciążać połączeń i nie wpadać w limity ip-api.
Szczegółowa instrukcja
- Otwórz plik app/modules/proxy_checker.py.
- Opisz model proxy jako słownik: id, label, type (http, https, socks5), endpoint (host:port), username, password, region, group, expected_country, last_ip.
- Stwórz asynchroniczną funkcję build_proxy_url, która z type, host, port i opcjonalnie username:password formuje ciąg w formacie scheme://user:pass@host:port.
- Stwórz asynchroniczną funkcję fetch_ip(session, proxy_url) do uzyskiwania zewnętrznego IP przez proxy. Użyj url https://api.ipify.org?format=json lub podobnego serwisu, który zwraca Twoje IP w JSON. Zmierz czas do wezwania i po odpowiedzi, aby uzyskać latency.
- Stwórz pamięć geodanych: słownik w pamięci i tabelę w SQLite, aby nie tracić pamięci między restarami. Klucz — IP, wartość — JSON kraju, miasta, organizacji i czasu kasowania.
- Stwórz funkcję fetch_geo(session, ip), która robi GET zapytanie do ip-api.com/json/{ip}?fields=status,country,countryCode,regionName,city,org,query. Przy statusie fail zwróć oznakę błędu. Przy sukcesie zwróć dane geograficzne.
- Realizuj funkcję check_proxy(proxy) z logiką: zbuduj proxy_url, spróbuj uzyskać IP z czasem oczekiwania, zmierz latency, następnie uzyskaj dane geograficzne (z pamięci podręcznej lub sieci), sformułuj wynik: dostępność (ok), opóźnienie w milisekundach, zewnętrzne IP, kraj i miasto, oraz typ wyniku: UP, DEGRADED lub DOWN.
- Określ kryteria DEGRADED: jeśli latency przekracza Twój próg, na przykład 1500–2000 ms, lub jeśli część błędów w ostatnich kontrolach jest zauważalna. Dla uproszczenia: jeśli odpowiedź jest, ale latency jest większe niż 2 sekundy — DEGRADED, w przeciwnym razie UP. Jeśli odpowiedzi nie ma — DOWN.
- Zwróć szczegółowy wynik do logowania: timestamp, proxy_id, status, latency_ms lub None, ip lub None, geo lub None, error_reason, changed_ip (True lub False jeśli IP różni się od poprzedniego), changed_geo (jeśli kraj się zmienił), region, group, type.
- Dodaj obróbkę wyjątków: asyncio.TimeoutError, aiohttp.ClientConnectorError, aiohttp.ClientHttpProxyError, aiohttp.ClientProxyConnectionError, błędy sock. W polu error_reason zapisz krótkie opisy.
Przykład kodu (upraszczając, w jednej linii)
Przykład logiki w kompaktowej formie: 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'] W rzeczywistym kodzie dodamy logowanie w SQLite i semafory dla GEO-zapytań, a także eleganckie czasy oczekiwania i retry. ⚠️ Uwaga: Nie rób zbyt wielu równoległych zapytań do ip-api.com. Jeśli masz listę ze setkami proxy, kasuj wyniki i ogranicz równoległość zapytań. To ochroni przed limitami i błędami. ✅ Weryfikacja: Ręcznie wywołaj funkcję check_proxy dla jednego testowego proxy i wydrukuj wynik. Powinieneś zobaczyć status UP lub DEGRADED z zmierzonym opóźnieniem i zewnętrznym IP. Stworzyć tabele w SQLite do przechowywania listy proxy, historii sprawdzeń, incydentów, pamięci geograficznej i ustawień. Da to szczegółową statystykę oraz możliwość budowania wykresów. 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); Porada: Jeśli już przechowujesz listę proxy w CSV lub JSON, dodaj wygodny import do bazy: prosty skrypt czyta plik i dodaje wpisy do proxies. ✅ Weryfikacja: Uruchom funkcję init_db i upewnij się, że plik bazy danych pojawił się w ścieżce z DB_PATH. Sprawdź, czy tabele zostały utworzone, wykonując proste zapytanie select count(*) from proxies i uzyskując odpowiedź 0. Uruchomić bota, który reaguje na komendy, potrafi wysyłać powiadomienia do Twojego czatu oraz odczytywać ustawienia z .env. Skonfiguruj podstawowe komendy: /start, /status, /chatid, /addproxy, /list, /enable, /disable, /interval, /export. W app/bot/notifications.py stwórz funkcję notify_change, która formuje wiadomość o zdarzeniach. Przykład wiadomości: Proxy: EU-1 (http) Region: EU Grupa: EUROPA Status: DOWN Powód: timeout Ostatni IP: 203.0.113.45 Oczekiwany: kraj DE Otrzymany: kraj NL Czas: 2026-02-01 12:34:56 Latencja: n/a. Dla UP użyj etykiety UP, dla degradacji DEGRADED. Dodaj sortowanie według ważności: najpierw DOWN, następnie DEGRADED, następnie wiadomości o zmianie IP. Dodaj emoji-indykatory dla przejrzystości, np. ✅ dla UP, ⚠️ dla DEGRADED i ❌ dla DOWN. Jeśli TELEGRAM_CHAT_ID nie jest ustawiony, wysyłaj do bieżącego czatu, z którego przyszła komenda. W produkcji lepiej zablokować chat_id w .env. Porada: Dla grup czat-bot może potrzebować uprawnień do wysyłania wiadomości. Sprawdź ustawienia grupy, aby bot był uczestnikiem z prawem pisania. ✅ Weryfikacja: Uruchom bota lokalnie i wyślij mu /chatid. Powinieneś otrzymać numeryczny identyfikator. Ustaw TELEGRAM_CHAT_ID w .env. Wyślij /start i /status. Bot powinien odpowiedzieć. Komenda /list na razie może być pusta, to normalne. Skonfigurować cykliczne kontrole wszystkich włączonych proxy co 5–15 minut z uwzględnieniem bieżącego interwału z ustawień, równolegle sprawdzać bez przeciążania, logować historię i wysyłać alerty przy zmianach. Porada: Dodaj losowy jitter 0–60 sekund do harmonogramu, aby zredukować szczytowe obciążenie i uniknąć synchronizacji zapytań. ✅ Weryfikacja: Ustaw CHECK_INTERVAL_MINUTES=1 tymczasowo i uruchom aplikację. W logach powinieneś zobaczyć, że kontrole wykonywane są co minutę, a nowe wiersze dodawane są do tabeli checks. Zbierz aplikację całościowo: konfiguracja, Baza Danych, bot, sprawdzacz, planner i web-dashboard. Zapewnij prawidłowy start i zatrzymanie, przetwórz sygnały kończenia. Uproszczona koncepcja uruchomienia w jednej linii: 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()). Porada: Dodaj szczegółowe logowanie na poziomie INFO i WARN. To pomoże szybko zrozumieć, co się dzieje podczas uruchamiania i podczas kontrolek. ✅ Weryfikacja: Uruchom python app/main.py. Bot powinien odpowiedzieć na /start, web-dashboard powinien otwierać się pod adresem http://localhost:8080, a planner powinien rozpocząć kontrole zgodnie z interwałem. Uczynić powiadomienia zrozumiałymi, zwięzłymi i informacyjnymi. Skonfiguruj grupowanie proxy według regionów i typów, aby wiadomości były bardziej usystematyzowane. ✅ Weryfikacja: Na chwilę zamień jedno proxy na na pewno niedziałający endpoint. Czekaj na kontrolę. Otrzymasz powiadomienie z blokiem DOWN. Przywróć proxy do pracy, a zobaczysz powiadomienie o przywróceniu. Rozpocząć bota na zdalnym serwerze, skonfigurować automatyczne uruchamianie przez systemd, zapewnić logowanie i prostą aktualizację. Porada: Jeśli używasz uvloop, upewnij się, że jest zainstalowany w wirtualnym środowisku. Na Windows uvloop nie jest używany, na Linux poprawia wydajność. ✅ Weryfikacja: Bot odpowiada na /start z Twojego Telegrama przy uruchomionym serwisie. W logach widać uruchomienie planisty, a web-dashboard nasłuchuje portu 8080. ✅ Weryfikacja: Jeśli wszystkie punkty checklisty przechodzą i scenariusze testowe działają, Twój bot jest prawidłowo wdrożony i wykonuje działania monitorujące. W app/web/server.py uruchom serwer aiohttp.web. Na stronie głównej wyświetl podsumowanie: liczba proxy, ile UP, DOWN, DEGRADED, średnie opóźnienie, dostępność przez 24 godziny. Zrób endpoint /export?from=ts&to=ts do eksportowania CSV. Minimalny HTML może być prostą listą i tabelą ze statusem. Wizualizację wykresów można dodać później przez proste SVG. Porada: Dodaj przycisk Zmień interwał bezpośrednio w dashboardzie, który wywołuje endpoint i zmienia wartość w ustawieniach. To przyspieszy zarządzanie bez komend Telegram. Skrypt do backupu bazy: tar -czf backup-$(date +%F).tar.gz data/monitor.db. Zaplanuj codzienny backup przez cron lub timery systemd. Przechowuj przynajmniej ostatnie 7 archiwów. ⚠️ Uwaga: Nie edytuj pliku bazy na żywo. W przypadku ręcznych poprawek zatrzymaj serwis, zrób kopię, edytuj i uruchom ponownie. Przeszedłeś całą drogę od pomysłu do działającego rozwiązania: stworzyłeś bota Telegrama w aiogram 3, napisałeś moduł do sprawdzania proxy na aiohttp, skonfigurowałeś planista APScheduler, zapisałeś historię w SQLite, zrealizowałeś powiadomienia o upadkach, degradacjach, zmianach IP i geolokalizacji, wdrożyłeś aplikację na VPS z automatycznym uruchamianiem przez systemd i dodałeś prosty web-dashboard z eksportem logów. Teraz masz elastyczne narzędzie, które można skalować: dzielić grupy, ustawiać progi, łączyć wykresy i raporty, przenosić na PostgreSQL przy wzroście obciążenia. Następny krok — automatyzacja konserwacji: ustawienia rotacji logów, codzienne kopie zapasowe bazy, monitorowanie samego bota przez metryki systemowe VPS. Możesz dalej się rozwijać: dodać rolę dostępu do komend bota, wprowadzić SLA-raporty dla grup, połączyć alternatywne źródła danych geo, stworzyć interfejs webowy na dowolnej wygodnej dla Ciebie bibliotece. Powodzenia i stabilnego uptime dla Twoich proxy!Możliwe problemy i rozwiązania
Krok 4: Konfiguracja bazy SQLite i logowanie historii
Cel etapu
Struktura bazy
Szczegółowa instrukcja
Przykład SQL (w jednej linii)
Możliwe problemy i rozwiązania
Krok 5: Realizujemy bota Telegrama w aiogram 3
Cel etapu
Szczegółowa instrukcja
Wysyłanie powiadomień
Możliwe problemy i rozwiązania
Krok 6: Planner zadań na APScheduler
Cel etapu
Szczegółowa instrukcja
Porada:
Możliwe problemy i rozwiązania
Krok 7: Integracja wszystkich części w punkcie wejścia main.py
Cel etapu
Szczegółowa instrukcja
Możliwe problemy i rozwiązania
Krok 8: Format powiadomień i grupowanie proxy
Cel etapu
Format powiadomień
Grupowanie proxy
Realizacja
Możliwe problemy i rozwiązania
Krok 9: Wdrożenie na VPS (Ubuntu) i automatyczne uruchamianie
Cel etapu
Przygotowanie VPS
systemd serwis
Możliwe problemy i rozwiązania
Sprawdzanie wyników
Checklist
Jak przetestować
Wskaźniki sukcesu
Typowe błędy i rozwiązania
Dodatkowe możliwości
Zaawansowane ustawienia
Optymalizacja
Prosty dashboard
Kopie zapasowe
FAQ
Podsumowanie