seafile 12.04 添加知识库新建页面报Internal Server Error

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

当前服务器版本

ubuntu24.04

部署/操作过程(请说明二进制部署/docker部署;出现错误的操作步骤)

docker-compose.yml

version: '3.7'

services:
  db:
    image: mariadb:10.11
    container_name: mysql
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - /opt/seafile/mysql/db:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - seafile-net

  memcached:
    image: memcached:1.6
    container_name: memcached
    restart: unless-stopped
    entrypoint: memcached -m 256
    networks:
      - seafile-net

  seafile:
    image: seafileltd/seafile-mc:12.0-latest
    container_name: seafile
    restart: unless-stopped
    volumes:
      - /opt/seafile/data:/shared
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=password
      - SEAFILE_ADMIN_EMAIL=me@example.com
      - SEAFILE_ADMIN_PASSWORD=asecret
      - JWT_PRIVATE_KEY=XI1Hso95wl7F0ImA5VakpfpjoHs7t0wa
      - SEAFILE_SERVER_PROTOCOL=https
      - SEAFILE_SERVER_HOSTNAME=seafile.example.cn
    depends_on:
      db:
        condition: service_healthy
      memcached:
        condition: service_started
    networks:
      - seafile-net
    labels:
      caddy: seafile.example.cn
      caddy.tls: "/data/caddy/certs/cert.pem /data/caddy/certs/key.pem"
      caddy.reverse_proxy: "{{upstreams 80}}"
      caddy.encode: gzip

  caddy:
    image: lucaslorentz/caddy-docker-proxy:2.9-alpine
    container_name: caddy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/seafile/caddy:/data/caddy
    restart: unless-stopped
    environment:
      - CADDY_INGRESS_NETWORKS=seafile-net
    networks:
      - seafile-net

networks:
  seafile-net:
    name: seafile-net
root@seafile:~# docker ps -a
CONTAINER ID   IMAGE                                        COMMAND                  CREATED       STATUS                 PORTS                                                                                    NAMES
0eea600bd5b8   seafileltd/seafile-mc:12.0-latest            "/sbin/my_init -- /s…"   2 weeks ago   Up 2 weeks             80/tcp                                                                                   seafile
08fb51c25bf7   memcached:1.6                                "memcached -m 256"       2 weeks ago   Up 2 weeks             11211/tcp                                                                                memcached
899d25663d8f   mariadb:10.11                                "docker-entrypoint.s…"   2 weeks ago   Up 2 weeks (healthy)   3306/tcp                                                                                 mysql
7633fabdd86b   lucaslorentz/caddy-docker-proxy:2.9-alpine   "/bin/caddy docker-p…"   2 weeks ago   Up 2 weeks             0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 2019/tcp   caddy

错误截图

错误日志

浏览器控制台错误信息(如果相关,请提供截图信息)

请求 URL:https://seafile.example.cn/api/v2.1/wiki2/3b950175-3216-486b-a386-0cd4363f9b36/pages/
请求方法:POST
状态代码:500 Internal Server Error
表单数据:page_name
Untitled
响应:{"error_msg":"Internal Server Error"}

控制台:

Failed to load resource: the server responded with a status of 500 ()
pages/:1   Failed to load resource: the server responded with a status of 500 ()
pages/:1   Failed to load resource: the server responded with a status of 500 ()
pages/:1   Failed to load resource: the server responded with a status of 500 ()
wiki2.38401870.js:2   POST https://seafile.example.cn/api/v2.1/wiki2/3b950175-3216-486b-a386-0cd4363f9b36/pages/ 500 (Internal Server Error)
(匿名) @ wiki2.38401870.js:2
xhr @ wiki2.38401870.js:2
Ot @ wiki2.38401870.js:2
value @ wiki2.38401870.js:2
(匿名) @ wiki2.38401870.js:2
p @ wiki2.38401870.js:2
(匿名) @ wiki2.38401870.js:2
(匿名) @ wiki2.38401870.js:2
r @ wiki2.38401870.js:2
s @ wiki2.38401870.js:2
(匿名) @ wiki2.38401870.js:2
(匿名) @ wiki2.38401870.js:2
(匿名) @ wiki2.38401870.js:2
(匿名) @ wiki2.38401870.js:2
(匿名) @ wiki2.38401870.js:2
value @ wiki2.38401870.js:2
value @ wiki2.38401870.js:2
n.handleAddNewPage @ wiki2.38401870.js:2
ze @ wiki2.38401870.js:2
Xe @ wiki2.38401870.js:2
(匿名) @ wiki2.38401870.js:2
Or @ wiki2.38401870.js:2
Sr @ wiki2.38401870.js:2
(匿名) @ wiki2.38401870.js:2
Me @ wiki2.38401870.js:2
(匿名) @ wiki2.38401870.js:2
Lr @ wiki2.38401870.js:2
$t @ wiki2.38401870.js:2
Zt @ wiki2.38401870.js:2
t.unstable_runWithPriority @ wiki2.38401870.js:2
Vi @ wiki2.38401870.js:2
Re @ wiki2.38401870.js:2
Qt @ wiki2.38401870.js:2

您好,

根据您提供的信息,浏览器请求 /api/v2.1/wiki2/.../pages/ 返回 HTTP 500,说明新建 Wiki 页面时服务端发生错误,需要结合 Seahub 日志进一步定位。

另外,您提供的 Docker Compose 配置中没有 SeaDoc 服务。Seafile 12.0 的新版 Wiki 需要 SeaDoc 支持,建议按以下步骤排查。

1. 查看 Seahub 错误日志

请先在网页中重新执行一次新建页面操作,然后在服务器上运行:

tail -n 150 /opt/seafile/data/seafile/logs/seahub.log

重点查看 wiki2、ERROR、Traceback 等相关错误信息。

此前官方 GitHub 有相同接口返回 500 的案例,Seahub 日志中出现了 Wrong boundary in url,因此需要先确认您的实际报错是否一致。

2. 检查 SeaDoc 服务

您当前的 docker-compose.yml 只包含 Seafile、MariaDB、Memcached 和 Caddy,没有配置 SeaDoc。

请访问:

https://seafile.example.cn/sdoc-server/

正常情况下,已正确部署并配置反向代理的 SeaDoc 会返回:

Welcome to sdoc-server

如果无法访问,需要按照 Seafile 12.0 官方文档部署 SeaDoc,并确认:

  • SeaDoc 与 Seafile 使用相同的 JWT_PRIVATE_KEY。
  • SeaDoc 与 Seafile 可以通过 Docker 网络正常通信。
  • Caddy 正确代理 /sdoc-server/ 和 /socket.io/。

官方文档:

https://manual.seafile.com/12.0/extension/setup_seadoc/

由于您使用的是自定义 Docker Compose 配置,添加 SeaDoc 时需要同步调整现有 Caddy 反向代理配置。

3. 提供进一步排查信息

如果配置好 SeaDoc 后仍然出现 HTTP 500,请提供以下信息:

  1. 新建页面时 seahub.log 中对应的完整错误。
  2. SeaDoc 服务运行状态及相关日志。
  3. 如果出现 Wrong boundary in url,请进一步检查 /seafhttp/ 的反向代理和文件服务配置。

目前可以确认 SeaDoc 组件缺失,但 POST 请求返回 500 的具体原因仍需要通过 Seahub 日志确定。请优先提供第一步的日志,以便进一步定位问题。

建议您重新部署新版seafile13.0,而不是使用旧版12.0

感谢给我提供了方向。:grinning_face: 谢谢!

13报的错误和12的基本上是一致的。基本上都落在了编辑或查看知识库上

请求网址:https://seafile.example.cn/sdoc-server/api/v1/docs/05d58d28-fcc5-42e8-9578-7d202a0340a4/
请求方法:GET
状态代码:500 Internal Server Error
请求网址:https://seafile.example.cn/api/v2.1/query-io-status/?task_id=f28d9177-64a8-403e-9a14-4090589e274d&task_type=import
请求方法:GET
状态代码:500 Internal Server Error

12支持删除知识库内的页面;13则去除了删除知识库页面;

在seadoc.yml和seafile-server.yml 中添加

dns:
  - 8.8.8.8
  - 1.1.1.1
extra_hosts:
  - "seafile.example.cn:xxx.xxx.xxx.xxx"

在seafile-server.yml中添加

labels:
  caddy.tls: "/data/caddy/certs/cert.pem /data/caddy/certs/key.pem"
  caddy.encode: gzip

准备证书:cert.pem和cert.key
创建目录:rm -rf /opt/seafile && mkdir -p /opt/seafile/caddy/certs
拷贝证书:
cp cert.pem /opt/seafile/caddy/certs/cert.pem
cp cert.key /opt/seafile/caddy/certs/key.pem

执行:docker-compose --env-file .env up -d

可以导入,创建编辑知识库