阿里云搭建个人云盘

阿里云搭建个人云盘

[TOC]

阿里云搭建个人云盘

思路

阿里云ESC服务器可作为管理系统,
OSS对象存储可以当做网盘,
安装Nextcloud即可协作网盘。

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

解压缩到本机

拷贝Nextcloud安装文件到服务器

进入/data/wwwroot/default/ 目录,创建一个old文件夹,将目录上的原始文件全部搬到old内

将 Nextcloud 上传至 /data/wwwroot/default/ 目录

在SSH中运行安装指令

1
2
3
4
5
6
sed -i 's/;mbstring.func_overload = 0/mbstring.func_overload = 0/g' /usr/local/php/etc/php.ini
rm -rf /usr/local/php71/etc/php.d/ext-opcache.ini
chown -R www /data/wwwroot/default/
service httpd restart

service httpd restart

浏览器中输入 http://ecsip,输入管理员的账号密码,马上开始安装

环境安装方法二-云盘镜像

也可以在镜像库中直接选择云盘存储 nextcloud (centos7 64位) V3.0
默认用户:yuncan
默认密码:Yuncan123

登录成功后点击下图中的设置,修改显示语言为中文简体(英文好的自行跳过)

头像—>应用—>external storage support,点击启动(用于挂载外部存储的插件)

使用远程连接工具(CRT、PUTTY等)远程连接到服务器
输入以下命令下载安装ossfs,用于安装阿里云OSSFS插件,使服务器可以挂载阿里云OSS对象存储

1
2
wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.5_centos7.0_x86_64.rpm
yum install -y ossfs_1.80.5_centos7.0_x86_64.rpm
  • 设置 bucket nameAccessKeyId/Secret 信息,将其存放在/etc/passwd-ossfs 文件中,注意这个文件的权限必须正确设置为 640。
1
2
3
echo bucket-name:access-key-id:access-key-secret > /etc/passwd-ossfs

chmod 640 /etc/passwd-ossfs
  • 查看apache用户的uid和gid
1
2
3
Cat /etc/passwd

Cat /etc/group

centos7.2裸装

LAMP

安装apache

1
2
yum update	#更新源
yum install httpd #安装apache
1
2
3
4
systemctl stop firewalld #关闭防火墙
systemctl start httpd #开启httpd服务
systemctl enable httpd.service #开启httpd开机自启
systemctl status httpd.service #查看httpd状态

浏览器输入ip后

安装 php7.2

安装源

1
2
3
yum install epel-release -y
rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

清除历史版本

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
2
systemctl enable php-fpm.service
systemctl start php-fpm.service

安装mariadb

1
2
3
4
sudo yum -y install mariadb mariadb-server #安装mariadb
yum remove mariadb
sudo systemctl start mariadb #启动mariadb
sudo systemctl enable mariadb #设置开机自启

配置MariaDB的root用户密码

1
2
3
4
5
6
7
8
9
mysql_secure_installation

Set root password? [Y/n] Y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

创建数据库,并创建数据库管理员

1
2
3
4
5
mysql -uroot -p #进入mariadb  会提示输密码
CREATE DATABASE nextcloud; #创建数据库 nextcloud
grant all privileges on `nextcloud`.* to 'nextcloudadmin'@'localhost' identified by 'passwd' with grant option; #给这个数据库创建一个非root管理员
FLUSH PRIVILEGES; #刷新权限
exit; #退出
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE DATABASE nextcloud;
#这里nextcloud是数据库名,你可以随意指定,如CREATE DATABASE dbname;

grant all privileges on `nextcloud`.* to 'nextcloudadmin'@'localhost' identified by 'passwd' with grant option;
#上面这行代码 grant all privileges on `nextcloud` ### 这个的''内容为刚才创建的数据库名。
#to 'nextcloudadmin'@'localhost' ###第一个''为数据库账号,@后面的''内容为数据库可以登录的地址,localhost意为只能本机登录。

identified by '123456' with grant option
#这里的'’内容为创建的账号的密码

#下面是举例
grant all privileges on `cloud`.* to 'admin'@'localhost' identified by 'passwd' with grant option;
#将关于cloud的所有权限 给予 admin用户

安装nextcloud

下载好的压缩包拷贝到/bar/www/html/

1
2
cd /var/www/html
chown -R apache:apache /var/www/html #给httpd服务读写权限,不执行的话,进网址会报503错误

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
2
3
4
5
6
7
8
lsb_release -a

yum update

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#设置阿里镜像
  • 安装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
2
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh
# centos7 安装宝塔界面

记录账号密码和访问地址

浏览器端无法打开检查服务器端口是否打开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
2
3
4
5
6
7
wget https://github.com/aliyun/ossfs/releases/download/v1.80.5/ossfs_1.80.5_centos7.0_x86_64.rpm

yum localinstall https://github.com/aliyun/ossfs/releases/download/v1.80.0/ossfs_1.80.0_centos7.0_x86_64.rpm

yum localinstall ossfs_1.80.0_centos7.0_x86_64.rpm

yum install ossfs

获取 AccessKeyId/Secret

登录阿里云控制台。单击页面左上方的管理控制台。将鼠标移至右上方的“账号管理”图标选择accessKeys,然后创建key。

提示信息中的云账号AccessKey是您访问阿里云API的密钥,具有该账户完全的权限,请务必妥善保管。请勿通过任何方式(如Github等)将AccessKey公开至外部渠道,以免被恶意利用而造成安全威胁。强烈建议您遵循阿里云安全最佳实践,使用RAM子用户AccessKey来进行API调用。

挂载

设置bucket name(购买后创建的bucket名称) 和 AccessKeyId/Secret信息,将其存放在/etc/passwd-ossfs 文件中,注意这个文件的权限必须正确设置,建议设为640

存储密令

1
2
echo my-bucket:my-access-key-id:my-access-key-secret > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs

将oss bucket挂载到指定目录

1
ossfs my-bucket my-mount-point -ourl=my-oss-endpoint

oss endpoint地址可以在OSS控制台找到一定要选择内网地址。

  • 示例

my-bucket这个bucket挂载到/tmp/ossfs目录下,AccessKeyIdabcdeAccessKeySecret123456oss endpointoss-cn-hongkong-internal.aliyuncs.com

1
2
3
4
echo my-bucket:abcde:123456 > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs
mkdir /tmp/ossfs
ossfs my-bucket /tmp/ossfs -ourl=http://oss-cn-hongkong-internal.aliyuncs.com -o allow_other

使挂载的文件夹(/tmp/ossfs)属于某个user

查看apache用户的uid和gid

1
2
Cat /etc/passwd
Cat /etc/group

使用上面查找到的uid和gid挂载OSS存储

1
2
3
4
5
6
7
ossfs xmnetchina1 /tmp/ossfs -ourl=oss-cn-qingdao-internal.aliyuncs.com -ouid=1000 -ogid=1000 -oumask=007 -o allow_other
# xmnetchina1:oss的bucket域名
# /tmp/ossfs:挂载目录
# oss-cn-qingdao-internal.aliyuncs.com:OSS的地址(这边使用内网访问internal)
# -ouid=1000:apache用户的uid
# -ogid=1000:apache组的gid
# 使用nginx搭建的时候注意查找的用户为nginx

查看挂载情况

df -h

1
2
3
4
5
6
7
8
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs 910M 0 910M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 8.4M 912M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
/dev/vda1 40G 3.2G 35G 9% /
tmpfs 184M 0 184M 0% /run/user/0
ossfs 256T 0 256T 0% /tmp/ossfs

设置开机自动挂载

通过开机自启动脚本mount(适用于centos7.0及以上的系统)

1
2
3
4
5
6
7
8
# ! /bin/bash
#
# ossfs Automount Aliyun OSS Bucket in the specified direcotry.
#
# chkconfig: 2345 90 10
# description: Activates/Deactivates ossfs configured to start at boot time.

ossfs your_bucket your_mountpoint -ourl=your_url -oallow_other
  • /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
2
3
4
yum install libsmbclient libsmbclient-devel
yum install php-devel php-pear httpd-devel
pecl install smbclient
pecl channel-update pecl.php.net

重启php服务

再到设置里外部储存选择本地,地点为/tmp/ossfs

您的数据目录和文件可能可以从互联网访问。.htaccess 文件不工作。强烈建议您配置您的 web 服务器,使数据目录不再可访问,或将数据目录移到 web 服务器文档根目录之外。

打开宝塔界面选择 网站 设置 配置文件 中加入如下代码

1
2
3
4
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/
{
deny all;
}

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
2
output_buffering = 4096
注释掉,前边加;

重启php

您的网页服务器未正确设置以解析“/.well-known/webfinger”

网站 > 域名 > 设置 > 伪静态

加入如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
location = /.well-known/webfinger {
return 301 $scheme://$host:$server_port/index.php/.well-known/webfinger;
}

location = /.well-known/nodeinfo {
return 301 $scheme://$host:$server_port/index.php/.well-known/nodeinfo;
}

location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}

location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}

网盘使用演示

浏览器端

输入服务器地址

输入分配用户名密码

设置语言

找到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.共享文件夹里的内容不要轻易改动。

文章作者: HibisciDai
文章链接: http://hibiscidai.com/2020/07/05/阿里云搭建个人云盘/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HibisciDai
好用、实惠、稳定的梯子,点击这里