I. 前提条件

1.1 环境要求

1.安装 Seafile 专业版至少需要 4 核 CPU 和 4GB 内存。

2.确保 mmapfs 计数不会导致像内存不足这样的异常

1
2
3
cd /etc/sysctl.d/
touch 101-sysctl.conf
vim 101-sysctl.conf

添加以下参数:

1
2
# modify vm.max_map_count
vm.max_map_count=262144

加载配置文件:

1
sudo sysctl --system

查询是否生效:

1
sysctl <变量名>

3.如果你的机器没有足够的配置,在首次部署 Seafile Pro Docker 之后,可以通过以下两种方式之一来满足最低要求为 2 个核心和 2GB 内存:

  • 使用 SeaSearch ,一个基于开源搜索引擎 ZincSearch 构建的轻量级搜索引擎,作为索引器。
  • 在另一台机器上部署 Elasticsearch,并在 seafevents.conf 文件中修改 es_hostes_port

1.2 本文约定

本文使用以下约定:

  • /opt/seafile 是存储 Seafile docker compose 文件的目录。如果您将 Seafile 放在不同的目录中,请相应地调整所有路径。
  • Seafile 使用两个 Docker 卷 来保存其数据库和 Seafile Docker 容器中生成的数据。卷的主机路径分别是 /opt/seafile-mysql/opt/seafile-data ,不建议更改这些路径。 如果您修改了路径,请在按照这些说明进行操作时考虑到这一点。
  • Seafile 和 Nginx 的所有配置和日志文件都存储在 Seafile 容器的卷中。

II. 安装 Docker

Install Docker on RHEL | 凡人博客

III. 环境准备

3.1 下载镜像

1
docker pull seafileltd/seafile-pro-mc:13.0-latest

3.2 环境配置

从 Seafile Docker 12.0开始,我们使用以下三个配置文件: .env , seafile-server.ymlcaddy.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
mkdir /opt/seafile
cd /opt/seafile

# Seafile PRO 13.0
wget -O .env https://manual.seafile.com/13.0/repo/docker/pro/env
wget https://manual.seafile.com/13.0/repo/docker/pro/seafile-server.yml
wget https://manual.seafile.com/13.0/repo/docker/pro/elasticsearch.yml
wget https://manual.seafile.com/13.0/repo/docker/seadoc.yml
wget https://manual.seafile.com/13.0/repo/docker/caddy.yml

vim .env

打开 .env 配置,为以下字段设置符合要求的值(具体值要求请查看官方部署文档

1
2
3
4
5
6
7
8
SEAFILE_SERVER_HOSTNAME=[seafile.example.com | 172.16.x.x:8080]
...
JWT_PRIVATE_KEY=
...
SEAFILE_MYSQL_DB_PASSWORD=PASSWORD
...
INIT_SEAFILE_ADMIN_EMAIL=me@example.com
INIT_SEAFILE_ADMIN_PASSWORD=asecret

创建 Elasticsearch 数据目录

1
2
mkdir -p /opt/seafile-elasticsearch/data
chmod 777 -R /opt/seafile-elasticsearch/data

3.3 修改端口

文件 caddy.yml 默认使用 80443 端口,在启动容器前请检查端口是否被占用

1
ss -lntup | grep :端口号

若已被占用,请修改为其它端口(须与 .env 配置中 SEAFILE_SERVER_HOSTNAME 字段值 IP 端口一致),示例:

1
2
3
4
5
6
services:
    caddy:
        ...
        ports:
            - 8080:80
            - 8443:443

若文件 caddy.yml 默认端口有修改,还须修改 seafile-server.ymlseadoc.yml 文件中以下 caddy 部分:

1
2
3
labels:
    #caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}
    caddy: http://172.16.x.x

因为 .env 中配置的 SEAFILE_SERVER_HOSTNAME 值带有端口号,不被 Caddy 接受,这里必须要改

3.4 放行端口

如在云服务器部署,除云服务器自身防火墙外,还需在云安全组中开放相关端口。

Firewalld 简单配置 | 凡人博客

IV. 启动容器

4.1 启动容器

/opt/seafile 目录执行 docker compose 启动容器:

1
docker compose up -d

4.2 访问资源

访问 SEAFILE_SERVER_HOSTNAME 配置的主机名,如果 caddy.yml 文件绑定的是非 80 端口,还需在主机名后加入端口访问,如:seafile.example.com:8080 ,默认用户名是 INIT_SEAFILE_ADMIN_EMAIL 设置的值,默认密码是 INIT_SEAFILE_ADMIN_PASSWORD 设置的值。

4.3 维护指令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 初次启动
docker compose up -d

# 重启服务
docker compose restart

# 查看日志
docker compose logs -f

# 跟踪 seafile 日志
docker logs seafile -f

# 更新配置,重置服务(这不会影响你的数据卷)
docker compose down
docker compose up -d

# 增加一个新的管理员
docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh

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

V. 排错

5.1 502 Bad Gateway

5.1.1 错误提示

访问 http://seafile.example.com 提示:502 Bad Gateway

5.1.2 故障解决

修改 .env 配置后,须重新部署 Seafile ,步骤如下👇

1.停止并移除相关容器:

1
docker compose down

2.启动容器

1
docker compose up -d

5.2 文件上传失败

5.2.1 错误提示

提示文件上传失败,网络错误,重新上传。

5.2.2 故障解决

如果在 caddy.yml 文件修改了默认绑定端口,除了在 .env 文件中修改 SEAFILE_SERVER_HOSTNAME=172.16.x.x:8080 ,还需在 seafile-server.ymlseadoc.yml 文件中修改 caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}caddy: http://172.16.x.x

5.2 初始管理员角色修改

初始管理员用户默认角色default_admin ,如果不小心设置成了其它角色,如 system_admin ,可通过以下步骤恢复。

1.登录 Seafile 数据库

1
docker exec -it seafile-mysql mysql -u root -p

输入 INIT_SEAFILE_MYSQL_ROOT_PASSWORD 字段的值(数据库初始密码)。查看数据库:

1
SHOW DATABASES;

2.选择 seahub_db 数据库

1
USE seahub_db;

查看初始管理员用户是否存在于角色表:

1
SELECT * FROM role_permissions_adminrole WHERE email = 'user@example.com';

3.如果存在初始管理员用户,更新记录

1
UPDATE role_permissions_adminrole SET role = 'default_admin' WHERE email = 'user@example.com';

如果不存在,需要插入记录:

1
INSERT INTO role_permissions_adminrole (email, role) VALUES ('user@example.com', 'default_admin');

4.登出数据库

1
exit;

5.重启容器

1
docker compose restart

VI. 参考文档

部署 Seafile | Seafile

Seafile12公网IP自定义端口映射的部署 - 经验分享 - Seafile 用户论坛

实用指南:seafile:ubuntu搭建社区版seafile12.0 - yxysuanfa - 博客园