Seafile docker部署相关问题记录
前言
服务器到期了才发现博客已经超过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服务也可以启动启动了。
为了确保网络无问题和系统完全启动,还可以增加等待网络连接和延迟启动的参数。
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 down
和docker-compose up -d
重新创建几个关联的docker服务。
彻底解决的办法:
Seafile未完全关闭导致的问题,通过计划任务,在关机前预留关闭seafile服务的时间,开机后预留系统启动和网络连接的时间
Seafile 服务器内部错误
升级和迁移完成之后,客户端与服务端同步时看到“内部错误”几个字的错误提示一头雾水,查了官方论坛发现是祖传艺能,好在我之前用了几年都没碰到过,用以下的方法处理后没有再出现过,权当是意外了,希望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 中已失效,建议尝试以下措施:
如果关闭监控服务,在
.\opt\Seafile-data\Seafile\conf\Seafile.conf
中设置[monitor] enable = false
- 如果需要保留监控服务,可关注后续更新以寻找有效的日志级别控制参数。
建议的配置
开启两步认证并关闭 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;
原因:
client_max_body_size
:限制客户端上传文件的大小,默认值为 1MB,设置为0
表示无限制。值过小可能导致客户端上传时出现413 Request Entity Too Large
错误。proxy_request_buffering
:控制 Nginx 是否在将请求主体(如上传文件)完全读取到临时文件后再转发到后端。设置为off
禁用缓冲,适合反向代理场景。
「倘若有所帮助,不妨酌情赞赏!」
感谢您的支持!
使用微信扫描二维码赞赏
