Skip to content
Go back

使用 Docker 部署 Seafile 文件管理系统

| 0 Views Edit page

前言

在 K3s 集群中,似乎并没有很好的方法对通用的大段配置进行解耦。
因此换条路走:依赖外部的 Seafile 文件系统进行通用配置文件的保存,并在容器重启时自动下载最新的配置文件,借此实现解耦。

Seafile 提供全面的网盘功能,用户可以在 Seafile 中存储、管理和共享文件。

  • 支持全平台客户端,包括 Windows、Mac、Linux、iOS、Android 等。
  • ⭐ 支持多人协同在线编辑、文档编辑锁定。
  • ⭐ 权限管理。
  • 版本控制。
  • 事件通知。
  • ⭐ 支持通过 API 下载文件

方案概述

  1. 安装 Docker 环境
  2. 确定容器运行参数
  3. 启动容器
  4. 证书申请、Nginx 配置等
  5. 生成带密码保护的共享链接

操作步骤

一、安装 Docker 环境

参考:Ubuntu 20.04 从官方源安装最新的 Docker

二、确定容器运行参数

官方只提供了使用 docker-compose.yml 启动的文档:用 Docker 部署 Seafile 服务
看了下最近的更新日志升级到 11.0.x,弃用了 SQLite 数据库支持,这使得外部的 MySQL 数据库成了必须,同时 Seafile 还依赖 Memcached 缓存系统。
那就没有必要再折腾命令启动了,直接用官方的 docker-compose.yml 吧:11.0/docker-compose.yml

MySQL 数据库和 Memcached 并未暴露到外部,仅 Seafile 容器的 80 和 443 端口需要做映射供外部访问。

services:
  db:
    image: mariadb:10.11
    container_name: seafile-mysql
    environment:
      # MySQL 数据库密码
      - MYSQL_ROOT_PASSWORD=db_dev  # Required, set the root's password of MySQL service.
      - MYSQL_LOG_CONSOLE=true
      - MARIADB_AUTO_UPGRADE=1
    volumes:
      # MySQL 数据持久化
      - /opt/seafile-mysql/db:/var/lib/mysql  # Required, specifies the path to MySQL data persistent store.
    networks:
      - seafile-net

  memcached:
    image: memcached:1.6.18
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    networks:
      - seafile-net
          
  seafile:
    image: seafileltd/seafile-mc:11.0-latest
    container_name: seafile
    ports:
      # 端口映射
      - "80:80"
#     - "443:443"  # If https is enabled, cancel the comment.
    volumes:
      # Seafile 数据持久化
      - /opt/seafile-data:/shared   # Required, specifies the path to Seafile data persistent store.
    environment:
      - DB_HOST=db
      # 之前设置的 MySQL 数据库密码
      - DB_ROOT_PASSWD=db_dev  # Required, the value should be root's password of MySQL service.
      - TIME_ZONE=Etc/UTC  # Optional, default is UTC. Should be uncomment and set to your local time zone.
      # Seafile 管理员登录邮箱
      - SEAFILE_ADMIN_EMAIL=me@example.com # Specifies Seafile admin user, default is 'me@example.com'.
      # Seafile 管理员登录密码
      - SEAFILE_ADMIN_PASSWORD=asecret     # Specifies Seafile admin password, default is 'asecret'.
      # 不配置 HTTPS,之后用 acme.sh 申请证书并用 Nginx 反代
      - SEAFILE_SERVER_LETSENCRYPT=false   # Whether to use https or not.
      - SEAFILE_SERVER_HOSTNAME=docs.seafile.com # Specifies your host name if https is enabled.
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net

networks:
  seafile-net:

三、启动容器

我修改完的 docker-compose.yml

services:
  db:
    image: mariadb:10.11
    container_name: seafile-mysql
    environment:
      # MySQL 数据库密码
      - MYSQL_ROOT_PASSWORD=BZyXMJCF3EbxVt2a9czR
      - MYSQL_LOG_CONSOLE=true
      - MARIADB_AUTO_UPGRADE=1
    volumes:
      # MySQL 数据持久化
      - /rab/docker/seafile_mysql/data:/var/lib/mysql
    networks:
      - seafile-net

  memcached:
    image: memcached:1.6.18
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    networks:
      - seafile-net
          
  seafile:
    image: seafileltd/seafile-mc:11.0-latest
    container_name: seafile
    ports:
      # 端口映射
      - "11080:80"
    volumes:
      # Seafile 数据持久化
      - /rab/docker/seafile/data:/shared
    environment:
      - DB_HOST=db
      # 之前设置的 MySQL 数据库密码
      - DB_ROOT_PASSWD=BZyXMJCF3EbxVt2a9czR
      - TIME_ZONE=Asia/Shanghai
      # Seafile 管理员登录邮箱
      - SEAFILE_ADMIN_EMAIL=admin@ceshiku.cn
      # Seafile 管理员登录密码
      - SEAFILE_ADMIN_PASSWORD=nDD3CaMuT9Ay17K62cf4
      # 不配置 HTTPS,之后用 acme.sh 申请证书并用 Nginx 反代
      - SEAFILE_SERVER_LETSENCRYPT=false
      # Seafile 域名
      - SEAFILE_SERVER_HOSTNAME=seafile.ceshiku.cn
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net

networks:
  seafile-net:

创建下数据持久化目录:

mkdir -vp /rab/docker/seafile_mysql/data
mkdir -vp /rab/docker/seafile/data

启动服务:

docker compose up -d

之后访问映射的端口看下:
启动成功

四、证书申请、Nginx 配置等

参考:四、4. 安装最新的 Nginx
配置完 Nginx 重启后 HTTPS 应该就生效了:
HTTPS 生效

五、生成带密码保护的共享链接

共享
设置密码
拷贝直接下载链接


各种意外情况

一、Forbidden (403) CSRF verification failed. Request aborted.

如果你和我一样曾出现了下面的错误:

Forbidden (403)
CSRF verification failed. Request aborted.

403 Forbidden
那么需要进入到 Docker 容器中,修改下 /opt/seafile/conf/seahub_settings.py 文件:

# 进入容器
docker exec -it seafile /bin/bash

在容器中修改配置文件:

# 域名修改为你的
echo "CSRF_TRUSTED_ORIGINS = ['https://seafile.ceshiku.cn']" >> /opt/seafile/conf/seahub_settings.py
# 退出容器
exit

之后重启容器:

docker restart seafile

即可解决问题。

二、上传或预览失败

上传显示网络错误:
上传失败
或者语言一直处于加载状态。
需要将 系统设置设置SERVICE_URLFILE_SERVER_ROOT 带上 HTTPS:
URL 带上 HTTPS
之后再上传就好了:
上传
预览:
预览


Edit page