由于想在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账户登录
mysql -uroot -p新建nextcloud需要使用的数据库
create database nextclouddb;可使用
xxxxxxxxxxshow databases;查看现有数据库
之后新建专门用来操作该数据库的超级管理员,拥有所有权限,但是只能在Docker的固定网段登录,无法从外网登录。该管理员用户会在之后首次配置nextcloud时供nextcloud使用,如果没有所有权限,nextcloud会报错。
mysql> CREATE USER 'nextcloud'@'172.17.0.0/255.255.255.0' IDENTIFIED BY 'password';mysql> GRANT ALL PRIVILEGES -> ON nextclouddb.* -> TO 'nextcloud'@'172.17.0.0/255.255.255.0';
二、部署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文件
nextcloud.example.me{ gzip proxy / 172.17.0.4:80 { websocket transparent } header / Strict-Transport-Security "max-age=31536000;"} onlyoffice.example.me{ gzip proxy / 172.17.0.6:80 { websocket transparent } header / Strict-Transport-Security "max-age=31536000;"}这里需要注意 transparent 选项是必须的,该选项会让Caddy在进行反代的时候转发所有原始请求的主机信息,保证nextcloud不会返回Docker内网地址。
header / Strict-Transport-Security "max-age=31536000;" 表示启用HSTS,强制使用HTTPS进行连接。
至此,全部部署完毕,Caddy会负责全程的Https加密工作,并且证书也是自动申请并更新的,无需操心。
未确认的参数修改
按理说,部署完Nextcloud之后,应该修改Nextcloud容器中的/var/www/html/config/config.php文件,在文件末尾添加如下参数。
x
'onlyoffice' => array ( 'verify_peer_off' =>TRUE, ),); ##此行是原文件中已有的结尾部分由于已经有Caddy全称是用Https保驾护航,所以没有测试在全程Https环境下是否还需要修改该参数。
评论
发表评论