2021年CentOS 7 docker部署seafile8+OnlyOffice

一、准备工作

1、centos7 安装并更新到最新版

系统安装略过,网上有很多教程。

# 最小化安装可能缺少必备软件。
yum -y install wget vim yum-utils
# 备份系统自带的源。
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载腾讯云的“centos7_base.repo”。重名为“CentOS-Base.repo”后保存到“/etc/yum.repos.d/”
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
# 清理yum的缓存
yum clean all
# 根据腾讯云源重建缓存
yum makecache
# 更新系统
yum update
添加企业版附加包
yum -y install epel-release

2、修改SELinux运行模式

SELinux 有三个模式,这些模式将规定 SELinux 在主体请求时如何应对。这些模式是:

Enforcing 强制— SELinux 策略强制执行,基于 SELinux 策略规则授予或拒绝主体对目标的访问。

Permissive 宽容— SELinux 策略不强制执行,不实际拒绝访问,但会有拒绝信息写入日志。

Disabled 禁用— 完全禁用SELinux。

推荐设置为Disabled 。如果SELinux =Enforcing配置ssl时可能失败,另外如果安装完容器后再修改,容器启动会失败,需要手工修改配置文件。

#查看
root@dev-server ~]# getenforce
Disabled
[root@dev-server ~]# /usr/sbin/sestatus -v
SELinux status:                 disabled
#修改SELINUX=Permissive
vim /etc/selinux/config
……
SELINUX=Permissive
……
#按esc,输入wq!保存后退出。
#重启系统
reboot

2.1、在esxi中为虚拟机添加新的硬盘.

个人喜欢把数据盘和系统分开,迁移方便、

2.2、登录系统格式化硬盘,并挂载到/opt。

# 格式化新安装的硬盘为ext4.如果系统只有两块硬盘,第二款硬盘为sdb,具体可以运行“ls /dev |grep sd"查看。
mkfs.ext4 /dev/sdb
# 挂载sdb到/opt
mount /dev/sdb /opt
# 查看sdb的uuid
blkid | grep /dev/sdb
/dev/sdb: UUID="6782086f-be9c-471d-aa70-a3baee174b82" TYPE="ext4"
# 配置开机自动挂载
vim /etc/fstab
# 添加以下内容
UUID=6782086f-be9c-471d-aa70-a3baee174b82 /opt  ext4   defaults 0 0
#保存
按esc,输入wq!保存后退出

3、安装docker

# 下载最新的安装源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker
yum -y install docker-ce
# 启动 Docker
systemctl start docker
# 设置 Docker开机自启动
systemctl enable docker

4、给docker添加阿里云加速

# 创建daemon.json,该文件默认没有,需要创建。
vim /etc/docker/daemon.json
# 把下列内容复制到新建文件中。
{

  "registry-mirrors": ["https://*****.mirror.aliyuncs.com"]

}
# 按esc,输入wq!保存后退出。
# 注意阿里云加速的URL需要自己申请,申请后把URL替换成自己的就可以。

5、安装docker-compose

seafile是利用docker-compose部署,必须安装。

#安装 PIP3
yum -y install python3-pip
#更新 PIP3
pip3 install --upgrade pip
#安装 Docker Compose
pip3 install docker-compose
# 查看docker compose的版本
docker-compose version

二、 安装Seafile

1、下载并修改 docker-compose.yml

seafile的安装资源可以访问seafile官方资源库

# 创建seafile脚本目录
mkdir -p /opt/docker-compose/seafile
# 进入seafile脚本目录
cd /opt/docker-compose/seafile
# 下载安装脚本
wget https://cloud.seafile.com/seafhttp/files/67a2dcb5-c091-4919-837a-5ce16a5b22fb/docker-compose.yml

2、安装seafile

2.1、下载、编辑安装脚本

#编辑docker-compose.yml
vim docker-compose.yml

docker-compose.yml内容如下:

……
      - MYSQL_ROOT_PASSWORD=12345678 #设置msyql密码。
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - /opt/seafile-mysql/db:/var/lib/mysql # 设置MySQL数据持久存储的路径,默认即可。
……
    ports:
      - "80:80"
      - "443:443" # 如需要启用https,就去掉本行前面的注释。
    volumes:
      - /opt/seafile-data:/shared # 设置网盘数据持久存储的路径,默认即可。
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=12345678 # 输入上面设置的密码
      - TIME_ZONE=Asia/Shanghai # 如需要设置市区为“上海”,就去掉本行前面的注释。
      - SEAFILE_ADMIN_EMAIL=me@example.com # 设置管理账号
      - SEAFILE_ADMIN_PASSWORD=asecret     # 设置管理员密码
      #- SEAFILE_SERVER_LETSENCRYPT=false  # 自动申请Let's Encrypt证书(需要提前配置好DNS)
      - SEAFILE_SERVER_HOSTNAME=seafile.example.com # 设置网盘域名
……

修改完成后,按“ESC"后输入“wq”保存并退出文件编辑。

2.2、安装seafile

在docker-compose.yml目录下执行下列操作

docker-compose up -d

执行docker-compose up -d命令后,会联网下载seafile相关镜像。如果下载速度慢,可以配置阿里云镜像加速。

镜像下载完成后,会自动运行。

# 查看容器运行状态,不加”-a"是看不到未正常运行的容器。
docker ps -a

如果镜像没正常运行输入以下命令查看原因

# 如seafile未正常运行
docker logs seafie

容器正常运行几秒钟后,就可以在浏览器访问您的网盘。

2.3、启用https

如已设置自动申请Let’s Encrypt证书,可以跳过。

# 建立ssl证书目录
mkdir -p /opt/seafile-data/ssl

阿里云提供免费的SSL证书,申请后下载nginx版。重命名为类似www.seafile.com.key,www.seafile.com.crt。将申请的证书上传到/opt/seafile-data/ssl

修改 Nginx 的配置文件 ,启用 ssl 。

# 切换到配置文件目录
cd /opt/seafile-data/nginx/conf/
# 备份配置seafile.nginx.conf
cp seafile.nginx.conf seafile.nginx.conf.bak0
# 编辑配置文件
vim seafile.nginx.conf

打开seafile.nginx.conf后,按下面修改

server {
    listen 80;
    server_name 10.10.10.142; # 服务器地址或域名。
    rewrite ^(.*) https://$server_name$1 permanent;#开启自动跳转https.
}

server {
    listen 443 default ssl;
    server_name 10.10.10.142;
    ssl_certificate /shared/ssl/www.seafile.comp.crt; # 设置SSL证书
    ssl_certificate_key /shared/ssl/www.seafile.com.key; # 设置SSL密钥
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
    ssl_prefer_server_ciphers on;
    proxy_set_header X-Forwarded-For $remote_addr;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

    client_max_body_size 10m;
    #后面的内容不要动
    location / {
    ……

修改完成后,按“ESC"后输入“wq”保存并退出文件编辑。

# 配置完成后重启nginx
docker exec -it seafile /usr/sbin/nginx -s reload

重启nginx,注意观察日志。如配置文件有错,日志会提示配置文件哪一行有问题,修改即可。

配置完成后,就可以用https方式访问网盘。

登录网盘后,点击系统系统管理-设置分别把SERVICE_URL 和 FILE_SERVER_ROOT 修改成https开通的网站。例如:https://www.seafile.com/ 和https://www.seafile.com/seafhttp

2.4、开机启动seafile

# 配置 docker-compose 开机自启动
vim /etc/rc.d/rc.local
# 文件后面添加下行内容,注意docker-compose.yml目录
docker-compose -f /opt/docker-compose/seafile/docker-compose.yml up -d
# 保存退出后,为 rc.local 文件添加执行权限
chmod +x /etc/rc.d/rc.local

二、安装onlyoffice

1、创建onlyoffice 加"-p"递归创建,多个目录用“空格”连接

mkdir -p /opt/seafile-onlyoffice/log /opt/seafile-onlyoffice/data /opt/seafile-onlyoffice/lib /opt/seafile-onlyoffice/db

2、启动onlyoffice,第一次会从互联网拉取镜像,需要时间

docker run -i -t -d -p 8080:80 -p 8443:443 --name onlyoffice --restart=always -v /opt/seafile-onlyoffice/log:/var/log/onlyoffice -v /opt/seafile-onlyoffice/data:/var/www/onlyoffice/Data -v /opt/seafile-onlyoffice/lib:/var/lib/onlyoffice -v /opt/seafile-onlyoffice/db:/var/lib/postgresql onlyoffice/documentserver

3、启动完成后,可以尝试访问http://IP:8080/welcome/。

4、onlyoffice启用ssl。

复制宿主机的证书到到onlyoffice容器中。

docker cp /opt/seafile-data/ssl/  onlyoffice:/etc/onlyoffice/documentserver/nginx/

修改ds.conf文件

# 进入onlyoffice容器内部
docker exec -it onlyoffice bash
# 为容器安装vim。注意容器内系统是Ubuntu。
apt update
apt -y install vim
# 停止nginx服务
service nginx stop
# 复制配置文件
cp -f /etc/onlyoffice/documentserver/nginx/ds-ssl.conf.tmpl /etc/onlyoffice/documentserver/nginx/ds.conf
# 编辑配置文件
vim /etc/onlyoffice/documentserver/nginx/ds.conf
# 修改ssl证书目录
……
  ssl_certificate /etc/onlyoffice/documentserver/nginx/ssl/www.uxxl.vip.crt;
  ssl_certificate_key /etc/onlyoffice/documentserver/nginx/ssl/www.uxxl.vip.key;
……
# 保存后,自动退出。
# 启动nginx服务
service nginx start

如启动没有报错,就可以尝试访问:https://IP:8443/welcome/

三、配置seafile和onlyoffice的联动

1、配置使用onlyoffice打开seafile中的文件

# 切换到配置文件目录
cd /opt/seafile-data/seafile/conf/
# 备份配置文件
cp seahub_settings.py seahub_settings.py.bak0

编辑配置文件

vim seahub_settings.py

并添加以下内容

# Enable Only Office
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
# ONLYOFFICE_APIJS_URL = 'http{s}://{your OnlyOffice server's domain or IP}/web-apps/apps/api/documents/api.js'
ONLYOFFICE_APIJS_URL = 'https://10.10.10.149:8443/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_EDIT_FILE_EXTENSION = ('docx', 'pptx', 'xlsx')

重启seafile

docker-compose -f /opt/docker-compose/seafile/docker-compose.yml restart

现在可以尝试在seafile中直接编辑office文件。

2、配置自动保存

使用 OnlyOffice 打开文件时,OnlyOffice 默认只会在用户关闭页面后向 Seafile 发送文件保存请求。 建议开启定时保存。

# 进入onlyoffice容器内部
docker exec -it onlyoffice bash

备份配置文件

cp /etc/onlyoffice/documentserver/local.json /etc/onlyoffice/documentserver/local.json.bak0

编辑配置文件

vim /etc/onlyoffice/documentserver/local.json

在文件中添加

{
    "services": {
        "CoAuthoring": {
            // 在 CoAuthoring 中 增加 autoAssembly 属性配置
            "autoAssembly": {
                "enable": true,
                "interval": "5m"
            }
        }
    }
}

四、安装portainer-ce中文版

开启IPV4转发

# 打开配置文件
vim /etc/sysctl.conf
# 添加这段代码
net.ipv4.ip_forward=1

安装portainer-ce中文版

docker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data 6053537/portainer-ce

portainer-ce中文版地址:https://github.com/eysp/portainer-ce

安装portainer主要是方便管理。

整个过程参考了https://bbs.seafile.com/t/topic/13486,感谢momo_seafile的付出。

编写不易,转载请保留unlast@seafile.com.

按照此教程配置完后,seafile 可以使用https访问, https://IP:8443/welcome/ 也正常,但是打开seafile中的Word文件提示“下载失败”。
系统系统管理-设置中:SERVICE_URL 和 FILE_SERVER_ROOT 设置为:https://ip/、https://ip/seafhttp
请问seafile和onlyoffice联动的过程中打开office文件提示:下载失败。怎么解决?

docker exec -it onlyoffice bash
cat /var/log/onlyoffice/documentserver/converter/out.log
把日志帖出来看看。
我的经验是不能使用IP地址互联,OnlyOffice下载文件时会检查证书,发现证书和URL不符是拒绝下载文件的。