在kylin v10上安装seafile10的记录

起因是在服务器上部署seafile13没有成功,因此部署seafile10。为了安全起见,也是先在个人虚拟机上验证,再将相关操作重新在生产服务器上操作,因此多了一个本地安装操作系统与上传服务器文件和加载镜像的步骤。

1. 环境说明

(1) 操作系统

麒麟v10 sp2系统

下载地址:

https://dn710201.ca.archive.org/0/items/kylin-server-10-sp-2-x-86-release-build-09-20210524/Kylin-Server-10-SP2-x86-Release-Build09-20210524.iso

安装后确认版本信息

[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文件

修改图中的变量信息,以便符合自己的要求,我为了图方便,在个人虚拟机上验证时未修改,只是在生产服务器正式部署时修改了相关参数。

![|554x358](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml19408\wps1.jpg)

(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

http://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参数,地址后面要加上端口号。加上之后,文件上传下载功能正常。

![|553x207](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml19408\wps2.jpg)

**方法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文件中开启了在线编辑功能不建议设置过大,在线编辑功能占用较大的服务器内存。