
阿里云搭建个人云盘
[TOC]
阿里云搭建个人云盘
思路
阿里云ESC服务器可作为管理系统,
OSS对象存储可以当做网盘,
安装Nextcloud即可协作网盘。
Nextcloud
Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步、共享、版本控制、团队协作等功能。它的客户端覆盖了Windows、Mac、Android、iOS、Linux 等各种平台,也提供了网页端以及 WebDAV接口,所以你几乎可以在各种设备上方便地访问你的云盘。
Nextcloud也提供了许多应用安装,包括但不限于Markdown在线编辑、OnlyOffice(需另外部署服务端)、思维导图、日历等,你可以自行选择以丰富个人网盘的功能。
Nextcloud的服务端部署方式有很多种,本文会介绍两种方法(基于LNMP和基于Docker),读者可以根据自己情况进行选择一种部署方式。服务器需要是Linux操作系统,你可以在本地安装一个虚拟机进行测试,然后再到云服务器上部署。注意Windows系统不支持,建议装个虚拟机。Mac系统理论上支持,可以参考Linux教程来操作。Ubuntu系统支持snap一键安装,甚至安装系统时都提供安装nextcloud的选项。
阿里云服务器架构
阿里云提供ECS服务器和轻量应用型服务器。都为物理主机,前者操作细节更多,后者较便捷。
对于系统镜像可以确定Linux版本,此为系统环境基础。然后搭建LNMP或者LNMP的web环境,最终安装Nextcloud网盘。
ECS镜像有直接可以用的系统镜像,较为方便,对于纯净系统需要手动安装配置环境,也可以采用宝塔管理界面进行安装。
基于LNMP部署Nextcloud服务端
开通云服务器
打开阿里云的ESC服务器购买页面。
免费领取
购买轻量应用服务器

安装网盘运行环境
一般来说阿里云提供的公共镜像是一个空白的Linux发行版或者Windows Server,具体的运行环境我们还是需要自行搭建,对于新手来说一下子就提高了使用ECS的学习成本,这里我们使用云市场的现有镜像,无需安装,开箱即用!
目前主流的建站环境就是 LAMP
环境,它是 Linux + Apache Httpd + MySQL + PHP 的缩写,是网页环境的黄金搭档,可以兼容几乎所有的HTML和PHP运行需求。
这里推荐使用 LAMP环境(Ubuntu16.04 Apache PHP7.1)
,因为这个镜像提供了比较丰富的工具:例如OSS备份、Let’s Encrypt等,而且Apache、PHP 等组件可以自行升级,更加安全!
使用云市场的镜像有以下几种方式。
购买ECS时选择
还记得在购买ECS的使用选择公共镜像吗?我们可以在这一步就选择镜像市场,然后在搜索框输入关键词:LAMP环境(Ubuntu16.04 Apache PHP7.1)
已经购买ECS的使用选择
停止运行实例,直接更换操作系统即可。
我们可以在这一步就选择镜像市场,然后在搜索框输入关键词:LAMP环境(Ubuntu 64位 Apache PHP5.4) v1.1
直接在镜像页面购买
参考购买流程。
设置安全组(防火墙)
更多
—>网络和安全组
—>安全组配置
授权类型:全部
授权对象:0.0.0.0/0
这就是默认开放所有端口且允许所有IP访问了。
这是VPC(专有网络)的设置,如果是经典网络,设置公网出入方向的内容即可,不要输入内网的。

查看环境安装
访问:http://你的公网iP/

点击探针
查看PHP运行环境和相关服务数据。

安装NextCloud网盘程序
NextCloud可以帮助我们搭建自己的个人网盘,托管到阿里云ECS上可以实现文件的自有管理,方便快捷的同时极大的提升了安全性。
使用putty(xshell)和Xftp()来实现对ECS的远程终端控制和文件传输
putty远程连接终端


Xftp远程连接文件传输


下载 NextCloud
解压缩到本机
拷贝Nextcloud
安装文件到服务器
进入/data/wwwroot/default/
目录,创建一个old
文件夹,将目录上的原始文件全部搬到old内

将 Nextcloud 上传至 /data/wwwroot/default/
目录
在SSH中运行安装指令
1 | sed -i 's/;mbstring.func_overload = 0/mbstring.func_overload = 0/g' /usr/local/php/etc/php.ini |
浏览器中输入 http://ecsip
,输入管理员的账号密码,马上开始安装
环境安装方法二-云盘镜像
也可以在镜像库中直接选择云盘存储 nextcloud (centos7 64位) V3.0
默认用户:yuncan
默认密码:Yuncan123
登录成功后点击下图中的设置,修改显示语言为中文简体(英文好的自行跳过)
头像
—>应用
—>external storage support
,点击启动(用于挂载外部存储的插件)
使用远程连接工具(CRT、PUTTY等)远程连接到服务器
输入以下命令下载安装ossfs,用于安装阿里云OSSFS插件,使服务器可以挂载阿里云OSS对象存储
1 | wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.5_centos7.0_x86_64.rpm |
- 设置
bucket name
和AccessKeyId/Secret
信息,将其存放在/etc/passwd-ossfs 文件中,注意这个文件的权限必须正确设置为 640。
1 | echo bucket-name:access-key-id:access-key-secret > /etc/passwd-ossfs |
- 查看apache用户的uid和gid
1 | Cat /etc/passwd |
centos7.2裸装
LAMP
安装apache
1 | yum update #更新源 |
1 | systemctl stop firewalld #关闭防火墙 |
浏览器输入ip后

安装 php7.2
安装源
1 | yum install epel-release -y |
清除历史版本
1 | yum -y remove php* |
安装扩展包
基础版
1 | yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel |
豪华版
1 | yum install -y php72w php72w-opcache php72w-xml php72w-mcrypt php72w-gd php72w-devel php72w-mysql php72w-intl php72w-mbstring |
启动服务
1 | systemctl enable php-fpm.service |
安装mariadb
1 | sudo yum -y install mariadb mariadb-server #安装mariadb |
配置MariaDB的root用户密码
1 | mysql_secure_installation |
创建数据库,并创建数据库管理员
1 | mysql -uroot -p #进入mariadb 会提示输密码 |
1 | CREATE DATABASE nextcloud; |
安装nextcloud
下载好的压缩包拷贝到/bar/www/html/
1 | cd /var/www/html |
docker安装
- 简介
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
选择以Docker的方式来部署nextcloud是因为Docker可以跨平台上运行,可以确保执行环境的一致性,有利于应用的迁移和管理。
服务端部署的基本流程是:安装Docker并启动 —> 运行Nextcloud容器 —> 访问Web端初始化。
- 看系统版本
1 | lsb_release -a |
- 安装docker
1 | yum install docker |
- 启动docker服务
1 | systemctl start docker |
- 查看docker状态
1 | systemctl status docker |
- 设置开启自启
1 | systemctl enable docker |
- 安装nextcloud
1 | docker run -d -p 8888:80 nextcloud |
启动nextcloud网盘得时候会报错,原因是docker版本与系统版本不符,执行yum update更新系统即可。
- 执行
docker ps
查看服务运行状态
安装完成后在安全组配置8888的访问策略,访问公网IP:8888即可访问。
宝塔镜像安装
centos安装宝塔
1 | yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh |
记录账号密码和访问地址
浏览器端无法打开检查服务器端口是否打开8888
安装环境
安装插件,选择LNMP,PHP选择7.2
建议从软件商店里安装:Nginx1,16,MySQL5.7,PHP7.2,pureftpd-1.0.47,nextcloud-16.0.11
添加站点
点击网站
—>添加站点
设置域名+端口(没有域名就是服务器地址和端口)
选择数据库,记住密码

这个时候应该可以直接通过公网访问网站了。
拷贝nextcloud文件

找到根目录,把nextcloud文件拷贝到根目录(sftp)。
点击设置
,选择网站运行根目录。

然后输入网站名(服务器地址)即可进行初始化设置。
选用宝塔文件系统上传压缩包然后移动设定目录即可。
开始使用
重启 Nginx ,输入域名或IP进入 Nextcloud 首次登陆配置,输入管理员账号密码,数据库管理员,数据库名,数据库密码,配置完成,自动进入nextcloud主页。

一些优化
安装php扩展

php设置

首页->文件-> /www/server/php/72/etc
,编辑php-fpm.conf
末尾添加一行
1 | env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin |
使用阿里云OSS
阿里云对象存储服务(Object Storage Service,简称 OSS)为您提供基于网络的数据存取服务。使用 OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。
阿里云 OSS 将数据文件以对象(Object)的形式上传到存储空间(Bucket)中。您可以进行以下操作:
- 创建一个或者多个存储空间,向每个存储空间中添加一个或多个文件。
- 通过获取已上传文件的地址进行文件的分享和下载。
- 通过修改存储空间或文件的读写权限(ACL)来设置访问权限。
- 通过阿里云管理控制台、各种便捷工具以及丰富的 SDK 包执行基本和高级 OSS 操作。
购买oss
安装OSSFS
1 | wget https://github.com/aliyun/ossfs/releases/download/v1.80.5/ossfs_1.80.5_centos7.0_x86_64.rpm |
获取 AccessKeyId/Secret
登录阿里云控制台。单击页面左上方的管理控制台。将鼠标移至右上方的“账号管理”图标选择accessKeys,然后创建key。
提示信息中的云账号AccessKey是您访问阿里云API的密钥,具有该账户完全的权限,请务必妥善保管。请勿通过任何方式(如Github等)将AccessKey公开至外部渠道,以免被恶意利用而造成安全威胁。强烈建议您遵循阿里云安全最佳实践,使用RAM子用户AccessKey来进行API调用。
挂载
设置bucket name
(购买后创建的bucket名称) 和 AccessKeyId/Secret
信息,将其存放在/etc/passwd-ossfs
文件中,注意这个文件的权限必须正确设置,建议设为640
。
存储密令
1 | echo my-bucket:my-access-key-id:my-access-key-secret > /etc/passwd-ossfs |
将oss bucket挂载到指定目录
1 | ossfs my-bucket my-mount-point -ourl=my-oss-endpoint |
oss endpoint
地址可以在OSS控制台找到一定要选择内网地址。
- 示例
将my-bucket
这个bucket挂载到/tmp/ossfs
目录下,AccessKeyId
是abcde
,AccessKeySecret
是123456
,oss endpoint
是oss-cn-hongkong-internal.aliyuncs.com
1 | echo my-bucket:abcde:123456 > /etc/passwd-ossfs |

使挂载的文件夹(/tmp/ossfs)属于某个user
查看apache用户的uid和gid
1 | Cat /etc/passwd |
使用上面查找到的uid和gid挂载OSS存储
1 | ossfs xmnetchina1 /tmp/ossfs -ourl=oss-cn-qingdao-internal.aliyuncs.com -ouid=1000 -ogid=1000 -oumask=007 -o allow_other |
查看挂载情况
df -h
1 | Filesystem Size Used Avail Use% Mounted on |
设置开机自动挂载
通过开机自启动脚本mount(适用于centos7.0及以上的系统)
1 | # ! /bin/bash |
- 在
/etc/init.d/
目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx
内容改成您自己的信息。 - 执行命令:
chmod a+x /etc/init.d/ossfs
- 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。
- 执行命令:
chkconfig ossfs on
- 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。
nextcloud设置开启挂载
右上角点击应用,启用External storage support
进入外部存储会发现提示:“smbclient” 未安装。无法挂载 “SMB / CIFS”, “SMB / CIFS 使用 OC 登录信息”。请联系管理员安装。需要进入SSH安装smbclient。
注意:安装之前进入宝塔面板→php管理→禁用函数里面把“exec”“popen”“putenv”删除不然会安装不上
检查php的配置文件,看是否已添加引用smbclient的库文件,如未添加,需手动添加并重启php。

1 | yum install libsmbclient libsmbclient-devel |
重启php服务
再到设置里外部储存选择本地
,地点为/tmp/ossfs
您的数据目录和文件可能可以从互联网访问。.htaccess 文件不工作。强烈建议您配置您的 web 服务器,使数据目录不再可访问,或将数据目录移到 web 服务器文档根目录之外。
打开宝塔界面选择 网站 设置 配置文件 中加入如下代码
1 | location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ |
PHP的安装似乎不正确,无法访问系统环境变量。getenv(“PATH”)函数测试返回了一个空值。 请参照安装说明文档中的PHP配置说明查阅您服务器的PHP配置信息,特别是在使用php-fpm时。
从宝塔文件管理,打开/www/server/php/72/etc/php-fpm.conf,在其尾部添加一行
1 | env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin |
重启php
PHP configuration option output_buffering must be disabled
其实这个很好解决,PHP默认是有4096字节缓冲的。但是Nextcloud希望你关闭。如果你是自己安装的PHP,在你安装PHP的路径下,打开PHP配置文件(php.ini),
1 | output_buffering = 4096 |
重启php
您的网页服务器未正确设置以解析“/.well-known/webfinger”
网站 > 域名 > 设置 > 伪静态
加入如下代码
1 | location = /.well-known/webfinger { |
网盘使用演示
浏览器端
输入服务器地址

输入分配用户名密码
设置语言

找到Language
选项选择简体中文
win端
先在浏览器登录用户。
下载windows版本进行本地安装

点击登录,输入服务器地址

会自动打开浏览器,点击同意下一步。
windows登录

点击网页弹出链接

win端和服务器端将保持同步,后台开启Nextcloud应用即可。
android端

其他系统类似,都可以同步使用。
应用场景
痛点
实验室三人,共用一个用户名密码。
吴老师和学生小代、小孟。
小孟小代负责整理项目文档(约40G),用普通文件传输效率低下,速度较慢。学生与老师之间协作困难。
使用解决方案
创建三个账号wu、dai、meng代表三个人,归位一个小组swpu,dai为小组管理员。

dai创建文件夹团队共享目录
,给wu和meng编辑修改删除权限,三人可以共同修改一个文件目录。
meng登录网盘,设置同步文件夹,将项目原始文档拖入团队共享目录
,并点击上传。所有项目文档归档到云盘。
dai登录网盘,登录时,选择立即同步,就可以下载所有项目文档至本机。
wu登录网盘可以下载小孟整理过传输到网盘的大批量文件,并进行批示。
三人共同对一个目录进行操作,通过网络传输方式将文件同步到服务器。
硬盘介绍
物理主机40G带系统,保留使用,用作个人资料。
OSS对象存储盘,用于传输实验室资料,弹性扩展。
使用技巧

1.实验室讨论,每天上传一次文件,减少流量消耗。
2.平时不用的话,暂停文件夹同步。
3.成员之间尽量分开时间段同步文件夹。
4.共享文件夹里的内容不要轻易改动。