seafile pro 11.0安装踩坑记录
侧边栏壁纸
  • 累计撰写 12 篇文章
  • 累计收到 0 条评论

seafile pro 11.0安装踩坑记录

Momoko
2025-09-09 / 0 评论 / 3 阅读 / 正在检测是否收录...

系统环境与部署目标

操作系统: Ubuntu 20.04 LTS
容器化方案: Docker & Docker Compose
应用服务: Seafile Professional Server 11.0
反向代理: 1Panel (Nginx-based)
对象存储: Backblaze B2 Cloud Storage (S3-Compatible API)

部署目标: 实现一个稳定、可靠的Seafile专业版实例,其文件数据完全存储于Backblaze B2,并实现HTTPS安全访问和WebDAV功能。

问题复现与排错

在遵循官方文档进行初步配置后(遵循S3存储相关文档),遭遇了一系列问题。下文将按照实际排错顺序,逐一剖析并提供解决方案。

数据被错误上传到本地

问题:所有上传的文件数据块均被写入了本地磁盘,而B2的存储用量没有任何变化。

解决:B2存储配置有误,导致Seafile服务使用了本地存储。正确配置(seafile.conf)请参考下方:

# /opt/seafile-data/seafile/conf/seafile.conf

[fileserver]
port = 8082

[database]
# 参考官网,自行设置
# ... (数据库配置) ...

[notification]
# 参考官网,自行设置
# ... (通知服务配置) ...

[commit_object_backend]
name = s3
bucket = <commits-bucket-name>
host = <b2-s3-endpoint>
key_id = <commits-exclusive-key-id>
key = <commits-exclusive-key>
use_v4_signature = true
aws_region = <region-from-endpoint>
use_https = true

[fs_object_backend]
name = s3
bucket = <fs-bucket-name>
host = <b2-s3-endpoint>
key_id = <fs-exclusive-key-id>
key = <fs-exclusive-key>
use_v4_signature = true
aws_region = <region-from-endpoint>
use_https = true

[block_backend]
name = s3
bucket = <blocks-bucket-name>
host = <b2-s3-endpoint>
key_id = <blocks-exclusive-key-id>
key = <blocks-exclusive-key>
use_v4_signature = true
aws_region = <region-from-endpoint>
use_https = true

[memcached]
memcached_options = --SERVER=memcached --POOL-MIN=10 --POOL-MAX=100

Signature validation failed

问题:seafile网页版上传文件时显示ERROR,查看seafile日志发现Signature validation failed。这表明连接已成功建立,但在API认证环节失败。

2025-09-08 04:54:02 ../common/obj-backend-s3.c(355): Put object ... error 403. Response:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Error>
    <Code>AccessDenied</Code>
    <Message>Signature validation failed</Message>
</Error>
2025-09-08 04:54:02 repo-mgr.c(7655): Failed to add commit.

解决:采用的是AWS S3 v4的验证方式,Backblaze B2并不完全兼容。因此,在创建bucket时,应该为commits, fs, blocks三个Bucket分别创建三个独立的App Key,并确保每个Key的权限范围仅限于其对应的Bucket。

WebDAV 502 Bad Gateway

问题:Seafile安装后经测试上传没有问题,但在启用并配置了Seafile WebDAV服务后,所有通过反向代理访问WebDAV端点(https://example.com/seafdav)的请求,均收到502 Bad Gateway错误。

通过docker compose up启动Seafile时,Docker Compose默认会创建一个专用的、隔离的bridge网络(例如,名为seafile_seafile-net)。所有在docker-compose.yml中定义的服务(seafile, db, memcached)都会被加入到这个网络中,它们之间可以互相访问。与此同时,1Panel及其管理的OpenResty/Nginx服务,运行在另一个独立的Docker网络中(例如,1panel-network)。而不同自定义网络之间默认是互相隔离的,这造成不同服务之间无法通信。

一开始,在1Panel中为WebDAV配置的反向代理目标地址是http://127.0.0.1:8080,这个地址指向的是1Panel容器所在的网络命名空间或宿主机,取决于1Panel的网络模式。它无法穿透网络隔离,直接访问到seafile_seafile-net网络内部的seafile容器的8080端口。

解决:通过端口映射暴露服务

  1. 修改docker-compose.yml, 为seafile服务添加WebDAV端口的映射。
services:
  seafile:
    ports:
      - "10080:80"     # 主网站端口
      - "18080:8080"   # WebDAV端口 (宿主机18080 -> 容器8080)
  1. 更新反向代理配置,在1Nginx中,将WebDAV的proxy_pass目标地址修改为指向映射后的宿主机端口。
proxy_pass http://127.0.0.1:18080/seafdav/;
  1. 重启服务, 执行docker compose down && docker compose up -d以应用新的端口映射。

似乎也可以通过将容器加入共同网络来解决,但我还没试过。

0

评论

博主关闭了所有页面的评论