写在前面的废话
最近刚从ownCloud换成NextCloud。搭建自然还是通过docker,用的是官方提供的docker-compose。本以为会行云流水一切顺利,没想到还遇到不少坑。这里简单罗列一下部署过程中遇到的坑以及解决办法。
1. MariaDB无限重启
症状
编辑好docker-compose.yml
文件,执行docker-compose up -d
后用docker ps
命令查看运行的容器,发现mariadb一直都是“restarting…”的状态。
解决方案
不知道有没有人通过修改pull的mariadb版本解决问题。这里建议一劳永逸,把mariadb替换成mysql。修改docker-compose.yml
:
# ...
services:
db:
# image: mariadb <- 删掉
image: mysql # <- 修改成
restart: always
# ...
停止+删除“restarting…”的容器,重新执行docker-compose up -d
。
2. 不信任的域名访问
症状
当访问NextCloud所用域名与第一次配置NextCloud时的所用域名不符时,网页会显示“通过不被信任的域名访问”页面。
解决方案
- 执行
docker exec -it <NextCloud实例名/hash> bash
进入容器控制台 - 编辑文件
/var/www/html/config/config.php
,找到
'trusted_domains' =>
array (
0 => '<你第一次配置时用的host>',
),
- 添加访问用的域名
'trusted_domains' =>
array (
0 => '<你第一次配置时用的host>',
1 => '<其他访问域名1>',
2 => '<其他访问域名2>',
# ...
),
- 退出容器控制台,执行
docker restart <NextCloud实例名/hash>
3. HTTPS反向代理NextCloud后APP不能访问
症状
用Nginx等Web服务器反向代理NextCloud并添加证书后,手机APP登录NextCloud弹出错误信息,并且被强制登录到网页版。在APP里看网页版着实蛋疼。
解决方案
- 在“2. 不信任的域名访问”第2步提到的
/var/www/html/config/config.php
中添加以下内容:
'overwriteprotocol' => 'https',
- 退出容器控制台,执行
docker restart <NextCloud实例名/hash>
注意:这样做会导致HTTP登录方式失效。所以要还是不要TLS,二者只能选其一。
4. NextCloud无法挂载SMB/CIFS
症状
无论是ownCloud还是NextCloud,挂在外部存储都需要安装“External storage”插件。但用官方compose脚本安装是默认不带samba支持的。因此在“External storage”设置界面会显示诸如“Samba支持未安装”之类的提示。
解决方案
- 用“2. 不信任的域名访问”第1步提到的方法进入容器控制台
- 执行安装脚本
apt-get update
apt-get install -y libsmbclient-dev smbclient
pecl install smbclient
docker-php-ext-enable smbclient
或者从部署阶段就解决问题:
1. 在docker-compose.yml
所在目录创建文件Dockerfile
并添加如下内容:
FROM nextcloud:apache
RUN apt-get update && apt-get install -y libsmbclient-dev smbclient && pecl install smbclient && docker-php-ext-enable smbclient
- 修改
docker-compose.yml
以下部分:
app:
# image: nextcloud <- 删掉
build: ./ # <- 改为
- 停止+删除运行中的NextCloud容器,重新执行
docker-compose up -d