使用Docker部署Caddy+Nextcloud+OnlyOffice全记录

由于想在NAS上部署Nextcloud和OnlyOffice,但是NAS本身并不是标准Linux环境,所以尝试使用Docker进行部署。以下为成功后的总结和记录。

一、部署MySql数据库

使用官方制作的Docker镜像,挂载点3个,但都需要使用bind模式,否则会出现MySql服务器无权限读写数据的情况。ENV运行环境选项下要添加 MYSQL_ROOT_PASSWORD=password ,设置root用户密码。

Volume容器内地址
/etc/mysql/etc/mysql
/var/lib/mysql/var/lib/mysql
/var/lib/mysql-files/var/lib/mysql-files

MySql容器启动之后,进入容器命令行,使用root账户登录

新建nextcloud需要使用的数据库

可使用

查看现有数据库

之后新建专门用来操作该数据库的超级管理员,拥有所有权限,但是只能在Docker的固定网段登录,无法从外网登录。该管理员用户会在之后首次配置nextcloud时供nextcloud使用,如果没有所有权限,nextcloud会报错。

 

二、部署Nextcloud

直接使用官方内建apache2的Docker镜像,挂载点两个目录即可,不需要额外的设置。

Volume容器内地址
apache2/etc/apache2
nextcloud-data/var/www/html

三、部署OnlyOffice

使用官方Docker镜像,该镜像非常重,属于all in one的类型。 注意,该镜像截至2018年9月4日仍有bug,使用Portainer部署时要选择Interactive & TTY (-i -t),否则会出现奇怪的bug。 挂载volume有6个之多。可参考我第一次成功部署时起的名字。

Volume容器内地址
OnlyOffice/etc/onlyoffice
OnlyOffice.data/var/www/onlyoffice/Data
OnlyOffice.font/usr/share/fonts/truetype/custom
OnlyOffice.lib/var/lib/onlyoffice
OnlyOffice.log/var/log/onlyoffice
OnlyOffice.lib/var/lib/postgresql

 

四、部署Caddy

部署Caddy服务器,主要目的是做代理,挂载点如下。

Volume容器内地址
/etc/Caddyfile/etc/Caddyfile
Caddy/root/.caddy
Caddy/srv

需要注意的是,需要先在宿主机中使用 vim /etc/Caddyfile 命令新建文件,否则会报错。 之后编辑Caddyfile文件

这里需要注意 transparent 选项是必须的,该选项会让Caddy在进行反代的时候转发所有原始请求的主机信息,保证nextcloud不会返回Docker内网地址。

header / Strict-Transport-Security "max-age=31536000;" 表示启用HSTS,强制使用HTTPS进行连接。

至此,全部部署完毕,Caddy会负责全程的Https加密工作,并且证书也是自动申请并更新的,无需操心。

未确认的参数修改

按理说,部署完Nextcloud之后,应该修改Nextcloud容器中的/var/www/html/config/config.php文件,在文件末尾添加如下参数。

由于已经有Caddy全称是用Https保驾护航,所以没有测试在全程Https环境下是否还需要修改该参数。

评论