Đừng để mất video YouTube nữa: Tự cài đặt Tube Archivist để lưu trữ cá nhân

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

Lỗi lúc 2 giờ sáng: Tại sao YouTube không phải là một thư viện vĩnh viễn

Lúc đó là 2:14 sáng một ngày thứ Ba. Tôi đang xử lý một lỗi 503 nghiêm trọng trên máy chủ production, cố gắng nhớ lại một mẹo tinh chỉnh kernel cụ thể từ một bài hướng dẫn từ năm 2019 khá ít người biết. Tôi nhấp vào dấu trang của mình, nhưng thay vì nhận được giải pháp, tôi lại nhận được một “cái tát kỹ thuật số” vào thẳng mặt: “Video này ở chế độ riêng tư.” Or thậm chí tệ hơn, “Tài khoản này đã bị chấm dứt.”

Khoảnh khắc đó đã thay đổi cách tôi nhìn nhận về kiến thức trên “đám mây”. Phụ thuộc vào một nền tảng bên thứ ba giống như xây lâu đài trên cát. Sự mục nát kỹ thuật số là điều không thể tránh khỏi. Các nhà sáng tạo xóa kênh, các vi phạm bản quyền xảy ra và các thuật toán thay đổi. Nếu bạn không sở hữu các bit dữ liệu, bạn không thực sự sở hữu kiến thức đó. Tôi nhận ra mình cần phải đưa các nguồn tài liệu học tập của mình thoát khỏi đám mây và chuyển vào tủ rack máy chủ của riêng mình.

Chiến lược lưu trữ: yt-dlp đối đầu Tube Archivist

Việc chọn phương pháp lưu trữ video thường tóm gọn trong hai con đường. Tôi đã thử nghiệm cả hai một cách kỹ lưỡng, và sự khác biệt là rất lớn khi số lượng video của bạn lên đến hàng trăm.

Phương pháp thủ công: yt-dlp và thư mục

Hầu hết các kỹ sư bắt đầu bằng cách viết một tác vụ cron đơn giản xoay quanh yt-dlp. Bạn đổ các tệp vào các thư mục lồng nhau và thế là xong. Cách này hiệu quả với một vài bài hướng dẫn Linux. Nhưng nó thất bại khi có 500 video. Bạn không thể tìm kiếm qua các bản ghi phụ đề (transcripts), bạn mất liên kết giữa một video và kênh cụ thể của nó, và việc theo dõi những gì bạn đã tải xuống trở thành một công việc thủ công tẻ nhạt.

Phương pháp hệ thống: Tube Archivist

Tube Archivist là một công cụ lập chỉ mục (indexing engine) cấp chuyên nghiệp. Nó sử dụng Elasticsearch để lập chỉ mục từng từ trong siêu dữ liệu và phụ đề. Redis quản lý các hàng đợi công việc nền, trong khi giao diện người dùng dựa trên Python tinh gọn sẽ kết nối mọi thứ lại với nhau. Nó xử lý nội dung YouTube của bạn như một thư viện cục bộ thay vì chỉ là một đống tệp .mp4.

“Cỗ máy” bên trong: Ưu và nhược điểm

Trước khi dành dung lượng ổ đĩa của bạn, hãy hiểu những đánh đổi. Đây không phải là một container nhẹ nhàng tiêu tốn ít tài nguyên.

  • Tìm kiếm toàn văn (Full-Text Search). Đây là khả năng nổi bật nhất. Tôi có thể tìm kiếm một lệnh terminal cụ thể, và Tube Archivist sẽ tìm thấy chính xác mốc thời gian mà người tạo video đã nhắc đến trong phụ đề.
  • Đồng bộ tự động. Chỉ định công cụ đến một danh sách phát hoặc kênh. Nó sẽ kiểm tra các video mới tải lên mỗi 12 giờ và tự động tải chúng trong khi bạn ngủ.
  • Bảo tồn siêu dữ liệu (Metadata). Nó lưu lại các bình luận, mô tả và số lượt xem tại thời điểm tải xuống, giúp bảo tồn bối cảnh của video.
  • Ngốn tài nguyên. Chạy Elasticsearch yêu cầu một mức phân bổ ít nhất 2GB RAM chỉ dành riêng cho việc lập chỉ mục.
  • Độ phức tạp của hệ thống (Stack). Đây là một môi trường đa container. Nếu kết nối Redis bị ngắt hoặc chỉ mục bị hỏng, bạn cần phải thoải mái với việc đọc log của Docker.

Yêu cầu phần cứng: Những gì bạn thực sự cần

Đừng cố gắng lưu trữ thứ này trên một VPS giá rẻ hoặc một chiếc Raspberry Pi 3 cũ kỹ. Để giữ cho giao diện người dùng phản hồi nhanh, hãy sử dụng một máy có ít nhất 8GB RAM hệ thống và CPU 4 nhân hiện đại. Tốc độ rất quan trọng đối với cơ sở dữ liệu. Hãy để siêu dữ liệu (Elasticsearch) trên SSD, nhưng lưu trữ các tệp video thực tế trên các mảng HDD dung lượng cao, giá rẻ hơn.

Cài đặt: Hướng dẫn triển khai

Chúng ta sẽ sử dụng Docker Compose. Đây là cách đáng tin cậy nhất để quản lý ba phần chuyển động (Core, Redis và Elasticsearch) mà không gây đau đầu. Tôi đã đơn giản hóa cấu hình này để có thể sẵn sàng cho môi trường production.

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

Đầu tiên, thiết lập các đường dẫn lưu trữ của bạn. Bạn cần bốn volume chính để xử lý dữ liệu ứng dụng, bộ nhớ đệm và chỉ mục cơ sở dữ liệu.

mkdir -p tubearchivist/{cache,res,es,redis}
cd tubearchivist
touch docker-compose.yml

2. Cấu hình Docker Compose

Dán nội dung sau vào tệp docker-compose.yml của bạn. Hãy chú ý đến ES_JAVA_OPTS; điều này giúp Elasticsearch không ngốn hết toàn bộ bộ nhớ của máy chủ.

version: '3.3'

services:
  tubearchivist:
    container_name: tubearchivist
    restart: unless-stopped
    image: bbilly1/tubearchivist
    ports:
      - 8000:8000
    volumes:
      - /mnt/storage/youtube:/youtube
      - ./cache:/cache
    environment:
      - TA_HOST=192.168.1.50 # Thay đổi thành IP nội bộ của bạn
      - TA_USERNAME=admin
      - TA_PASSWORD=secure_pass_123
      - ELASTIC_PASSWORD=es_pass_456
      - HOST_UID=1000
      - HOST_GID=1000
    depends_on:
      - archivist-es
      - archivist-redis

  archivist-redis:
    container_name: archivist-redis
    restart: unless-stopped
    image: redis/redis-stack-server
    volumes:
      - ./redis:/data

  archivist-es:
    container_name: archivist-es
    restart: unless-stopped
    image: bbilly1/tubearchivist-es
    environment:
      - "ELASTIC_PASSWORD=es_pass_456"
      - "discovery.type=single-node"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "xpack.security.enabled=true"
    volumes:
      - ./es:/usr/share/elasticsearch/data

3. Khởi động hệ thống

Đảm bảo vm.max_map_count của bạn đủ cao trước khi bắt đầu, nếu không Elasticsearch sẽ bị lỗi khi khởi động. Đây là một sai lầm phổ biến thường gây bối rối cho những người mới sử dụng lần đầu.

# Áp dụng cài đặt ngay lập tức
sudo sysctl -w vm.max_map_count=262144

# Duy trì thay đổi sau khi khởi động lại
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

# Khởi chạy các container
docker-compose up -d

Lời khuyên thực tế để lưu trữ hiệu quả hơn

Sau khi giao diện người dùng hoạt động tại cổng 8000, đừng vội vàng đăng ký 50 kênh ngay lập tức. Hãy bắt đầu nhỏ thôi. Lần chạy đầu tiên sẽ rất tốn CPU vì hệ thống phải tạo hình thu nhỏ (thumbnails) và lập chỉ mục hàng ngàn dòng phụ đề cùng một lúc.

Bắt đầu với 5 kênh quan trọng nhất của bạn. Kiểm tra trang ‘Settings’ và thiết lập ‘Download Format’. Tôi khuyên dùng 1080p. Một video 4K dài 10 phút có thể chiếm 1.2GB, trong khi phiên bản 1080p có thể chỉ khoảng 200MB. Chỉ bật ‘Auto-delete watched’ nếu bạn sử dụng nó như một máy ghi video số (DVR); đối với một kho lưu trữ vĩnh viễn, hãy tắt nó đi.

Quản lý dữ liệu của riêng bạn đòi hỏi tính kỷ luật. Nhưng lần tới khi một bài hướng dẫn quan trọng biến mất khỏi web, bạn sẽ không còn hoảng loạn nữa. Bạn chỉ cần mở bảng điều khiển cục bộ của mình và nhấn phát.

Share: