序
微恙在家,思来想去不如尝试搭建一套自己的家庭云盘(选择了目前比较流行的nextcloud),一来充分利用下赋闲的树莓派,二来练练手多了解点新东西。记录一下搭建的大致过程和碰到的问题,仅供参考。
正文
1. nextcloud基础搭建
1.1 树莓派系统烧录
树莓派型号:3B或者4B都可以,sd卡最好是16G以上,当然,有条件的可以直接上4B+8g版的,因为搭建家庭云只是树莓派的一个服务,还可以做更多更有趣的事儿
系统镜像:可以去树莓派官网下载最新的https://www.raspberrypi.org/software/operating-systems/,我这里直接用的店家附赠的稍旧一点的镜像2020-05-27-raspios-buster-full-armhf(官方版本).zip,都是32位的,64位的暂时没有试过。
烧录:把准备好的sd卡插入电脑,烧录工具我使用了购买树莓派时候送的:balenaEtcher,过程挺小白,如图一步步操作就好:
1.2 源更新(加速下载)
将烧好系统的sd卡插入树莓派中,通电启动后连接下显示器,进行必要的设置,比如连接wifi,enable ssh等等,网上一堆树莓派入门文档,这里不赘述,
然后在windows上可以使用putty这个工具,在HostName中输入内网树莓派的地址(可以登录家中路由器网址查看,我自己的是小米的:192.168.31.1),则可以内网远程访问树莓派:
远程登录,进入到树莓派linux界面后,可以查看下debian版本号:cat /etc/debian_version,我的是10.9
然后修改下树莓派apt源:
1)先备份原文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak
2)修改编辑系统源文件
sudo vim /etc/apt/sources.list (没有装vim的同学可以先:sudo apt-get install vim)
将初始的源使用#注释掉,添加如下两行清华的镜像源:
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
注意系统版本,我这里是buster版本,可以通过 cat /etc/os-release 来查询os版本信息
3)修改系统源
sudo vim /etc/apt/sources.list.d/raspi.list
将初始的源使用#注释掉,用以下内容取代:
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
4)执行更新
sudo apt-get update (更新索引)
sudo apt-get update (更新文件)
1.3 安装docker
使用apt安装稍微麻烦点,这里使用脚本自动安装,使用如下命令:
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
安装好后启动docker
sudo systemctl enable docker
sudo systemctl start docker
建立docker用户组,避免权限问题(默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket)
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $xxx docker #检测当前用户是否已经在docker用户组中,其中xxx为用户名
sudo gpasswd -a $USER docker #将当前用户添加至docker用户组
newgrp docker #更新docker用户组
执行 命令: docker version,应该不会再出现“Got permission denied”权限报错,表示docker可以正常使用
1.4 安装next_cloud
进入正题了,安装next_cloud之前,首先要安装数据库(当然,简单使用的话也可以不用),我们可以再在docker中进行,先拉适合的镜像
docker pull hypriot/rpi-mysql
创建名称为mysql的容器
docker run -it --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=你的密码 -d hypriot/rpi-mysql
-p 表示端口映射
-d 刚才拉取的镜像
然后,拉取nextcloud的镜像
docker pull nextcloud
创建名称为nextcloud的容器
docker run -it -d --name nextcloud --link mysql:db -p xxxx:80 -v /nextcloud:/var/www/html/data -d nextcloud
这里注意几点:
--link 关联了mysql数据库
-p xxxx 是nextcloud映射出来的端口号,自行设定,比如8123
-v /nextcloud:/var/www/html/data 是nextcloud在docker中的挂载目录
启动了mysql和nextcloud的docker后,可以使用命令 docker ps 查看已经启动的服务
另外,如果需要每次树莓派重启都自己重启docker服务的话,一种可以在容器创建时指定 --restart=always ,另一种可通过update 命令:docker update --restart=always xxx
确保nextcloud和mysql启动的情况下,在电脑浏览器中输入网址:树莓派内网地址:刚才自行设定的端口号,比如:192.168.31.90:8123,则可以打开nextcloud的登陆界面,如下:
需要说明的是:数据目录 /var/www/html/data 指的是docker容器里的路径,这里不需要管它。只需要管好docker run语句的挂载目录即可。
这里提示不建议使用sqlite,我选择的是使用mysql(当然也可以使用sqlite)
进入到mysql的配置,由于自己做的时候没有截屏,这里借用网上的截图
配置数据库选择mysql,然后用户名和密码就是刚才创建mysql容器时候的设置(用户名为root,密码为之前自己设置的密码),第三行随便填,第四行填db是因为之前创建nextcloud容器时候作了link设置(mysql:db)
补充一点可能碰到的坑,如果打开页面碰到诸如:“nextcloud 通过不被信任的域名访问 请联系您的管理员”的提示,可以使用如下命令:
docker exec -it $nextcloud容器ID bash
vim /config/config.php
然后在
'trusted_domains' =>
array (
0 => '192.168.xx.xx', ## IP地址 修改这3行就可以了
1 => 'xxx.com', ## 域名,注意!!!不要带www
2 => '192.168.xx.xx', ## IP地址
3 => '[fe80::xx:xx]',
),
新增下可信赖地址即可
至此,nextcloud基础部分搭建完毕,手动分界线
2. nextcloud拓展使用
下面介绍如何挂载外部存储以及内网穿透
2.1 linux硬盘挂载
单用树莓派自己的sd卡当硬盘确实有点捉急,除非你的sd卡足够大,于是考虑是否可以外部挂载额外的移动硬盘,这样就有足够的拓展空间。首先进行linux硬盘挂载
1)找一块可用的移动硬盘,插入树莓派,查看已有的分区状态:df -l,应该暂时没有看到新的硬盘
2)查看服务器安装的硬盘状态(包括格式化和未格式化):fdisk -l,应该可以看到插入的移动硬盘了,比如/dev/sda,只是没有分区
3)添加新分区:fdisk /dev/sda,按照以下红框输入
依次是:n 回车,p或e 回车,1(如果没有1,说明数字已经被占用,就用可选的最小数字)两次回车 w
4)使用以下命令查看分区:fdisk -l,可以看到已经多了一个分区,只是可能还没有格式化
5)格式化分区:mkfs.ext4 -c /dev/sda2,其中,-c 是在建立文件系统前检查坏道,可能会很费时间,新硬盘一般不需要
6)挂载硬盘:
mkdir /new_folder
mount /dev/sda2 /new_folder
7)让系统开机自动挂载,或者使用vim /etc/fstab 编辑分区配置
echo "/dev/sda2 /new_folder ext4 defaults 0 0">>/etc/fstab
2.2 nextcloud外部存储配置
Nextcloud默认是没有开启外部存储功能的,需在手动启用插件:
然后设置Nextcloud所有用户都能使用外部存储
使用docker部署可能会碰到如下问题:
这时候,可以进入nextcloud容器,使用apt安装然后重启即可,命令如下:
docker exec -it nextcloud bash
apt install smbclient libsmbclient-dev
pecl install smbclient
docker-php-ext-enable smbclient
然后在nextcloud外部存储配置页面,目录名称随便填,外部存储选择本地,“配置”一栏需要注意:
首先,2.1中第六步linux挂载硬盘的路径要放到nextcloud下,笔者的是这样:
mkdir /nextcloud/WD500G
mount /dev/sda2 /nextcloud/WD500G
然后,在网页配置栏中,填写之前创建容器时候的路径拼上放在nextcloud下的外部存储的名字,笔者的如下:/var/www/html/data/WD500G,“可用于”一栏填写需要使用外部挂载的管理员或者具体账户,点击最右边的勾,看到最左侧出现绿底白勾,如图:
注意:挂载完后,发现无法往其中添加文件的情况,可能是权限问题,进入nextcloud容器:docker exec -it $CONTAINER bash后,找到挂载的文件夹,笔者是在/var/www/html/data中,使用ls-la 查看挂载文件夹的权限,然后使用 chown -R www-data:www-data /WD500G 改下权限就可以开心使用新硬盘存储了。
2.3 内网穿透
以上完成了在家庭局域网的nextcloud搭建,如果想在外网使用的话,其实有好几种方案,比如公网ip,动态DDNS等等,依照个人的经济承受能力选择不同的方案,笔者对太多流量等的配置没什么硬需求,就暂时找了个免费的工具简易实现了,用的网云穿(非打广告),具体好不好有待验证,放上笔者自己的代码
# 下载arm版
wget http://xiaomy.net/download/linux/wyc_linux_arm
# 赋权
chmod -R 777 ./wyc_linux_64
# 树莓派中后台运行,否在在windows中跑的话,关机了就没有了
nohup ./wyc_linux_arm -token=令牌 & (令牌是网云穿开通服务后生成的,网页上可查)
# 查看内网穿透服务是否开启
tail -f nohup.out
以上就是笔者个人的搭建全程,目前已经跑了几天,只要在有网络的地方,亲测可以正常使用,另外手机端可以安装nextcloud应用,输入内网穿透的链接即可登录,还是挺方便的,如果以上搭建过程有什么不对的地方,还请各位看官及时纠正。
参考:
https://www.jianshu.com/p/a730755577a3
https://docker_practice.gitee.io/install/raspberry-pi.html
https://www.cnblogs.com/steinven/p/11357295.html
https://blog.csdn.net/anaitudou/article/details/80830955
https://www.wangzhengzhen.com/3157.html
https://blog.csdn.net/weixin_44968234/article/details/109553700