使用 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
看来大概是因为没有进行数据挂载。考虑到在终端中一行代码最方便,把代码修改一下,并且修改 JWT 为 false:
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 Server 和 Mail 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_user和mail_admin用户,同样使用mysql_native_password认证方式并设置相应密码(Isadmin123) - 为
root、onlyoffice_user和mail_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/onlyofficeCommunity Server logs/var/www/onlyoffice/DataCommunity Server data/etc/letsencryptinformation 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 之后,页面如下所示:

按照要求进行注册就可以得到下面的页面:

&spm=1001.2101.3001.5002&articleId=145604603&d=1&t=3&u=37c49e27585744719d26ac505de359b7)
362

被折叠的 条评论
为什么被折叠?



