1. 介绍
上次,咕咕在博客里分享了aapanel(宝塔)安装Nextcloud的教程——【好玩的项目】可能是史上最全的基于宝塔面板(海外版aapanel)的Nextcloud网盘搭建教程!(对于Nextcloud还不了解的小伙伴也可以看一下这篇文章)
当时不用Docker搭建的原因就是Nextcloud安装完成之后,
这边的安全与设置警告
会有很多提示信息,需要你一个一个优化,用Docker的话,会非常麻烦。而用aapanel(宝塔)安装,由于有一个可视化的面板,很多操作会容易很多。
然而,从文章发布之后,后台一直还是有小伙伴询问用Docker安装Nextcloud的事情,今天咕咕自己也稍微尝试了一下,基本上把安全与设置警告
的信息都解决了,所以想着索性分享给大家。
相对于之前的安装方法,这个Docker版本的安装最大的两个特点:
- 更新方便
- 搬家、转移方便
今天用到的镜像来自Nextcloud官方镜像:https://hub.docker.com/_/nextcloud
支持多平台:linux/386、linux/amd64、linux/arm/v5
2. 搭建环境
- 服务器:
腾讯香港轻量应用服务器24元/月VPS一台展示用的服务器是Netcup特价款,本期搭建用的是Vultr的服务器,按小时计费,可随时销毁(最好是选非大陆的服务器)(腾讯轻量购买链接)Hetzner注册免费得25欧试用金有效期一个月 - 系统:Debian 10(DD脚本 非必需DD用原来的系统也OK)
- 域名一枚,并做好解析到服务器上(域名购买、域名解析 视频教程)
- 安装好Docker、Docker-compose(相关脚本)
- 【非必需】提前安装好宝塔面板海外版本aapanel,并安装好Nginx(安装地址)
- 【非必需但本次使用】安装好Nginx Proxy Manager(相关教程)
3. 搭建视频(还没拍 待上传 = =)
YouTube:https://youtu.be/twhyKoIBiVY
哔哩哔哩【高清版本可以点击去吐槽到B站观看】:
4. 搭建方式
4.1 搭建
服务器初始设置,参考
【Docker系列】不用宝塔面板,小白一样可以玩转VPS服务器!
sudo -i # 切换到root用户
apt update -y # 升级packages
apt install wget curl sudo vim git # Debian系统比较干净,安装常用的软件
创建一下安装的目录:
mkdir -p /root/data/docker_data/nextcloud
cd /root/data/docker_data/nextcloud
nano docker-compose.yml
docker-compose.yml
填入以下内容:
2022年5月12日更新版本,建议直接用这个,镜像比官方好用,可以省去后面的一些安全警告的配置等(记得NPM第一页那边,选https
):
新版的config.php
位置在
/root/data/docker_data/nextcloud/config/www/nextcloud/config/config.php
apps目录在这边:
/root/data/docker_data/nextcloud/config/www/nextcloud/apps
升级可以直接在后台升级(记得先备份一下数据稳妥一些):
---
version: "2.1"
services:
nextcloud:
image: lscr.io/linuxserver/nextcloud:latest
container_name: nextcloud
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- MYSQL_HOST=mysql
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=nextcloud
volumes:
- /root/data/docker_data/nextcloud/config:/config
- /root/data/docker_data/nextcloud/data:/data
ports:
- 4433:443
restart: unless-stopped
mysql:
image: mysql:8.0
container_name: nextcloud-db
restart: unless-stopped
environment:
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=nextcloud
- MYSQL_ROOT_PASSWORD=nextcloud
volumes:
- /root/data/docker_data/nextcloud/db:/var/lib/mysql
旧版:
version: "3"
services:
nextcloud:
container_name: nextcloud-app
image: nextcloud:latest
restart: unless-stopped
ports:
- 8080:80
environment:
- MYSQL_HOST=mysql
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=nextcloud
volumes:
- /root/data/docker_data/nextcloud/data:/var/www/html
mysql:
image: mysql:8.0
container_name: nextcloud-db
restart: unless-stopped
environment:
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=nextcloud
- MYSQL_ROOT_PASSWORD=nextcloud
volumes:
- /root/data/docker_data/nextcloud/db:/var/lib/mysql
#volumes:
# mysql:
# nextcloud:
没问题的话,ctrl+x
退出,按y
保存,enter
确认。
运行:
docker-compose up -d
访问:http:服务ip:8080
即可。
注意:
1、不知道服务器IP,可以直接在命令行输入:
curl ip.sb
,会显示当前服务器的IP。2、遇到访问不了的情况,请在宝塔面板的防火墙和服务商的后台防火墙里打开对应端口。
4.2 更新
cp -r /root/data/docker_data/nextcloud /root/data/docker_data/nextcloud.archive # 万事先备份,以防万一
cd /root/data/docker_data/nextcloud # 进入docker-compose所在的文件夹
docker-compose pull # 拉取最新的镜像
docker-compose up -d # 重新更新当前镜像
利用Docker-compose搭建的应用,更新非常容易~
4.3 卸载
cd /root/data/docker_data/nextcloud # 进入docker-compose所在的文件夹
docker-compose down # 停止容器,此时不会删除映射到本地的数据
rm -rf /root/data/docker_data/nextcloud # 完全删除映射到本地的数据
5. 反向代理
实测不管是Nginx Proxy Manager还是aapanel,反向代理之后,均无法连接到远程云端(比如OneDrive、Google Drive)。
有成功的小伙伴欢迎评论区留言分享。
5.1 利用Nginx Proxy Manager
在添加反向代理之前,确保你已经完成了域名解析,不会的可以看这个:域名一枚,并做好解析到服务器上(域名购买、域名解析 视频教程)
之后,登陆Nginx Proxy Manager(不会的看这个:安装Nginx Proxy Manager(相关教程))
注意:
Nginx Proxy Manager(以下简称NPM)会用到
80
、443
端口,所以本机不能占用(比如原来就有Nginx)
直接丢几张图:
注意填写对应的
域名
和端口
,按文章来的话,应该是8080
这边申请成功后,千万记得再次打开,然后把
Force SSL
和HSTS Enable
勾选上
然后就可以用域名来安装访问了。
6. 安全与设置警告解决方法
6.1 通过不被信任的域名访问
如果你啥也没设置,第一步就会遇到这个问题。
我们需要按提示的要求进行设置:
cd /root/data/docker_data/nextcloud/data/config
nano config.php
加入:
1 => 'nx.gao.ee',
注意改成自己的域名。
ctrl+x
退出,按y
保存,按 enter
退出。
6.2 你的实例正生成不安全的URL
nano config.php
加入这个:
'overwrite.cli.url' => 'https://nx.gao.ee',
'overwriteprotocol' => 'https',
ctrl+x
退出,按y
保存,按 enter
退出。
6.3 您的安装没有设置默认的电话区域
nano config.php
加入这个:
'default_phone_region' => 'CN',
ctrl+x
退出,按y
保存,按 enter
退出。
6.4 未正确设置以解析……
打开Nginx Proxy Manager,找到Advanced,加入这个
location = /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
保存即可。
6.5 php-imagick 模块不支持 SVG模块不支持SVG
虽然不影响正常使用,但强迫症使然,总想解决掉。
经过一番查找,发现这个和libmagickcore的某个组件有关,试着安装看看。
首先我们需要进入到容器内部,然后安装。
先来查看容器ID:
docker container ls
进入Nextcloud容器:
docker exec -it 2ee2 bash # 只要写前四位即可
安装:
apt update -y
apt install libmagickcore-6.q16-6-extra -y
然后退出即可
exit
注意:此方法修改,后续每次镜像更新,都需要进入容器重新安装
6.6 cron任务自动执行
*/5 * * * * root docker exec -u 1000 nextcloud php -f /config/www/nextcloud/cron.php 2>&1 /dev/null
注意nextcloud
是容器名字,1000
是id,是linuxserver容器的cron
路径。
6.7 重启Nextcloud
上述都搞定之后,最后重启Nextcloud:
cd /root/data/docker_data/nextcloud # 进入docker-compose所在的文件夹
docker-compose up -d # 重新启动
错误全部解决。
7. 结尾
祝大家用得开心,有问题可以去GitHub提Issues,也可以在评论区互相交流探讨。
8. 参考资料
https://github.com/NginxProxyManager/nginx-proxy-manager/issues/448
https://www.himstudy.net/%E8%A7%A3%E5%86%B3nextcloud%E6%8F%90%E7%A4%BAphp-imagick%E6%A8%A1%E5%9D%97%E4%B8%8D%E6%94%AF%E6%8C%81svg%E7%9A%84%E9%97%AE%E9%A2%98/
https://yeasy.gitbook.io/docker_practice/container/attach_exec
评论区