debian13 下安装配置seafile onlyoffice

之前部署的nextcloud界面台花里胡哨了,有群友推荐seafile,准备试试。以下内容由gemini3 pro生成并通过验证,哈哈

第一阶段:环境初始化与“纯净”目录创建

登录新服务器,执行以下操作:

1. 系统与 Docker 准备

因为安装debian13时选择中国地区的镜像地址了,所以不需要修改默认镜像源。

Bash

1
2
3
4
5
6
7
8
# 切换 root
su -

# 更新并安装工具
apt update && apt install -y curl wget git vim htop ufw

# 安装 Docker (Debian 13 可用)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

image-20260113095820996

2. 创建无连字符目录结构

之前nextcloud篇使用“-”连字符,造成几次不必要的排错,这次就不用连字符了。

我们将根目录定为 /data/seafile,子目录也全部去掉了连字符,改为单词直连或简写。

Bash

1
2
3
4
5
6
7
8
9
10
# 创建主目录
mkdir -p /data/seafile

# 进入目录
cd /data/seafile

# 提前创建好挂载目录 (纯净命名)
mkdir mysql
mkdir data
mkdir office

第二阶段:编写 docker-compose.yml (去符号化)

我们将服务名称简化为 db, cache, app, office,网络名称简化为 seafnet

创建文件:

Bash

1
vim docker-compose.yml

粘贴以下配置:

YAML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
version: '3'

services:
# --- 1. 数据库 (MariaDB) ---
db:
image: mariadb:10.11
container_name: seadb # 纯字母命名
restart: always
environment:
- MYSQL_ROOT_PASSWORD=MySecretDBPass2026 # 数据库密码
- MYSQL_LOG_CONSOLE=true
- MARIADB_AUTO_UPGRADE=1
volumes:
- ./mysql:/var/lib/mysql # 映射到 /data/seafile/mysql
networks:
- seafnet

# --- 2. 缓存 (Memcached) ---
cache:
image: memcached:1.6.23
container_name: seacache # 纯字母命名
restart: always
entrypoint: memcached -m 1024
networks:
- seafnet

# --- 3. Seafile 主程序 ---
app:
image: seafileltd/seafile-mc:latest
container_name: seaapp # 纯字母命名
restart: always
ports:
- "80:80"
volumes:
- ./data:/shared # 映射到 /data/seafile/data
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=MySecretDBPass2026 #这里是上面填的数据库密码
- TIME_ZONE=Asia/Shanghai
- [email protected] # 初始账号
- SEAFILE_ADMIN_PASSWORD=admin # 初始密码
- SEAFILE_SERVER_LETSENCRYPT=false
depends_on:
- db
- cache
networks:
- seafnet

# --- 4. OnlyOffice 编辑器 ---
office:
image: onlyoffice/documentserver:latest
container_name: seaoffice # 纯字母命名
restart: always
ports:
- "8080:80"
volumes:
- ./office/logs:/var/log/onlyoffice
- ./office/data:/var/www/onlyoffice/Data
environment:
- JWT_ENABLED=true
- JWT_SECRET=MyOfficeSecret2026 #注意这里是onlyoffice的秘钥,修改下
networks:
- seafnet

networks:
seafnet: # 网络名称也去掉了横杠

第三阶段:启动与 OnlyOffice 集成

1. 首次启动

Bash

1
docker compose up -d

等待 1-2 分钟,让 seaapp 完成初始化。

如果失败,参考上篇内容修改代理地址。建议安装完成后再恢复无代理状态。

2. 修改 Seafile 配置

配置文件路径现在非常清晰:/data/seafile/data/seafile/conf/

Bash

1
vim data/seafile/conf/seahub_settings.py

在文件末尾追加以下配置(IP 已适配 10.139.23.97):

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ==========================================
# OnlyOffice Integration (No Hyphens Setup)
# ==========================================

ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
ONLYOFFICE_JWT_SECRET = 'MyOfficeSecret2026'

# 浏览器访问 OnlyOffice 的地址 (外部访问)
ONLYOFFICE_APIJS_URL = 'http://10.139.23.97:8080/web-apps/apps/api/documents/api.js'

# 支持格式
ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_EDIT_FILE_EXTENSION = ('docx', 'pptx', 'xlsx')

# 强制保存
ONLYOFFICE_FORCE_SAVE = True

image-20260113105126233

注意上面配置文件里,还有2处配置需要修改

1
2
'HOST':'db' 行 将“db”修改为“seadb”
'LOCATION'行 将“memcached”修改为“seacache”

修改完配置后重启seaapp服务

1
docker restart seaapp

此外最好对onlyoffice目录权限赋权

1
chown -R 101:101 /data/seafile/office && docker restart seaoffice

3. 性能优化 (发挥华为服务器性能)

修改 Gunicorn 配置:

Bash

1
vim data/seafile/conf/gunicorn.conf.py
  • 修改 workers 行:

    Python

    1
    workers = 16

    (注:如果你的 CPU 核心数非常多,设为 16 是个非常均衡的“甜点”值)

4. 重启生效

Bash

1
docker compose restart app

第四阶段:防火墙与访问测试

鉴于这是新虚拟机,Debian 13 可能没有预装防火墙,或者安装了 nftables。为了防止 8080 端口被挡,建议明确放行。

Bash

1
2
3
4
5
6
# 如果安装了 ufw
ufw allow 80/tcp
ufw allow 8080/tcp
ufw reload

# 如果没有防火墙工具,直接测试即可

验证步骤

  1. 打开浏览器:访问 http://10.139.23.97

  2. 登录:账号 [email protected],密码 admin

  3. 修改密码:第一时间去系统设置里改密码。

  4. 修改服务 URL(重要!):

    • 进入 系统管理 (System Admin) -> **设置 (Settings)**。

    • 找到 SERVICE_URL,确保它是 http://10.139.23.97

    • 找到 FILE_SERVER_ROOT,确保它是 http://10.139.23.97/seafhttp。

      (这一步不做会导致上传文件失败)

  5. 新建 Excel:测试 OnlyOffice 是否能丝滑打开。


总结:文件路径对比

通过这次优化,你的系统结构变得极其清爽,排错时再也不会被符号干扰了:

项目 旧方案 (Nextcloud/Seafile旧版) 新方案 (当前) 优势
主目录 /data/seafile-server /data/seafile 更短,无符号
数据库目录 ./mysql-data ./mysql 清晰
数据目录 ./seafile-data ./data 通用
Office目录 ./onlyoffice-data ./office 简单
容器名 seafile-onlyoffice seaoffice DNS解析更稳
网络名 seafile-net seafnet 纯字母

image-20260113105407250

image-20260113105450076

优化

看了一眼虚拟机配置截图,瓶颈非常明显

虚拟机配置极其豪华(16核 CPU + 16G 内存),这对于 Seafile 来说是“大炮打蚊子”,资源完全过剩。

导致“页面不流畅”的罪魁祸首只有一个:那块“希捷 4TB 机械硬盘”。

Seafile 和 Nextcloud 这类网盘应用,本质上是 数据库密集型小文件读写密集型 的应用。

  • 每次你刷新页面,Seahub 都要去数据库 (MariaDB) 查几十次表。
  • 每次加载文件列表,都要读取头像、缩略图等小文件。
  • 机械硬盘(HDD)的 4K 随机读写性能 (IOPS) 非常差,只有 SSD 的几百分之一。

🚀 优化方案(按推荐程度排序)

方案一:开启 PVE 的“回写”缓存 (Writeback) —— 零成本,立竿见影

image-20260113123246063

  1. 原理
    • 默认模式(Default/No cache)下,虚拟机每写一个数据都要等机械硬盘确确实实写进磁道了才算完成,慢得要死。
    • Write back 模式下,数据写到宿主机的内存里就算完成了,由 PVE 也就是 Linux 内核在后台慢慢刷入机械硬盘。页面响应速度会瞬间提升。
  2. ⚠️ 风险提示
    • 如果此时服务器突然断电(拔插头),内存里还没写入硬盘的数据会丢失。如果你有 UPS(不间断电源),这个方案是完美的。如果没有,请权衡风险(通常只会丢几秒钟的数据)。

方案二:分离“计算/数据库”与“存储” (混合存储) —— 最彻底的解决方案

如果方案一还不够快,或者你追求丝般顺滑,你需要一块 SSD(固态硬盘)。哪怕是一块便宜的 SATA SSD 或者旧的 NVMe 都行。

核心逻辑:

  • 数据库 (MariaDB) + Seafile 程序 + Redis/Memcached:必须跑在 SSD 上。
  • **大文件数据 (Seafile Data)**:继续存在 机械硬盘 上。

操作建议:

  1. 添加 SSD:给服务器插一块 SSD。
  2. 迁移虚拟机磁盘
    • 在 PVE 里,选中虚拟机 101 -> 硬件 -> 硬盘 (scsi0) -> 磁盘操作 -> **移动存储 (Move Storage)**。
    • 把它移动到 SSD 所在的存储池。
  3. 如果 SSD 空间不够存 500G 数据
    • 你需要在这个虚拟机里挂载两块盘:
      • **磁盘1 (SSD, 32G足够)**:安装 Debian 系统、Docker、数据库。
      • **磁盘2 (HDD, 4TB)**:挂载到 /data/seafile/data,专门存大文件。

方案三:Seafile 内部参数微调 (锦上添花)

如果硬件动不了,可以尝试减少 Seafile 对硬盘的骚扰:

  1. 限制缩略图生成 (机械硬盘最怕读取几千张图片的缩略图): 修改 seahub_settings.py

    Python

    1
    2
    3
    4
    5
    # 禁止对视频生成缩略图 (ffmpeg 极占 IO)
    ENABLE_VIDEO_THUMBNAIL = False

    # 限制缩略图大小上限 (超过 20MB 的图不生成缩略图)
    THUMBNAIL_SIZE_LIMIT = 20
  2. 确认 Memcached 生效: 确保 docker-compose.yml 里的 memcached 分配了足够的内存(之前方案里我们给了 1GB,足够了)。缓存命中率高了,就不需要去读硬盘上的数据库了。

总结建议

请立刻执行“方案一”(修改 PVE 硬盘缓存为 Write back)。

这是针对机械硬盘环境最有效的优化手段。如果改完重启后依然觉得卡顿,那只能考虑加钱上 SSD 了。

中文字体添加

OnlyOffice 默认非常缺乏中文字体

虽然它自带了一些开源字体(如 Noto Sans),但它默认不包含我们最常用的 Windows 标准字体(如宋体、黑体、仿宋、楷体、微软雅黑)。

如果不添加这些字体,你会遇到两个严重问题:

  1. 排版错乱:打开公司原有的 Word 文档时,页数变多、换行位置改变、表格跑偏。
  2. 字体替换:原本的“宋体”会被显示为奇怪的开源字体,甚至出现“方框”乱码。

鉴于你是给 200 人团队使用,手动导入中文字体是必须要做的“最后一公里”工作

以下是针对你的 Docker 环境(挂载路径为 /data/seafile/office/data)的操作步骤:


第一步:准备字体文件

你需要找一台 Windows 电脑,打开 C:\Windows\Fonts 文件夹,复制以下几个核心文件(注意版权,建议仅限内部使用):

  • simsun.ttc (宋体 & 新宋体)
  • simhei.ttf (黑体)
  • simkai.ttf (楷体)
  • simfang.ttf (仿宋)
  • msyh.ttc (微软雅黑)
  • msyhbd.ttc (微软雅黑加粗)
  • (可选) times.ttf 等英文字体

将这些文件打包,上传到你的服务器上。


第二步:将字体放入 OnlyOffice 数据目录

根据你之前的 docker-compose.yml,你的 OnlyOffice 数据卷挂载在 /data/seafile/office/data。OnlyOffice 会自动扫描这个目录下的字体。

注意这里这个/data/seafile/office/data/fonts路径,seaoffice的转换脚本是无法读取的,所以最好在yml里将这个路径永久化挂载。

我们需要告诉 Docker:把宿主机的 /data/seafile/office/fonts 目录,伪装成容器里的 /usr/share/fonts/truetype/custom 目录。

编辑配置文件:

Bash

1
vim /data/seafile/docker-compose.yml

找到 office 服务的部分,在 volumes 下面新增一行

YAML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
office:
image: onlyoffice/documentserver:latest
container_name: seaoffice
restart: always
ports:
- "8080:80"
volumes:
- ./office/logs:/var/log/onlyoffice
- ./office/data:/var/www/onlyoffice/Data
# 👇【新增这一行】将宿主机字体目录挂载到容器系统字体目录
- ./office/fonts:/usr/share/fonts/truetype/custom
environment:
- JWT_ENABLED=true
- JWT_SECRET=MyOfficeSecret2026
networks:
- seafnet

保存退出。

第三步:重建容器

因为修改了 docker-compose.yml,必须重建容器才能让挂载生效。

Bash

1
2
cd /data/seafile
docker compose up -d

(Docker 会检测到配置变化,自动重建 seaoffice 容器,过程很快,不会丢数据)

在服务器上执行:

Bash

1
2
3
4
5
6
7
8
9
10
# 1. 创建一个专门存放字体的文件夹
mkdir -p /data/seafile/office/data/fonts

# 2. 将你上传的字体文件 (比如在 /tmp/fonts/ 下) 移动进去
# (假设你用 SFTP 传到了 /tmp/fonts)
cp /tmp/fonts/* /data/seafile/office/data/fonts/

# 3. 【关键】再次修正权限 (Docker 内用户无法读取 Root 上传的文件)
# 必须把字体文件的属主改为 101 (OnlyOffice 用户)
chown -R 101:101 /data/seafile/office/data/fonts

第三步:让 OnlyOffice 重新生成字体缓存

放入文件后,OnlyOffice 不会自动识别,必须手动触发脚本重新编译字体核心。

执行以下命令:

Bash

1
2
# 进入容器执行生成脚本
docker exec -it seaoffice /usr/bin/documentserver-generate-allfonts.sh

你大概会看到这样的输出过程:

Plaintext

1
2
3
Generating AllFonts.js, please wait...
...
Done

只要看到 Done,就说明服务器端识别成功了。


第四步:【极其重要】清除本地浏览器缓存

这是 99% 的人会卡住的地方:服务器改好了,但你电脑上的浏览器还存着旧的字体列表缓存

  1. 关闭所有打开了 Seafile/OnlyOffice 的浏览器标签页。
  2. 清除浏览器缓存(Chrome 快捷键 Ctrl + Shift + Del -> 清除缓存图片和文件)。
  3. 重新登录 Seafile,新建或打开一个 Excel/Word。
  4. 在字体下拉列表中,看看能不能找到 SimSun (宋体) 或 **Microsoft YaHei (微软雅黑)**。 (注:OnlyOffice 有时显示英文名 SimSun,有时显示中文“宋体”,视版本而定)

总结

这四步做完,你的 Seafile + OnlyOffice 私有云才是真正的“完全体”,大家打开文档的格式就能和本地 Office 保持 95% 以上的一致性了。

debian13 下安装配置seafile onlyoffice

https://bg4vrg.com/post/20260113094629.html

作者

fei

发布于

2026-01-13

更新于

2026-01-13

许可协议

评论