Thư Viện E-Book Tự Quản Lý với Calibre-Web trên Docker: Quản Lý, Đọc và Đồng Bộ Sách Mọi Nơi

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

Vấn Đề: E-Book Nằm Rải Rác Và Không Có Cách Nào Truy Cập Tiện Lợi

Nếu bạn đã sưu tầm e-book một thời gian, chắc hẳn bạn hiểu cảm giác khó chịu đó. PDF trên laptop, EPUB trên cái USB cũ kỹ, vài file AZW3 từ Kindle — nằm rải rác khắp nơi mà không có chỗ nào để quản lý tập trung. Các dịch vụ đám mây như Google Play Books hay Apple Books nhốt bạn vào hệ sinh thái của họ. Kindle bắt bạn phải mua sách từ Amazon. Thứ bạn thực sự cần đơn giản hơn nhiều: một thư viện riêng tư do bạn kiểm soát, truy cập được từ bất kỳ trình duyệt nào, trên bất kỳ thiết bị nào.

Tôi đã gặp đúng tình huống này vài năm trước. Tôi có hơn 300 cuốn sách kỹ thuật — hướng dẫn Linux, tài liệu Docker, giáo trình lập trình — mà không có cách nào gọn gàng để sắp xếp hay đọc ngoài máy tính chính. Calibre-Web trên Docker đã giải quyết vấn đề đó. Giờ nó là một phần cố định trong HomeLab của tôi bên cạnh Nextcloud và Gitea.

Calibre-Web Thực Sự Là Gì

Nên dành 60 giây để hiểu kiến trúc trước khi bắt tay vào các lệnh Docker.

Calibre là ứng dụng desktop hoàn thiện dùng để quản lý bộ sưu tập e-book. Nó lưu trữ mọi thứ trong một thư mục thư viện với file SQLite metadata.db theo dõi sách, tác giả, bìa sách và metadata.

Calibre-Web là một dự án mã nguồn mở riêng biệt, đọc cùng thư mục thư viện đó và hiển thị qua giao diện web gọn gàng. Bạn sẽ có:

  • Danh mục sách có thể tìm kiếm và lọc
  • Đọc sách ngay trên trình duyệt (định dạng EPUB qua trình đọc tích hợp sẵn)
  • Hỗ trợ danh mục OPDS — để các ứng dụng đọc sách như KOReader hay Moon+ có thể tải sách trực tiếp
  • Tài khoản người dùng để chia sẻ quyền truy cập với gia đình
  • Tính năng gửi đến Kindle và gửi qua email
  • Chuyển đổi định dạng sách (tùy chọn, cần cài Calibre binary)

Điểm kiến trúc quan trọng: Calibre-Web không tự lưu trữ sách. Nó đọc từ thư mục thư viện Calibre của bạn. File thực tế vẫn nằm trong thư mục thông thường — không có migration database độc quyền, không bị phụ thuộc nhà cung cấp.

Yêu Cầu Trước Khi Bắt Đầu

Bạn cần:

  • Một máy chủ Linux hoặc NAS (ngay cả Raspberry Pi 4 với 2GB RAM cũng chạy tốt)
  • Đã cài Docker và Docker Compose
  • Thư viện Calibre có sẵn, hoặc sẵn sàng tạo mới

Chưa có thư viện Calibre? Cài ứng dụng desktop Calibre trên PC và thêm vài cuốn sách vào. Nó sẽ tạo ra một thư mục thư viện chứa metadata.db và các thư mục theo tên tác giả. Sao chép toàn bộ thư mục đó lên server là xong.

Thiết Lập Cấu Trúc Thư Mục

Trên server, tạo hai thư mục mà Calibre-Web cần:

mkdir -p ~/calibre/config
mkdir -p ~/calibre/library

Thư mục library là nơi chứa thư viện Calibre của bạn — thư mục có file metadata.db. Thư mục config là nơi Calibre-Web lưu cài đặt riêng, database người dùng và cache.

Đã có thư viện Calibre trên PC? Sao chép sang server:

scp -r /path/to/Calibre\ Library/ user@your-server:~/calibre/library/

Viết File Docker Compose

Tạo file docker-compose.yml trong thư mục ~/calibre/:

version: "3.8"

services:
  calibre-web:
    image: lscr.io/linuxserver/calibre-web:latest
    container_name: calibre-web
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Tokyo
      - DOCKER_MODS=linuxserver/mods:universal-calibre  # tùy chọn: bật tính năng chuyển đổi định dạng
    volumes:
      - ./config:/config
      - ./library:/books
    ports:
      - "8083:8083"
    restart: unless-stopped

Một vài điểm cần giải thích:

  • PUIDPGID — đặt giá trị này khớp với ID người dùng Linux của bạn. Chạy id -uid -g để kiểm tra. Giá trị không khớp là nguyên nhân số 1 gây lỗi phân quyền khi khởi động.
  • TZ — đặt múi giờ để timestamp hiển thị đúng.
  • DOCKER_MODS=linuxserver/mods:universal-calibre — mod tùy chọn này cài Calibre binary đầy đủ vào trong container, cho phép chuyển đổi định dạng (ví dụ: EPUB → MOBI). Bỏ qua nếu bạn không cần chuyển đổi; nó sẽ làm tăng thời gian khởi động lần đầu thêm 3–5 phút.
  • Mount /books là nơi Calibre-Web tìm thư viện của bạn.

Khởi Động Container

cd ~/calibre
docker compose up -d

Kiểm tra log để xác nhận đã khởi động thành công:

docker compose logs -f calibre-web

Trên VPS hoặc server gia đình thông thường, dịch vụ sẽ sẵn sàng trong vòng 10–15 giây (lâu hơn nếu bạn bật Calibre mod — xem ở trên). Mở http://your-server-ip:8083 trên trình duyệt.

Cấu Hình Lần Đầu

Màn hình đầu tiên sẽ hỏi đường dẫn thư viện Calibre. Nhập /books — đó là điểm mount phía container từ file compose.

Thông tin đăng nhập mặc định:

  • Tên đăng nhập: admin
  • Mật khẩu: admin123

Đổi mật khẩu admin ngay lập tức: vào Admin → Edit User → admin và cập nhật trước khi làm bất cứ điều gì khác.

Từ bảng quản trị, bạn cũng có thể:

  • Bật hoặc tắt đăng ký tài khoản mới (tắt đi nếu dùng riêng tư)
  • Cấu hình cài đặt SMTP cho tính năng gửi đến Kindle
  • Bật tích hợp Goodreads để tra cứu metadata sách

Cấu Hình Danh Mục OPDS Cho Ứng Dụng Đọc Sách

Thật ra, đây là tính năng khiến toàn bộ hệ thống này trở nên xứng đáng. OPDS (Open Publication Distribution System) là định dạng danh mục chuẩn được hầu hết các ứng dụng đọc sách hỗ trợ. Sau khi cấu hình xong, KOReader, Aldiko và Moon+ Reader có thể duyệt và tải sách trực tiếp từ Calibre-Web của bạn — không cần cài thủ công, không cần cáp kết nối.

Trong Calibre-Web, vào Admin → Basic Configuration → Feature Configuration và bật Anonymous browsing nếu bạn muốn feed OPDS có thể truy cập mà không cần đăng nhập. Hữu ích cho mạng nội bộ gia đình đáng tin cậy.

URL feed OPDS của bạn sẽ là:

http://your-server-ip:8083/opds

Trong KOReader: Search → OPDS catalog → Add catalog, dán URL vào là xong. Toàn bộ thư viện sẽ hiện ra có thể duyệt ngay trên máy đọc sách của bạn.

Truy Cập Calibre-Web Từ Bên Ngoài Mạng Nhà

Có hai lựa chọn thực tế:

Lựa Chọn 1: Reverse Proxy với NGINX hoặc Caddy

Đã chạy reverse proxy trong HomeLab? Thêm một block cho Calibre-Web. Với Caddy, chỉ cần bốn dòng:

books.yourdomain.com {
    reverse_proxy localhost:8083
}

Caddy tự xử lý HTTPS qua Let’s Encrypt. Không cần quản lý chứng chỉ thủ công.

Lựa Chọn 2: Tailscale (Đơn Giản Hơn Cho Người Mới)

Đã dùng Tailscale rồi? Cổng Calibre-Web có thể truy cập qua địa chỉ Tailscale IP mà không cần cấu hình port forwarding hay DNS. Chỉ cần truy cập http://100.x.x.x:8083 từ bất kỳ thiết bị nào đã kết nối Tailscale. Đây là cách tôi dùng khi đi ra ngoài.

Giữ Thư Viện Luôn Cập Nhật

Thêm sách mới bằng ứng dụng desktop Calibre như bình thường. Thay đổi sẽ được ghi vào metadata.db trong thư mục dùng chung, và Calibre-Web tự động nhận ra. Không cần khởi động lại container — chỉ cần làm mới trình duyệt.

Để cập nhật container khi có phiên bản Calibre-Web mới:

cd ~/calibre
docker compose pull
docker compose up -d

Image của linuxserver.io luôn giữ tag latest trỏ đến bản stable hiện tại, nên ba lệnh này là tất cả những gì bạn cần.

Những Bài Học Tôi Học Được Theo Cách Khó

Sau hai năm vận hành setup này, đây là những điểm cần chú ý:

  • Lỗi phân quyền khi khởi động: Hầu như luôn do PUID/PGID không khớp. Chạy id trên user server của bạn và kiểm tra lại các giá trị trong file compose.
  • metadata.db bị khóa: Nếu ứng dụng desktop Calibre đang mở trên PC trong khi thư viện được mount qua NFS lên server, cơ chế khóa file SQLite sẽ gây xung đột. Tắt ứng dụng desktop trước khi Calibre-Web cố ghi vào database.
  • OPDS không hiển thị đủ sách: Một số ứng dụng OPDS giới hạn kết quả ở 30 cuốn mỗi trang. Nếu danh mục có vẻ thiếu sách, kiểm tra cài đặt kích thước trang danh mục trong ứng dụng.
  • Chuyển đổi định dạng chậm lần đầu: Nếu bạn bật Calibre mod, lần khởi động đầu tiên sẽ tải và cài đặt Calibre binary đầy đủ — 3–5 phút là bình thường. Đừng tắt container vì nghĩ nó bị treo.

Kết Quả Bạn Nhận Được

Khi mọi thứ đã chạy, bạn có một thư viện riêng tư:

  • Dùng được trên bất kỳ trình duyệt nào — không cần cài ứng dụng
  • Đồng bộ vị trí đọc giữa các thiết bị qua các ứng dụng tương thích OPDS
  • Phục vụ sách trên mạng nội bộ với tốc độ tối đa
  • Lưu trữ mọi thứ trong các file thông thường hoàn toàn do bạn sở hữu
  • Không tốn thêm gì ngoài phần cứng server bạn đã có sẵn

Cài đặt chỉ mất khoảng 20 phút. Tích hợp OPDS với KOReader là thứ thuyết phục tôi — tôi đọc tài liệu kỹ thuật trên máy tính bảng khi đi lại và mọi thứ đều ở một chỗ. Calibre-Web chạy trên Raspberry Pi 4 chỉ tiêu tốn dưới 100MB RAM khi nhàn rỗi, nên không cạnh tranh tài nguyên với bất cứ thứ gì khác trong HomeLab.

Không có lý do gì để tiếp tục để bộ sưu tập e-book của bạn nằm rải rác trên nhiều thiết bị và dịch vụ đám mây. Một instance Calibre-Web tự quản lý nhẹ nhàng, dễ bảo trì, và cho bạn toàn quyền kiểm soát thư viện sách của mình — theo cách của bạn.

Share: