Nextcloud挂载SMB/CIFS外部存储

Linux, PHP, 折腾 2019/05/30

有位朋友留言:

请教一下关于smbclient问题:我这边smbclient和php-client都在shell下手动装了,但是nextcloud挂载外部存储那里还是不行。这是什么原因呢?(只使用了apt-get install smbclient 和apt-get install php-smbclient)

最开始捣鼓nextcloud的时候折腾过挂载外部存储,很久没操作过了,顺便记录一下。

这里仅以挂载SMB为例,nextcloud 16.0.1

开始

设置 – 左侧管理 – 外部存储

提示:“smbclient” 未安装。无法挂载 "SMB / CIFS", "SMB / CIFS 使用 OC 登录信息"。请联系管理员安装。

那就安装smbclient呗,我是CentOS 7

方法1.手动编译

wget https://pecl.php.net/get/smbclient-1.0.0.tgz
tar xf smbclient-1.0.0.tgz
cd smbclient-1.0.0
#下面的phpize路径需修改为你自己的,比如我的是宝塔php 7.3的路径
/www/server/php/73/bin/phpize
./configure --with-php-config=/www/server/php/73/bin/php-config
make && make install

完成之后,会提示 smbclient.so 扩展已编译在PHP的扩展目录下

在php的面板中修改配置文件,添加

[smbclient]
extension = /www/server/php/73/lib/php/extensions/no-debug-non-zts-20180731/smbclient.so

保存,重启PHP,phpinfo里检查是否已启动

方法2.通过PECL安装

yum install libsmbclient libsmbclient-devel -y

yum安装完后,仅仅只是系统底层支持smb client了,而nextcloud是基于php的,还需要通过PECL命令来安装php对应的smb扩展

pecl install smbclient

这里可能会报错

WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update

运行

pecl channel-update pecl.php.net

对pecl channel进行升级

PHP Warning: popen() has been disabled for security reasons

popen函数被禁用了,打开宝塔的php管理面板,删掉被禁用的popen函数即可再次执行pecl安装smbclient

pecl安装smbclient扩展完成后会提示

检查php的配置文件,看是否已添加引用smbclient的库文件,如未添加,需手动添加并重启php

回到nextcloud的挂载外部存储管理页面,之前的提示已消除

挂载

添加一个 SMB/CIFS 协议的共享目录

 

添加后,页面上方会出现如下图配置区域,由于配置项毕竟多,我以编号命令,逐一解释

注:当配置OK时,最前面的图标为绿色对勾,否则显示为红、橙色图标

  • 1.在Nextcloud中看到的挂载名称(任意填
  • 2.认证选项(一般均为用户名和密码
  • 3.SMB服务器地址(如果smb服务端口不是默认的139或445,可以定义为IP:端口的形式
  • 4.SMB服务器中配置的共享文件夹名称(如果该文件夹不存在则会报错
  • 5.远程子文件夹(默认为空
  • 6.域名(默认为空
  • 7.用户名(smb用户名
  • 8.密码(smb密码
  • 9.指定挂载的共享文件夹的权限(默认为空,表示所有用户都可以读写该文件夹
  • 10.检查配置\保存按钮(用于测试是否配置成功

完成

配置完成后,返回Nextcloud首页,点击左侧外部存储,就能看到已挂载的远程smb文件夹

完~

本文标签:


28条评论

  • ljkund 评论于 回复

    我试了半天不行,结果发现宝塔的PHP页面安装扩展最下面就有一键安装,哈哈哈哈哈

    • Bug侠 评论于 回复

      @ljkund
      这篇文章已经快3年了……过时了,我记得当时还是宝塔5.x时代 :笑哭:

  • leo 评论于 回复

    大侠啊,有个问题,我现在版本是20.0.7,挂在SMB盘存东西,但是这个挂载外部存储文件夹里面的东西不能外链分享,显示不允许二次共享 ,是什么原因啊

    • cwzsquare 评论于 回复

      @leo
      同问,感觉有可能是“外部存储”这个插件默认配置的问题,我是用snap搭建的nextcloud,而挂载的本地外部存储都全给了770的权限……总之就还是显示“不允许二次共享”

      • zerokong 评论于 回复

        @cwzsquare
        最后面勾勾那里有个更多(三个点)打开后勾上共享

  • 刀刀 评论于 回复

    楼主在么,帮我看下啥问题,前面都做过了,检查php的配置文件,看是否已添加引用smbclient的库文件,如未添加,需手动添加并重启php,这步也做了,回到nextcloud还是提示未安装呀,,

    • Bug侠 评论于 回复

      @刀刀
      这个还是得一步步排查,我修改了文章,你可以从phpinfo里检查以下smbclient是否已启用

      • 刀刀 评论于 回复

        @Bug侠
        还是不行,亲能帮忙远程一下吗

  • abeim 评论于 回复

    挂载外部磁盘下载时走的哪里的流量呢

    • Bug侠 评论于 回复

      @abeim
      正常情况下:外部磁盘的流出+NC服务器的流入+NC服务器的流出

  • 宝藏侠 评论于 回复

    请问Ubuntu怎么搞,命令好像不太一样,完全小白

  • cattypapa 评论于 回复

    我用的lnmp安装的。lnmp默认不开启外部 添加插件,需要修改php.ini,定位到proc_open位置,然后将默认的disable改成enable。然后下载libsmbclient-php源码,手动编译进去。然后才能解决smb挂载问题。步骤比较繁琐。新人不友好。

  • leo 评论于 回复

    cent8
    挂载smb的时候出了个问题,系统设置里挂载一个共享文件夹给所有人,管理员账号所属的外部储存里文件夹却没有上传、删除、分享的权限?

    • leo 评论于 回复

      @leo
      已解决,是smb文件夹权限配置问题

  • hello 评论于 回复

    感谢,用您的办法搞好了。
    mdos 评论于 2019-05-31 16:16:23

    我用其他方法解决了XD
    原因是apt-get之后
    smbclient.so并没有被正确的放到php库文件那个目录下。
    手动搜索移动过去了
    :咧嘴: :咧嘴: :咧嘴: :咧嘴: :咧嘴: :嘴锤: :笑哭: :doge: :二哈: :二哈:

  • 评论于 回复

    那你samba中是怎么设置的 呢

    • Bug侠 评论于 回复

      @树
      我用的默认的配置文件,https://bugxia.com/403.html

  • Fyouth 评论于 回复

    请教一下,我是Debian 10 系统,安装完nextcloud 16.03,在应用里的app下载和安装按钮是灰的,是哪里需要修改吗?nextcloud文件夹给了www-data用户和用户组,权限给770.

    • Bug侠 评论于 回复

      @Fyouth
      菜单-应用-应用软件包,是这里的App后面的“下载并启用”按钮吗?

      • Fyouth 评论于 回复

        @Bug侠
        是的,点的时候还提示我输入密码,但是只转圈不下载,然后我在apps.nextcloud.com下载压缩包,解压到apps目录下,再看应用里就变成“移除”和“启用”,但是也都是灰的,点不了。

          • Fyouth 评论于 回复

            @Bug侠
            谢谢~~我找机会换个系统再试试……

          • Fyouth 评论于 回复

            @Bug侠
            下载app后无法启用的问题找到了,是用户和用户组给错了,修改后可以启用,直接下载不了的问题还在,服务器时间和本地是一致的。我有时间再试试别的系统吧,现在先这样吧,谢谢啦~

          • Fyouth 评论于 回复

            @Bug侠
            确实是服务器时间问题,我之前理解错了,以为是操作系统的时间,实际上应该是nextcloud应用的时间调整和本地一个时区。现在已经没问题了。多谢~

  • 大吉喵 评论于 回复

    为什么我在设置里压根看不到-外部存储,这四个字呢?我跟作者也是16的版本啊

    • Bug侠 评论于 回复

      @大吉喵
      呃~需要在应用里把“External storage support”启用才可以支持外部存储

  • mdos 评论于 回复

    我用其他方法解决了XD
    原因是apt-get之后
    smbclient.so并没有被正确的放到php库文件那个目录下。
    手动搜索移动过去了

    • Bug侠 评论于 回复

      @mdos
      不错不错~我是一遍就OK了,没遇到什么大问题。

    评论(本站已开启评论回复邮件通知功能,请如实填写邮箱以便及时收到回复)