写在前面

终于正式开始玩Pi了,作为正式开始玩Pi第一期,就来带大家用树莓派搭建私有云好了。在开始之间先解决两个小问题,即“什么是云?”、“我为什么需要私有云”。

首先,云是云计算的简称。云计算用维基百科的话来说是“一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。”,用人话说就是,把一台强力的电脑不关机,给其他的电脑,或者说用户提供服务。你可以理解为自家厨房和餐厅的区别,有时自家厨房没有合适的炊具,你就直接去餐厅点餐了(这就是自己设备计算力不足,需要云计算帮助的情况),有时候就是单纯的不想动手做饭而去餐厅吃饭(这里指的是计算力足够,但通过云计算可以更加便利)。

觉得上面的说法太过理论的话,我们举个实际的例子。百度网盘在更名前叫百度云,这里指的是云计算的一个细分用法,云储存。就好比是一个数据仓库,你可以把照片、音乐、文档、小电影放在你自己的柜子里(账号),其他人也可以把他们的数据放在他们的柜子里(别人的账号)。每个人只要注册了账号就可以上传自己的数据,这就是所谓的公有云。但是毕竟柜子是人家的(百度的服务器),运行多久?安全性如何?会不会被偷看?这都是问题。

那么,我们可不可以搭建一个只属于自己的百度云呢?当然可以,那就是私人专属的————私有云。

P.S. 建议在跟着一步步操作前先通读一遍全文

原理及方案选择

我们这里主要是使用的云计算中的云储存这一特定用法,毕竟和真正的云计算比起来,树莓派的性能实在是不够看。

为什么需要云储存?因为这样数据就不仅仅局限于某一设备,你的照片、音乐、文档,只要在云上(树莓派),你的所有设备都可以访问。

所以原理如下图

但是如何让设备访问树莓派呢?其实很简单,在同一个局域网中就可以。所以原理就变成了下面这样

如果看了《你应该知道的一些树莓派基础知识|明明白白玩 Pi 系列之三》的朋友应该知道SFPT这个交换数据的方法了。除了windows和macOS以外,Android和iOS都有SFTP的app,确实已经达成全平台的条件了,若是要求不高,用SFTP就足够了。但是,那样的话,就不至于写这篇文章了。

SFTP虽然简单好用,但缺点也很明显,比如管理起来不方便,操作相对繁琐,常常面对权限问题,除了自己家里其他人也不方便一起使用等等。所以能不能用起来像百度云一样简单直观呢?

答案是肯定的,这里就给大家介绍一个开源的云储存解决方案————ownCloud

ownCloud一旦搭建完成,用起来就和百度云一样,在网页上都可以使用,界面简单直观,而且局域网内的所有设备,都可以自由访问,还支持多账户的功能,家里的每一个成员都可以有自己的一个空间,互不干扰。由于局域网的关系,速度可以说极快,用来设备间传输文件也是极好的。

若是读到这里,你任然有兴趣的话,那就开始吧。

方案实施流程

在这里假定使用Raspbian OS,且做好了一切准备工作,即系统OK,SSH或外接屏幕OK,网络OK,软件源OK,保证软件列表及软件为最新状态。若没做好准备工作,可能遇到奇怪的问题导致安装失败。详情请移步《你应该知道的一些树莓派基础知识|明明白白玩 Pi 系列之三》

大致流程为先安装LAMP,然后配置好数据库,接着安装ownCloud本体,最后配置ownCloud。之后就可以愉快的享受成果了。

P.S. LAMP是Linux、Apache、MySQL、PHP的缩写。Linux是系统,这里我们用的是Raspbian OS(其他Linux发行版也是可以的,就不展开说明了)。Apache是一个功能非常强大的Web服务器,用于提供网页浏览,不展开说明了。MySQL是一个强大的数据库,也不展开说明了。PHP是一门非常流行编程语言(有一个段子这么说“PHP是世界上最好的语言”),主要用于网页后端的开发,不展开说明。这几个合起来之后是非常流行的Web后端的组合,也不展开说明。

P.S.2 都没有展开说明真的不是因为我懒啊,而是这每个都是有巨大学习空间,实在是无力一一讲解。若是感兴趣的人多的话,之后倒是可以带大家用树莓派搭建一个自己的博客。通过搭建博客,可以理解Web的构成和运行原理。毕竟未来是Web的天下嘛。咳咳,扯远了。

在执行之前,一定要执行一遍sudo apt-get update和sudo apt-get upgrade来确保软件列表和软件为最新状态。

好,我们就开始安装LAMP吧,Linux已经有了,接下来

安装Apache2

sudo apt-get install apache2 -y


sudo:暂时借用root权限执行命令

apt-get install:用包管理安装app的意思

apache2:安装软件名-y:确认安装的意思。若不输入这个也可以,只是在执行安装命令后会询问是否确认安装。

安装MySQL

sudo apt-get install mysql-server -y

命令含义同上,下同。

安装过程中会提示设置MySQL的Root账户的密码,注意根据提示设置,并牢记。

安装PHP及其相关依赖

sudo apt-get install php5 php5-gd php-xml-parser php5-intl php5-sqlite php5-mysql smbclient curl libcurl3 php5-curl -y

安装phpMyAdmin

sudo apt-get install phpmyadmin -y


安装中会提示选择服务器,选择Apache2,之后会提示输入MySQL密码。

到此LAMP就全部配置完成了,接下来我们开始安装ownCloud,这里我提供两种方法给大家,一种直接用包管理安装(若不清楚什么是包管理可以移步明明白白玩Pi系列之三),另一种则是完全手动安装。前者流程简单,但一般来说不是最新版。后者稍微麻烦点,但是可以安装最新版。至于最新版有什么变化之类的,也不好一语带过,只能说基础功能是不是最新版都一样,其他的因为文章的时效性,还请移步官网查看。

两种方法任选其一就好。

方法一:包管理安装ownCloud

sudo apt-get install ownCloud -y

嗯,就这么简单的一句。

方法二:手动安装

sudo wget https://download.owncloud.org/community/owncloud-9.1.5.zip

wget:从指定URL下载文件的意思。若在下载未完成的情况下中断SSH、断电等意外导致下载中断的话,可以使用sudo wget -c https://download.owncloud.org/community/owncloud-9.1.5.zip
来继续下载,不必从头开始。

细心的读者可能注意到了,URL中有9.1.5这么个版本号,这里只是本文完成时的最新版,你可以到这里(https://owncloud.org/install/#)查看当前最新版本,之后用最新版本号替换这里的9.1.5下载最新版。

下载完成后解压到指定目录

sudo unzip owncloud-9.1.5.zip -d /var/www/html

unzip:解压Zip的命令,后面是解压地址。若是对Linux还没有非常熟悉的话,就按照我的解压地址来比较好。

之后是在ownCloud目录下创建数据库目录

cd /var/www/html/owncloud && sudo mkdir data

cd:命令之前见过,移动到指定目录的意思,就是打开文件夹的操作。&&:连续执行多个命令时使用mkdir:新建文件夹。data为文件夹名称

然后对目录赋予必要的权限

sudo chown -R www-data:www-data data && sudo chown -R www-data:www-data config && sudo chown -R www-data:www-data apps

chown:权限修改命令,之后详细讲,先不用理会。

到此为止所有需要安装的就完成了,接下来只需要配置好数据库和ownCloud就可以使用了
配置MySQL(数据库)

第一步登录数据库

mysql -u root -p

提示输入密码就是之前安装MySQL的时候设置的密码

成功登陆后,在MySQL这个软件中建立一个数据库

CREATE DATABASE 将我替换为数据库名称;

例如:CREATE DATABASE own cloud;

警告:MySQL有自己的代码规范,代码最后有分号结束,不要漏掉了。

为刚才建立的数据库建立自己的账户

GRANT ALL ON 将我替换为数据库名称.* to '将我替换为数据库用户名'@'localhost' IDENTIFIED BY '将我替换为数据库密码';

例如:

GRANT ALL ON owncloud.* to 'zipeijun'@'localhost' IDENTIFIED BY '66668888';

执行下面命令分配权限

FLUSH PRIVILEGES;

到此MySQL就配置完毕,输入下面命令退出即可

exit

走到这里,树莓派上面的工作就全部完成了。接下来用局域网内的其他设备,在浏览器地址栏中输入

将我替换为树莓派IP地址/owncloud

回车后可以看见下面界面

之后就可以使用了,下面两张图简单讲一下增加用户的方法

进阶

注意:接下来的内容,并不是所有人都需要。而且仅仅是用于试验性质的,实际价值或者说使用体验不会很好。

文章看完之后,私有云已经可以实际使用了,但是却仅仅局限于局域网中,有没有方法可以让互联网中访问呢?这里推荐一个方法,就是——ngrok

ngrok是一款用于内网穿透的工具,把你的数据上传至公网中的服务器,然后通过访问公网中的服务器来访问你的树莓派。于是原理变成下面这样


你也许会说我没有公网中的服务器,怎么办?两个办法,第一是自己租用服务器,比如阿里云,但是那样的话,我为什么不把服务都直接搭在阿里云上面呢?第二个办法,找到国内方案。我自己使用的是Sunny-Ngrok(https://www.ngrok.cc),它有免费的方案供使用,国内也有其他的ngrok的供应商,不必局限于此。

下面我已Sunny-Ngrok为例

首先登录官网(https://www.ngrok.cc),注册并登录帐号

登录账号后会自动进入管理界面,在管理界面选择左侧的隧道管理—开通隧道,根据自身选择方案

免费版这个套餐基本也就是做实验的性质了。选择之后进入下面界面

按照图片配置完成之后,就可以在隧道管理总看见了。

到此ngrok就配置好了。

回到树莓派,先下载ngrok

sudo wget http://hls.ctopus.com/sunny/linux_arm.zip

然后解压并进入目录

sudo unzip linux_arm.zip -d /usr/share/

cd /usr/share/linux_arm/

创建配置文件

sudo nano ngrok.cfg

然后命令行输入下面命令开始运行

./sunny -config ngrok.cfg start zipeijun

完整版命令:

/usr/share/linux_arm/sunny -config /usr/share/linux_arm/ngrok.cfg start zipeijun

之后会看见下面界面,说明服务启用了,快去试试吧

ngrok到现在算是全部部署完成了。

关闭SSH后ngrok也会中断,但是Sunny-Ngrok貌似是个人作品,长时间占用也不知好不好(其实效果一般般,还是权当做学习方法论好了),所以关于后台运行Ngrok和开机启动就不多说了,有兴趣可以再去了解。(另外,花生壳也是一种选择)

尾巴

其实走完流程就可以发现,搭建私有云真的是很简单的一件事,但是通过这个流程,可以了解大部分玩Pi的方法,无非就是步骤更加多罢了。

其实这里还有一个问题没有交代,就是是树莓派的空间不足的问题,其实挂在硬盘就好了,但是我手头没有硬盘,我只写我玩过的东西,这里推荐一篇文章(https://www.cellsystech.cn/docs/?p=2002),很简单的。之后如果我有硬盘了,也会补档的。

之后还会给大家慢慢带来更多玩法的,敬请期待。