IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Nextcloud 搭建私人云服务教程

    Wincer发表于 2018-03-31 15:03:31
    love 0
    cover

    我一直很不相信国内的那些云服务提供商(尤其是在李彦宏发表的讲话「中国用户对隐私问题没那么敏感,在个人隐私方面更加开放,一定程度上愿用隐私换方便和效率」后),因为怕隐私得不到保障,故而我的一些隐私数据都是存放在国外的云盘(如 Dropbox、Drive 等)上。

    可这俩在国内都被墙了,而手机翻墙总是显得有些不够方便,与是我就琢磨着自己搭建一个云服务,随后就发现了 Nextcloud 这一开源云服务。而网上的教程都太过复杂了,对新手太过不友好,于是乎——一篇近乎傻瓜式的 Nextcloud 教程诞生了。

    安装

    这里采用 Docker 容器方式来安装 Nextcloud,这样就不用担心各种环境依赖了(Nextcloud 的依赖简直多得吓人,而 Dockerfile 会帮你把依赖都配置好)

    安装 Docker

    注:Docker 仅支持 64-bit 的系统

    Docker 现已被各大发行版的仓库收入,采用正常安装命令即可:

    yum -y install docker

    随后,启动 Docker 守护进程:

    # systemctl
    systemctl start docker
    # Service
    service docker start

    安装 NextCloud

    自动安装

    有了 Docker 后,就可以几行代码安装 Nextcloud 了:

    # clone nextcloud 的 docker 容器
    git clone https://github.com/nextcloud/docker.git
    # 耐心等待安装
    docker run -d -p 8080:80 nextcloud 

    安装完成后先别忙着启动,docker ps -a -q 查看一下容器的 id,是一串 12 位的字符串,为了便于记忆,重命名一下:

    docker rename ××× nextcloud     # ××× 即为容器 id

    随后就可以采用如下命令启动了:

    docker start nextcloud
    # 测试
    curl http://localhost:8080

    这样,就完成了 Nextcloud 的安装工作。

    手动安装

    方法一只能安装最新版的 Nextcloud,而最新版缺少部分功能,如:无法添加 Drive 和 Dropbox 的外置存储。如果你对外置存储不是很 care 的话,那就按照方法一安装就可以了。

    git clone https://github.com/nextcloud/docker.git
    cd docker/12.0/apache

    这里采用官方编写的 Dockerfile 手动构建,所以时间会花得比较久。

    docker build -t nextcloud .

    这时候用 docker images 应该可以看到刚刚创建的镜像了,随后创建容器:

    docker create -v /var/www/html/apps/:/var/www/html/apps -v /var/www/html/config/:/var/www/html/config -v /var/www/html/data/:/var/www/html/data -p 127.0.0.1:8080:80/tcp --name nextcloud nextcloud

    稍稍解释一下参数:

    • -v 后面是地址,前半部分是 VPS 的地址,后半部分是容器内的地址
    • -p 后面是端口号
    • –name 后面是容器名称
    • 最后的 nextcloud 是镜像名称

    配置

    Nginx 配置

    由于 NextCloud 已经占用了 8080 端口,这里采用 Nginx 做反向代理,将域名直接解析至 8080 端口。

    server {
      listen 80;
      server_name cloud.example.com;
      location / {
        proxy_pass http://localhost:8080;
      }
    }

    重启 Nginx 服务后,就可以通过 cloud.example.com 来访问云服务了。

    NextCloud 配置

    # 进入容器内的 bash
    docker exec -i -t nextcloud bash

    重定向 overwritehost

    有时候 NextCloud 会自己定向至本地的 8080 端口,所以需要手动重写正确的地址:如果提示不能定位软件包,先执行 apt-get update。

    vim config/config.php
    # 加上下面这行
    'overwritehost' => 'cloud.example.com',

    重启,让配置生效:

    docker restart nextcloud

    MySQL 配置

    由于我 VPS 的内存比较小,所以并没有启用 MySQL/MariaDB 数据库(怕爆内存),而是采用了 SQLite,反正也是我一个人用,问题不大。

    开启了 MySQL 后发现内存也就多了 20M(但性能的提升可不是一点半点),遂还是改成 MySQL 了:

    1. 安装 MySQL(这里采用 MariaDB 分支)

      yum -y install mariadb-server mariadb-client
      # 设置一下 root 密码等
      mysql_secure_installation
    2. 开启 daemon 服务

      systemctl start mariadb
      systemctl enable mariadb
    3. mysql -uroot -p 登录 MySQL

      # 创建 nextcloud 数据库
      CREATE DATABASE nextcloud CHARACTER SET = utf8 COLLATE = utf8_general_ci;
      # 创建 nextcloud 的用户
      CREATE USER nextcloud IDENTIFIED BY 'admin123';
      # 赋予对数据库所有的权限
      GRANT ALL ON nextcloud.* TO nextcloud;

    初始设置

    1. 打开 https://cloud.example.com

    2. 创建管理员帐号和密码

    3. 数据库就选择 MySQL/MariaDB,其它参考下表:

    名称 值
    用户名 nextcloud
    密码 admin123
    数据库名 nextcloud
    地址 172.17.0.1

    注意:这里的地址千万不要填写成了 localhost 或者 172.0.0.1,因为这里的地址需要容器内与外部通信。

    点击完成后,等待几秒就可以使用了。

    挂载外部云盘

    由于我 VPS 的容量只有 10g,故而放不了过多的视频,就考虑采用外部存储的方法,将 Drive、Dropbox 挂载至 Nextcloud 外部存储或者 VPS。

    注:Nextcloud 13 已经取消对 Drive、Dropbox 外部存储的支持(这时候你也可以选择把 Drive 直接挂载至 VPS 本地目录,再通过外部存储链接至挂载目录来完成)。

    启用外部存储插件

    在应用页面,启用 External storage support 插件:如果提示:「没有安装 “smbclient”无法挂载 “SMB / CIFS”, “SMB / CIFS 使用 OC 登录信息”. 请联系您的系统管理员安装」

    解决办法:

    安装 smbclient

    # 进入容器的内的 console
    docker exec -i -t nextcloud bash
    apt-get install libsmbclient-dev

    这里简单说一下,不管你的 VPS 原本的系统是 CentOS、RedHat、Debian,统一都用 apt-get 安装,因为现在处于的是 docker 容器内的系统,与 VPS 的系统是分离的。

    接着再安装 smbclient:

    pecl install smbclient

    同时会提示:「You should add “extension=smbclient.so” to php.ini」,这里又被小坑一把,网上大部分教程所说的 /etc/php.d/php.ini 并不存在,在 docker 容器内部该文件是在:

    vim /usr/local/etc/php/conf.d/docker-php-ext-intl.ini
    # 加上下面这行
    extension=smbclient.so

    随后重启 Nextcloud 服务就应该就 OK 了。

    随后如果你安装的 Nextcloud 是 13 版本及以上的话,就只有考虑用 box 提供的 WebDAV 来作为外置存储了,不过只有 10G 的容量,且最大文件限制是 250MB。如果是用的 12 版本及以下的话,就可以考虑采取 Drive 作为外置存储了:

    获取 API

    1. 访问 Google 开发者平台 :

    2. 点击「启用 API 和服务」

    3. 点击「Google Drive API」

    4. 点击「启用」

    5. 点击左侧的凭据 -> OAuth 同意屏幕:

      oauth 示例

      按照以上格式填写,点击保存

    6. 随后创建凭据:

      应用类型选择网页应用,其它的参考以下:

      url 配置

      点击创建后,会弹出悬浮框告诉你 ID 和 Key。

    配置 Nextcloud

    登录 Nextcloud,转至管理页面,点击「外部存储」,选择 Google Drive,填入 API 和 Key,点击授权,若授权时出现 400 错误,那么是重定向的 URI 出问题了,再添加如下一条:

    https://cloud.example.com/index.php/settings/admin/externalstorages

    如果提示「此应用未经过验证」,点击高级 -> 转至 example.com,忽略掉就行。

    外置存储

    当出现了绿色按钮,就表示配置成功了。

    参考:

    • Docker image of Nextcloud
    • 用 Docker 和 Nginx 搭建自己的云服务器(Nextcloud)
    • 连接 Google Drive 教程
    • FreeNAS 10 NextCloud 開啟外部儲存媒體的 SMB 功能


沪ICP备19023445号-2号
友情链接