Ubuntu 22.04 安装 Seafile 指南

在 Ubuntu 22.04.5 上从零安装 Seafile CE 12.0.14 的完整实测指南:系统依赖与 MariaDB 初始化、官方 tar 包下载校验、auto 非交互与交互向导两种安装模式、JWT 私钥与 Python 依赖、管理员创建、systemd 托管、升级与多版本管理,附 11 条实测排障 FAQ 与卸载清理。

SeafileSeafileUbuntuMariaDB2026/10/22

Ubuntu 22.04 安装 Seafile 指南

目标:在 Ubuntu 22.04.5 LTS 服务器上从零安装 Seafile 社区版(CE)12.0.14:系统依赖 → MariaDB 初始化 → 官方 tar 包下载校验 → auto 非交互安装(主线)/ 交互向导安装(备选)→ JWT 私钥与 Python 依赖 → 首次启动并创建管理员 → 服务验证 → systemd 托管 → 升级与多版本管理 → 常见问题与卸载清理。已在 Ubuntu 22.04.5(x86_64)+ Seafile CE 12.0.14 + MariaDB 10.6.23 环境逐条实测通过,全部命令与回显为真实记录。

一、环境信息

本章列出本篇实测环境的完整基线,读者按同版本操作可逐行复现:

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • Seafile:社区版(CE)12.0.14,安装包 seafile-server_12.0.14_x86-64.tar.gz(官网下载页 2026-10-22 实查的当前稳定包)
  • 数据库:MariaDB 10.6.23(Ubuntu 22.04 官方源,包版本 10.6.23)
  • 运行时:Python 3.11(apt 包 python3.11,版本 3.11.0~rc1-1~22.04.1)
  • 演示服务器地址:http://10.89.59.2
  • 端口:Seahub 8130(默认 8000,实测环境因端口冲突改绑)、FileServer 8131(默认 8082,同因冲突改绑)
  • 安装根目录:/opt/seafile(数据、配置、日志均在其下)
  • 账号约定:MariaDB root 密码 q1w2e3r4;Seafile 数据库用户 seafile/q1w2e3r4(host 127.0.0.1);Seahub 管理员 admin@seafile.local/q1w2e3r4

二、前置条件

2.1 服务器要求

本章确认动手前的硬件与权限要求:

  • 建议 2 核 CPU、2GB 内存起步(Seafile 服务端组件较多,含 5 个 gunicorn worker 与存储引擎进程);
  • 磁盘按实际文件存储量预留,文件块默认落 /opt/seafile/seafile-data; -具备 root 或 sudo 权限;能访问互联网(下载安装包与 Python 依赖)。

2.2 更新系统与基础工具

先更新软件源索引并确认基础工具就绪(实测回显):

apt update

输出节选(实测首尾):

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
...
Reading package lists... Done
apt-get install -y python3.11

输出节选(实测,说明 22.04 官方源已带 python3.11):

Reading state information...
python3.11 is already the newest version (3.11.0~rc1-1~22.04.1).
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

三、版本选型说明

3.1 版本现状

本章先定版本。Seafile 分社区版(CE)与专业版(Pro)两条产品线,本篇安装 CE 12.0.14——官网下载页当前提供的稳定捆绑包(2026-10-22 实查),下载地址:

https://package.seafile.com/seafile-server_12.0.14_x86-64.tar.gz

⚠️ 注意:GitHub 源码仓库 haiwen/seafile 的 tag 序列(v9.0.x)与官网捆绑包版本号(12.0.x)是两套编号,不要混用;选型一律以官网下载页为准。版本背景详见 《Seafile 介绍与选型指南》。

3.2 组件版本对照表

组件实测版本来源
Seafile CE 服务端12.0.14官网下载页(2026-10-22)
python3.113.11.0rc1-122.04.1Ubuntu 22.04 官方源
MariaDB10.6.23Ubuntu 22.04 官方源
Django(seahub 依赖)4.2.30seahub/requirements.txt 安装(Django==4.2.*)
SQLAlchemy(seafevents 依赖)2.0.55seafevents/requirements.txt 安装(SQLAlchemy==2.0.*)
seafile-cli(客户端,可选)8.0.5-1官方 deb 源 linux-clients.seafile.com

关键差异解读:服务端必须用 Python 3.11 运行 seahub(Ubuntu 22.04 默认 python3 是 3.10,直接启动会缺依赖,见 4.8 与常见问题);数据库选 MariaDB 10.6 即满足要求,无需更高版本。

3.3 多版本与升级管理

Seafile 服务端以「目录 + 符号链接」做多版本管理(实测目录结构):

ls -l /opt/seafile/seafile-server-latest
lrwxrwxrwx 1 root root 22 Oct 22 01:57 /opt/seafile/seafile-server-latest -> seafile-server-12.0.14

安装包解压后版本目录内自带升级脚本(实测清单):

ls /opt/seafile/seafile-server-12.0.14/upgrade/
db_update_helper.py
minor-upgrade.sh
sql
upgrade_10.0_11.0.sh
upgrade_11.0_12.0.sh
upgrade_6.0_6.1.sh
upgrade_6.1_6.2.sh
upgrade_6.2_6.3.sh
upgrade_6.3_7.0.sh
upgrade_7.0_7.1.sh
upgrade_7.1_8.0.sh
upgrade_8.0_9.0.sh
upgrade_9.0_10.0.sh

要点:小版本升级(如 12.0.x → 12.0.y)用 minor-upgrade.sh;跨大版本按 upgrade_<源>_<目标>.sh 逐级执行,每级还需按官方手册更新符号链接与依赖;升级前务必备份 /opt/seafile 数据目录与三个数据库。

四、方案 A:官方 tar 包 + MariaDB(auto 非交互安装,推荐主线)

4.1 方案说明

本方案是 Seafile 官方安装脚本 setup-seafile-mysql.sh 的 auto 模式:一条命令带全部参数,无任何交互提问,适合脚本化部署与重复安装。完成后手动补 JWT 私钥与 Python 依赖,再用 systemd 托管。下文 4.2–4.11 为完整 0→1 流程。

4.2 安装系统依赖

一次装齐 Python 3.11、MariaDB 与后续编译 pylibmc 所需的开发库(实测回显):

apt-get install -y python3.11 mariadb-server pkg-config libjpeg8-dev zlib1g-dev libldap2-dev libsasl2-dev libmemcached-dev gcc

输出节选(实测,全新环境会逐个安装;已安装的组件显示如下):

libldap2-dev is already the newest version (2.5.20+dfsg-0ubuntu0.22.04.1).
libsasl2-dev is already the newest version (2.1.27+dfsg2-3ubuntu1.2).
zlib1g-dev is already the newest version (1:1.2.11.dfsg-2ubuntu9.2).
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

4.3 初始化 MariaDB

启动并设置自启,验证状态(实测回显):

systemctl enable --now mariadb.service
systemctl is-active mariadb.service
systemctl is-enabled mariadb.service
active
enabled

把 root 认证方式改为密码方式并设置密码(执行后无回显):

mariadb -h127.0.0.1 -uroot -e "ALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD('q1w2e3r4'); FLUSH PRIVILEGES;"

验证账号与认证插件(实测回显):

mariadb -h127.0.0.1 -uroot -pq1w2e3r4 -e "SELECT User,Host,plugin FROM mysql.user WHERE User IN ('root','seafile');"
User    Host    plugin
root    localhost       mysql_native_password
seafile 127.0.0.1       mysql_native_password

⚠️ 注意:Seafile 安装脚本创建的数据库用户 host 是 127.0.0.1,因此后续所有数据库操作都要带 -h127.0.0.1;不带 host 默认走 socket 登录会报 Access denied(属正常现象,见常见问题 Q11)。

4.4 下载与校验安装包

下载官方包并校验完整性(实测包大小约 75 MB):

wget https://package.seafile.com/seafile-server_12.0.14_x86-64.tar.gz

下载完成后的校验(实测回显):

sha256sum seafile-server_12.0.14_x86-64.tar.gz
af454c84234e787d2a0b0adbf73ecdc866198d7401ebcff2f20fe00457634f4b  seafile-server_12.0.14_x86-64.tar.gz

4.5 解压与目录规划

创建安装根目录并解压(实测环境把包与解压目录统一放 /opt/seafile):

mkdir -p /opt/seafile
tar -xzf seafile-server_12.0.14_x86-64.tar.gz -C /opt/seafile

确认解压产物(实测回显):

ls /opt/seafile/
ccnet
conf
logs
pids
pro-data
seafile-data
seafile-server-12.0.14
seafile-server-latest
seafile-server_12.0.14_x86-64.tar.gz
seahub-data

💡 说明:ccnet/conf/logs/pids/pro-data/seafile-data/seahub-data 是安装脚本执行后才生成的运行目录;解压后初始只有 seafile-server-12.0.14 版本目录(安装脚本会自动创建 seafile-server-latest 符号链接)。

4.6 auto 模式一键安装

先确认 auto 模式参数表(脚本 setup-seafile-mysql.py 内的 argparse 定义,实测提取):

参数含义本例取值
-n / --server-name服务器名称seafile
-i / --server-ip服务器 IP 或域名10.89.59.2
-p / --fileserver-portFileServer 端口8131(默认 8082,因端口冲突改绑)
-d / --seafile-dir文件数据目录/opt/seafile/seafile-data
-e / --use-existing-db是否使用已存在的库:0 新建库,1 用现有库0
-o / --mysql-host数据库地址127.0.0.1
-t / --mysql-port数据库端口3306
-u / --mysql-userSeafile 使用的数据库用户名seafile(脚本自动创建)
-w / --mysql-user-passwd该用户的密码q1w2e3r4
-q / --mysql-user-host数据库用户的 host(可选)省略(默认 127.0.0.1)
-r / --mysql-root-passwdroot 密码(用于建库建用户)q1w2e3r4
-c / --ccnet_dbccnet 库名ccnet_db
-s / --seafile_dbseafile 库名seafile_db
-b / --seahub_dbseahub 库名seahub_db

执行安装(进入版本目录运行,实测命令):

cd /opt/seafile/seafile-server-12.0.14
./setup-seafile-mysql.sh auto -n seafile -i 10.89.59.2 -p 8131 -d /opt/seafile/seafile-data -e 0 -o 127.0.0.1 -t 3306 -u seafile -w q1w2e3r4 -r q1w2e3r4 -c ccnet_db -s seafile_db -b seahub_db

成功时汇总输出(实测节选):

Your seafile server configuration has been finished successfully.

确认配置产物(实测回显):

ls -la /opt/seafile/conf/
total 36
drwxr-xr-x  3 root root 4096 Oct 22 02:21 .
drwxr-xr-x 10 root root 4096 Oct 22 02:12 ..
-rw-r--r--  1 root root   61 Oct 22 02:12 .env
drwxr-xr-x  2 root root 4096 Oct 22 02:21 __pycache__
-rw-r--r--  1 root root  379 Oct 22 02:21 gunicorn.conf.py
-rw-r--r--  1 root root   53 Oct 22 02:12 seafdav.conf
-rw-r--r--  1 root root  392 Oct 22 02:12 seafevents.conf
-rw-r--r--  1 root root  207 Oct 22 02:22 seafile.conf
-rw-r--r--  1 root root  400 Oct 22 02:21 seahub_settings.py

⚠️ 注意:重复运行 setup 脚本会覆盖 conf/ 下的配置(实测 SECRET_KEY、SERVICE_URL、gunicorn 的 bind 都会被重新生成还原为默认值),已定制过配置的环境不要重复执行 setup;确实需要重跑时,先备份 conf/。

4.7 生成 JWT 私钥

12.0 起服务端启动时强制要求 JWT 私钥。缺失时启动脚本报错(实测报错回显):

Cannot find JWT_PRIVATE_KEY value from environment, try to read .env file.

生成密钥并写入 /opt/seafile/conf/.env(实测命令,值为本环境实测生成结果):

echo "JWT_PRIVATE_KEY=$(openssl rand -base64 32)" > /opt/seafile/conf/.env
cat /opt/seafile/conf/.env
JWT_PRIVATE_KEY=HNNLecIRG1AK4Xg8esHdgNA1kMvTBvDSJoHztX23TM0=

⚠️ 注意:.env 必须放在 /opt/seafile/conf/ 目录下(12.0 的集中配置目录),放在 /opt/seafile/ 根目录无效;上面回显中的密钥是演示环境实测值,生产环境必须用命令重新生成自己的随机值。

4.8 安装 Python 依赖

seahub 与 seafevents 需要安装各自的 Python 依赖(必须用 python3.11 的 pip 安装,实测命令):

python3.11 -m pip install -r /opt/seafile/seafile-server-12.0.14/seahub/requirements.txt
python3.11 -m pip install -r /opt/seafile/seafile-server-12.0.14/pro/python/seafevents/requirements.txt
python3.11 -m pip install pylibmc tzdata

依赖清单要点(实测安装结果):seahub 的 requirements 含 Django==4.2.* 等 26 项;seafevents 的 requirements 含 SQLAlchemy==2.0.*、redis==5.0.*、gevent==24.2.*、scikit-learn==1.3.* 等;pylibmc 需要编译(前置的 libmemcached-dev 在 4.2 已装);tzdata 缺失时启动报 ZoneInfoNotFoundError(见常见问题 Q5)。

安装结果验证(实测回显):

python3.11 -m pip show django | head -2
python3.11 -m pip show SQLAlchemy | head -2
Name: Django
Version: 4.2.30
Name: SQLAlchemy
Version: 2.0.55

⚠️ 排障实录:若直接用默认 python3(3.10)启动 seahub,seahub.log 会报 ModuleNotFoundError: No module named 'sqlalchemy'——因为依赖装在 3.11 下。解决方式:启动时传 PYTHON=/usr/bin/python3.11(4.11 的 systemd 单元已含该变量),或将系统默认 python3 切到 3.11(见 4.12)。

4.9 首次启动与创建管理员

先启动存储引擎(实测回显,restart 会走同样的 start 流程):

cd /opt/seafile/seafile-server-latest
./seafile.sh restart
Stopping seafile server ...
Cannot find JWT_PRIVATE_KEY value from environment, try to read .env file.
Starting seafile server, please wait ...
Seafile server started

Done.

⚠️ 排障实录:若 .env 放错位置(不在 conf/ 下),上面的 Cannot find JWT_PRIVATE_KEY ... 行仍会出现且后续 seahub 起不来;确认 cat /opt/seafile/conf/.env 有值后重启即可。

再启动 seahub。首次启动会进入交互式管理员创建(实测回显,问题原文):

./seahub.sh start
Starting seahub at port 8000 ...

----------------------------------------
It's the first time you start the seafile server. Now let's create the admin account
----------------------------------------

What is the email for the admin account?
[ admin email ]
What is the password for the admin account?
[ admin password ]
Enter the password again:
[ admin password again ]

逐项输入(本例实测取值):

  1. admin email:admin@seafile.local
  2. admin password:q1w2e3r4
  3. password again:q1w2e3r4

成功回显(实测):

Successfully created seafile admin

随后 gunicorn 起动(实测回显节选):

Listening at: http://0.0.0.0:8130

💡 说明:首次启动回显中的 Starting seahub at port 8000 ... 是改绑前的默认端口;本系列实测环境随后按第七章 7.2 改绑为 8130,上面 Listening at: http://0.0.0.0:8130 为改绑后的实测回显。

💡 说明:以上交互过程也可用管道喂入三行答案一次完成:printf 'admin@seafile.local\nq1w2e3r4\nq1w2e3r4\n' | ./seahub.sh start。若创建管理员时报 Error happened during creating seafile admin.,是数据库授权缺失所致,见常见问题 Q3。

4.10 验证服务

三重验证:控制面探针、登录页、端口监听(均为实测回显):

curl -s http://127.0.0.1:8130/api2/ping/
"pong"
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8130/accounts/login/
200
ss -tlnp | grep -E ':(8130|8131)'
LISTEN 0      2048         0.0.0.0:8130       0.0.0.0:*    users:(("python3.11",pid=8483,fd=11),("python3.11",pid=8480,fd=11),("python3.11",pid=8479,fd=11),("python3.11",pid=8478,fd=11),("python3.11",pid=8477,fd=11),("python3.11",pid=8463,fd=11))
LISTEN 0      128          0.0.0.0:8131       0.0.0.0:*    users:(("seaf-server",pid=8321,fd=10))

浏览器访问 http://10.89.59.2:8130 用 admin@seafile.local/q1w2e3r4 登录即完成安装。

4.11 systemd 托管

写入两个单元文件(实测环境内容,原文照录):

/etc/systemd/system/seafile.service:

[Unit]
Description=Seafile Server
After=network.target mariadb.service

[Service]
Type=oneshot
ExecStart=/opt/seafile/seafile-server-latest/seafile.sh start
ExecStop=/opt/seafile/seafile-server-latest/seafile.sh stop
ExecReload=/opt/seafile/seafile-server-latest/seafile.sh restart
RemainAfterExit=yes
User=root
Group=root

[Install]
WantedBy=multi-user.target

/etc/systemd/system/seahub.service:

[Unit]
Description=Seafile Hub
After=network.target seafile.service

[Service]
Type=oneshot
Environment=PYTHON=/usr/bin/python3.11
ExecStart=/opt/seafile/seafile-server-latest/seahub.sh start
ExecStop=/opt/seafile/seafile-server-latest/seahub.sh stop
RemainAfterExit=yes
User=root
Group=root

[Install]
WantedBy=multi-user.target

💡 说明:Type=oneshot + RemainAfterExit=yes 适配 seahub/seafile 脚本「启动后退出、由守护进程常驻」的行为;Environment=PYTHON=/usr/bin/python3.11 保证 seahub 用 3.11 运行。

启用并启动(逐个单元执行,实测回显):

systemctl daemon-reload
systemctl enable seafile.service
Created symlink /etc/systemd/system/multi-user.target.wants/seafile.service → /etc/systemd/system/seafile.service.
systemctl enable seahub.service
Created symlink /etc/systemd/system/multi-user.target.wants/seahub.service → /etc/systemd/system/seahub.service.
systemctl start seafile.service
systemctl start seahub.service
systemctl is-active seafile.service
systemctl is-active seahub.service
active
active

⚠️ 两个实测坑:① 若之前手动 ./seafile.sh start 过,systemctl start seafile.service 会报 Seafile monitor is already running, pid xxxx 并退出 1——先执行 ./seafile.sh stop 再用 systemd 启动(重启机器场景无此问题);② seahub.sh 通过检查 seafile-monitor.sh 进程判断存储引擎是否在跑,若先启动 seahub 会报 Warning: seafile server not running. Have you run ./seafile.sh start?——必须先启 seafile.service 再启 seahub.service(单元的 After= 已保证顺序)。

4.12 切换系统默认 python3 为 3.11

monitor 等系统脚本以 python3 调用,建议把默认版本切到 3.11(实测命令与回显):

update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2
update-alternatives --set python3 /usr/bin/python3.11
update-alternatives --display python3 | head -4
python3 - manual mode
  link best version is /usr/bin/python3.11
  link currently points to /usr/bin/python3.11
  link python3 is /usr/bin/python3
python3 --version
Python 3.11.0rc1

五、方案 B:官方 tar 包 + MariaDB(交互式向导安装)

5.1 方案说明

同一安装脚本也提供交互模式:不带 auto 直接运行 ./setup-seafile-mysql.sh,按向导逐项回答。适合首次安装学习各参数含义;产物与方案 A 完全一致,装完同样从 4.7 节(JWT 私钥)继续。

5.2 交互流程实录

实测完整问答序列(问题原文 + 本例输入):

  1. Press ENTER to continue → 直接回车(⚠️ 此行会吃掉下一行输入,见坑实录)
  2. What is the name of the server? → seafile
  3. What is the ip or domain of the server? → 10.89.59.2
  4. Which port do you want to use for the seafile fileserver? → 8131
  5. 数据库初始化方式选择 1(创建新库)
  6. What is the host of mysql server? → 127.0.0.1
  7. What is the port of mysql server? → 3306
  8. root 密码 → q1w2e3r4
  9. Enter the name for mysql user of seafile → seafile(默认)
  10. Enter the password for mysql user → q1w2e3r4(⚠️ 需显式输入两次)
  11. 确认继续
  12. 三个数据库名(默认 ccnet_db / seafile_db / seahub_db)
  13. Press ENTER to continue → 回车,完成(成功标志与方案 A 相同:Your seafile server configuration has been finished successfully.)

⚠️ 排障实录(交互模式两大坑):① 开头的 Press ENTER to continue 会把紧跟的第一行输入一并吃掉,导致后续所有回答错位一位;② 回答错位最典型的后果是——本应输入「数据库用户名」的位置被填入了密码,脚本会真的创建出以密码字符串命名的数据库。遇到错位立即 Ctrl+C 退出,mariadb -h127.0.0.1 -uroot -pq1w2e3r4 -e "SHOW DATABASES;" 核对后删掉错误库重跑;同时注意重跑 setup 不会给已存在的 seafile 用户补授权,可能触发 Q3 的授权缺失问题。

5.3 与方案 A 的衔接

交互模式完成后,/opt/seafile 目录产物、conf/ 配置文件与方案 A 完全一致,后续从 4.7(JWT 私钥)继续执行即可。

六、方案对比与选择建议

维度方案 A(auto 非交互)方案 B(交互向导)
交互无(一条命令带全参数)13 步问答
可脚本化/重复部署好差(问答易错位)
参数直观性需查参数表(见 4.6)逐项提示,直观
错位/误输风险低(参数显式)高(实测踩过建错库名的坑)
产物完全一致完全一致

选择建议:能脚本化就选方案 A(尤其重复部署、批量装机);只有首次学习参数含义时走一次方案 B,之后仍建议用方案 A 落地。

七、配置说明

7.1 配置文件清单

所有配置集中在 /opt/seafile/conf/(实测清单见 4.6 节回显),各文件职责:

文件职责关键项
seafile.conf存储引擎与数据库[fileserver] port、tmp_file_dir、[database] 连接四件套
seahub_settings.pyWeb 应用配置SECRET_KEY(安装自动生成)、SERVICE_URL、DATABASES
gunicorn.conf.pygunicorn 进程bind、workers、timeout
seafdav.confWebDAV 开关[WEBDAV] enabled(默认 false)
seafevents.conf预览/检索/邮件等扩展[SEAHUB EMAIL]、[FILE HISTORY]
.envJWT 私钥JWT_PRIVATE_KEY(12.0 必需)

7.2 端口改绑要点

本系列实测环境因默认端口冲突,把 seahub 从 8000 改绑 8130、fileserver 从 8082 改绑 8131,涉及三处(实测文件内容节选):

seafile.conf(FileServer 端口与临时目录):

[fileserver]
port = 8131
tmp_file_dir = /opt/seafile/seafile-data/tmp

[database]
type = mysql
host = 127.0.0.1
port = 3306
user = seafile
password = q1w2e3r4
db_name = seafile_db
connection_charset = utf8

gunicorn.conf.py(seahub 监听地址):

daemon = False
workers = 5
bind = "0.0.0.0:8130"

seahub_settings.py(对外访问地址):

SERVICE_URL = "http://10.89.59.2:8130"

💡 说明:seahub.sh 也支持启动时带端口(实测无参数用法回显):seahub.sh { start <port> | stop | restart <port> },<port> is optional, and defaults to 8000;持久改绑以 gunicorn.conf.py 的 bind 为准。daemon = False 为实测环境取值(前台运行便于排障,由 systemd 管理生命周期);workers = 5 对应 ss 回显中的 5 个 python3.11 进程。

7.3 上传临时目录(易踩坑)

[fileserver] 的 tmp_file_dir 指向的目录不会自动创建,缺失时上传报 500(实测报错见常见问题 Q4)。改绑/初始化后手动创建:

mkdir -p /opt/seafile/seafile-data/tmp

重启 seafile 服务生效后,上传/下载恢复正常(验证方式:Web 上传一个文件并在资料库中可见)。

八、常见问题(FAQ)

Q1:启动报 Cannot find JWT_PRIVATE_KEY value from environment, try to read .env file. 现象:seafile.sh/seahub.sh 启动时输出该行,seahub 起不来。定位:12.0 起强制要求 JWT 私钥。解决:按 4.7 节生成 /opt/seafile/conf/.env(必须在 conf/ 目录下,放安装根目录无效),重启服务。

Q2:seahub 起不来,seahub.log 报 ModuleNotFoundError: No module named 'sqlalchemy' 定位:默认 python3(3.10)下没有安装依赖,依赖都在 python3.11。解决:systemd 单元加 Environment=PYTHON=/usr/bin/python3.11(见 4.11),或按 4.12 切默认 python3。

Q3:创建管理员报 Error happened during creating seafile admin.,seafile.log 反复出现 Failed to connect to MySQL: Access denied for user 'seafile'@'127.0.0.1' to database 'ccnet_db' 定位:重复运行 setup 脚本时,对已存在的 seafile 用户不会补授权,残留授权缺 ccnet_db。解决(实测有效):

mariadb -h127.0.0.1 -uroot -pq1w2e3r4 -e "GRANT ALL PRIVILEGES ON ccnet_db.* TO 'seafile'@'127.0.0.1'; FLUSH PRIVILEGES;"

然后重新执行 ./seahub.sh start 创建管理员即可成功。

Q4:上传文件报 500(Failed to open temp file) 定位:seafile.conf 的 tmp_file_dir 目录不存在(实测默认不创建)。解决:mkdir -p /opt/seafile/seafile-data/tmp 后重启 seafile 服务。

Q5:zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key UTC' 定位:Python 的 tzdata 数据缺失。解决:python3.11 -m pip install tzdata 后重启 seahub。

Q6:pip 安装 pylibmc 编译失败 定位:缺 memcached 开发头文件。解决:apt-get install -y libmemcached-dev(4.2 已包含)后重试。

Q7:启动 seahub 报 Error: Already running on PID 6395 (or pid file '/opt/seafile/pids/seahub.pid' is stale) 定位:重复启动或残留 pid 文件(实测报错原文)。解决:确认无 seahub 进程后删除 /opt/seafile/pids/seahub.pid 再启动;用 systemd 管理后由 systemctl 控制启停,不再手动跑脚本。

Q8:systemctl start seafile.service 报 Seafile monitor is already running, pid xxxx 定位:之前手动启动过,monitor 进程仍在。解决:先 ./seafile.sh stop(或 systemctl stop seafile.service)再 systemd 启动。

Q9:启动 seahub 报 Warning: seafile server not running. Have you run ./seafile.sh start? 定位:seahub.sh 靠 seafile-monitor.sh 进程判断存储引擎状态。解决:先启动 seafile.service,再启动 seahub.service。

Q10:重跑 setup 后定制配置丢失 定位:setup 会覆盖 conf/ 下的 gunicorn.conf.py(bind 被还原)、seahub_settings.py(SECRET_KEY/SERVICE_URL 重新生成)。解决:重跑前备份 conf/;重跑后逐项恢复定制并重启。

Q11:mariadb 不带 -h 登录报 Access denied 定位:Seafile 创建的数据库用户 host 是 127.0.0.1(见 4.3 验证回显),socket 登录不匹配该授权。解决:统一使用 mariadb -h127.0.0.1 -u... -p... 方式登录(属正常现象,非故障)。

九、卸载与清理

按「停服务 → 摘自启 → 删数据 → 删单元」顺序清理(⚠️ 危险操作,确认无需保留数据后执行):

systemctl stop seahub.service
systemctl stop seafile.service
systemctl disable seahub.service
systemctl disable seafile.service

disable 的实测回显形态(实测):

Removed /etc/systemd/system/multi-user.target.wants/seahub.service.

删除数据库与用户(DROP 成功时无回显,用随后的查询验证):

mariadb -h127.0.0.1 -uroot -pq1w2e3r4 -e "DROP DATABASE ccnet_db; DROP DATABASE seafile_db; DROP DATABASE seahub_db; DROP USER 'seafile'@'127.0.0.1'; FLUSH PRIVILEGES;"
mariadb -h127.0.0.1 -uroot -pq1w2e3r4 -e "SHOW DATABASES;"

确认输出中不再包含 ccnet_db、seafile_db、seahub_db(卸载前的实测基线回显):

Database
ccnet_db
information_schema
mysql
performance_schema
seafile_db
seahub_db
sys

最后删除程序与数据目录、移除单元文件并重载:

rm -rf /opt/seafile
rm /etc/systemd/system/seafile.service
rm /etc/systemd/system/seahub.service
systemctl daemon-reload

十、参考链接