使用 Docker 本地部署 onlyoffice 协作空间(社区版)

该文章已生成可运行项目,

使用 Docker 本地部署 onlyoffice 协作空间(社区版)

第一次使用Docker,有一些解释可能不太准确,如有错误,还请指出。

Docker 预备工作

准备工作:下载 Docker,下载后 Docker 会提示 sign in,可以自由选择是否登录,功能都可以正常使用,此时页面如下:

在这里插入图片描述

点击设置,将提示的更新与安装全都操作一遍

在这里插入图片描述

⚠️ Windows 需要安装并启用 Linux 子系统(WSL)可以参考CSDN文章:WSL的安装与使用 (超详细图文版安装教程) 进行操作。

Onlyoffice 之 DocumentServer

安装带有全面协作功能的 onlyoffice 则使用下面的内容,这里的 JWT 先设置为 false

sudo docker run -i -t -d -p <PORT_NUMBER>:80 --restart=always -e JWT_SECRET=my_jwt_secret onlyoffice/documentserver

上面的 <PORT_NUMBER> 可以自己随便写一个值,比如 1212 ,并且这里的 my_jwt_secret 改为 false ,也就是下面的内容:

sudo docker run -i -t -d -p 1212:80 --restart=always -e JWT_SECRET=false onlyoffice/documentserver

输入密码后,会出现下面的内容:

Unable to find image 'onlyoffice/documentserver:latest' locally

不用担心,只要网络没问题,会自动下载的。如果没有自动下载那就自己手动拉取。在终端中使用命令行拉取 documentserver 镜像(不写版本则默认最新版)

docker pull onlyoffice/documentserver

运行完毕后可以去 Docker 查看,可以发现 Images 已经装好了,这个时候Docker 的 Images 页面也出现 onlyoffice/documentserver

在这里插入图片描述

然后根据 onlyoffice/documentserver 镜像创建并启动容器,可以自己设置端口号,这里我设定的是9631:80 ,安装官网我这里的测试直接写 false

docker run -i -t -p 9631:80 --restart=always -e JWT_ENABLED=false onlyoffice/documentserver

接着在浏览器中输入localhost:9631 ,或者输入本机的 IP 地址,页面如下所示

在这里插入图片描述

直接点击下面的测试样例会出现 502 Bad Gateway 的错误提示,不用担心,只需要根据页面上的提示,把三个命令依次执行,之后再点击就可以正常查看,页面如下所示

在这里插入图片描述

可能出现的问题

不过这里点击Create new 下面的任何格式文件后,可能会出现下面的情况

在这里插入图片描述

原本我也被迷惑了,以为是 localhost 无法被识别的问题,不过查询 onlyoffice 文档 后发现遗漏了下面内容:

在这里插入图片描述

/var是 Linux 系统中一个常用的目录,用于存放系统运行时变化的数据 。像日志文件、缓存文件、数据库文件、以及网站相关的数据(如证书)等都存放在/var目录下的子目录中。

也就是说需要在创建容器的时候进行一些设置,这样后续方便修改数据,比如文档增删改查、用户权限等。

使用的方法是挂载-v,将主机上的文件与容器内的某个文件建立关联。

举例:团队协作修改文档,相当于团队成员有了一个公共的文件柜来存放共同编辑的文档。

  • 同步更新:团队成员 A 在容器中编辑文档时,容器内存储该文档的目录(比如为 /var/www/onlyoffice/Data )里的文档内容发生了改变;在挂载的作用下,主机上的目录 /app/onlyoffice/DocumentServer/data 目录里面对应的文档也同步更新;
  • 数据持久化:即使容器重新启动或者删除重建,文档数据已然保存在主机的/app/onlyoffice/DocumentServer/data 目录中;
  • 管理:团队管理员可以直接在主机上管理文档数据;

解决方法

文档提供的对应代码如下:

sudo docker run -i -t -d -p 80:80 --restart=always \
    -v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  \
    -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  \
    -v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice \
    -v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql -e JWT_SECRET=my_jwt_secret onlyoffice/documentserver

看来大概是因为没有进行数据挂载。考虑到在终端中一行代码最方便,把代码修改一下,并且修改 JWTfalse

sudo docker run -i -t -d -p 80:80 --restart=always -v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  -v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice -v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql -e JWT_SECRET=false onlyoffice/documentserver

所以在启动的时候设置一下挂载即可。

注意:需要提前在 C 盘下面创建上面涉及到的几个文件夹,这是为了将容器中的文件与本地文件进行关联。此时就能正常创建新文件了,如下所示:

在这里插入图片描述

可以查看新建的本地文件夹(自己手动建立或者使用mkdir 命令)。

在这里插入图片描述

不过上面这些只是测试用例,我们需要的是协作空间管理功能,也就是community server

Onlyoffice 之 CommunityServer

这一部分在 OnlyOffice 官网没有展示,具体操作可以在GitHub 上的 Docker-CommunityServer 项目找到,所以下面步骤基本上是 README 文档上的内容。

本地创建文件夹

在主机上新建文件夹用来存放容器中的文件。涉及到 MySQL Server、Community Server、Document Server、Mail Server、Control Panel 五个部分。

在这里插入图片描述

不嫌麻烦也可以自己手动创建,每个子目录就不展示了

在这里插入图片描述

文件夹创建好之后,创建 onlyoffice 的网络:

sudo docker network create --driver bridge onlyoffice

网络驱动为桥接模式,它会在系统中创建一个可用于 ONLYOFFICE 相关容器连接的网络环境,以便不同的 ONLYOFFICE 组件(如 Community Server、Document Server、Mail Server 等)可以在同一个网络中进行通信。

可以使用下面的命令查看容器的网络模型,<容器ID>替换为对应容器的 ID:

docker inspect --format='{{.HostConfig.NetworkMode}}' <容器ID>

在这里插入图片描述

图片内容具体含义:

  • 第一个为 onlyoffice/documentserver 创建的容器,网络模式为 bridge
  • 第二个为 onlyoffice/communityserver 创建的容器,网络模式为 bridge
  • 第三个为 MySQL 创建的容器,网络模式为 onlyoffice

MySQL

将 MySQL 的配置信息(最大连接数、数据包大小等)写入到并存储在/app/onlyoffice/mysql/conf.d/onlyoffice.cnf 文件中:

echo "[mysqld]
sql_mode = 'NO_ENGINE_SUBSTITUTION'
max_connections = 1000
max_allowed_packet = 1048576000
group_concat_max_len = 2048" > /app/onlyoffice/mysql/conf.d/onlyoffice.cnf

下面安装使用Community ServerMail Server 所需条件:

  • onlyoffice_user 是 Community Server 所必需的用户
  • mail_admin 是在安装 Mail Server 的情况下所必需的用户
echo "ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'my-secret-pw';
CREATE USER IF NOT EXISTS 'onlyoffice_user'@'%' IDENTIFIED WITH mysql_native_password BY 'onlyoffice_pass';
CREATE USER IF NOT EXISTS 'mail_admin'@'%' IDENTIFIED WITH mysql_native_password BY 'Isadmin123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'onlyoffice_user'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'mail_admin'@'%';
FLUSH PRIVILEGES;" > /app/onlyoffice/mysql/initdb/setup.sql

脚本的具体内容包括:

  • 修改 root 用户的密码认证方式为 mysql_native_password 并设置密码
  • 创建 onlyoffice_usermail_admin 用户,同样使用 mysql_native_password 认证方式并设置相应密码(Isadmin123
  • rootonlyoffice_usermail_admin 用户授予对所有数据库和表的所有权限
  • 最后刷新权限

接着操作,创建 MySQL 容器:

sudo docker run --net onlyoffice -i -t -d --restart=always --name onlyoffice-mysql-server -v /app/onlyoffice/mysql/conf.d:/etc/mysql/conf.d -v /app/onlyoffice/mysql/data:/var/lib/mysql -v /app/onlyoffice/mysql/initdb:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=onlyoffice mysql:8.0.29

Community Server

安装 Community Server:

sudo docker run --net onlyoffice -i -t -d --privileged --restart=always --name onlyoffice-community-server -p 80:80 -p 443:443 -p 5222:5222 --cgroupns=host -e MYSQL_SERVER_ROOT_PASSWORD=my-secret-pw  -e MYSQL_SERVER_DB_NAME=onlyoffice  -e MYSQL_SERVER_HOST=onlyoffice-mysql-server -e MYSQL_SERVER_USER=onlyoffice_user -e MYSQL_SERVER_PASS=onlyoffice_pass -v /app/onlyoffice/CommunityServer/data:/var/www/onlyoffice/Data -v /app/onlyoffice/CommunityServer/logs:/var/log/onlyoffice -v /app/onlyoffice/CommunityServer/letsencrypt:/etc/letsencrypt -v /sys/fs/cgroup:/sys/fs/cgroup:rw onlyoffice/communityserver

数据存储配置

下面是容器中数据存储的情况:

  • /var/log/onlyoffice Community Server logs
  • /var/www/onlyoffice/Data Community Server data
  • /etc/letsencrypt information on generated certificates,是用于保障服务器通信安全的文件

下面是容器中的数据与本地数据进行关联的操作:

sudo docker run -i -t -d -p 80:80 --cgroupns=host -v /app/onlyoffice/CommunityServer/logs:/var/log/onlyoffice  -v /app/onlyoffice/CommunityServer/data:/var/www/onlyoffice/Data -v /app/onlyoffice/CommunityServer/letsencrypt:/etc/letsencrypt  -v /sys/fs/cgroup:/sys/fs/cgroup:rw onlyoffice/communityserver

为了避免端口冲突可以用下面的命令替换上面的命令:

sudo docker run -i -t -d --privileged -p 8080:80 --cgroupns=host -v /app/onlyoffice/CommunityServer/logs:/var/log/onlyoffice  -v /app/onlyoffice/CommunityServer/data:/var/www/onlyoffice/Data -v /app/onlyoffice/CommunityServer/letsencrypt:/etc/letsencrypt  -v /sys/fs/cgroup:/sys/fs/cgroup:rw onlyoffice/communityserver

此外还有一些额外的连接

sudo docker run -i -t -d --privileged -p 80:80 -p 443:443 -p 5222:5222 --cgroupns=host -v /app/onlyoffice/CommunityServer/logs:/var/log/onlyoffice  -v /app/onlyoffice/CommunityServer/data:/var/www/onlyoffice/Data -v /app/onlyoffice/CommunityServer/letsencrypt:/etc/letsencrypt  -v /sys/fs/cgroup:/sys/fs/cgroup:rw onlyoffice/communityserver
sudo docker run -i -t -d -p 8080:80 -v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data -v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice -v /app/onlyoffice/DocumentServer/rabbitmq:/var/lib/rabbitmq  -v /app/onlyoffice/DocumentServer/redis:/var/lib/redis -v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql onlyoffice/documentserver

同时打开创建的 Community Server 的容器以及 Document Server 之后,页面如下所示:
在这里插入图片描述
按照要求进行注册就可以得到下面的页面:
在这里插入图片描述

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值