Ubuntu 22.04 安装 Seafile 指南
在 Ubuntu 22.04.5 上从零安装 Seafile CE 12.0.14 的完整实测指南:系统依赖与 MariaDB 初始化、官方 tar 包下载校验、auto 非交互与交互向导两种安装模式、JWT 私钥与 Python 依赖、管理员创建、systemd 托管、升级与多版本管理,附 11 条实测排障 FAQ 与卸载清理。
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(host127.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.11 | 3.11.0 | Ubuntu 22.04 官方源 |
| MariaDB | 10.6.23 | Ubuntu 22.04 官方源 |
| Django(seahub 依赖) | 4.2.30 | seahub/requirements.txt 安装(Django==4.2.*) |
| SQLAlchemy(seafevents 依赖) | 2.0.55 | seafevents/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-port | FileServer 端口 | 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-user | Seafile 使用的数据库用户名 | seafile(脚本自动创建) |
-w / --mysql-user-passwd | 该用户的密码 | q1w2e3r4 |
-q / --mysql-user-host | 数据库用户的 host(可选) | 省略(默认 127.0.0.1) |
-r / --mysql-root-passwd | root 密码(用于建库建用户) | q1w2e3r4 |
-c / --ccnet_db | ccnet 库名 | ccnet_db |
-s / --seafile_db | seafile 库名 | seafile_db |
-b / --seahub_db | seahub 库名 | 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 ]
逐项输入(本例实测取值):
admin email:admin@seafile.localadmin password:q1w2e3r4password 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 交互流程实录
实测完整问答序列(问题原文 + 本例输入):
Press ENTER to continue→ 直接回车(⚠️ 此行会吃掉下一行输入,见坑实录)What is the name of the server?→seafileWhat is the ip or domain of the server?→10.89.59.2Which port do you want to use for the seafile fileserver?→8131- 数据库初始化方式选择
1(创建新库) What is the host of mysql server?→127.0.0.1What is the port of mysql server?→3306- root 密码 →
q1w2e3r4 Enter the name for mysql user of seafile→seafile(默认)Enter the password for mysql user→q1w2e3r4(⚠️ 需显式输入两次)- 确认继续
- 三个数据库名(默认
ccnet_db/seafile_db/seahub_db) 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.py | Web 应用配置 | SECRET_KEY(安装自动生成)、SERVICE_URL、DATABASES |
gunicorn.conf.py | gunicorn 进程 | bind、workers、timeout |
seafdav.conf | WebDAV 开关 | [WEBDAV] enabled(默认 false) |
seafevents.conf | 预览/检索/邮件等扩展 | [SEAHUB EMAIL]、[FILE HISTORY] |
.env | JWT 私钥 | 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
十、参考链接
- 官方下载页(版本与包地址):https://www.seafile.com/download/
- 官方手册(部署文档):https://manual.seafile.com/
- GitHub 仓库:https://github.com/haiwen/seafile
- 官方论坛:https://forum.seafile.com/
- Linux 客户端下载(seafile-cli 官方 deb 源):https://linux-clients.seafile.com/
- 站内延伸:《Seafile 介绍与选型指南》