起因是在服务器上部署seafile13没有成功,因此部署seafile10。为了安全起见,也是先在个人虚拟机上验证,再将相关操作重新在生产服务器上操作,因此多了一个本地安装操作系统与上传服务器文件和加载镜像的步骤。
1. 环境说明
(1) 操作系统
麒麟v10 sp2系统
下载地址:
安装后确认版本信息
[root@localhost ~]# uname -a
Linux localhost.localdomain 4.19.90-24.4.v2101.ky10.x86_64 #1 SMP Mon May 24 12:14:55 CST 2021 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# cat /etc/os-release
NAME=“Kylin Linux Advanced Server”
VERSION=“V10 (Sword)”
ID=“kylin”
VERSION_ID=“V10”
PRETTY_NAME=“Kylin Linux Advanced Server V10 (Sword)”
ANSI_COLOR=“0;31”
(2) 关闭selinux,关闭防火墙
2. 相关软件包准备
(1) docker安装
Kylin自己的docker太低,因此安装的是26.1.4版本
网上下载docker-26.1.4.tgz,并上传到服务器安装
下载地址:https://download.docker.com/linux/static/stable/x86_64/docker-26.1.4.tgz
执行以下命令完成docker安装
在当前目录直接下载安装包:
wget https://download.docker.com/linux/static/stable/x86_64/docker-26.1.4.tgz
解压安装包:
sudo tar -xvf docker-26.1.4.tgz
移动到/usr/bin目录下:
sudo mv docker/* /usr/bin/
创建/etc/systemd/system/docker.service文件:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
开机自动启动docker服务:
sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl start docker
验证docker服务是否正常:
systemctl status docker
docker ps -a
docker run hello-world
(2) docker-compose安装
Kylin自己的docker-compose版本过低,安装v2.20.2版本,个人虚拟机上直接下载:
sudo curl -L https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
如果是服务器,则直接上传已下载的文件到指定位置:
sudo scp /usr/local/bin/docker-compose 服务器用户名@服务器IP:/home/seafile/uploads/
sudo mv /home/seafile/uploads/docker-compose /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
验证docker-compose是否安装成功,执行以下命令显示Docker Compose version v2.20.2则为成功
sudo docker-compose version
3. 安装seafile10
(1) seafile用户
创建seafile用户:
sudo useradd -m -s /bin/bash seafile
设置密码:
sudo passwd seafile
加入到docker组(因为需要使用seafile用户执行docker与docker-compose):
usermod -aG docker seafile
设置sudo免密
echo “seafile ALL=(ALL) NOPASSWD:ALL” | sudo tee /etc/sudoers.d/seafile
chmod 440 /etc/sudoers.d/seafile
重新登录 seafile 用户,退出当前终端,再登录:
su - seafile
验证 docker 权限是否生效:
docker ps
验证免密是否生效:
sudo ls /
(2) 创建/opt/seafile目录
创建目录:
mkdir -p /opt/seafile
赋予 seafile 用户权限
chown -R seafile:seafile /opt/seafile
(3) 下载docker-compose.yml文件
seafile用户下进入/opt/seafile目录,执行以下命令:
wget -O “docker-compose.yml” “https://manual.seafile.com/11.0/docker/docker-compose/ce/10.0/docker-compose.yml”
(4) 编辑docker-compose.yml文件
修改图中的变量信息,以便符合自己的要求,我为了图方便,在个人虚拟机上验证时未修改,只是在生产服务器正式部署时修改了相关参数。

(5) 拉取镜像并启动服务
在个人虚拟机的系统上拉取镜像启动容器,在/opt/seafile目录下,以seafile用户执行以下命令,会直接拉取镜像启动容器:
docker-compose up -d
导出镜像:
sudo docker save -o /home/seafile/downloads/seafile10.tar seafileltd/seafile-mc:10.0-latest
sudo docker save -o /home/seafile/downloads/mariadb10.5.tar mariadb:10.5
sudo docker save -o /home/seafile/downloads/memcached1.6.tar memcached:1.6.18
sudo docker save -o /home/seafile/downloads/onlyoffice-7.4.1.tar onlyoffice/documentserver:7.4.1
上传镜像,在个人虚拟上执行,直接远程上传:
sudo scp /home/seafile/downloads/seafile10.tar 服务器用户名@服务器IP:/home/seafile/uploads/
sudo scp /home/seafile/downloads/mariadb10.5.tar 服务器用户名@服务器IP:/home/seafile/uploads/
sudo scp /home/seafile/downloads/memcached1.6.tar 服务器用户名@服务器IP:/home/seafile/uploads/
sudo scp /home/seafile/downloads/onlyoffice-7.4.1.tar 服务器用户名@服务器IP:/home/seafile/uploads/
切换到服务器环境上导入镜像:
docker load -i seafile10.tar
docker load -i mariadb10.5.tarr
docker load -i memcached1.6.tar
docker load -i onlyoffice-7.4.1.tar
在服务器的/opt/seafile目录下,以seafile用户执行以下命令,会直接启动容器
docker-compose up -d
(6) 验证服务是否正常
查看日志
docker logs seafile
查看网页,我虚拟机ip是192.168.119.130
显示登录页代表正常启动了。
(7) onlyoffice集成
集成的是7.4.1版本,修改docker-compose.yml文件,增加以下内容:
onlyoffice:
image: onlyoffice/documentserver:7.4.1
restart: unless-stopped
container_name: seafile-onlyoffice
security_opt:
- seccomp=unconfined
- apparmor=unconfined
ports:
- "6233:80"
environment:
#- DB_TYPE=${DB_TYPE:-mariadb}
#- DB_HOST=${SEAFILE_MYSQL_DB_HOST:-db}
#- DB_USER=${SEAFILE_MYSQL_DB_USER:-seafile}
#- DB_PWD=${SEAFILE_MYSQL_DB_PASSWORD:?Variable is not set or empty}
- JWT_ENABLED=true
- JWT_SECRET=Q9tFz3WmA8rLk2VhS7pXc4JbN1yR0eTgH5uPqZs
volumes:
- ${ONLYOFFICE_VOLUME:-/opt/onlyoffice}/logs:/var/log/onlyoffice
- ${ONLYOFFICE_VOLUME:-/opt/onlyoffice}/data:/var/www/onlyoffice/Data
- ${ONLYOFFICE_VOLUME:-/opt/onlyoffice}/lib:/var/lib/onlyoffice
networks:
- seafile-net
注意这里直接增加security_opt信息,否则还会启动报错。同时对外暴露端口改为6233,容器内部端口仍然保持为80。
还需要修改/opt/seafile-data/seafile/conf/seahub_settings.py文件,增加以下内容
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = True
ONLYOFFICE_CALLBACK_URL = ‘http://seafile:80/onlyoffice/callback/’
ONLYOFFICE_APIJS_URL = ‘http://192.168.119.130:6233/web-apps/apps/api/documents/api.js’
ONLYOFFICE_FILE_SERVER_ROOT = ‘http://192.168.119.130:6233/’
ONLYOFFICE_JWT_SECRET = ‘Q9tFz3WmA8rLk2VhS7pXc4JbN1yR0eTgH5uPqZs’
ONLYOFFICE_FILE_EXTENSION = (‘doc’, ‘docx’, ‘ppt’, ‘pptx’, ‘xls’, ‘xlsx’, ‘odt’, ‘fodt’, ‘odp’, ‘fodp’, ‘ods’, ‘fods’, ‘csv’, ‘ppsx’, ‘pps’)
ONLYOFFICE_EDIT_FILE_EXTENSION = (‘docx’, ‘pptx’, ‘xlsx’, ‘doc’, ‘xls’, ‘ppt’)
#ONLYOFFICE_EDIT_FILE_EXTENSION = ()
注意这里各参数不同的端口号,因为有些参数是生效于容器内部,有的是生效于宿主机。Onlyoffice支持文件格式、在线可编辑的文件格式可以自行配置扩展名。如果需要关闭在线编辑功能,去掉ONLYOFFICE_EDIT_FILE_EXTENSION = ()前的#号就可以,这样只能在线预览了。
(8) 官方默认开放80端口,因大多数环境禁用80端口,改为8099端口访问
修改docker-compose.yml文件,seafile服务里的端口映射更改为
ports:
- "8099:80"
同步需要修改文件上传下载地址的端口号,否则会引起文件上传下载失败问题
**方法1:**重启服务以管理员账号登录系统,点头像进行到系统管理菜单,进入到设置,更新service_url与file_server_root参数,地址后面要加上端口号。加上之后,文件上传下载功能正常。

**方法2:**直接修改配置文件/opt/seafile-data/seafile/conf/seahub_settings.py,该文件中SERVICE_URL和FILE_SERVER_ROOT的配置的地址原是不带端口号的,需要修改为以下带8099端口号的地址。修改后重启服务。
SERVICE_URL = “http://192.168.119.130:8099/”
FILE_SERVER_ROOT = “http://192.168.119.130:8099/seafhttp”
(9) 整理部署过程中遇到的问题如下:
问题1:seafile-mysql没有启动成功,查看seafile-mysql容器日志,发现报错信息Can’t initialize timers
原因是MariaDB 10.11 在银河麒麟 V10(国产内核)上无法初始化定时器(timer)。需将镜像换成10.5即可解决,修改docker-compose.yml文件,将image:mariadb:10.11更改为image: mariadb:10.5。
问题2:默认头像不能正常显示,但是上传新头像成功后,新头像还是不能正常显示。
此现象是由于宿主机上存放头像文件的目录权限设置错误而造成,宿主机上原目录除root用户外,其他用户无读和执行权限,导致seafile服务无权限访问头像文件,相关改成755权限,不需要重启服务,重新访问头像文件可显示正常。
sudo chmod 755 /opt/seafile-data
sudo chmod 755 /opt/seafile-data/seafile
sudo chmod 755 /opt/seafile-data/seafile/seahub-data
sudo chmod 755 /opt/seafile-data/seafile/seahub-data/avatars
sudo chmod 755 /opt/seafile-data/seafile/seahub-data/custom
问题3:使用onlyoffice在线编辑文件后,在seafile资料库上,下载后的文件还是编辑前的文件,查看更新历史没有最新的记录,但再次使用onlyoffice打开该文件是编辑后的文件。
此现象很可能是onlyoffice到seafile文件的同步机制受服务器软硬件环境影响缓慢造成,手动修改参数,提升同步频率。在/opt/seafile-data/seafile/conf/seafile.conf文件中增加以下内容:
[fileserver]
port = 8082
instant_file_update = true #新增内容,强制在保存后触发 block merge
block_merge_interval = 10 #每 10 秒执行一次 block merge
修改保存内容后要重启seafile服务生效
docker restart seafile
测试了几篇文档,编辑后的几秒内就能下载到最新编辑的文件了。
**问题4:**OnlyOffice在打开一些大文件时,提示“文件大小超出了为服务器设置的限制”,无法预览和编辑。
这是因为OnlyOffice 预览/编辑文件大小限制默认为100MB。进入容器内验证
docker exec -it seafile-onlyoffice bash
查看/etc/onlyoffice/documentserver/nginx/includes/ds-common.conf文件内容
cat /etc/onlyoffice/documentserver/nginx/includes/ds-common.conf
其中有一行为client_max_body_size 100m;代表文件大小最大为100m。可调整此参数来支持预览/编辑更大的文件。如果在seahub_settings.py文件中开启了在线编辑功能不建议设置过大,在线编辑功能占用较大的服务器内存。