seafile linux部署三大问题:setup-seafile-mysql.sh卡在建库因mysql权限或strict mode;seahub.sh秒退多因gunicorn版本冲突或python路径错误;局域网无法访问因bind地址、selinux或防火墙限制。

Seafile 在 Linux 上装不难,但 setup-seafile-mysql.sh 脚本一跑就卡住、seahub.sh 启动后秒退、局域网输 http://192.168.x.x:8000 打不开——这三类问题占部署失败的 80% 以上。别怪脚本,它对 Python 版本、MySQL 权限、SELinux/firewalld 和 gunicorn 版本都极其敏感,70% 的失败根本不是配置填错了,而是环境没理干净。
为什么 setup-seafile-mysql.sh 总是卡在 “creating seafile database…”
这不是网络慢,是脚本试图自动建库建用户时被 MySQL 权限或 strict mode 拦下了,而且错误日志里只写 Failed to connect to database,不告诉你缺哪条权限。
- 必须先手动登录 MySQL:
mysql -u root -p - 逐条执行建库(注意反引号):
create database `ccnet-db` character set = 'utf8';、create database `seafile-db` character set = 'utf8';、create database `seahub-db` character set = 'utf8'; - 建用户不能用
%,必须写'seafile'@'localhost',且认证插件要显式指定:CREATE USER 'seafile'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_password'; - 逐库授权(不是
ON *.*):GRANT ALL PRIVILEGES ON `ccnet-db`.* TO 'seafile'@'localhost';(其余两库同理),然后FLUSH PRIVILEGES; - 回到脚本,当问到
Use existing MySQL server?时选y,后面只填数据库名和密码,跳过自动建库环节
seahub.sh start 退出无声?先查 gunicorn 和 Python 路径
seahub.sh 启动失败十有八九不是代码问题,而是 gunicorn 版本冲突或 Python 解释器错位。日志里出现 ImportError: cannot import name 'parse_qsl' 就是典型症状。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 进
seafile-server-*/runtime/目录,运行which python,确认是系统原生路径(如/usr/bin/python),不是 Anaconda 或 pyenv 的 - Seafile 6.x–7.0.x 强依赖
gunicorn==19.10.0,系统 pip 装的往往是 21.x+,必须降级:pip install --force-reinstall --no-deps gunicorn==19.10.0 - 检查
seahub/thirdpart/下是否存在gunicorn文件夹,有就删掉——Seafile 自带第三方包优先级高于系统 pip - 首次启动前必须先运行:
./seahub.sh setup,否则 Django 表没初始化,start必然失败
局域网打不开 http://192.168.x.x:8000?别只改 bind 地址
默认 bind = "127.0.0.1:8000" 是只监听本地回环,改完 0.0.0.0:8000 还打不开,大概率是 SELinux 或防火墙拦了,或者服务根本没起来。
- 编辑
conf/gunicorn.conf,把bind = "127.0.0.1:8000"改成bind = "0.0.0.0:8000"(不要写具体 IP,除非你明确要限制网段) - CentOS 7 默认启用 SELinux,
setenforce 0临时关闭,或永久设为disabled(修改/etc/selinux/config) - 放行端口:
firewall-cmd --zone=public --add-port=8000/tcp --permanent && firewall-cmd --reload - 确认
seafile.sh和seahub.sh都已成功启动(ps aux | grep seaf应看到seaf-server和gunicorn进程) - 如果用 Nginx 反代,
seahub.sh仍需监听 8000,Nginx 再 proxy_pass 到它,别直接让 Nginx 启动 Seafile
真正麻烦的从来不是“怎么装”,而是 setup-seafile-mysql.sh 静默失败时你不知道它卡在哪一层:是 MySQL socket 连接逻辑把 127.0.0.1 和 localhost 当成两个 host,还是 gunicorn 加载了旧版 urllib,又或是 SELinux 的 httpd_can_network_connect 没开。每一步都要验证输出,别靠“应该没问题”往下走。










