No description
| backend | ||
| doc | ||
| frontend | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Dockerfile.diag | ||
| package-lock.json | ||
| README.md | ||
| restart.sh | ||
| SECURITY.md | ||
| stop.sh | ||
| supervisord.conf | ||
KV-Tube
A modern, self-hosted video streaming platform. Go backend + Next.js frontend in a single Docker container.
Quick Start
git clone https://github.com/vndangkhoa/kv-tube.git
cd kv-tube
mkdir -p data
docker build -t kv-tube:latest .
docker compose up -d
- Frontend: http://localhost:5011
- API: http://localhost:8981
Features
- High-resolution video playback with HLS and quality selection
- Watch history, subscriptions, and search
- Background audio playback (mobile-friendly)
- Progressive Web App (installable)
- Region selection
- Light/dark theme, responsive design
- Infinite scrolling, skeleton loaders
Architecture
Single unified Docker container running:
- Backend: Go (Gin framework) — API server on port 8080
- Frontend: Next.js 16 (standalone) — SSR on port 3000
- Process Manager: supervisord manages both processes
- Storage: SQLite for watch history and metadata
Deployment
Docker Compose
services:
kv-tube:
build: .
container_name: kv-tube
ports:
- "5011:3000"
- "8981:8080"
volumes:
- ./data:/app/data
environment:
- KVTUBE_DATA_DIR=/app/data
- GIN_MODE=release
- NODE_ENV=production
restart: unless-stopped
Synology NAS (DSM 7.2+)
- Create
/volume1/docker/kv-tube/data - Upload
docker-compose.yml,Dockerfile,supervisord.conf - Open Container Manager > Project > Create
- Select path
/volume1/docker/kv-tube, click Done
Multi-arch Build
docker buildx build --platform linux/amd64 -t kv-tube:latest --push .
Environment Variables
| Variable | Default | Description |
|---|---|---|
KVTUBE_DATA_DIR |
/app/data |
Data storage path |
GIN_MODE |
release |
Gin framework mode |
NODE_ENV |
production |
Node environment |
CORS_ALLOWED_ORIGINS |
— | Comma-separated allowed CORS origins |
PORT |
8080 |
Backend API port |
Development
# Frontend
cd frontend
npm install
npm run dev
# Backend
cd backend
go run main.go
Updating
docker compose pull
docker compose up -d
Or enable auto-updates with Watchtower.