Tự cài YouTube Không Quảng Cáo
(KV Tube — cài một chạm từ Package Center)
Hướng dẫn từng bước thiết lập hệ thống YouTube riêng tư 100% không quảng cáo (hỗ trợ TV, điện thoại & web): cách 1 — cài một chạm bằng gói KV Tube trên Synology NAS (tự động dựng backend Invidious + giao diện); cách 2 — tự dựng bằng Docker Compose. Đồng bộ Kênh đăng ký & Lịch sử xem từ Google Takeout.
Cài KV Tube từ Package Center (1 phút)
Khuyên dùng cho Synology NAS: gói KV Tube tự động dựng toàn bộ hệ thống gồm 4 container (PostgreSQL + Companion + Invidious API + giao diện KV Tube) — không cần Docker Compose, không cần terminal, không cần domain.
-
Thêm nguồn gói KV-APPS
Trong Package Center → Cài đặt → Nguồn gói (Package Sources) bấm Thêm và nhập:
https://pkg.khoavo.myds.mehoặchttps://syno.vndns.net
Trong Mức độ tin cậy (Trust Level), chọn Bất kỳ nhà xuất bản nào (Any publisher) — chỉ cần làm một lần. -
Cài gói KV Tube
Tìm KV Tube trong danh sách gói → bấm Cài đặt → xác nhận. Không có wizard, không có câu hỏi — hệ thống tự chọn 2 cổng trống, sinh và lưu mật khẩu database, khóa companion & hmac, tạo mạng riêng cho 4 container và thêm biểu tượng vào menu chính DSM.
-
Mở KV Tube
Bấm biểu tượng KV Tube trong menu chính DSM (hoặc xem cổng ở Bảng điều khiển → Cổng ứng dụng → KV Tube). Giao diện mở tại
http://<IP-NAS>:<cổng>/— xem, tìm kiếm và theo dõi kênh 100% không quảng cáo.
http://<IP-NAS>:<cổng Invidious>/login) → tạo tài khoản → Preferences → API → sao chép token → dán vào KV Tube (Settings → Invidious Token). Dữ liệu từ Google Takeout (subscriptions.csv, watch-history.json) có thể import ngay trên trang Invidious.
/var/packages/kvtube/var/data và được giữ khi gỡ cài. Cập nhật gói giữ nguyên cổng, dữ liệu và khóa bảo mật. Muốn tên miền riêng: tạo file /var/packages/kvtube/etc/site_url (ví dụ https://yt.khoavo.myds.me) rồi bấm Cập nhật. Chỉ hỗ trợ NAS x86_64 (amd64). Nhớ mở 2 cổng trong tường lửa DSM nếu có bật.
Mô hình hệ thống khi tự dựng thủ công
Bốn container phối hợp cùng nhau trong một mạng nội bộ cách ly.
Port :3241 (UI)
Port :7601 (API)
Port :8282 (Playback)
Port :5432 (DB)
Yêu cầu trước khi cài đặt
- Thiết bị: Synology NAS (DSM 7.2+) hoặc bất kỳ máy Linux / VPS nào đã cài đặt Docker & Docker Compose.
- Domain / Subdomains: 2 tên miền (ví dụ:
yt.khoavo.myds.mecho Invidious vàyoutube.khoavo.myds.mecho giao diện KV Tube). - Reverse Proxy: Nginx Proxy Manager, Synology Reverse Proxy, hoặc Cloudflare Tunnels (đã bật SSL).
- Tài khoản Google: Đang dùng để xuất dữ liệu subscriptions & history.
/volume2/docker/invidious trong file compose bằng đường dẫn volume docker trên NAS của bạn (ví dụ /volume1/docker/invidious).
Tạo cấu trúc thư mục
Tạo thư mục làm việc trên NAS hoặc server:
mkdir -p /volume2/docker/invidious/db /volume2/docker/invidious/companion cd /volume2/docker/invidious
Tạo file docker-compose.yml
Copy toàn bộ cấu hình dưới đây và lưu vào file docker-compose.yml:
Nhập domain của bạn để cấu hình tự động cập nhật trực tiếp vào file bên dưới:
services:
invidious-db:
image: postgres:16
container_name: Invidious-DB
hostname: invidious-db
environment:
POSTGRES_DB: invidious
POSTGRES_USER: kemal
POSTGRES_PASSWORD:
healthcheck:
test: ["CMD", "pg_isready", "-q", "-d", "invidious", "-U", "kemal"]
timeout: 45s
interval: 10s
retries: 10
volumes:
- /volume2/docker/invidious/db:/var/lib/postgresql/data:rw
restart: unless-stopped
networks:
- invidious-net
companion:
image: quay.io/invidious/invidious-companion:latest
container_name: Invidious-COMPANION
hostname: companion
environment:
SERVER_SECRET_KEY:
volumes:
- /volume2/docker/invidious/companion:/var/tmp/youtubei.js:rw
cap_drop:
- ALL
read_only: true
security_opt:
- no-new-privileges:true
restart: unless-stopped
networks:
- invidious-net
invidious:
image: quay.io/invidious/invidious:latest
container_name: Invidious
hostname: invidious
ports:
- "7601:3000"
environment:
INVIDIOUS_CONFIG: |
db:
dbname: invidious
user: kemal
password:
host: invidious-db
port: 5432
check_tables: true
captcha_enabled: false
default_user_preferences:
locale: vi
region: VN
domain:
external_port: 443
https_only: true
invidious_companion:
- private_url: "http://companion:8282/companion"
public_url: "https:///companion"
invidious_companion_key:
hmac_key:
restart: unless-stopped
depends_on:
invidious-db:
condition: service_healthy
companion:
condition: service_started
networks:
- invidious-net
kv-tube-ui:
image: vndangkhoa/kv-tube-ui:4.4.0
container_name: KVTube-UI
ports:
- "3241:3000"
environment:
INVIDIOUS_URL: "http://invidious:3000"
NEXT_PUBLIC_INVIDIOUS_URL: "https://"
NEXT_PUBLIC_SITE_URL: "https://"
NEXT_PUBLIC_DEFAULT_REGION: "VN"
restart: unless-stopped
depends_on:
- invidious
networks:
- invidious-net
networks:
invidious-net:
driver: bridge
ipam:
config:
- subnet: 172.42.0.0/24
gateway: 172.42.0.1
Khởi chạy các container
Chạy lệnh docker compose để kéo image và khởi động hệ thống:
docker compose pull docker compose up -d docker compose ps
Kiểm tra trạng thái cả 4 container: Invidious-DB (healthy), Invidious-COMPANION (up), Invidious (up), KVTube-UI (up).
Cấu hình Reverse Proxy & CORS
Điều hướng 2 tên miền về đúng cổng nội bộ của NAS:
→ NAS_IP:7601 (Invidious Backend) → NAS_IP:3241 (KV Tube Frontend)
if ($request_method = OPTIONS) {
return 204;
}
proxy_hide_header Access-Control-Allow-Origin;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Origin "https://" always;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, HEAD, PATCH, PUT, DELETE" always;
add_header Access-Control-Allow-Headers "User-Agent, Authorization, Content-Type" always;
Nhập Subscriptions & History từ Google Takeout
-
Xuất dữ liệu từ Google Takeout
Truy cập takeout.google.com → Chọn YouTube and YouTube Music → Chỉ tick subscriptions và history (chọn định dạng JSON nếu có) → Bấm Create Export và tải file ZIP về máy.
-
Import Kênh đã đăng ký (subscriptions.csv)
Mở Invidious → Subscriptions → Manage Subscriptions → Import/Export → Chọn file
subscriptions.csv→ Bấm Import. -
Import Lịch sử xem (watch-history.json)
Mở Invidious → Preferences → Import/Export data → Import YouTube watch history (.json) → Chọn file
watch-history.json→ Bấm Import.