Servidor de Entretenimiento Local y Descentralizado: Un Proyecto de Software Libre y Autero bajo principios de Soberania Digital.
PrivaStream es una plataforma diseñada para permitir la transmision multimedia y mensajeria segura P2P sin depender de infraestructuras centralizadas en la nube.
Note
Para obtener detalles exhaustivos sobre la arquitectura, la especificacion completa de la API REST y los estandares de programacion, consulte la Documentacion Maestra.
Este proyecto esta construido bajo una arquitectura Zero-Trust y esta optimizado para desplegarse sobre entornos Linux (Debian/Ubuntu).
La configuracion de Nginx, politicas de Firewall y dependencias iniciales del sistema se encuentran automatizadas en nuestros scripts de despliegue.
- Ingrese a la consola de su servidor local o maquina virtual.
- Navegue al directorio de scripts y otorgue permisos de ejecucion:
cd scripts/ chmod +x install.sh - Ejecute el script instalador con privilegios de administrador:
sudo ./install.sh
Important
El script install.sh cerrara los puertos de red no esenciales mediante el Firewall (UFW) y dejara activo exclusivamente el proxy Nginx en el puerto local 8080 para canalizar el trafico entrante de forma segura.
Para exponer su servidor local de streaming de forma segura a internet sin realizar Port Forwarding en su enrutador, siga estos pasos:
- Autentique el daemon de Cloudflare con su cuenta:
sudo cloudflared tunnel login
- Cree un tunel exclusivo para el proyecto:
sudo cloudflared tunnel create privastream
- Vincule el tunel a su zona DNS:
sudo cloudflared tunnel route dns privastream midominio.com
- Inicie la ejecucion del tunel direccionando el trafico al puerto local de Nginx (8080):
cloudflared tunnel run --url http://127.0.0.1:8080 privastream
Tip
Si desea que el tunel se inicie como un servicio persistente del sistema al encender el servidor, instale el servicio del daemon ejecutando sudo cloudflared service install.
El trafico entrante en el puerto 8080 es ruteado automaticamente por Nginx.
- Backend (API): Nginx redirecciona las peticiones de
/apihacia el puerto local 3000 (http://127.0.0.1:3000). Asegurese de iniciar su servidor Node.js en este puerto. - Archivos Multimedia: Se despachan directamente desde
/var/www/privastream/media/por el proxy web para optimizar el rendimiento.
Antes de arrancar en modo desarrollo, instale las dependencias locales en los directorios correspondientes:
# Para el backend
cd backend/
npm install
npm run dev
# Para el frontend
cd ../frontend/
npm install
npm run devEstablezca las variables requeridas copiando el archivo de ejemplo:
cp backend/.env.example backend/.env| Variable | Descripcion | Valor por Defecto |
|---|---|---|
SERVER_PORT |
Puerto de escucha interna de la API. | 3000 |
MEDIA_UPLOAD_PATH |
Ruta absoluta en disco para los archivos multimedia. | /var/www/privastream/media |
ALLOWED_HOSTS |
Dominios o IPs autorizados para procesar peticiones. | localhost,127.0.0.1 |
Ejecute la suite de pruebas unitarias locales para verificar el estado del codigo:
- Unitarias de Backend:
python -m unittest discover -s tests -p "backend_test.py" - Unitarias de Frontend:
cd frontend/ npm test
| Sintoma detectado | Causa mas probable | Accion correctiva recomendada |
|---|---|---|
| Error 502 Bad Gateway | El servidor de Node.js no esta en ejecucion o esta escuchando en un puerto diferente al 3000. | Verifique que el servicio backend este arriba y que la variable SERVER_PORT este configurada correctamente en el archivo .env. |
| Permission Denied en Cargas | El proceso de Node.js no posee privilegios de escritura sobre el directorio de medios /var/www/privastream/media. |
Asigne el grupo www-data al directorio de cargas y asegurese de que el usuario de ejecucion pertenezca al grupo. |
| Fallo de Reproduccion / Seeking | La ruta de almacenamiento de archivos local no esta sincronizada con el alias del proxy Nginx. | Valide que MEDIA_UPLOAD_PATH en el backend coincida exactamente con la directiva root en nginx/conf.d/privastream.conf. |
| El Tunel no Conecta | El token del tunel ha expirado o el Firewall (UFW) bloquea las peticiones de red salientes hacia Cloudflare. | Revise el estado del tunel ejecutando cloudflared tunnel status e inspeccione las reglas del firewall local. |