今日339人次阅读了97/160篇文章  |    留言板  |    RSS订阅
我这人不太懂音乐,所以时而不靠谱,时而不着调毒鸡汤

在OpenMediaVault(OMV)上利用图形化Docker工具Portainer安装部署NextCloud

2021-04-07     loonlog     18219     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的数据库,点击页面中的”权限”进入权限配置页;

  1. 点击上方的“创建用户“进入用户权限配置页;

  2. 输入一个用户名,我的用户名nextcloud;

  3. 再输入一个密码;之后在权限框勾选”all privileges“,这样用户nextcloud就对nextcloud数据库有完全的管理权限;

  4. 滚动页面到最下方,点击”保存“。

这样数据库的操作就完成了,刷新页面,就可以再用户列表里面看到我们刚刚创建的nextcloud用户了;

四、回到NextCloud初始页面,进行数据库的设置

1、 再次进入nextcloud的初始页面,用户名和密码设置好之后,在数据库的输入框中:

  1. “数据库用户”框填写刚才创建的用户nextcloud,

  2. “数据库密码”框填写刚刚为用户nextcloud创建的密码,

  3. “数据库名”nextcloud,

  4. “localhost”就是前面我们创建的mariadb数据库,由于nextcloud和mariadb在同一个网络中,所以可以通过容器名称就可以相互访问,那这里的数据口主机名就直接填写mariadb。

2、 接着往下“是否安装推荐的应用“,可以根据自己需求进行选择即可,最后选择”安装完成“按钮,他会在后台进行一系列的安装过程,之后就会弹出登录框,恭喜你,已经完成了NextCloud的部署了。

五、配置域名访问

1、 如果我们在局域网使用ip地址访问,或者在外面使用域名访问,它会提示域名不受信任域名的提示,

2、我们还需要更改一下nextcloud的web服务文件,这个文件位于config目录中;因为我是给容器挂载了NAS中相关共享文件夹,位于AppData/nextcloud/config,继续进入www目录>继续进入nextcloud目录>继续进入config目录,在这个目录中有两个文件,我们需要编辑config.php文件,

  1. 在文件里面找到“trusted_domains”,

  2. 在里面添加一行1 => ‘192.168.0.153’,这样在内网就可以用ip地址192.168.0.153:555访问nextcloud,

  3. 再添加一行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

在OpenMediaVault(OMV)上利用图形化Docker工具Portainer安装部署NextCloud
http://loonlog.com/2021/4/7/openmediavault-omv-docker-portainer-nextcloud/
    觉得有用?请点击页面顶部广告支持我!

您可能感兴趣的文章

发表评论(关于评论)

评论列表,共 14 条评论

  • 回复

    4楼

    博主好。我在参考你的nextcloud的stack配置的时候,发现里面的volume貌似不太对。参考官方镜像在docker hub里的介绍,nextcloud的项目文件全部都在/var/www/html目录下,而不是直接在根目录下(/config, /data)。我直接进入一个新的nextcloud镜像生成的容器里浏览了一下,发现根目录下也没有/config, /data文件夹。因此大胆猜测,博主可能挂载错了配置跟数据的文件夹,感觉要把冒号后的/config,/data改成/var/www/html/config,/var/www/html/data。博主也可以观察一下目前的挂载方式,在主机硬盘中对应的目录是否有保存到相关数据。

    菜鸟之志 cubature ,

    回复

    你好,我用的是linuxserver版的nextcloud源,这个教程里面的内容没有问题,直接在根目录下(/config, /data);

    你说的是官方的源,官方的是在/var/www/html下,你说的也没问题;

    不同的源有不同的配置,这个只要和源的配置一致就可以了,大家都说linuxserver好用点,laugh

    cubature 菜鸟之志 ,

    回复

    原来如此,难怪数据库那篇也是这样的~

  • 回复

    3楼

    博主好,我第一次按照你的方式安装数据库和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的问题,现在人都麻了。

    菜鸟之志 clay ,

    回复

    你这个情况我没遇到,也没解决过,所以暂时无法回答,但是,严格按照流程,应该么问题,或者是不是需要重装的时候,没有清除缓存之类的!

  • 回复

    2楼

    博主好,已经完成了前面四步,现在第五步。

    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配置,请教一下这个文件在哪?

    另外这两个东西怎么开启?

    菜鸟之志 帅大毛 ,

    回复

    你说这个我没有配置,目前的速度,我是满意的,因为我大部分都是用来同步不同电脑之间的文件,都是工作中的文件,不太大:

    你研究下,你弄好了给我分享下,我也搞laugh

  • 回复

    1楼

    文章不错交个朋友