在OpenMediaVault(OMV)上利用图形化Docker工具Portainer安装部署NextCloud
2021-04-07     loonlog     18251     14
本文目录
自从有了网盘,并且容量都还挺大,重要的和不重要的东西都往里面塞,说实在的现在有点多;诡异的是,曾经保存在某度网盘里的视频文件大量消失,不知各位是否遇到过!
总之现在有能力折腾NAS,还是建立自己的私人网盘比较好,毕竟,在手里的才是自己的,目前可选的方案也很多,我还是喜欢开源的东西,于是就选择了NextCloud,好不好用,试试便知!
这里就把我在OpenMediaVault(OMV)上利用图形化Docker工具Portainer安装部署NextCloud的过程分享一下,方便大家参考,也方便我日后再次部署!
由于NextCloud需要用到数据库,因此需要先创建数据库容器,可参考《在OpenMediaVault5(OMV5)上利用图形化Docker工具Portainer安装部署MariaDB和Adminer》这篇文章先安装部署MariaDB容器
一、打开Portainer可视化Docker管理工具
1、我的NAS是omv系统,进入OMV管理界面,找到左侧菜单的“系统”下面的“OMV-Extras”,在右侧导航栏找到“Docker”,然后点击“打开web页”进入到Portainer可视化Docker管理工具;
2、登录protainer,点击local进入;
二、创建stack
1、点击左侧菜单“Stacks”,再点击上方蓝色的“+Add stack”;开始创建stack;
2、首先在Name框里面输入一个Stack的名称,这个stack是配置NextCloud容器的,就输入nextcloud作为stack名称;然后在下方的编辑框中输入Stack的配置文件,或者说是Docker Compose的配置文件,这个配置文件是yml格式,包含了容器所需要的各种配置信息。
3、配置文件如下:
--- version: "2" services: nextcloud: image: linuxserver/nextcloud container_name: nextcloud environment: - PUID=1000 - PGID=100 - TZ=Asia/Shanghai volumes: - /srv/dev-disk-by-id-ata-JMicron_H_W_RAID5_BPPWFWRGNRNH48JWOGVZ-part1/AppData/NextCloud/config:/config - /srv/dev-disk-by-id-ata-JMicron_H_W_RAID5_BPPWFWRGNRNH48JWOGVZ-part1/media/nextcloud/data:/data ports: - 555:443 networks: - xxnet restart: unless-stopped networks: xxnet: external: name: xxnet
配置也比较简单,就配置信息做以下简单的说明,比较啰嗦,主要是可以让我加深理解;
image: linuxserver/nextcloud
这里使用的是LinuxServer维护的nextcloud,镜像地址https://hub.docker.com/r/linuxserver/nextcloud,镜像说明里面有Docker-compose的配置信息;
container_name: nextcloud
干脆利落,容器名称命名为nextcloud;
environment: - PUID=1000 - PGID=100 - TZ=Asia/Shanghai
这里是环境变量的配置,当我们给容器挂载了NAS上创建的共享文件夹作为存储使用的时候,默认情况下容器会使用root,也就是以超级管理员的身份去对这个共享文件夹进行读写操作;对于写入到共享文件夹中的文件,在NAS上以普通用户的身份是没有权限去做修改的;如果使用NAS上普通用户的身份去读写共享文件夹上的数据,就需要通过PUID来指定一个普通用户的ID,用PGID来指定一个用户组的ID,设置了这两个环境变量以后,容器就会使用我们指定的用户身份对共享文件夹进行读写操作,这样一来,我们就可以使用NAS上有权限的普通用户对共享文件夹进行读写操作了;但需要注意的是,只有LinuxServer维护的镜像提供了PUID和PGID的设置功能,其他镜像需要参照镜像的说明文件去了解是否有这项功能。PUID和PGID的获取,可以参考部署jellyfin的的文章中介绍的方法进行,这里不再重复!
- TZ=Asia/Shanghai
这里是设置时区,中国地区,就设置上海就可以了。
volumes: - /srv/dev-disk-by-id-ata-JMicron_H_W_RAID5_BPPWFWRGNRNH48JWOGVZ-part1/AppData/NextCloud/config:/config - /srv/dev-disk-by-id-ata-JMicron_H_W_RAID5_BPPWFWRGNRNH48JWOGVZ-part1/media/nextcloud/data:/data
这里是配置要挂载给Nextcloud容器使用的存储,为了便于直接管理nextcloud的存储,我在NAS上创建一个共享文件夹,专门来给Nextcloud容器来使用:
/srv/dev-disk-by-id-ata-JMicron_H_W_RAID5_BPPWFWRGNRNH48JWOGVZ-part1/AppData/NextCloud/config
/srv/dev-disk-by-id-ata-JMicron_H_W_RAID5_BPPWFWRGNRNH48JWOGVZ-part1/media/nextcloud/data
这两个路径,就是我在NAS上创建的两个共享文件夹AppData和media的绝对路径,其中AppData用于存放容器的配置信息,比如NextCloud容器的配置信息就给他放到AppData/NextCloud/config里面去,MariaDB容器的配置信息就放入AppData/MariaDB/config里面去,另外,容器的数据文件就让如media里面去,比如NextCloud的网盘内容都放入media/nextcloud/data里面,这里的共享文件只是我自己的规划,大家可以自由的去规划,关于路径信息如何获取,参考部署jellyfin的的文章中介绍的方法进行,这里不再重复!
ports: - 555:443
暴露443端口,https默认的端口,特殊端口,我们最好不要使用,因为我们还要装其他容器,避免冲突,所以我们不适用默认端口,自己定义一个555吧
networks: - xxnet
把NextCloud容器页加入到xxnet这个网络,便于容器间进行数据交换。
restart: unless-stopped
重启策略,当应用停止的时候就要重启容器;
networks: xxnet: external: name: xxnet
这里用来设置Stack可以连接的网络,网络名称要改为容器加入的那个网络
4、配置完以上信息,点击下方的蓝色按钮“Deploy the stack”来安装nextcloud,稍等片刻(看情况)就会完成安装;
5、安装完成之后,就可以 在浏览器中输入https://omv:555就可以访问nextcloud了,首次打开页面就是创建账号,账号和密码自己设置即可,紧接着下面就是配置数据库。
如果还没有数据库,就请参考《在OpenMediaVault5(OMV5)上利用图形化Docker工具Portainer部署MariaDB和Adminer》这篇文章先部署MariaDB容器,再接着下面的看。
三、为NextCloud创建数据库和数据库的用户
1、 打开adminer管理界面,输入root和密码进行登录,
2、登录进去之后点击“创建数据库”
3、输入数据库名称,命名为nextcloud;校对下拉框选择“utf8mb4_general_ci”,这个可以让nextcloud可以存储表情数据,之后点击保存,这样就给nextcloud创建了数据库;
4、 处于安全考虑,我们不打算使用root用户来管理数据库,我们需要另外设置一个用户,用来专门的管理nextcloud的数据库,点击页面中的”权限”进入权限配置页;
点击上方的“创建用户“进入用户权限配置页;
输入一个用户名,我的用户名nextcloud;
再输入一个密码;之后在权限框勾选”all privileges“,这样用户nextcloud就对nextcloud数据库有完全的管理权限;
滚动页面到最下方,点击”保存“。
这样数据库的操作就完成了,刷新页面,就可以再用户列表里面看到我们刚刚创建的nextcloud用户了;
四、回到NextCloud初始页面,进行数据库的设置
1、 再次进入nextcloud的初始页面,用户名和密码设置好之后,在数据库的输入框中:
“数据库用户”框填写刚才创建的用户nextcloud,
“数据库密码”框填写刚刚为用户nextcloud创建的密码,
“数据库名”nextcloud,
“localhost”就是前面我们创建的mariadb数据库,由于nextcloud和mariadb在同一个网络中,所以可以通过容器名称就可以相互访问,那这里的数据口主机名就直接填写mariadb。
2、 接着往下“是否安装推荐的应用“,可以根据自己需求进行选择即可,最后选择”安装完成“按钮,他会在后台进行一系列的安装过程,之后就会弹出登录框,恭喜你,已经完成了NextCloud的部署了。
五、配置域名访问
1、 如果我们在局域网使用ip地址访问,或者在外面使用域名访问,它会提示域名不受信任域名的提示,
2、我们还需要更改一下nextcloud的web服务文件,这个文件位于config目录中;因为我是给容器挂载了NAS中相关共享文件夹,位于AppData/nextcloud/config,继续进入www目录>继续进入nextcloud目录>继续进入config目录,在这个目录中有两个文件,我们需要编辑config.php文件,
在文件里面找到“trusted_domains”,
在里面添加一行1 => ‘192.168.0.153’,这样在内网就可以用ip地址192.168.0.153:555访问nextcloud,
再添加一行2 => ‘xxnas.com:555’,也可以使用域名访问了.
3、刷新刚才的页面,就可以正常访问了
4、 在手机应用商店可以找到nextcloud,下载安装即可在手机上使用。
顺便欣赏以下我DIY的NAS吧:http://loonlog.com/2020/6/6/diy-nas-xxnas/
Nextcloud , Docker , OpenMediaVault , Portainer , MariaDB , NAS , OMV
http://loonlog.com/2021/4/7/openmediavault-omv-docker-portainer-nextcloud/
评论列表,共 14 条评论
回复
博主好。我在参考你的nextcloud的stack配置的时候,发现里面的volume貌似不太对。参考官方镜像在docker hub里的介绍,nextcloud的项目文件全部都在/var/www/html目录下,而不是直接在根目录下(/config, /data)。我直接进入一个新的nextcloud镜像生成的容器里浏览了一下,发现根目录下也没有/config, /data文件夹。因此大胆猜测,博主可能挂载错了配置跟数据的文件夹,感觉要把冒号后的/config,/data改成/var/www/html/config,/var/www/html/data。博主也可以观察一下目前的挂载方式,在主机硬盘中对应的目录是否有保存到相关数据。
回复
你好,我用的是linuxserver版的nextcloud源,这个教程里面的内容没有问题,直接在根目录下(/config, /data);
你说的是官方的源,官方的是在/var/www/html下,你说的也没问题;
不同的源有不同的配置,这个只要和源的配置一致就可以了,大家都说linuxserver好用点,
回复
原来如此,难怪数据库那篇也是这样的~
回复
博主好,我第一次按照你的方式安装数据库和nextcloud成功之后,我重装了一次系统,这次也按照你的步骤来,但是在nextcloud创建管理员时出现连接不到数据库An exception occurred in the driver: SQLSTATE[HY000] [2002] No such file or directory的错误,查看nextcloud的log出现Exception: Not installed in /config/www/nextcloud/lib/base.php:277的问题,现在人都麻了。
回复
你这个情况我没遇到,也没解决过,所以暂时无法回答,但是,严格按照流程,应该么问题,或者是不是需要重装的时候,没有清除缓存之类的!
回复
博主好,已经完成了前面四步,现在第五步。
ip:555,打开以后,显示400 Bad Request / The plain HTTP request was sent to HTTPS port.
百度了很多教程,都是修改nginx.conf,但是按照教程是没有安装过nginx的。
但是系统确实好像自带了nginx,我打开配置文件以后,里面没有百度里面说那么多参数,只是很不简单的一些配置命令
现在彻底卡在此了。。。
回复
你看看site-confs这个文件夹里面的配置,我的装好自动能用,其他也不是很懂
回复
最近做科学留学刚好碰到,联想到这个问题了。刚好懒癌,上次碰到这个问题就放弃搭建nas了
楼主应该绑定了域名,并且给域名配置的ssl证书,所以用443端口,就不存在我这个问题了吧?
不然没有证书,443端口默认是ssl,强制是https,所以必须要证书,不然没有浏览器打不开?
我自己配置的时候,没有绑定域名。就是用的omv默认的aml网址访问的,所以没有证书,也没有玉米。
百度了很多,说要在nginx里面配置,不强制走https。
但是上次尝试了很久,没有找到nginx对应这个项目的config文件在哪,最后也没解决掉。
我做出国留学也遇到这个问题,也找不到config,最后无奈,装了宝塔,然后上面配置的。
这个项目不适合装宝塔,所以现在蒙逼了,问题还没解决
如果博主懂的话,可以指点一二,谢谢!
回复
你好,在局域网,你可以先用ip地址调试通过,在搞其他的,先保证你搭建的nextcloud可以用!
回复
问题解决了,在这分享一下。
我全程是用root权限配置的,因为之前没看日志,一直在提示启动失败(用命令查,nextcloud状态是正常的)。后来换成其他用户即uid和gid,重装就可以了,一直输在了不看日志。。。
当然后面又遇到了新问题,我们家是动态ip,重启路由又歇菜,
百度说:1 => preg_match('/cli/i',php_sapi_name())?'127.0.0.1':$_SERVER['SERVER_NAME'],
根本没用,只能在config里面把ip添加进去。
正在努力解决这个问题中,但目前网盘已经好用了。
回复
如果在外面想访问家里NAS,家里ip又是动态的,那只能用动态域名解析,外网使用域名访问,可以在路由器上进行这个步骤!
回复
嗯,我最后自己搭建了frp,绑定了域名,在nextcloud的config文件添加域名,就彻底解决这个问题了。
————————————————————————————————
新问题:nextcloud非常慢,首次登陆要10秒左右,每个页面打开要3秒左右。文件上传2-4M/S,下载3-5M/S。
百度了3天了,说是开启apcu,还有php-frm可以加快一些。
但是我改了etc/php里面的config,好像没啥用,所以是不是要改nextcloud上面的php配置,请教一下这个文件在哪?
另外这两个东西怎么开启?
回复
你说这个我没有配置,目前的速度,我是满意的,因为我大部分都是用来同步不同电脑之间的文件,都是工作中的文件,不太大:
你研究下,你弄好了给我分享下,我也搞
回复
文章不错交个朋友