Nextcloud 搭建私人云服务教程

Mar 31, 2018
2075
#云服务#NextCloud#VPS

本文最近一次更新于 5 年 11 个月前,其中的内容很可能已经有所发展或是发生改变。

https://ae01.alicdn.com/kf/HTB19l0CdjfguuRjSspk760chpXaA.png

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

外置存储

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

参考:

Nextcloud 搭建私人云服务教程

https://blog.itswincer.com/posts/bf0413ac/

作者

Wincer

更新于

Apr 1, 2018

许可协议

CC BY-NC-ND 4.0
  1. Dec 10, 2022

    我最近订阅的一些软件服务
  2. Feb 22, 2018

    一台 VPS 的正确打开方式
  3. Apr 5, 2023

    OpenCore 引导安装 macOS Ventura 教程
  4. Jul 2, 2022

    从一次 DNS 流量测试说起
  5. Nov 27, 2021

    我的 FreeBSD 服务器配置
  6. Sep 29, 2020

    Python 并发之痛:线程,协程?