KV-APPS
🚫 100% NO ADS Cài một chạm (SPK) KV Tube Invidious Google Takeout
HƯỚNG DẪN CÀI ĐẶT · YOUTUBE KHÔNG QUẢNG CÁO

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.

🛡️ Chế độ bảo mật dữ liệu nhạy cảm

Mật khẩu database, companion secret và domain đã được làm mờ (blur) tự động. Nhấp vào để xem hoặc bật/tắt toàn bộ.

01 · CÁCH 1 — CÀI MỘT CHẠM

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.

  1. 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.me hoặc https://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.

  2. 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.

  3. 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.

Đồng bộ kênh đăng ký & lịch sử xem: Mở trang Invidious của NAS (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.
Ghi chú: Dữ liệu nằm tại /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.
02 · CÁCH 2 — NÂNG CAO (DOCKER COMPOSE)

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.

🌐 Giao diện Port :3241 (UI)
▶️ Invidious Port :7601 (API)
🎬 Companion Port :8282 (Playback)
🗄️ PostgreSQL Port :5432 (DB)
03 · CHUẨN BỊ (CÁCH 2)

Yêu cầu trước khi cài đặt

Mục tiêu: Dành cho cách tự dựng thủ công (không dùng gói KV Tube): sau khi hoàn thành, bạn sẽ sở hữu một hệ thống YouTube riêng tư không quảng cáo, có backend Invidious, giao diện KV Tube hoặc Materialious và dữ liệu tài khoản cá nhân được nhập từ Google Takeout.
Gợi ý cho Synology NAS: Thay /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).
04 · KHỞI TẠO

Tạo cấu trúc thư mục

Tạo thư mục làm việc trên NAS hoặc server:

Terminal Bash
mkdir -p /volume2/docker/invidious/db /volume2/docker/invidious/companion
cd /volume2/docker/invidious
05 · CẤU HÌNH

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:

⚡ Tùy biến nhanh cấu hình (Tùy chọn)

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:

docker-compose.yml
services:

  invidious-db:
    image: postgres:16
    container_name: Invidious-DB
    hostname: invidious-db
    environment:
      POSTGRES_DB: invidious
      POSTGRES_USER: kemal
      POSTGRES_PASSWORD: CHANGE_ME_DATABASE_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: CHANGE_ME_KEY_16
    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: CHANGE_ME_DATABASE_PASSWORD
          host: invidious-db
          port: 5432

        check_tables: true
        captcha_enabled: false

        default_user_preferences:
          locale: vi
          region: VN

        domain: yt.khoavo.myds.me
        external_port: 443
        https_only: true

        invidious_companion:
          - private_url: "http://companion:8282/companion"
            public_url: "https://yt.khoavo.myds.me/companion"

        invidious_companion_key: CHANGE_ME_KEY_16
        hmac_key: CHANGE_ME_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://yt.khoavo.myds.me"
      NEXT_PUBLIC_SITE_URL: "https://youtube.khoavo.myds.me"
      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
06 · TRIỂN KHAI

Khởi chạy các container

Chạy lệnh docker compose để kéo image và khởi động hệ thống:

Terminal Bash
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).

07 · PROXY & CORS

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:

Port Mapping
yt.khoavo.myds.me       → NAS_IP:7601  (Invidious Backend)
youtube.khoavo.myds.me  → NAS_IP:3241  (KV Tube Frontend)
Cấu hình CORS Nginx (Bắt buộc cho KV Tube): Trong Proxy Host của Invidious, thêm đoạn cấu hình Custom Nginx sau để cho phép giao diện KV Tube gọi API:
nginx.conf (Custom Configuration)
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://youtube.khoavo.myds.me" 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;
08 · ĐỒNG BỘ DỮ LIỆU

Nhập Subscriptions & History từ Google Takeout

  1. Xuất dữ liệu từ Google Takeout

    Truy cập takeout.google.com → Chọn YouTube and YouTube Music → Chỉ tick subscriptionshistory (chọn định dạng JSON nếu có) → Bấm Create Export và tải file ZIP về máy.

  2. Import Kênh đã đăng ký (subscriptions.csv)

    Mở Invidious → SubscriptionsManage SubscriptionsImport/Export → Chọn file subscriptions.csv → Bấm Import.

  3. Import Lịch sử xem (watch-history.json)

    Mở Invidious → PreferencesImport/Export dataImport YouTube watch history (.json) → Chọn file watch-history.json → Bấm Import.

09 · KIỂM TRA

Danh sách kiểm tra hoàn tất

✓ Đã sao chép vào clipboard