iOS版客户端(4.0.5)无法上传照片

请按照以下模版详细描述您遇到的问题:

当前服务器和客户端版本

服务器:Ubuntu 24.04 + Seafile 10.0.1
客户端:苹果手机客户端seafilePro 4.0.5

操作过程(出现错误的操作步骤)

打开某文件夹,选上传图片,选择图库里的图片,一直显示上传过程。。。
进度条走满又重新开始走(一直循环),登录网页端查看,图片没有上传上去。
网页版(电脑和手机)就一直正常,可以上传。

错误截图

错误日志

您好,seafile服务端10版本已经停止支持,请您升级到13版本后再尝试用手机客户端上传,建议您逐个版本升级,从10到11再升级到12最后升级到13,升级前请做好数据备份,
10升级11文档:https://manual.seafile.com/13.0/upgrade/upgrade_docker/#upgrade-from-100-to-110
11升级12文档:https://manual.seafile.com/13.0/upgrade/upgrade_docker/#upgrade-from-110-to-120
12升级13文档:https://manual.seafile.com/13.0/upgrade/upgrade_docker/#upgrade-from-120-to-130

你好,我的服务器已经用Docker部署了Nginx,MariaDB,在这种情况下,要怎样用Docker安装Seafile13?

您可以选择从文档中单独下载seafile的.env文件以及docker yml配置文件,移除其中不必要的配置项,例如caddy相关配置,seadoc如果不需要也可以移除相关配置,相对比较麻烦一点;

或者您可以参考下面的步骤手动部署,中间配置可能需要手动修改,假设您的数据库和 nginx都是docker部署的,仅供参考:

在已有 Nginx 和 MariaDB 容器的 Docker 环境下安装 Seafile,主要的思路是:共享 Docker 网络、去掉 Seafile 自带的数据库容器,并将现有 Nginx 反向代理至 Seafile 容器

以下是具体的安装步骤:

1. 确保容器在同一个 Docker 网络

为了让 Seafile 容器能够使用容器名直接访问 MariaDB,并让 Nginx 能够将流量转发给 Seafile,最简单的方式是将它们连接到同一个自定义网络。

假设你创建一个名为 web-network 的网络:

docker network create web-network

# 将你现有的 MariaDB 和 Nginx 容器接入该网络
docker network connect web-network <你的MariaDB容器名>
docker network connect web-network <你的Nginx容器名>

2. 编写 Seafile 的 docker-compose.yml

创建一个专属于 Seafile 的目录,并编写 docker-compose.yml。在这里我们要去除官方默认配置里的 db (MariaDB) 部分,仅保留 memcachedseafile 服务。

version: '3.0'
services:
  memcached:
    image: memcached:1.6.29
    entrypoint: memcached -m 256
    networks:
      - web-network

  seafile:
    image: seafileltd/seafile-mc:latest # 注意:请视情况修改此处为你需要的具体版本 tag (如 13.0-latest)
    container_name: seafile
    environment:
      - DB_HOST=<你的MariaDB容器名>                # 替换为已有的 MariaDB 容器名称
      - DB_ROOT_PASSWD=<你的MariaDB_root密码>       # 提供 root 密码,Seafile 首次启动时会自动创建所需的3个数据库
      - TIME_ZONE=Asia/Shanghai
      - SEAFILE_ADMIN_EMAIL=admin@example.com     # 初始管理员账号
      - SEAFILE_ADMIN_PASSWORD=your_password      # 初始管理员密码
      - SEAFILE_SERVER_LETSENCRYPT=false          # SSL 证书交由外部 Nginx 处理,此处设为 false
      - SEAFILE_SERVER_HOSTNAME=seafile.yourdomain.com # 修改为你的实际访问域名
    volumes:
      - /opt/seafile-data:/shared                 # Seafile 数据挂载目录
    networks:
      - web-network
    depends_on:
      - memcached

networks:
  web-network:
    external: true

注:Seafile 需要 ccnet_db, seafile_db, seahub_db 这三个数据库。如果不想提供 root 密码,也可以在 MariaDB 提前手动建库,并通过设置 DB_USERDB_PASSWORD 环境变量来连接。

上面的配置可能不全面,请您对照13.0官方yml文件进行增加或修改:

https://manual.seafile.com/13.0/repo/docker/ce/seafile-server.yml

3. 配置现有的 Nginx (反向代理)

由于 Seafile 官方的 Docker 镜像内部已经集成了一个处理路由的 Nginx(会将内部流量转发给 Seafile 进程和 Seahub 服务),所以你外部的 Nginx 只需要进行简单的全量反向代理即可。

在你的 Nginx 配置目录(如 conf.d/)中新建 seafile.conf

server {
    listen 80; #根据实际端口占用情况修改
    server_name seafile.yourdomain.com; # 你的 Seafile 域名
    
    # 强制跳转 HTTPS(前提是你在 Nginx 配置了 SSL)
    # return 301 https://$host$request_uri;

    location / {
        # 直接将流量转发给 Seafile 容器的 80 端口
        proxy_pass         http://seafile:80;
        
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto $scheme;
        
        # Seafile 需要大文件支持,调整超时时间和大小限制
        proxy_read_timeout  1200s;
        client_max_body_size 0; 
    }
}

# (如果有 SSL 证书,再增加一个监听 443 的 server 块,并将上述 location / 的内容复制进去)

重启或重载你的 Nginx 容器使配置生效:

docker exec -it <你的Nginx容器名> nginx -s reload

4. 启动 Seafile

docker-compose.yml 所在的目录,拉取镜像并启动:

docker-compose up -d

你可以通过 docker logs -f seafile 查看日志。第一次启动需要初始化数据库,当看到终端日志不再滚动或者提示服务已经启动时,即可通过浏览器访问 seafile.yourdomain.com 测试是否安装成功。

非常感谢!我目前的Seafile 10 是通过安装文件用docker build生成的自制镜像。服务器里的所有跟Seafile服务器相关的文件都映射到了服务器本地硬盘(包括存储的数据,用的是SQLite)。在这种情况,要怎样启用新的Seafile13 镜像以及转移数据和服务器的设置(可以的话优先使用SQLite)?

关于数据的转移和备份请您参考官方文档:

https://manual.seafile.com/11.0/maintain/backup_recovery/

SQLite早已经停止支持,请使用文档中的两个脚本以便导出数据库并迁移到MySQL或MariaDB:

https://manual.seafile.com/11.0/deploy/migrate_from_sqlite_to_mysql/

你好,正在安装Seafile 13,Nginx配置中,已经不需要下面的location了吗?
location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://seafile:8082;

}
location /seafdav {
rewrite ^/seafdav$ /seafdav/ permanent;
}

location /seafdav/ {
    proxy_pass http://seafile:8080/seafdav/;
    proxy_set_header Host $host;
    。。。。

请参考文档

https://cloud.seafile.com/wiki/publish/seafile-manual/op3W/

你好,Seafile13安装好了,并且用现有的Nginx反代,发现以下几个问题:
1,电脑端可以上传,但无法下载(无论是IP:端口,还是网址登录)
2,iOS版还是无法上传文件(跟之前一样,来回循环,卸载后重装问题依旧,版本:4.0.5)
3,Seafile13 在网页上无法上传文件,提示网络错误。
Docker compose文件如下:
services:
seafiledb:
image: cowade/maria1011
container_name: seafiledb
restart: always
environment:
MARIADB_ROOT_PASSWORD_FILE: /var/composepass
TZ: Asia/Shanghai
volumes:
- seafiledb:/var/lib/mysql
#- ./mariadb_config:/etc/mysql/conf.d
- ../mysql/composepass.txt:/var/composepass
- ../mysql/backups:/backups
networks:
- webnet

redis4seafile:
image: ${SEAFILE_REDIS_IMAGE:-redis}
container_name: redis4seafile
restart: always
command:
- /bin/sh
- -c
- exec redis-server --requirepass “$$REDIS_PASSWORD” --save “” --appendonly no
environment:
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
networks:
- webnet

seafile13:
image: ${SEAFILE_IMAGE:-seafileltd/seafile-mc:13.0-latest}
container_name: seafile13
restart: unless-stopped
ports:
- “8001:80”
volumes:
- /mnt/dk/sf13:/shared
environment:
- SEAFILE_MYSQL_DB_HOST=${SEAFILE_MYSQL_DB_HOST:-db}
- SEAFILE_MYSQL_DB_PORT=${SEAFILE_MYSQL_DB_PORT:-3306}
- SEAFILE_MYSQL_DB_USER=${SEAFILE_MYSQL_DB_USER:-seafile}
- SEAFILE_MYSQL_DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD:?Variable is not set or empty}
- INIT_SEAFILE_MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD:-}
- SEAFILE_MYSQL_DB_CCNET_DB_NAME=${SEAFILE_MYSQL_DB_CCNET_DB_NAME:-ccnet_db}
- SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=${SEAFILE_MYSQL_DB_SEAFILE_DB_NAME:-seafile_db}
- SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME:-seahub_db}
- TIME_ZONE=${TIME_ZONE:-Etc/UTC}
- INIT_SEAFILE_ADMIN_EMAIL=${INIT_SEAFILE_ADMIN_EMAIL:-me@example.com}
- INIT_SEAFILE_ADMIN_PASSWORD=${INIT_SEAFILE_ADMIN_PASSWORD:-asecret}
- SEAFILE_SERVER_HOSTNAME=${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}
- SEAFILE_SERVER_PROTOCOL=${SEAFILE_SERVER_PROTOCOL:-http}
- SITE_ROOT=${SITE_ROOT:-/}
- NON_ROOT=${NON_ROOT:-false}
- JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY:?Variable is not set or empty}
- SEAFILE_LOG_TO_STDOUT=${SEAFILE_LOG_TO_STDOUT:-false}
- ENABLE_GO_FILESERVER=${ENABLE_GO_FILESERVER:-true}
- ENABLE_SEADOC=${ENABLE_SEADOC:-false}
- SEADOC_SERVER_URL=${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}/sdoc-server
- CACHE_PROVIDER=${CACHE_PROVIDER:-redis}
- REDIS_HOST=${REDIS_HOST:-redis}
- REDIS_PORT=${REDIS_PORT:-6379}
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
- MEMCACHED_HOST=${MEMCACHED_HOST:-memcached}
- MEMCACHED_PORT=${MEMCACHED_PORT:-11211}
- ENABLE_NOTIFICATION_SERVER=${ENABLE_NOTIFICATION_SERVER:-false}
- INNER_NOTIFICATION_SERVER_URL=${INNER_NOTIFICATION_SERVER_URL:-http://notification-server:8083}
- NOTIFICATION_SERVER_URL=${NOTIFICATION_SERVER_URL:-${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}/notification}
- ENABLE_SEAFILE_AI=${ENABLE_SEAFILE_AI:-false}
- ENABLE_FACE_RECOGNITION=${ENABLE_FACE_RECOGNITION:-false}
- SEAFILE_AI_SERVER_URL=${SEAFILE_AI_SERVER_URL:-http://seafile-ai:8888}
- SEAFILE_AI_SECRET_KEY=${JWT_PRIVATE_KEY:?Variable is not set or empty}
- MD_FILE_COUNT_LIMIT=${MD_FILE_COUNT_LIMIT:-100000}
depends_on:
- seafiledb
# condition: service_healthy
- redis4seafile
# condition: service_started
networks:
- webnet

volumes:
seafiledb:

networks:
webnet:
external: true

.env文件如下:
#################################

Docker compose configurations

#################################
COMPOSE_FILE=‘seafile-server.yml’
COMPOSE_PATH_SEPARATOR=‘,’

Images

SEAFILE_IMAGE=seafileltd/seafile-mc:13.0.25
SEAFILE_DB_IMAGE=cowade/maria1011:latest
SEAFILE_REDIS_IMAGE=redis
NOTIFICATION_SERVER_IMAGE=seafileltd/notification-server:13.0-latest
MD_IMAGE=seafileltd/seafile-md-server:13.0-latest

Persistent Storage

BASIC_STORAGE_PATH=/opt
SEAFILE_VOLUME=$BASIC_STORAGE_PATH/seafile-data
SEAFILE_MYSQL_VOLUME=$BASIC_STORAGE_PATH/seafile-mysql/db

#################################

Startup parameters

#################################
SEAFILE_SERVER_HOSTNAME=xxx.xxxxxtronics.com
SEAFILE_SERVER_PROTOCOL=http
TIME_ZONE=Asia/Shanghai
JWT_PRIVATE_KEY=9fd91824a2e0b8d9e3d0d5

#####################################

Third-party service configuration

#####################################

Database

SEAFILE_MYSQL_DB_HOST=seafiledb
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=xxxxxx
SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db

Cache

CACHE_PROVIDER=redis # or memcached

Redis

REDIS_HOST=redis4seafile
REDIS_PORT=6379
REDIS_PASSWORD=

Memcached

MEMCACHED_HOST=memcached
MEMCACHED_PORT=11211

######################################

Initial variables

(Only valid in first-time startup)

######################################

Database root password, Used to create Seafile users

INIT_SEAFILE_MYSQL_ROOT_PASSWORD=xxxxxx

Seafile admin user

INIT_SEAFILE_ADMIN_EMAIL=xxxxwade@qq.com
INIT_SEAFILE_ADMIN_PASSWORD=xxxxxx

############################################

Additional configurations for extensions

############################################

SeaDoc service

ENABLE_SEADOC=false

Notification

ENABLE_NOTIFICATION_SERVER=false
NOTIFICATION_SERVER_URL=

Seafile AI

ENABLE_SEAFILE_AI=false
ENABLE_FACE_RECOGNITION=false
SEAFILE_AI_LLM_TYPE=openai
SEAFILE_AI_LLM_URL=
SEAFILE_AI_LLM_KEY= # your llm key
SEAFILE_AI_LLM_MODEL=gpt-4o-mini

Metadata server

MD_FILE_COUNT_LIMIT=100000
请帮忙分析下是什么原因,,十分感谢 。

需要具体日志才能分析问题,请发送服务端容器挂载宿主机目录下的/seafile-data/seafile/logs中的日志文件,可以以压缩包形式上传到下述链接中,链接有效期为一天:

https://cloud.seafile.com/d/ab0b5bf8c5664af0af8d/

你好,日志已经上传,请帮忙查看。

文件名:Stucowade的SF13_logs.zip

从日志分析,问题出在nginx反代环节,请上传您的nginx反代配置文件以及nginx的日志文件以便帮您分析;或者您可以自行排查nginx中关于/seafhttp的配置是否有问题。

反代配置文件和Nginx日志已经上传,文件名:

| [

Stucowade的SF13_logs.zip

PS:我用IP:端口登录上去,同样是无法上传文件(提示:网络错误)

您.env中绑定的host是域名地址,则不能通过ip地址来上传文件,后端文件系统绑定的是.env中的域名
您nginx配置中的下面配置有误:

rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://seafile13:8082;

这套写法是官方文档中“Nginx 与 fileserver 在同一主机/同一网络空间,直接访问 127.0.0.1:8082”时的配置。

但你的 Seafile 13 是 Docker 部署,且容器日志明确表明:

  • 容器内部对外接受 /seafhttp/...,再转发到容器内部的 127.0.0.1:8082
  • 新log/seafhttp.error.log:1-8 中,容器内访问 127.0.0.1:8082 被拒绝,产生 502;这是 Seafile 服务刚启动时的阶段性现象。
  • 新log/fileserver.log:1-2 表示 fileserver 到 16:17:22 才启动。
  • 服务启动后又有 444,见 新log/seafhttp.access.log:10444 代表 Nginx 主动关闭连接,不是 Seafile fileserver 的正常响应。

外层 Nginx 不应自行去掉 /seafhttp 前缀、直接访问容器的 8082。它应该和 / 一样,将原始 /seafhttp 请求转发至 Seafile 容器的 HTTP 入口 seafile13:80,由容器内 Nginx 完成正确的转发。

这也是网页、iOS、桌面客户端下载共享的故障点:

  • 网页已成功获取上传链接,见 新log/seahub.access.log:24,但文件实际上传阶段失败;
  • iOS 上传及桌面客户端下载均使用 /seafhttp
  • 所以改 App、重新安装或换 IP 登录均无法根治。

请您将nginx配置中的location /seafhttp完整替换为下面的:

location /seafhttp {
    # 保留 /seafhttp 前缀,转给 Seafile 容器内的 Nginx。
    # 不要 rewrite,也不要直接访问容器的 8082。
    proxy_pass http://seafile13:80;

    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Proto https;

    client_max_body_size 0;
    proxy_connect_timeout 36000s;
    proxy_read_timeout 36000s;
    proxy_send_timeout 36000s;
    send_timeout 36000s;

    proxy_request_buffering off;
    proxy_buffering off;

    error_log /var/log/nginx/seafhttp.error.log;
}

然后重载nginx:

nginx -t
nginx -s reload

如果是docker部署的nginx则:

docker exec <nginx-容器名> nginx -t
docker exec <nginx-容器名> nginx -s reload

十分感谢你的耐心解答,改了location /seafhttp后,Nginx test is OK,…Successful,但问题并没有解决(跟之前症状一样:网页无法上传,通过桌面客户端可以上传,但是网页上无法下载(转了一圈后什么都没发生),手机端上传反复跑进度条)。

试过删除浏览器缓存,问题依旧。

对了,刚刚发给你的是外层的Nginx容器的日志,需要我把Seafile13容器里的Nginx日志发给你吗?

如果需要,请告知它的存放目录,谢谢。

seafile镜像内部并没有nginx,我发表的言论意思是nginx容器对seafile容器内部的127.0.0.1:8082访问被拒绝,我认为是您的配置有一些问题,建议您重新从头开始部署,仔细对照文档,尽量使用标准化配置部署,不要随意修改端口,配置文档:

https://cloud.seafile.com/wiki/publish/seafile-manual/7Lj3/

谢谢。重新下载了.env文件和seafile-server.yml文件,作了少量改动:
1,.env文件的COMPOSE_FILE=‘seafile-server.yml’,删掉caddy和seadoc.yml.
2,.env文件改了域名,邮箱,密码等。
3, .env文件改用了MariadB 镜像,版本为10.11.18
4,seafile-server.yml文件改用已经自定义的网络,Mysql数据映射了一个命名卷。
其它基本没动,按流程走了一次,问题还是没解决。
想问下,社区版的Seafile10.0 可以用S3存储吗?要怎样设置?谢谢

问题解决了!

刚浏览器F12查看了下,发现请求网址是http://…..但我的Nginx是重定向到https://的

所以。。。猜想也许Nginx跟Caddy处理SSL的方式不一样,试着在.env文件里把SEAFILE_SERVER_PROTOCOL=http改为SEAFILE_SERVER_PROTOCOL=https。

然后,网页版可以上传了,也可以下载了,手机版也可以正常上传。

只是不知道会不会有其它隐患,请帮忙评估一下。@LRQ

您可以参考11版本的s3存储配置:

https://manual.seafile.com/11.0/deploy_pro/setup_with_amazon_s3

没有隐患,本来就是应该修改为https,如果您使用了https,后端文件系统访问也需要重定向到https才能正常访问,如果.env文件中设置http,则seafile会重定向到http;您也可以在nginx中设置强制重定向到https解决这个问题;我之前没看仔细忽略了这一点,解决了就好,有问题再联系