No description
Find a file
2026-05-14 14:27:36 +07:00
backend fix: security hardening - remove secrets, fix CORS, add non-root user, add Secure flag 2026-05-14 14:24:14 +07:00
doc feat: modernize watch page, add mix playlist, and fix navigation 2026-03-24 21:59:10 +07:00
frontend fix: security hardening - remove secrets, fix CORS, add non-root user, add Secure flag 2026-05-14 14:24:14 +07:00
.dockerignore fix: Add .dockerignore to properly exclude files during build 2026-03-25 07:55:54 +07:00
.env.example feat: modernize watch page, add mix playlist, and fix navigation 2026-03-24 21:59:10 +07:00
.gitignore fix: security hardening - remove secrets, fix CORS, add non-root user, add Secure flag 2026-05-14 14:24:14 +07:00
docker-compose.yml refactor: make docker-compose generic for any domain deployment 2026-05-14 14:27:36 +07:00
Dockerfile fix: security hardening - remove secrets, fix CORS, add non-root user, add Secure flag 2026-05-14 14:24:14 +07:00
Dockerfile.diag Add Synology-compatible Dockerfile and docker-compose (v4.0.8) 2026-03-24 22:57:30 +07:00
package-lock.json feat: add watch page controls and custom KV-Tube branding 2026-05-14 10:59:21 +07:00
README.md docs: rewrite README with standard project format 2026-05-14 14:26:18 +07:00
restart.sh feat: modernize watch page, add mix playlist, and fix navigation 2026-03-24 21:59:10 +07:00
SECURITY.md Create SECURITY.md for security policy 2026-05-14 14:12:57 +07:00
stop.sh feat: modernize watch page, add mix playlist, and fix navigation 2026-03-24 21:59:10 +07:00
supervisord.conf fix: security hardening - remove secrets, fix CORS, add non-root user, add Secure flag 2026-05-14 14:24:14 +07:00

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

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+)

  1. Create /volume1/docker/kv-tube/data
  2. Upload docker-compose.yml, Dockerfile, supervisord.conf
  3. Open Container Manager > Project > Create
  4. 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.