Mục lục bài viết

Docker

Hướng Dẫn Chi Tiết Cài Đặt Seafile Server Trên Ubuntu 24.04 / 22.04 Với Docker

phongdh
phongdh
Chia sẻ:
Zalo
Hướng Dẫn Chi Tiết Cài Đặt Seafile Server Trên Ubuntu 24.04 / 22.04 Với Docker

Bạn đang tìm kiếm một giải pháp lưu trữ đám mây riêng (self-hosted) tốc độ cao, bảo mật tuyệt đối để thay thế Google Drive hay Dropbox? Seafile Server chính là câu trả lời hoàn hảo. Nổi tiếng với lõi được viết bằng C, Seafile mang lại hiệu suất đồng bộ dữ liệu vượt trội và cực kỳ nhẹ nhàng.

Từ phiên bản 13.0, Seafile Community Edition đã chuyển sang mô hình triển khai hoàn toàn bằng Docker, giúp quá trình cài đặt trở nên đơn giản và gọn gàng hơn bao giờ hết. Bài viết này sẽ hướng dẫn bạn từng bước cài đặt Seafile Server trên Ubuntu 24.04 hoặc 22.04 bằng Docker.

1. Chuẩn Bị Trước Khi Cài Đặt (Prerequisites)

Để đảm bảo quá trình cài đặt diễn ra suôn sẻ, máy chủ (VPS/Server) của bạn cần đáp ứng các tiêu chí sau:

  • Hệ điều hành: Ubuntu 24.04 LTS hoặc Ubuntu 22.04 LTS.
  • Phần mềm cốt lõi: Đã cài đặt sẵn Docker Engine và plugin Docker Compose.
  • Tên miền (Domain): Đã trỏ bản ghi A (A Record) về địa chỉ IP của máy chủ (Ví dụ: cloud.tenmien.com).
  • Tường lửa (Firewall): Đã mở cổng 80 (HTTP) và 443 (HTTPS).
  • Phần cứng tối thiểu: 2GB RAM và 20GB dung lượng ổ cứng (khuyến nghị dung lượng cao hơn tùy thuộc vào nhu cầu lưu trữ tệp của bạn).
  • Docker: Đã cài đặt Docker Engine và plugin Docker Compose.

Hướng Dẫn Cài Đặt Docker Engine và Plugin Docker Compose Chi Tiết Nhất: Tại Đây

2. Kiến Trúc Của Hệ Thống Seafile Docker

Với việc sử dụng Docker Compose, chúng ta sẽ triển khai một cụm gồm 5 container (dịch vụ) hoạt động song song để tạo nên một hệ thống Seafile hoàn chỉnh:

  1. Seafile Server: Máy chủ ứng dụng lõi xử lý logic và giao diện web.
  2. MariaDB (seafile-mysql): Cơ sở dữ liệu lưu trữ thông tin cấu hình và người dùng.
  3. Redis (seafile-redis): Hệ thống bộ nhớ đệm (Cache) giúp tăng tốc độ phản hồi.
  4. Caddy (seafile-caddy): Máy chủ Reverse Proxy kiêm nhiệm vụ tự động xin và gia hạn chứng chỉ bảo mật SSL (Let’s Encrypt).
  5. SeaDoc: Tích hợp trình soạn thảo tài liệu cộng tác trực tuyến.

3. Những gì được triển khai

Hệ thống Docker Compose chạy năm container:

ContainerImageMục đích
seafileseafileltd/seafile-mc:13.0-latestMáy chủ Seafile (bao gồm Nginx nội bộ)
seafile-mysqlmariadb:10.11Hệ thống cơ sở dữ liệu
seafile-redisredisBộ nhớ đệm (thay thế memcached trong phiên bản v13)
seafile-caddylucaslorentz/caddy-docker-proxy:2.12-alpineMáy chủ proxy ngược với chứng chỉ SSL Let’s Encrypt tự động.
seadocseafileltd/sdoc-server:2.0-latestTrình soạn thảo tài liệu cộng tác (SeaDoc 2.0)

Caddy tự động xử lý SSL. Khi bạn thiết lập giao thức là https, Caddy sẽ tự động lấy và gia hạn chứng chỉ Let’s Encrypt mà không cần cấu hình thêm. Không cần certbot, không cần quản lý chứng chỉ thủ công.

4. Các Bước Cài Đặt Seafile Server Bằng Docker

Bước 1: Khởi tạo thư mục và tạo khóa bảo mật

Đầu tiên, hãy tạo một thư mục chuyên dụng để chứa toàn bộ cấu hình và dữ liệu của Seafile:

sudo mkdir -p /opt/seafile && cd /opt/seafile

Tiếp theo, tạo một chuỗi khóa bí mật (JWT Secret) dùng để xác thực nội bộ giữa các container. Lưu ý: Hãy copy và cất giữ chuỗi mã này:

openssl rand -hex 20

Bước 2: Cấu hình biến môi trường (File .env)

Tạo một file .env tại thư mục /opt/seafile để khai báo các thông số quan trọng nhất:

vi /opt/seafile/.env

Trong file này, bạn cần đặc biệt chú ý thiết lập 3 thông số sau:

  • SEAFILE_SERVER_HOSTNAME: Điền tên miền của bạn (vd: cloud.phongdinh.info.vn).
  • JWT_PRIVATE_KEY: Dán chuỗi mã 20 ký tự bạn vừa tạo ở Bước 1.
  • Mật khẩu: Thiết lập mật khẩu bảo mật cho Database (MYSQL_ROOT_PASSWORD) và tài khoản Quản trị viên Seafile (SEAFILE_ADMIN_PASSWORD).
COMPOSE_FILE=seafile-server.yml,caddy.yml,seadoc.yml
COMPOSE_PATH_SEPARATOR=,

SEAFILE_IMAGE=seafileltd/seafile-mc:13.0-latest
SEAFILE_DB_IMAGE=mariadb:10.11
SEAFILE_REDIS_IMAGE=redis
SEAFILE_CADDY_IMAGE=lucaslorentz/caddy-docker-proxy:2.12-alpine
SEADOC_IMAGE=seafileltd/sdoc-server:2.0-latest

SEAFILE_VOLUME=/opt/seafile-data
SEAFILE_MYSQL_VOLUME=/opt/seafile-mysql/db
SEAFILE_CADDY_VOLUME=/opt/seafile-caddy
SEADOC_VOLUME=/opt/seadoc-data

SEAFILE_SERVER_HOSTNAME=seafile.example.com
SEAFILE_SERVER_PROTOCOL=https
TIME_ZONE=Etc/UTC
JWT_PRIVATE_KEY=your_generated_jwt_key_here

SEAFILE_MYSQL_DB_HOST=db
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=change_this_db_password
SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db

CACHE_PROVIDER=redis
REDIS_HOST=redis
REDIS_PORT=6379

INIT_SEAFILE_MYSQL_ROOT_PASSWORD=change_this_root_password
[email protected]
INIT_SEAFILE_ADMIN_PASSWORD=change_this_admin_password

ENABLE_SEADOC=true

Bước 3: Tạo các file Docker Compose (YAML)

Để dễ quản lý, cấu trúc chuẩn sẽ chia thành 3 file YAML riêng biệt. Bạn tạo lần lượt các file sau bằng trình soạn thảo (như nano hoặc vim) và dán cấu hình mẫu từ tài liệu của Seafile vào:

cd /opt/seafile

seafile-server.yml: Cấu hình cho App, Database và Redis.

vi seafile-server.yml
services:
  db:
    image: ${SEAFILE_DB_IMAGE:-mariadb:10.11}
    container_name: seafile-mysql
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD:-}
      - MYSQL_LOG_CONSOLE=true
      - MARIADB_AUTO_UPGRADE=1
    volumes:
      - "${SEAFILE_MYSQL_VOLUME}:/var/lib/mysql"
    networks:
      - seafile-net
    healthcheck:
      test: ["CMD", "/usr/local/bin/healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 20s
      start_period: 30s
      retries: 10

  redis:
    image: ${SEAFILE_REDIS_IMAGE:-redis}
    container_name: seafile-redis
    restart: unless-stopped
    networks:
      - seafile-net

  seafile:
    image: ${SEAFILE_IMAGE:-seafileltd/seafile-mc:13.0-latest}
    container_name: seafile
    restart: unless-stopped
    volumes:
      - ${SEAFILE_VOLUME}:/shared
    environment:
      - SEAFILE_MYSQL_DB_HOST=${SEAFILE_MYSQL_DB_HOST:-db}
      - SEAFILE_MYSQL_DB_USER=${SEAFILE_MYSQL_DB_USER:-seafile}
      - SEAFILE_MYSQL_DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD}
      - INIT_SEAFILE_MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD:-}
      - SEAFILE_MYSQL_DB_CCNET_DB_NAME=${SEAFILE_MYSQL_DB_CCNET_DB_NAME:-ccnet_db}
      - SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=${SEAFILE_MYSQL_DB_SEAFILE_DB_NAME:-seafile_db}
      - SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME:-seahub_db}
      - TIME_ZONE=${TIME_ZONE:-Etc/UTC}
      - INIT_SEAFILE_ADMIN_EMAIL=${INIT_SEAFILE_ADMIN_EMAIL:[email protected]}
      - INIT_SEAFILE_ADMIN_PASSWORD=${INIT_SEAFILE_ADMIN_PASSWORD:-asecret}
      - SEAFILE_SERVER_HOSTNAME=${SEAFILE_SERVER_HOSTNAME}
      - SEAFILE_SERVER_PROTOCOL=${SEAFILE_SERVER_PROTOCOL:-http}
      - JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY}
      - ENABLE_SEADOC=${ENABLE_SEADOC:-false}
      - SEADOC_SERVER_URL=${SEAFILE_SERVER_PROTOCOL}://${SEAFILE_SERVER_HOSTNAME}/sdoc-server
      - CACHE_PROVIDER=${CACHE_PROVIDER:-redis}
      - REDIS_HOST=${REDIS_HOST:-redis}
      - REDIS_PORT=${REDIS_PORT:-6379}
    labels:
      caddy: ${SEAFILE_SERVER_PROTOCOL}://${SEAFILE_SERVER_HOSTNAME}
      caddy.reverse_proxy: "{{upstreams 80}}"
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:80 || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 30s
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
    networks:
      - seafile-net

networks:
  seafile-net:
    name: seafile-net

caddy.yml: Cấu hình cho máy chủ Caddy (SSL).

vi caddy.yml
services:
  caddy:
    image: ${SEAFILE_CADDY_IMAGE:-lucaslorentz/caddy-docker-proxy:2.12-alpine}
    restart: unless-stopped
    container_name: seafile-caddy
    ports:
      - 80:80
      - 443:443
    environment:
      - CADDY_INGRESS_NETWORKS=seafile-net
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ${SEAFILE_CADDY_VOLUME}:/data/caddy
    networks:
      - seafile-net

networks:
  seafile-net:
    name: seafile-net

seadoc.yml: Cấu hình cho công cụ soạn thảo SeaDoc.

vi seadoc.yml
services:
  seadoc:
    image: ${SEADOC_IMAGE:-seafileltd/sdoc-server:2.0-latest}
    container_name: seadoc
    restart: unless-stopped
    volumes:
      - ${SEADOC_VOLUME}:/shared
    environment:
      - DB_HOST=${SEAFILE_MYSQL_DB_HOST:-db}
      - DB_USER=${SEAFILE_MYSQL_DB_USER:-seafile}
      - DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD}
      - DB_NAME=${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME:-seahub_db}
      - TIME_ZONE=${TIME_ZONE:-Etc/UTC}
      - JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY}
      - SEAHUB_SERVICE_URL=http://seafile
    labels:
      caddy: ${SEAFILE_SERVER_PROTOCOL}://${SEAFILE_SERVER_HOSTNAME}
      caddy.1_handle_path: "/socket.io/*"
      caddy.1_handle_path.0_rewrite: "* /socket.io{uri}"
      caddy.1_handle_path.1_reverse_proxy: "{{upstreams 80}}"
      caddy.2_handle_path: "/sdoc-server/*"
      caddy.2_handle_path.0_rewrite: "* {uri}"
      caddy.2_handle_path.1_reverse_proxy: "{{upstreams 80}}"
    depends_on:
      db:
        condition: service_healthy
    networks:
      - seafile-net

networks:
  seafile-net:
    name: seafile-net

Bước 4: Khởi chạy hệ thống

Khi các file cấu hình đã sẵn sàng trong thư mục /opt/seafile, hãy chạy lệnh sau để kéo (pull) image và khởi động các container:

cd /opt/seafile
docker compose up -d

Lưu ý: Lần khởi động đầu tiên sẽ mất khoảng 1-3 phút để MariaDB tiến hành khởi tạo cơ sở dữ liệu.

Bạn có thể kiểm tra trạng thái hoạt động của các container bằng lệnh:

docker compose ps

Bước 5: Truy cập và sử dụng

Mở trình duyệt web và truy cập vào tên miền của bạn (ví dụ: https://cloud.phongdinh.info.vn). Nếu Caddy hoạt động đúng, trang web của bạn đã tự động có biểu tượng ổ khóa an toàn (SSL).

Seafile

Đăng nhập bằng EmailMật khẩu của tài khoản Admin mà bạn đã khai báo trong file .env. Bây giờ bạn đã có thể tạo các Library (Thư viện) và bắt đầu đồng bộ dữ liệu!

4. Quản Lý Hệ Thống Và Khắc Phục Lỗi (Troubleshooting)

Bạn nên nắm vững các lệnh cơ bản sau để bảo trì Server:

  • Xem nhật ký (Log) để bắt lỗi:
docker compose logs -f --tail 50
  • Khởi động lại toàn bộ Seafile:
docker compose restart
  • Cập nhật lên phiên bản mới: Rất đơn giản, bạn chỉ cần đổi tag phiên bản trong file .env, sau đó chạy:
docker compose pull
docker compose up -d

Một số lỗi thường gặp:

  • Lỗi SSL (Không có HTTPS): Kiểm tra lại xem bản ghi DNS đã trỏ đúng IP chưa và tường lửa có đang chặn cổng 80/443 không. Xem log của Caddy: docker logs seafile-caddy 2>&1 | grep -i "error".
  • Seafile bị kẹt ở vòng lặp khởi động (Restart loop): Thường do khai báo sai mật khẩu Database trong file .env hoặc thiếu biến JWT_PRIVATE_KEY.

Tổng kết

Việc tự lưu trữ dữ liệu với Seafile Server bằng Docker trên Ubuntu không chỉ giúp bạn làm chủ 100% dữ liệu cá nhân/doanh nghiệp mà còn tiết kiệm được chi phí lớn so với các dịch vụ Cloud thương mại. Kiến trúc Docker giúp hệ thống hoạt động ổn định, dễ dàng nâng cấp và sao lưu trong tương lai.

Chia sẻ:
Zalo
Tags:
phongdh

phongdh

Content Creator

Chào mọi người, mình là Phong - hiện đang công tác tại Phòng Kỹ thuật AZDIGI. Trong quá trình làm việc mình có cơ hội được tiếp xúc với khá nhiều các vấn đề liên quan đến Website/Email/Hosting/VPS/Server, do đó mình viết lại các hướng dẫn này nhằm chia sẻ kiến thức, cũng như tạo một môi trường để chúng ta giao lưu và học hỏi lẫn nhau.

Kết nối:

Bài viết liên quan

Những bài viết bạn có thể quan tâm

Thảo luận

0 bình luận cho bài viết này

* Địa chỉ email của bạn sẽ được bảo mật và không hiển thị công khai.

Chưa có bình luận nào

Hãy là người đầu tiên chia sẻ góc nhìn của bạn về bài viết này nhé!

Zalo

Nhập từ khóa để tìm kiếm...

0 kết quả

CHUYÊN MỤC LIÊN QUAN