由于想在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;
可使用
xxxxxxxxxx
show 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环境下是否还需要修改该参数。
评论
发表评论