# P2P vide služba od nuly: 9 měsíců vývoje na VPS s 1 jádrem
Za devět měsíců volného času elektrikář z venkova vytvořil plně funkční P2P vide službu „Vizavi“ bez registrace a instalace aplikací. Projekt, vyvinutý od nuly na skromném VPS (1 jádro, 512 MB RAM), využívá WebRTC pro přímé spojení uživatelů a řeší problém obcházení blokací. Výsledek — prohlížečové řešení s ruskou doménou, schopné fungovat i při lokálních síťových omezeních.
Od nápadu k realizaci: jak vznikl „Vizavi"
Iniciátor projektu narazil na blokování běžných video služeb, což ho donutilo hledat alternativu. Během experimentů s neuronovou sítí se zrodila otázka: „Můžeš udělat volací službu?“. Začal s základními principy WebRTC, STUN/TURN serverů a ICE kandidátů, autor se ponořil do technických detailů. První úspěšné testovací volání se stala impulsem pro další vývoj. Klíčovou vlastností se stal otkaz od registrace a aplikací — spojení se naváže v prohlížeči pomocí krátkého číselného označení místnosti.
Architektura je postavena na principu „budovy s místnostmi“: uživatelé zadají číslo místnosti na webu https://vi-for-vi.rf/, systém je pak automaticky spojí, pokud je v místnosti dva účastníci. Předání čísla místnosti zůstává na uživatelích — přes messengery, hlasem po telefonu nebo při osobní schůzce. Tento přístup minimalizuje vstupní bariéry: po kliknutí na odkaz stačí jen povolit přístup k kameře a mikrofonu.
Technický stack: minimalismus jako filozofie
Služba běží na pronajatém VPS v moskevském datovém centru s minimálními parametry:
- 1 jádro procesoru
- 512 MB operační paměti
- 10 GB SSD disku (zabito 3,3 GB)
- OS Debian 11
Infrastruktura zahrnuje:
- Coturn — vlastní STUN/TURN server pro obcházení NAT
- Node.js (signální server) pod PM2
- Nginx jako reverzní proxy
- SSL od Let’s Encrypt s automatickou obnovou
- UFW a Fail2Ban pro základní ochranu
- Klientská a serverová logika v čistém JavaScriptu
- Express pro statiku a REST API
- Socket.io pro výměnu WebRTC signálů v reálném čase
Uložení dat je řešeno přes JSON soubory místo klasických databázových systémů. Toto řešení vyplývá z omezených zdrojů serveru a usnadňuje nasazení. Admin panel, napsaný od nuly, poskytuje údaje o aktuálních spojeních a pomáhá sledovat aktivitu v reálném čase.
Typy místností: od jednoduchých po VIP
Systém podporuje tři typy místností:
- Běžné místnosti — základní režim pro dva účastníky. Po zadání stejného čísla se uživatelé automaticky spojí. Žádné nahrávání hovorů, logování IP ani ukládání zpráv.
- VIP místnosti — přidávají hierarchii: vlastník má kontrolu nad chatem, nahráváním schůzek, vylučováním hostů. Hosté mohou sdílet obrazovku a posílat soubory. Je zde fronta pro souběžná připojení a funkce zanechání zpráv u vchodu.
- Místnosti pro sledování (ve vývoji) — koncept „rádiový chůva“: jedno zařízení slouží jako kamera, druhé jako monitor. Plánuje se využití starých chytrých telefonů jako zdrojů videa.
Klíčovou vlastností je absence mezičlánků před spojením. Na rozdíl od konkurence, která vyžaduje registraci nebo zadání jména, „Vizavi“ připojí uživatele okamžitě po zadání čísla místnosti.
Bezpečnost a soukromí: současný stav
End-to-end šifrování zajišťuje WebRTC, což chrání přenášený audio- a videoproud. Nicméně několik oblastí potřebuje doladit:
- Historie chatu se ukládá v localStorage prohlížeče v otevřeném textu
- Zprávy u vchodu do VIP místností se ukládají v JSON souborech bez šifrování
- Chybí autentizace pro přístup do místností
Autor zdůrazňuje, že systém není určen pro přenos citlivých dat, ale uznává potřebu posílit ochranu. V podmínkách omezených zdrojů VPS (512 MB RAM) vyžaduje plnohodnotné šifrování rovnováhu mezi bezpečností a výkonem.
Co je důležité: klíčové závěry pro vývojáře
- Minimalismus architektury — použití JSON místo databázových systémů a otkaz od zbytečných závislostí je klíčové pro běh na slabých VPS.
- Flexibilita signálního serveru — Socket.io efektivně zpracovává WebRTC signály i při vysoké zátěži od botů a skenerů.
- Uživatelský zážitek — odstranění mezičlánků (registrace, zadání jména) přímo ovlivňuje zapojení.
- Bezpečnost jako proces — základní ochrana (UFW, Fail2Ban) je nutná i pro malé projekty, ale vyžaduje pravidelný audit.
Systém čelí neustálým požadavkům od skenerů a botů, což vede k filtrování: pro neprohlížečové klienty se vrací zjednodušená HTML stránka bez JavaScriptu. To snižuje zátěž serveru a zlepšuje SEO indexaci.
Projekt ukazuje, že složité technologie jako WebRTC jsou dostupné i začínajícím vývojářům. Klíčem k úspěchu je postupná realizace, soustředění na jádrové funkce a využití hotových řešení (Coturn, Let’s Encrypt). Pro další rozvoj autor plánuje přidat šifrování zpráv a optimalizovat práci s velkým počtem souběžných připojení.
— Editorial Team
Zatím žádné komentáře.