Zpět na domů

P2P videoslužba na WebRTC: vývoj od nuly za 9 měsíců

Projekt „Vizavi“ — P2P videoslužba, vyvinutá od nuly za 9 měsíců. Architektura je založena na WebRTC s vlastním STUN/TURN serverem a signalizačním serverem na Node.js. Řešení běží na skromném VPS bez použití databází, data se ukládají v JSON souborech.

Jak sestavit videoslužbu za 9 měsíců na VPS s 1 jádrem
Advertisement 728x90

# 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.

Google AdInline article slot

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.

Google AdInline article slot

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:

Google AdInline article slot
  • 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

Advertisement 728x90

Číst dál