StreamWave é uma plataforma de streaming VOD (Video on Demand) completa, projetada para escalabilidade e interação social. O sistema atua como um catálogo robusto de filmes e séries, combinando a performance do streaming adaptativo (HLS) com funcionalidades de “WatchParty” para assistir em grupo.
O projeto utiliza uma arquitetura moderna que separa o armazenamento de metadados do armazenamento de arquivos pesados de mídia:
.m3u8 que se adaptam à banda do usuário.src/server)src/client)Para executar o projeto, você pode optar pelo método Docker (recomendado) ou Manual.
A maneira mais simples de rodar o StreamWave é utilizando o Docker Compose, que sobe automaticamente o Banco de Dados, o MinIO, o Backend e o Frontend.
Crie um arquivo .env na raiz do projeto. Para o Docker funcionar corretamente, é necessário ajustar os hosts para apontarem para os nomes dos serviços (db e minio) ao invés de localhost.
Exemplo de .env otimizado para Docker:
# --- PostgreSQL ---
POSTGRES_USER="user"
POSTGRES_PASSWORD="password"
POSTGRES_DB="streamwave_db"
# IMPORTANTE: No Docker, o host deve ser o nome do serviço no compose ('db')
POSTGRES_HOST="db"
POSTGRES_PORT="5432"
# --- Backend Config ---
BCRYPT_SALT=10
JWT_SECRET="sua_chave_secreta_docker"
JWT_EXPIRES_IN="1h"
PORT=3000
# --- Armazenamento (MinIO / S3) ---
AWS_REGION="us-east-1"
# IMPORTANTE: O backend acessa o MinIO internamente via 'http://minio:9000'
S3_ENDPOINT="http://minio:9000"
BUCKET_NAME="streamwave-bucket"
# --- Credenciais MinIO ---
MINIO_ROOT_USER="minioadmin"
MINIO_ROOT_PASSWORD="minioadmin"
MINIO_PORT="9000"
MINIO_WEB_UI_PORT="9001"
# --- Frontend (Vite) ---
# O navegador (fora do Docker) acessa a API via localhost
VITE_API_ENDPOINT="http://localhost:3000/api/v1"
Na raiz do projeto, execute:
docker compose up --build
O Docker irá:
entrypoint).Após o build finalizar, acesse:
Caso prefira rodar sem Docker, siga as etapas abaixo.
npm install
Renomeie o arquivo .env.example para .env ou crie um novo na raiz do projeto. Preencha com suas configurações locais (usando localhost):
# --- PostgreSQL ---
POSTGRES_USER="johndoe"
POSTGRES_PASSWORD="randompassword"
POSTGRES_DB="mydb"
POSTGRES_HOST="localhost" # Para uso manual/local
POSTGRES_PORT="5432"
# String de conexão do Prisma (deve corresponder aos dados acima)
DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"
# ... (restante das variáveis)
Para inicializar o esquema do banco de dados e gerar o cliente Prisma, execute os comandos obrigatórios:
# Gera os tipos do Prisma Client baseados no schema
npm run prisma:generate
# Aplica as migrações para criar as tabelas no PostgreSQL
npm run prisma:migrate:deploy
Você precisará de dois terminais abertos.
Terminal 1: Backend
npm run dev:server
Terminal 2: Frontend
npm run dev:client
streamwave/
├── docker/ # Dockerfiles para Backend e Frontend
├── src/
│ ├── client/ # Frontend (Vite, HTML, CSS, JS)
│ └── server/ # Backend (Express, Controllers, Services)
│ └── prisma/ # Schemas e migrações do banco de dados
├── .env # Variáveis de ambiente
├── compose.yml # Orquestração Docker
├── package.json # Scripts e dependências
└── README.md # Documentação
Este projeto está licenciado sob a licença GPL-3.0.