Powrót do strony głównej

P2P-serwis wideo na WebRTC: rozwój od zera w 9 miesięcy

Projekt „Vizavi” — P2P-serwis wideo, opracowany od zera w 9 miesięcy. Architektura oparta na WebRTC z własnym serwerem STUN/TURN i serwerem sygnalizacyjnym na Node.js. Rozwiązanie działa na skromnym VPS bez użycia baz danych, przechowując dane w plikach JSON.

Jak złożyć serwis wideo w 9 miesięcy na VPS z 1 rdzeniem
Advertisement 728x90

# Serwis P2P wideo od zera: 9 miesięcy rozwoju na VPS z 1 rdzeniem

Za dziewięć miesięcy wolnego czasu elektryk z prowincji stworzył w pełni działający serwis P2P wideo «Wizawi» bez rejestracji i instalowania aplikacji. Projekt, opracowany od zera na skromnym VPS (1 rdzeń, 512 MB RAM), wykorzystuje WebRTC do bezpośredniego łączenia użytkowników i rozwiązuje problem omijania blokad. Efekt — przeglądarkowe rozwiązanie z rosyjską domeną, zdolne do pracy nawet przy lokalnych ograniczeniach sieciowych.

Od pomysłu do realizacji: jak powstał «Wizawi»

Twórca projektu napotkał blokadę standardowych serwisów wideo, co zmusiło go do poszukiwania alternatywy. W trakcie eksperymentów z siecią neuronową pojawiło się pytanie: «Czy możesz zrobić wideorozmowę?». Zaczynając od podstawowych pojęć WebRTC, serwerów STUN/TURN i kandydatów ICE, autor zagłębił się w szczegóły techniczne. Pierwsze udane testowe połączenia stały się katalizatorem dalszego rozwoju. Kluczową cechą stało się zrezygnowanie z rejestracji i aplikacji — połączenie nawiązuje się przez przeglądarkę za pomocą krótkiego cyfrowego identyfikatora pokoju.

Architektura opiera się na zasadzie «budynku z pokojami»: użytkownicy wpisują numer pokoju na stronie https://vi-for-vi.rf/, po czym system automatycznie ich łączy, gdy jest dwóch uczestników. Przekazanie numeru pokoju zależy od użytkowników — przez komunikatory, głosem przez telefon lub przy osobistym spotkaniu. Taki sposób minimalizuje bariery wejścia: po przejściu po linku wystarczy tylko zgoda na dostęp do kamery i mikrofonu.

Google AdInline article slot

stos technologiczny: minimalizm jako filozofia

Serwis jest wdrożony na wynajętym VPS w moskiewskim centrum danych o minimalnych parametrach:

  • 1 rdzeń procesora
  • 512 MB pamięci RAM
  • 10 GB dysku SSD (zajęte 3,3 GB)
  • OS Debian 11

Infrastruktura obejmuje:

  • Coturn — własny serwer STUN/TURN do omijania NAT
  • Node.js (serwer sygnalizacyjny) zarządzany przez PM2
  • Nginx jako reverse proxy
  • SSL od Let’s Encrypt z automatycznym odnawianiem
  • UFW i Fail2Ban do podstawowej ochrony
  • Logika klienta i serwera w czystym JavaScript
  • Express do serwowania statyki i REST API
  • Socket.io do wymiany sygnałów WebRTC w czasie rzeczywistym

Przechowywanie danych jest zorganizowane za pomocą plików JSON zamiast tradycyjnych SGBD. To rozwiązanie wynika z ograniczonych zasobów serwera i ułatwia wdrożenie. Panel administracyjny, stworzony od zera, dostarcza dane o bieżących połączeniach i pomaga monitorować aktywność w czasie rzeczywistym.

Google AdInline article slot

Typy pokojów: od prostych po VIP

System obsługuje trzy typy pokojów:

  • Zwykłe pokoje — podstawowy tryb dla dwóch uczestników. Po wpisaniu tego samego numeru użytkownicy łączą się automatycznie. Brak nagrywania rozmów, logowania IP i przechowywania wiadomości.
  • Pokoje VIP — dodają hierarchię: właściciel zyskuje kontrolę nad czatem, nagrywaniem spotkań, prawem wyrzucania gości. Goście mogą udostępniać ekran i przesyłać pliki. Zaimplementowana jest kolejka dla jednoczesnych połączeń oraz funkcja zostawiania wiadomości przy wejściu.
  • Pokoje do obserwacji (w opracowaniu) — koncepcja «baby monitora»: jedno urządzenie działa jako kamera, drugie jako monitor. Planowane jest wykorzystanie starych smartfonów jako źródeł wideo.

Krytyczną cechą jest brak kroków pośrednich przed połączeniem. W przeciwieństwie do konkurentów wymagających rejestracji lub podania imienia, «Wizawi» łączy użytkowników natychmiast po wpisaniu numeru pokoju.

Bezpieczeństwo i prywatność: obecny stan

Szyfrowanie end-to-end jest zapewnione na poziomie WebRTC, co gwarantuje ochronę transmitowanego strumienia audio i wideo. Jednak kilka aspektów wymaga dopracowania:

Google AdInline article slot
  • Historia czatu jest przechowywana w localStorage przeglądarki w formie jawnej
  • Wiadomości przy wejściu do pokojów VIP są zapisywane w plikach JSON bez szyfrowania
  • Brak uwierzytelniania dostępu do pokojów

Autor podkreśla, że system nie jest przeznaczony do przekazywania poufnych danych, ale uznaje konieczność wzmocnienia ochrony. W warunkach ograniczonych zasobów VPS (512 MB RAM) wdrożenie pełnego szyfrowania wymaga równowagi między bezpieczeństwem a wydajnością.

Co ważne: kluczowe wnioski dla programistów

  • Minimalizm architektury — używanie JSON zamiast SGBD i rezygnacja z nadmiarowych zależności jest kluczowa dla pracy na słabych VPS.
  • Elastyczność serwera sygnalizacyjnego — Socket.io efektywnie radzi sobie z sygnałami WebRTC nawet przy dużej liczbie botów i skanerów.
  • Doświadczenie użytkownika — eliminacja kroków pośrednich (rejestracja, podawanie imienia) bezpośrednio wpływa na zaangażowanie.
  • Bezpieczeństwo jako proces — podstawowa ochrona (UFW, Fail2Ban) jest obowiązkowa nawet w małych projektach, ale wymaga ciągłego audytu.

System zmaga się z ciągłymi zapytaniami od skanerów i botów, co zmusza do wdrożenia filtrowania: dla nieprzeglądarkowych klientów serwowana jest uproszczona strona HTML bez JavaScript. To rozwiązanie zmniejsza obciążenie serwera i poprawia indeksację SEO.

Projekt pokazuje, że zaawansowane technologie jak WebRTC są dostępne nawet dla początkujących programistów. Kluczowe czynniki sukcesu to etapowa realizacja, skupienie na funkcjach rdzennych i korzystanie z gotowych rozwiązań (Coturn, Let’s Encrypt). Aby kontynuować rozwój, autor planuje dodać szyfrowanie wiadomości i zoptymalizować obsługę dużej liczby jednoczesnych połączeń.

— Editorial Team

Advertisement 728x90

Czytaj dalej