原文:基于 Docker 部署 SeafilePro + OnlyOffice(CentOS版)

官方文档:用 Docker 部署 Seafile 服务

CentOS 服务器 基于 Docker 部署 Seafile + OnlyOffice ,开启自定义域名和 https 的详细教程。

一、用 Docker 部署 Seafile 服务

1.安装 docker

因为 Seafile v7.x.x 容器是通过 docker-compose 命令运行的,所以首先要安装Docker。

# 安装 Docker
yum -y install docker
# 启动 Docker
systemctl start docker
# 设置 Docker开机自启动
systemctl enable docker
-----------------------------其它 Docker常用命令--------------------------
# 查看版本号
docker -v
# 查看 Docker 状态,报错时候使用
systemctl status docker
# 停止 Docker
systemctl stop docker
# 重启 Docker
systemctl restart docker
# 查看正在运行的容器
docker ps
# 查看所有容器,包括停止的容器
docker ps -a
# 查看容器占用资源情况
docker stats
# 查看容器的日志(可在这查看报错信息)
docker logs 容器名或ID
# 启动已被停止的容器
docker start 容器名或ID
# 停止运行中的容器
docker stop 容器名或ID
# 重启容器
docker restart 容器名或ID

2.安装 docker-compose

官方是通过docker-compose管理 seafile、seafile-elasticsearch、seafile-memcached 和 seafile-mysql 四个容器。

Docker-Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。

因为 Seafile v7.x.x 容器是通过 docker-compose 命令运行的,所以您应该在服务器上安装该命令。

# for CentOS
yum install docker-compose -y
# for Ubuntu
apt-get install docker-compose -y

如遇到权限问题可以执行以下命令

sudo groupadd docker
sudo gpasswd -a root docker
sudo systemctl restart docker
newgrp - docker

如果因为yum源问题提示:没有可用软件包 docker-compose,错误:无须任何处理

可以手动去下载:https://github.com/docker/compose/releases

放在/usr/local/bin路径下,执行下面命令(删除了文件名后缀-linux-x86_64)

sudo chmod +x /usr/local/bin/docker-compose

还也可以通过 pip 安装 docker-compose ,(也不一定成功)

# 添加企业版附加包
yum -y install epel-release
# 安装pip
yum -y install python-pip
# 更新pip
pip install --upgrade pip
# 安装docker-compose
pip install docker-compose
# 查看docker compose的版本
docker-compose version

还可参考 CentOS 7.x 安装 Docker-Compose

3.下载并修改 docker-compose.yml

引用 Seafile 官方文档:

下载 docker-compose.yml 示例配置文件到本地,然后修改完成后上传到服务器的 /opt 目录。然后根据您的实际环境修改该文件。尤其是以下几项配置:

  • MySQL root 用户的密码 (MYSQL_ROOT_PASSWORD and DB_ROOT_PASSWD)

  • 持久化存储 MySQL 数据的 volumes 目录 (volumes)

  • 持久化存储 Seafile 数据的 volumes 目录 (volumes)

  • 持久化存储 Elasticsearch 索引数据的 volumes 目录 (volumes)

  • 默认的管理员账号是 me@example.com 并且该账号的密码是 asecret

需要修改的配置有:

  1. 设置 mysql 的 root 密码

  2. Seafile 中需要填写第一步设置的 mysql 密码

  3. 设置 Seafile 管理员账号邮箱

  4. 设置 Seafile 管理员账号密码

  5. 开启 https 443 端口

  6. 设置 https 域名

version: '2.0'
services:
db:
image: mariadb:10.1
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=mysql-root-password # 1. 设置MySQL的root密码
- MYSQL_LOG_CONSOLE=true
volumes:
- /opt/seafile-mysql/db:/var/lib/mysql # 指定MySQL数据持久存储的路径,默认即可不用修改。
networks:
- seafile-net memcached:
image: memcached:1.5.6
container_name: seafile-memcached
entrypoint: memcached -m 256
networks:
- seafile-net elasticsearch:
image: seafileltd/elasticsearch-with-ik:5.6.16
container_name: seafile-elasticsearch
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 2g
volumes:
- /opt/seafile-elasticsearch/data:/usr/share/elasticsearch/data # 指定Elasticsearch数据持久存储的路径,默认即可不用修改。
networks:
- seafile-net seafile:
image: docker.seafile.top/seafileltd/seafile-pro-mc:latest
container_name: seafile
ports:
- "80:80"
- "443:443" # 5.开启 https
volumes:
- /opt/seafile-data:/shared # 指定Seafile数据持久存储的路径,默认即可不用修改。
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=mysql-root-password # 2. 上面配置的 mysql root 密码
# - TIME_ZONE=Asia/Shanghai # 默认为UTC。需要修改时区时设置,一般不需要设置。
- SEAFILE_ADMIN_EMAIL=me@example.com # 3. 设置 Seafile 管理员账号邮箱
- SEAFILE_ADMIN_PASSWORD=asecret # 4. 设置 Seafile 管理员账号密码
- SEAFILE_SERVER_LETSENCRYPT=false # 使用 Let's encrypt SSL 证书开启,使用自己的证书不用开启
- SEAFILE_SERVER_HOSTNAME=example.seafile.com # 6. 开启 https 后填写你的域名
depends_on:
- db
- memcached
- elasticsearch
networks:
- seafile-net networks:
seafile-net:

4.启动 Seafile 服务

必须在 **docker-compose.yml** 文件所在的 /opt 目录进行启动。

执行以下命令启动 Seafile 服务

cd /opt
docker-compose up -d # 启动 seafile

需要等待几分钟,等容器首次启动时的初始化操作完成后,您就可以在浏览器上访问 IP+端口 或者 http://seafile.example.com 来打开 Seafile 主页。

5.配置 Seafile https ssl 证书

1.服务初始化完成后,需要上传自己的 SSL 证书。

# 创建 ssl 目录,然后将证书上传到该目录
mkdir /opt/seafile-data/ssl

​2.修改 Nginx 的配置文件,配置ssl。

vim /opt/seafile-data/nginx/conf/seafile.nginx.conf

ssl 配置如下:

server {
listen 443;
server_name example.seafile.com; # 你的域名 ssl on;
ssl_certificate /shared/ssl/你的证书.pem; #pem 文件路径
ssl_certificate_key /shared/ssl/你的证书.key; #pem 文件路径
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on; proxy_set_header X-Forwarded-For $remote_addr;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
server_tokens off;
# 注释掉80端口自动转发到443端口,添加一句'error_page 497 301 https://$http_host$request_uri;',这样就可以实现http自动跳转到https了。
error_page 497 301 =307 https://v.itmm.wang:6443$request_uri; ... 后面的内容保持不变
location / {
...
}
...
}

配置完成后重启nginx

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

6.防火墙放行端口

# 开放端口
firewall-cmd --zone=public --add-port=443/tcp --permanent
# 顺便把 OnlyOffice 用到的两个端口也开放,后面就不用再开了
firewall-cmd --zone=public --add-port=8088/tcp --permanent
firewall-cmd --zone=public --add-port=8443/tcp --permanent
# 重载防火墙
firewall-cmd --reload

这时候应该可以通过你的服务器IP+端口 or 域名https://example.seafile.com访问Seafile主页了。

配置完端口转发后还需要在Seafile系统管理中配置一下端口。

如果你的域名没有备案的话是无法访问443端口的,需要在路由器里配置端口转发到443(前提是得有公网IP和DDNS)。

7. 配置 docker-compose 开机自启动

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

至此 Seafile 安装完成,下面开始安装 OnlyOffice。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

二、安装 OnlyOffice

OnlyOffice 官方号称完美替代 LibreOffice,100%兼容微软三件套(Microsoft Word、Excel 和 PowerPoint)。

Seafile建议完全按照 OnlyOffice 官方文档部署即可,没错我也是这么干的,但是在 ssl 配置上折腾了大半天,所以我还是再啰嗦一遍。

再次附上 OnlyOffice 官方文档 Docker-DocumentServer

1. docker 拉取 onlyoffice 镜像

 # 拉取 onlyoffice 镜像
docker pull onlyoffice/documentserver

2. 创建目录映射 docker 容器内的目录

 # 创建几个目录 用于 onlyoffice 的数据卷
cd /opt
# 建议与 seafile 容器都放在 /opt 目录方便管理
mkdir seafile-onlyoffice
cd seafile-onlyoffice
mkdir log
mkdir data
mkdir lib
mkdir db

3. 启动 OnlyOffice 容器

# 启动onlyoffice镜像(绑定 http 8088 端口和 https 8443 端口)# 8080端口目前也被封了,所以这里用8088,不为别的就是图个吉利
docker run -i -t -d -p 8088: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 # 当然这样一行直接运行镜像也是可以的
docker run -i -t -d -p 8088: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

前面如果已经对防火墙端口放行了的话,这时候通过ip+端口应该就可以访问到了。

4. 配置 OnlyOffice https ssl 证书(不开通https的可以跳过此步骤)

# 复制 onlyoffice容器中的 nginx 配置文件 ds.conf 到主机
docker cp onlyoffice:/etc/onlyoffice/documentserver/nginx/ds.conf /opt/seafile-onlyoffice/
# 然后修改配置文件,如下

**修改 onlyoffice nginx https 配置,**主要配置证书目录和协议套件

## HTTPS host
server {
listen 0.0.0.0:443 ssl http2;
listen [::]:443 ssl http2 default_server;
server_name v.itmm.wang;
server_tokens off;
root /usr/share/nginx/html; ## Strong SSL Security
## https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
ssl on;
ssl_certificate /var/www/onlyoffice/Data/certs/你的证书.pem;
ssl_certificate_key /var/www/onlyoffice/Data/certs/你的证书.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
proxy_set_header X-Forwarded-For $remote_addr;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
## [Optional] If your certficate has OCSP, enable OCSP stapling to reduce the overhead and latency of running SSL.
## Replace with your ssl_trusted_certificate. For more info see:
## - https://medium.com/devops-programming/4445f4862461
## - https://www.ruby-forum.com/topic/4419319
## - https://www.digitalocean.com/community/tutorials/how-to-configure-ocsp-stapling-on-apache-and-nginx
# ssl_stapling on;
# ssl_stapling_verify on;
# ssl_trusted_certificate /etc/nginx/ssl/stapling.trusted.crt;
# resolver 208.67.222.222 208.67.222.220 valid=300s; # Can change to your DNS resolver if desired
# resolver_timeout 10s; ## [Optional] Generate a stronger DHE parameter:
## cd /etc/ssl/certs
## sudo openssl dhparam -out dhparam.pem 4096
##
#ssl_dhparam /var/www/onlyoffice/Data/certs/dhparam.pem; include /etc/nginx/includes/ds-*.conf;
}

配置完成后文件复制回容器,然后重启nginx。

# 配置完成后文件复制回容器
docker cp /opt/seafile-onlyoffice/ds.conf onlyoffice:/etc/onlyoffice/documentserver/nginx/ # 将证书上传到 certs 目录(手动创建 certs 目录)
/opt/seafile-onlyoffice/data/certs/ # 重启 onlyoffice
docker restart onlyoffice

好了,这时候用https访问一下试试。

5. 配置 Seafile 调用 OnlyOffice

添加以下配置信息到 /opt/seafile-data/seafile/conf/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://你的域名和端口/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,然后从 seafile 就可以正常打开编辑 office 文档了。

# 重启 Seafile 服务
docker-compose restart

6. 配置 OnlyOffice 自动保存

使用 OnlyOffice 打开文件时,OnlyOffice 默认只会在用户关闭页面后向 Seafile 发送文件保存请求。 如果用户长时间未关闭页面,则用户对文件的更改将不会及时保存在Seafile上。

您现在可以通过更改 OnlyOffice 的配置来设置自动保存(实时保存)。

# 复制 onlyoffice容器中的配置文件 local.json 到主机
docker cp onlyoffice:/etc/onlyoffice/documentserver/local.json /opt/seafile-onlyoffice/

按照 Seafile 官方说明修改 local.json,json文件中增加 autoAssembly 配置

{
"services": {
"CoAuthoring": {
// 在 CoAuthoring 中 增加 autoAssembly 属性配置
"autoAssembly": {
"enable": true,
"interval": "5m"
}, //注意这个,逗号
}
}
}

local.json 文件传回容器,然后重启 OnlyOffice

# 复制 local.json 到docker容器
docker cp /opt/seafile-onlyoffice/local.json onlyoffice:/etc/onlyoffice/documentserver/ # 重启 OnlyOffice
docker restart onlyoffice

7. [可选] 开启 onlyoffice 演示Demo

# 配置 onlyoffice 演示Demo
docker exec onlyoffice supervisorctl start ds:example

三、遇到的问题

1. Seafile 初始化完成后,启动报错,提示没有权限

错误信息:

chown: changing ownership of '/var/lib/mysql/': Permission denied

解决办法:

# 关闭selinux
vim /etc/sysconfig/selinux
# SELINUX=enforcing 改为 SELINUX=disabled

2. 出现如下错误

/usr/bin/docker-current: Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/65f3c109fb903539820f84856d2725af784f2f03f95b1f0214e34184e4d61ff7-init/merged: invalid argument.
See '/usr/bin/docker-current run --help'.

解决办法:

# 停止docker服务
systemctl stop docker
# 清理镜像
rm -rf /var/lib/docker
# 修改存储类型
vi /etc/sysconfig/docker-storage
# 把空的DOCKER_STORAGE_OPTIONS参数改为overlay:
DOCKER_STORAGE_OPTIONS="--storage-driver overlay"
# 禁用selinux,去掉option的–selinux-enabled
vim /etc/sysconfig/docker
# 启动docker应该就可以了
systemctl start docker

四、开启Wiki功能

可以在 /opt/seafile-data/seafile/conf/seahub_settings.py 中添加一行配置命令开启wiki功能

ENABLE_WIKI = True

用seafile编写wiki / gitbook

  1. 新建一个资料库 BookName

  2. 新建并编辑若干md文件

  3. 在【工具】【 已发布的资料库】中,点击“发布资料库”,选择BookOne

  4. 发布后,任何人都可以查看

注意!!!文件排列顺序是按照文件名从小到大排序的,不是修改的时间 最好文件名用1234或者时间开头命名

基于Docker 部署 Seafile+OnlyOffice+Wiki插件的更多相关文章

  1. 基于Docker部署Dubbo+Nacos服务

    一.说明 本文介绍基于 Docker 部署一套 Dubbo + Nacos 的微服务环境,并解决容器里的 IP 及端口的访问问题. 基于上文<基于jib-maven-plugin快速构建微服务d ...

  2. 基于Docker部署nodejs应用

    基于Docker部署nodejs应用 背景 公司基于Vue.js的项目最近需要部署到云端,因此需要先行在公司内部Docker环境下验证相关技术,因而有本文之前提. 本文展示在Docker容器中,应用部 ...

  3. 基于Docker部署ETCD集群

    基于Docker部署ETCD集群 关于ETCD要不要使用TLS? 首先TLS的目的是为了鉴权为了防止别人任意的连接上你的etcd集群.其实意思就是说如果你要放到公网上的ETCD集群,并开放端口,我建议 ...

  4. [Docker-2]排查基于docker部署mysql主从过程中遇到“Slave_IO_Running: Connecting”这个疑难杂症

    关于"Slave_IO_Running: Connecting"的排查方法,已经有很多博客写得清清楚楚了(很多都是复制粘贴..真浪费时间),那么如果已有的常规排查方法都不能解决你的 ...

  5. Ubuntu系统下基于docker部署Jenkins环境

    本文是在ubuntu环境下安装jenkins,jenkins运行在docker容器中, 至于docker如何安装,请参考https://www.cnblogs.com/xingyunqiu/p/115 ...

  6. 基于docker部署jenkins

    1. 拉镜像 和其他的部署的镜像的方式一样,通常是直接使用docker search jenkins 然后直接docker pull jenkins 此时,在安装插件的时候发现插件都安装失败,提示je ...

  7. CentOS中实现基于Docker部署BI数据分析

    作为一个专业小白,咱啥都不懂. linux不懂,docker不懂. 但是我还想要完成领导下达的任务:在linux中安装docker后部署数据可视化工具.作为一名敬业 的打工人摆烂不可以,躺平不可以,弱 ...

  8. Linux Centos7 环境基于Docker部署Zookeeper服务搭建实战

    配置Zookeeper安装目录 在宿主机配置zookeeper安装目录:/docker/develop/zookeeper 并且在文件夹创建 data 和logs 目录: mkdir -p /dock ...

  9. Linux系统 Centos7 环境基于Docker部署Rocketmq服务

    消息队列 基本概述 MQ,Message Queue,基于TCP协议构建的简单协议,区别于具体的通信协议. 基于通信协议定义和抽象的更高层次的通信模型,一般都是生产者和消费者模型,又或者说服务端和客户 ...

  10. 基于docker部署ceph以及修改docker image

    前言 容器和ceph的结合已经在一些生产环境当中做了尝试,容器的好处就是对运行环境的一个封装,传统的方式是集成为ISO,这个需要一定的维护量,而容器的相关操作会简单很多,也就有了一些尝试,个人觉得如果 ...

随机推荐

  1. No module named virtualenvwrapper 虚拟环境报错

    No module named virtualenvwrapper 虚拟环境报错 安装虚拟环境命令 sudo pip install virtualenv sudo pip install virtu ...

  2. R3300L, Q7 ATV Android9固件

    R3300L, Q7 ATV Android9固件 固件来源 https://www.znds.com/tv-1239603-1-1.html 之前在恩山上发布过1080p安卓6固件 https:// ...

  3. 研发三维GIS系统笔记/实现wgs84投影-001

    1. 工作内容,改造引擎,支持wgs84投影 改造原因:目前投影是墨卡托投影(与Google Map一致) 目前的GIS系统是二维的采用这个坐标系是没有问题的 但不支持wgs84瓦片数据以及高程数据, ...

  4. ChatGPT API FAQ

    ChatGPT API FAQ General questions about the ChatGPT API Written by Johanna C.. Updated over a week a ...

  5. CF433B

    题目简化和分析: 为了更加快速的求出答案,好像没前缀和快速. 为了大家更好的理解线段树,我们使用了线段树. 如果您并不了解线段树,可以转战模板. 因为我们知道线段树可以快速求区间和,于是我们建两棵树. ...

  6. Redis主从复制部署小结

    Redis主从 搭建主从架构 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离. 主从数据同步原理 全量同步 主从第一次建立连接时,会执行全量同 ...

  7. splay + 垃圾回收 知识点与例题的简要讲解

    splay 简要讲解 前置芝士:普通二叉树 splay tree是一个越处理越灵活的数据结构,通过splay(伸展)操作,使整棵树的单次查询时间复杂度接近于O(log n),整棵树的高度也接近于log ...

  8. c#享元模式详解

    基本介绍:   享元模式的定义:运用共享技术有效地支持大量细粒度的对象重复使用.适用于大量小粒度的对象造成的运行效率和内存使用效率低下的情况.   "享元"顾名思义,"享 ...

  9. [Python急救站课程]圆的面积计算

    利用公式计算圆的面积程序 radius = 25 # 设置圆的面积 area = 3.1415926 * radius * radius # 输入计算公式 print(area) # 输出计算值 pr ...

  10. Python 既是解释型语言,也是编译型语言

    哈喽大家好,我是咸鱼 不知道有没有小伙伴跟我一样,刚开始学习 Python 的时候都听说过 Python 是一种解释型语言,因为它在运行的时候会逐行解释并执行,而 C++ 这种是编译型语言 不过我今天 ...