惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
罗磊的独立博客
腾讯CDC
云风的 BLOG
云风的 BLOG
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
U
Unit 42
I
InfoQ
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
美团技术团队
IT之家
IT之家
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
GbyAI
GbyAI
S
SegmentFault 最新的问题

Holmesian Blog

MacBook 休眠恢复不能上网问题 - Holmesian Blog 缓解 MacBook Pro 开网页的发热问题 - Holmesian Blog 再谈Go语言的交叉编译 - Holmesian Blog 自行更换 MacBook Pro (A1708) 的电池 HAProxy 区分流量特征 - Holmesian Blog 临时处理OCSP域名无法访问的问题 - Holmesian Blog 树莓派FFmpeg硬件加速 - Holmesian Blog 交叉编译Go程序 - Holmesian Blog 树莓派的HW CSum问题 - Holmesian Blog
Seafile docker部署相关问题记录 - Holmesian Blog
Holmesian · 2025-01-05 · via Holmesian Blog

提示:本文更新于 522 天前,技术内容可能已发生变化,仅供参考。

前言

服务器到期了才发现博客已经超过2年没有更新了,虽然博客的时代早已过去,但是留下一些记录总归算是积攒一些情怀。恰好腾讯搞活动,重新开了一台3年的轻云服务,把博客和一些零小服务迁过来,一直在用的 Seafile 服务占用的空间和资源太大就回迁到家庭服务器上,说是家庭服务器,其实就是一台低功耗的小主机,恰好运营商送了两条有IPv4公网的IP,双WAN叠加上行100M、下行2000M,内网2.5G,就跑了photoprism、Seafile、jellyfin等几个吃资源的服务,家里重新装修至今也稳定跑了快一年。现在不当夜猫子,借助全屋智能,每天后半夜服务器自动关机,早上7:50自动开机,所以有些问题可能是因此导致的。

迁移时同步升级到了最新的Seafile Pro v12.0,现将安装过程中遇到一些问题记录下来,算水了一篇文章。

Seafile 服务安装遇到的问题

Docker Desktop 服务自启动

因为这个主机还承担了跟儿子一起电视投屏打游戏的功能,所以只能装windows,所有服务通过Docker Desktop一代docker运行(WSL的二代IO性能实在太差,而且小问题不断)。

众所周知,Docker Desktop需要登录后才能运行,所以要通过计划任务设置不登录自启动,这样开机后即使windows的用户不登陆,Docker服务也可以启动启动了。

windows docker 不登录自启动.png

为了确保网络无问题和系统完全启动,还可以增加等待网络连接和延迟启动的参数。

触发器时间.png

等待网络连接.png

Seafile docker-compose重启之后无法启动问题

Seafile 的docker镜像一直有这样那样的问题,特别是V12版本以前docker部署的服务。总结起来主要是两大类:

mysql服务未启动就绪,Seafile镜像就启动的问题

主要是数据库服务没完全就绪导致seafile镜像中seahub出错退出,这类问题等mysql镜像启动之后,用docker start Seafile可以启动服务;

彻底解决的办法:通过检查机制依赖调整启动顺序,控制mysql 、elasticsearch、seafile镜像服务依次启动,Seafile Pro V12版的 docker-compose.yml 文件已经有相应的内容,可以直接参考使用。

mysql服务已正常工作,Seafile仍无法启动的问题

确认数据库服务启动并就绪,seahub仍然报错往往是因为上一次Seafile镜像关闭时错误导致的(相当于异常关机),重新启动时seafile镜像中的seahub 找不到内部链接报错,这类情况docker start Seafile无法启动seafile服务,必须 docker-compose downdocker-compose up -d重新创建几个关联的docker服务。

彻底解决的办法:
Seafile未完全关闭导致的问题,通过计划任务,在关机前预留关闭seafile服务的时间,开机后预留系统启动和网络连接的时间

关闭前操作.png

Seafile 服务器内部错误

服务器内部错误.png

上传文件块错误.png

升级和迁移完成之后,客户端与服务端同步时看到“内部错误”几个字的错误提示一头雾水,查了官方论坛发现是祖传艺能,好在我之前用了几年都没碰到过,用以下的方法处理后没有再出现过,权当是意外了,希望Seafile服务能一直稳定下去,别再出状况。

对文件系统进行检查

假设Seafile的数据文件是在 E: 驱动器,在cmd中执行以下命令对磁盘文件系统进行检查和修复,确保文件系统正常。

fsck E: /x /f

磁盘文件系统检查完成后,通过以下命令进入Seafile镜像内部,

docker exec -it Seafile /bin/bash

再使用自带的 seaf-fsck.sh 对Seafile的自身文件块进行检查(不加--repair)/修复(加--repair)

cd Seafile-server-latest
./seaf-fsck.sh
./seaf-fsck.sh --repair

没有指定repo 资料库时候,seaf-fsck 会检查所有的文件块,时间可能较长,检查和修复的结果在控制台直接输出。

如果是因迁移、版本升级、磁盘文件系统破坏等原因导致的Seafile 文件块出现问题,一般情况下seaf-fsck即使检查出来大概率也是无法修复的(修复后的服务端资料库与客户端的版本不一致而无法同步,只能二选一),为了后续系统的稳定着想,建议提前备份数据,清空服务端数据后,重新从客户端上传。

解除最大同步文件数量限制

在 .\opt\Seafile-data\Seafile\conf\Seafile.conf 文件中修改或添加以下内容

[fileserver]
port = 8082
max_sync_file_count = -1
fs_id_list_request_timeout = -1

check_virus_on_web_upload = false

避免小文件特别多的文件夹同步

我记得官方原来强调过Seafile不适合用来同步Git仓库,因为Seafile采用文件分块存储机制,将文件拆分成多个小块进行存储,因此可能会破坏这些元数据的完整性,同时也有同步机制的冲突,缺乏针对 Git 的优化,导致同步 Git 仓库出现问题。同理 node_modules 、vendor 之类的目录通常包含大量小文件,Seafile 在同步大量文件时可能会遇到性能问题,导致同步速度变慢,甚至出现错误。

所以添加Seafile-ignore.txt,同步时根据规则排除指定的文件和文件夹,只在客户端生效,以下是的coding文件夹在用的列表,供参考。

# Seafile-ignore.txt
Desktop.ini
*/Desktop.ini
.sync/
*/.sync/
Icon?
*/Icon?
.git/
*/.git/
# OS generated files #
$RECYCLE.BIN/
*/$RECYCLE.BIN/
System Volume Information/
*/System Volume Information/
ehthumbs.db
*/ehthumbs.db
desktop.ini
*/desktop.ini
Thumbs.db
*/Thumbs.db
lost+found/
*/lost+found/
.DocumentRevisions-V100/
*/.DocumentRevisions-V100/
.TemporaryItems/
*/.TemporaryItems/
.fseventsd/
*/.fseventsd/
.iCloud/
*/.iCloud/
.DS_Store
*/.DS_Store
.DS_Store?
*/.DS_Store?
.Spotlight-V100/
*/.Spotlight-V100/
.Trashes/
*/.Trashes/
.Trash-*/
*/.Trash-*/
*.swn
*.swp
*.swo
*.crdownload
.@__thumb/
.thumbnails/
*/.thumbnails/
*.tmp/
*/*.tmp/
*.tmp.chck
*.tmp.chck/
.dropbox/
.dropbox.attr/
.dropbox.cache/
.streams/
.caches/
*/.caches/
.Statuses/
.teamdrive/
.SynologyWorkingDirectory/
@eaDir/
@SynoResource/
DfsrPrivate/
.UTSystemConfig/
*/.UTSystemConfig/
.rqd/
._sync_*.db*
.sync_*.db*
.csync_journal.db*
.owncloudsync.log*
.test/
*/.test/
.idea/
*/.idea/
node_modules/
*/node_modules/
vendor/
*/vendor/
GolangProjects/src/pkg/
GolangProjects/pkg/
GolangProjects/bin/
GolangProjects/test/
*/.vscode/
*/dist/
*/unpackage/
*/__pycache__/
www/rageframe2/backend/runtime/debug
www/rageframe2/web/backend/assets

Seafile 使用过程中遇到的问题

Web 端文件下载失败问题

表现为在 Web 界面中可以正常查看纯文本内容,但需要下载的文件无法打开。经排查发现,问题源于 HTTP 与 HTTPS 协议头的冲突。

我的家庭服务器在 Seafile Docker 前增加了一个原生的 Nginx 来提供 HTTPS 服务,所有请求通过 Nginx 反向代理到 Seafile Docker。由于 Docker 映射的端口仅提供 HTTP 服务,Seafile 将所有 URL 默认定义为 HTTP 协议,导致前端 Web 无法正常下载文件。

解决方法
在 Seafile 的 docker-compose 配置文件 .env 中,添加或修改以下内容:

SEAFILE_SERVER_HOSTNAME=Seafile.youname.com:1234
SEAFILE_SERVER_PROTOCOL=https

如果服务已经初始化,可在 .\opt\Seafile-data\Seafile\conf\seahub_settings.py 中添加以下内容:

SERVICE_URL = "https://Seafile.youname.com:1234"
CSRF_TRUSTED_ORIGINS = ["https://Seafile.youname.com:1234"]
FILE_SERVER_ROOT = 'https://Seafile.youname.com:1234/seafhttp'

日志文件过大问题

运行一段时间后,.\opt\Seafile-data\Seafile\logs 文件夹可能会膨胀至十几 GB。经检查,主要由全文搜索和监控服务的日志引起,尤其是 Seafile-monitor.log 文件,常见错误如下:

Syntax Error (101813): Illegal character <23> in hex string
Syntax Error (101814): Illegal character <1c> in hex string
...

原因
这些错误主要由全文搜索服务引起,而该功能是专业版特有的。由于配置文件中的 log_level 参数在 Seafile Pro 12 中已失效,建议尝试以下措施:

  1. 如果关闭监控服务,在 .\opt\Seafile-data\Seafile\conf\Seafile.conf 中设置

    [monitor]
    enable = false
  2. 如果需要保留监控服务,可关注后续更新以寻找有效的日志级别控制参数。

建议的配置

开启两步认证并关闭 Web 端设置

.\opt\Seafile-data\Seafile\conf\seahub_settings.py 中添加:

TIME_ZONE = 'Asia/Shanghai'
ENABLE_SETTINGS_VIA_WEB = False
ENABLE_TWO_FACTOR_AUTH = True

文件传输性能优化

如果 Seafile 前端有 Nginx 服务,需在配置中增加以下内容:

client_max_body_size 0m;
proxy_request_buffering off;

原因

  1. client_max_body_size:限制客户端上传文件的大小,默认值为 1MB,设置为 0 表示无限制。值过小可能导致客户端上传时出现 413 Request Entity Too Large 错误。
  2. proxy_request_buffering:控制 Nginx 是否在将请求主体(如上传文件)完全读取到临时文件后再转发到后端。设置为 off 禁用缓冲,适合反向代理场景。

使用微信扫描二维码赞赏


相关文章