Loại bỏ quảng cáo: Tự host frontend YouTube riêng tư với Invidious và Docker

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Vấn đề: Sự cồng kềnh về hiệu năng và quyền riêng tư của YouTube

YouTube là một con dao hai lưỡi. Mặc dù sở hữu một kho nội dung khổng lồ không đâu sánh bằng, nhưng trải nghiệm người dùng thực tế đã trở thành một cơn ác mộng với những quảng cáo không thể bỏ qua và việc thu thập dữ liệu gắt gao.

Một tab YouTube duy nhất có thể dễ dàng ngốn tới 1GB RAM, phần lớn trong số đó được dùng để chạy các trình theo dõi (tracker) ngầm và các script nặng nề. Đối với những người đam mê HomeLab, còn có một chi phí ẩn về băng thông. Mỗi khi một thiết bị trong mạng tải một video, nó sẽ tải xuống khoảng 15-20MB dữ liệu đo lường từ xa (telemetry) và JavaScript trước khi khung hình đầu tiên kịp phát.

Các trình chặn ở cấp độ DNS như Pi-hole hay AdGuard Home thường gặp khó khăn ở đây. Vì Google phân phối quảng cáo từ cùng tên miền với nội dung video, việc chặn quảng cáo thường làm hỏng hoàn toàn video đó. Bạn cần một cách tiếp cận khác. Một frontend riêng tư đóng vai trò như một proxy, loại bỏ sự cồng kềnh và chỉ cung cấp nội dung bạn thực sự muốn xem.

Khái niệm cơ bản: Invidious là gì?

Hãy coi Invidious là một “lớp vỏ” (skin) nhẹ nhàng, tập trung vào quyền riêng tư cho YouTube. Đây là một giải pháp thay thế mã nguồn mở cho phép bạn duyệt và xem video mà không cần tài khoản Google, không quảng cáo và không có các cookie theo dõi xâm nhập. Nó không sử dụng YouTube API chính thức – vốn nổi tiếng với hạn ngạch khắt khe và yêu cầu mã khóa nhà phát triển. Thay vào đó, nó thu thập dữ liệu (scrape) trang web một cách an sau và sử dụng các API nội bộ để lấy dữ liệu.

Tại sao nên tự host nó? Dưới đây là những lợi ích hữu hình:

  • Không quảng cáo: Không quảng cáo giữa video, không banner và không có các thành phần “được tài trợ” gây nhiễu.
  • Ẩn địa chỉ IP: Google chỉ nhìn thấy địa chỉ IP của máy chủ của bạn. Các thiết bị cá nhân của bạn vẫn vô hình trước các thuật toán theo dõi của họ.
  • Hiệu quả cực cao: Một trang Invidious tiêu chuẩn nhỏ hơn khoảng 90% so với trang YouTube tương ứng. Đây là một bước ngoặt cho các phần cứng cũ hoặc các gói dữ liệu hạn chế.
  • Chế độ chỉ âm thanh: Tính năng này tiết kiệm tới 80% băng thông khi bạn chỉ muốn nghe podcast hoặc một bản nhạc.
  • Đăng ký cục bộ: Bạn có thể theo dõi 500 nhà sáng tạo mà không cần đăng nhập vào tài khoản Google. Mọi thứ đều được lưu trữ trong cơ sở dữ liệu cục bộ của bạn.

Tôi đã chuyển sang thiết lập này sáu tháng trước. Lưu lượng mạng của tôi yên tĩnh hơn đáng kể và tôi không còn phải đối mặt với sự phiền toái tâm lý từ các đề xuất có mục tiêu.

Thực hành: Triển khai Invidious với Docker

Bạn có thể chạy ứng dụng này trên hầu hết mọi thiết bị. Một chiếc Raspberry Pi 4 với 4GB RAM là quá đủ để phục vụ cho cả gia đình.

1. Chuẩn bị môi trường

Bắt đầu bằng cách tạo một không gian riêng cho dự án của bạn. Việc sử dụng một trình quản lý Docker Compose giúp việc quản lý và sao lưu sau này dễ dàng hơn nhiều.

mkdir ~/invidious
cd ~/invidious
mkdir config

2. Tạo khóa HMAC bảo mật

Invidious sử dụng một khóa HMAC để ký các session token. Bạn cần một chuỗi ký tự ngẫu nhiên, dài để giữ cho instance của mình được an toàn. Chạy lệnh này và lưu kết quả cho tệp cấu hình của bạn:

openssl rand -base64 30

3. Tạo tệp Docker Compose

Chúng ta sẽ triển khai hai container. Một cái xử lý ứng dụng Invidious và cái còn lại chạy cơ sở dữ liệu PostgreSQL để lưu trữ các cài đặt và đăng ký của bạn. Tạo tệp docker-compose.yml với nội dung sau:

services:
  db:
    image: postgres:14-alpine
    volumes:
      - ./postgresdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=invidious
      - POSTGRES_USER=kemal
      - POSTGRES_PASSWORD=kemal
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U kemal -d invidious"]
      interval: 2s
      timeout: 5s
      retries: 10

  invidious:
    image: quay.io/invidious/invidious:latest
    volumes:
      - ./config/config.yml:/iv/config/config.yml:ro
    ports:
      - "8080:3000"
    depends_on:
      db:
        condition: service_healthy
    restart: always

4. Cấu hình Instance của bạn

Tạo tệp ~/invidious/config/config.yml. Đây là nơi bạn xác định cách ứng dụng hoạt động. Hãy nhớ dán khóa HMAC của bạn vào vị trí được chỉ định.

db:
  user: kemal
  password: kemal
  host: db
  port: 5432
  dbname: invidious

check_tables: true
hmac_key: "DÁN_KHÓA_HMAC_CỦA_BẠN_VÀO_ĐÂY"

port: 3000
https_only: false
default_user_static_instance_config: true

# Lệnh này buộc server phải proxy các luồng video, giúp che giấu IP của bạn
proxy_video: true

Việc bật proxy_video: true là rất quan trọng cho quyền riêng tư. Nếu không có nó, trình duyệt của bạn vẫn sẽ kết nối trực tiếp đến các máy chủ video của Google (googlevideo.com) để tải luồng dữ liệu. Bạn cũng có thể kết hợp sử dụng VPN Gateway tập trung để bảo vệ tối đa danh tính của các thiết bị trong mạng.

5. Khởi chạy dịch vụ

Khởi động các container ở chế độ chạy ngầm. Docker sẽ tự động tải các image và khởi tạo cơ sở dữ liệu tự động.

docker compose up -d

Hãy để cơ sở dữ liệu chạy các tiến trình di chuyển (migration) ban đầu trong khoảng 30 giây. Bạn có thể theo dõi tiến độ bằng cách xem log:

docker compose logs -f invidious

6. Truy cập giao diện

Trỏ trình duyệt của bạn tới http://[IP-CỦA-SERVER]:8080. Bạn sẽ được chào đón bởi một thanh tìm kiếm tối giản. Hãy thử tìm kiếm một video 4K. Bạn sẽ thấy nó tải gần như ngay lập tức vì trang web không phải chờ đợi hàng tá mạng lưới quảng cáo bên thứ ba phản hồi.

Tối ưu hóa cho việc sử dụng trong mạng cục bộ

Sau khi hệ thống đã hoạt động, hãy vào menu “Settings”. Tôi khuyên bạn nên đặt chất lượng mặc định là 1080p. Nếu bạn có kết nối internet chậm, bạn thậm chí có thể buộc trình phát sử dụng luồng Dash (thích ứng) để tránh bị giật (buffering).

Người dùng di động không cần một ứng dụng cồng kềnh. Chỉ cần mở URL instance của bạn trong Chrome hoặc Safari và chọn “Thêm vào màn hình chính” (Add to Home Screen). Nó hoạt động như một Progressive Web App (PWA), mang lại cho bạn trải nghiệm di động toàn màn hình, không quảng cáo mà không gây tốn pin như ứng dụng YouTube chính thức.

Nếu bạn lo lắng về việc mất các kênh đã đăng ký hiện tại, đừng lo. Hãy vào Google Takeout, xuất dữ liệu YouTube của bạn dưới dạng CSV và tải nó lên Invidious. Bạn sẽ có lại toàn bộ danh sách theo dõi chỉ trong vài giây, mà không bị theo dõi.

Lời kết

Tự host một frontend riêng tư là một trong những thành quả thực tế nhất mà bạn có thể đạt được với HomeLab. Nó nâng cấp ngay lập tức đời sống số hàng ngày của bạn. Bằng cách chuyển sang xem trên Invidious, bạn lấy lại quyền riêng tư và tiết kiệm đáng kể tài nguyên hệ thống. Khi đã quen với thiết lập cục bộ, hãy cân nhắc thêm một reverse proxy hoặc triển khai wg-easy. Điều này sẽ cho phép bạn thêm chứng chỉ SSL và truy cập YouTube riêng tư của mình từ bất kỳ đâu trên thế giới.

Share: