Bạn có một kho sách kỹ thuật số đồ sộ với đủ định dạng PDF, EPUB… nhưng lại mệt mỏi vì phải quản lý chúng trên nhiều thiết bị và phụ thuộc vào các nền tảng đóng? Đã đến lúc giành lại quyền kiểm soát với BookLore – một giải pháp mã nguồn mở giúp bạn tạo ra một thư viện sách cá nhân, tự lưu trữ (self-hosted) và truy cập được từ mọi nơi.
Bài viết này sẽ hướng dẫn bạn từng bước để triển khai BookLore trên máy chủ Ubuntu bằng Docker, biến nó thành một “Netflix” cho bộ sưu tập sách của riêng bạn.
Tại sao lại là BookLore và Docker?
- Toàn quyền kiểm soát: Dữ liệu của bạn, sách của bạn. Không còn lo lắng về việc một nhà cung cấp nào đó thay đổi chính sách hay ngừng hoạt động.
- Truy cập mọi lúc mọi nơi: Chỉ cần một trình duyệt web, bạn có thể đọc sách trên điện thoại, máy tính bảng hay laptop một cách dễ dàng.
- Triển khai đơn giản: Docker và Docker Compose đóng gói toàn bộ ứng dụng và cơ sở dữ liệu (MariaDB) vào các “container” độc lập. Việc cài đặt trở nên gọn gàng, an toàn và dễ dàng di chuyển khi cần.
Phần 1: Chuẩn bị môi trường
Để bắt đầu, máy chủ Ubuntu của bạn cần được trang bị “nền móng” là Docker và Docker Compose.
Yêu cầu:
- Một máy chủ chạy Ubuntu 18.04 trở lên.
- Tài khoản người dùng có quyền
sudo
. - Biết sử dụng các lệnh cơ bản trong cửa sổ dòng lệnh (terminal).
Tiến hành cài đặt:
Mở terminal và thực thi tuần tự các lệnh sau để cài đặt Docker Engine và Docker Compose.
# BƯỚC 1: CÀI ĐẶT DOCKER ENGINE
# Cập nhật danh sách gói phần mềm
sudo apt update
# Cài các gói cần thiết để apt có thể sử dụng kho lưu trữ qua HTTPS
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Thêm khóa GPG chính thức của Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Thêm kho lưu trữ của Docker vào danh sách nguồn của apt
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Cài đặt Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# Thêm người dùng hiện tại vào nhóm 'docker' để không cần gõ sudo mỗi lần chạy lệnh docker
# LƯU Ý: Bạn cần đăng xuất và đăng nhập lại để thay đổi này có hiệu lực
sudo usermod -aG docker $USER
# BƯỚC 2: CÀI ĐẶT DOCKER COMPOSE
# Tải phiên bản mới nhất của Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# Cấp quyền thực thi cho tệp vừa tải
sudo chmod +x /usr/local/bin/docker-compose
# Kiểm tra phiên bản để xác nhận cài đặt thành công
docker-compose --version
Phần 2: Dựng “Ngôi nhà” BookLore
Giờ là lúc triển khai ứng dụng. Chúng ta sẽ sử dụng một tệp docker-compose.yml
, có vai trò như một bản thiết kế chi tiết cho toàn bộ hệ thống BookLore.
1. Tạo thư mục làm việc:
mkdir ~/booklore && cd ~/booklore
2. Tạo tệp cấu hình:
nano docker-compose.yml
3. Soạn thảo “bản thiết kế”:
Dán nội dung dưới đây vào tệp docker-compose.yml
. Đây là phần quan trọng nhất, hãy chú ý các ghi chú để tùy chỉnh cho phù hợp.
services:
# Dịch vụ chính của ứng dụng BookLore
booklore:
image: ghcr.io/adityachandelgit/booklore-app:latest
container_name: booklore
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Ho_Chi_Minh # Chỉnh múi giờ cho đúng
- DATABASE_URL=jdbc:mariadb://mariadb:3306/booklore
- DATABASE_USERNAME=booklore
- DATABASE_PASSWORD=your_secure_password # <-- THAY MẬT KHẨU BẢO MẬT VÀO ĐÂY
- SWAGGER_ENABLED=false
depends_on:
mariadb:
condition: service_healthy # Đợi CSDL sẵn sàng rồi mới khởi động
ports:
- "6060:6060" # Mở cổng 6060 để truy cập từ bên ngoài
volumes:
- ./booklore/data:/app/data # Nơi lưu trữ dữ liệu ứng dụng
- ./booklore/books:/books # Nơi bạn sẽ chép sách vào
restart: unless-stopped
# Dịch vụ cơ sở dữ liệu MariaDB
mariadb:
image: lscr.io/linuxserver/mariadb:11.4.5
container_name: mariadb
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Ho_Chi_Minh # Chỉnh múi giờ cho đúng
- MYSQL_ROOT_PASSWORD=super_secure_password # <-- THAY MẬT KHẨU ROOT SIÊU BẢO MẬT
- MYSQL_DATABASE=booklore
- MYSQL_USER=booklore
- MYSQL_PASSWORD=your_secure_password # <-- MẬT KHẨU NÀY PHẢI GIỐNG HỆT MẬT KHẨU Ở TRÊN
volumes:
- ./mariadb/config:/config # Nơi lưu trữ dữ liệu của CSDL
restart: unless-stopped
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost"]
interval: 5s
timeout: 5s
retries: 10
4. Khởi chạy hệ thống:
Sau khi đã lưu tệp, hãy chạy lệnh sau để Docker Compose “đọc bản thiết kế” và tự động dựng lên toàn bộ hệ thống cho bạn.
docker-compose up -d
Tùy chọn -d
sẽ giúp các container chạy ở chế độ nền.
Phần 3: Tận hưởng thành quả
Chúc mừng! Thư viện sách cá nhân của bạn đã sẵn sàng.
- Truy cập: Mở trình duyệt và đi đến địa chỉ
http://<IP_máy_chủ_của_bạn>:6060
. - Thêm sách: Để thêm sách mới, bạn chỉ cần sao chép các tệp PDF, EPUB vào thư mục
~/booklore/booklore/books
trên máy chủ. BookLore sẽ tự động quét và hiển thị chúng trên giao diện web. - Khám phá: Bắt đầu duyệt sách, theo dõi tiến trình đọc và quản lý bộ sưu tập của bạn.
Mẹo khắc phục sự cố
- Lỗi “name already in use” (Tên đã được sử dụng): Điều này xảy ra khi bạn cố tạo container có tên đã tồn tại. Hãy chạy
docker-compose down
để xóa hệ thống cũ trước khi chạy lạidocker-compose up -d
. - Lỗi quyền (Permission errors): Nếu ứng dụng không đọc được sách, hãy đảm bảo thư mục
~/booklore
và các thư mục con thuộc sở hữu của người dùng hiện tại bằng lệnh:sudo chown -R $USER:$USER ~/booklore
.
Bằng cách tự mình thiết lập BookLore, bạn không chỉ tạo ra một không gian đọc sách tiện lợi mà còn nắm giữ hoàn toàn dữ liệu của mình. Đây là một dự án cuối tuần tuyệt vời cho bất kỳ ai yêu sách và công nghệ.
LỜI KHUYÊN:
Hãy tạo thói quen sao lưu định kỳ tệp docker-compose.yml và toàn bộ thư mục ~/booklore. Khi có phiên bản mới, việc cập nhật rất đơn giản: chỉ cần chạy docker-compose pull && docker-compose up -d