使用树莓派搭建自己的私有云
最近手机内存告急,刚好有一块吃灰的树莓派和内存卡,虽然现在各种云盘网盘服务很发达,但是本着可以不做但是不能不会的原则,我希望自己构建一个私有云。
设备:树莓派4B(32G启动盘)+ 32G存储
写在前面:建议先将自己的域名托管在Cloudflare服务器下,具体见四(3),这一步等待服务器DNS同步很费时间
一、树莓派启动
通过树莓派烧录工具(树莓派镜像烧录器)安装Raspberry操作系统
操作系统安装成功后配置wifi:
- 在树莓派系统盘根目录建立空白的SSH文件(文件名为SSH,无后缀)
- 在树莓派系统盘根目录建立wpa_supplicant.conf:
country=CN ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="huy1n9"//修改成你的WIFI名称(电脑热点名称) psk="123456789"//修改成你的WIFI密码(电脑热点密码) key_mgmt=WPA-PSK priority=5//连WIFI优先级,数字越大优先级越高 scan_ssid=1 }
- 树莓派上电开机
- 在路由器后台(连接Tenda设备浏览器登录192.168.0.1;电信路由器192.168.1.1)获取树莓派IP
- 通过PUTTY使用SSH连接到设备(注意:树莓派默认不启动VNC,需要在SSH状态下开启VNC才可以使用VNC viewer远程连接桌面)
- 在PUTTY登录用户
- 使用
sudo raspi-config
进入bios设置 - 选择
Interface Options
设置 - 开启VNC服务
- 最后通过VNC viewer成功连接: <p align="center">
</p>
二、硬盘挂载
- 外接硬盘名称为sda
- 首先通过命令
df -h
看到MOUNTPOINT为空,即就是还没有格式化 - 使用
sudo parted /dev/sda
进入parted - 使用
sudo parted -s /dev/sda mklabel gpt
创建GPT分区表 - 使用
sudo parted -s /dev/sda mkpart primary ext4 1MiB 100%
创建新分区 - 使用
sudo mkfs.ext4 -F /dev/sda1
格式化为ext4(便于做云盘) -
创建挂载点并挂载:
sudo mkdir -p /mnt/cloud sudo mount /dev/sda1 /mnt/cloud
-
设置开机自动挂载:
- 编辑/etc/fstab:
sudo nano /etc/fstab
- 在 /etc/fstab 最后添加:
/dev/sda1 /mnt/cloud ext4 defaults 0 2
- 退出后执行:
sudo mount -a
- 编辑/etc/fstab:
三、使用Nextcloud在局域网内访问
-
首先安装snap环境:
sudo apt update sudo apt install snapd -y
-
安装Nextcloud:
sudo snap install nextcloud
-
迁移存储路径: · Nextcloud 的默认存储路径是:
/var/snap/nextcloud/common/nextcloud/data/
,我们需要将存储路径迁移到刚刚创建的cloud目录中 · 初次使用首先启动并初始化Nextcloud:sudo snap start nextcloud
· 局域网内设备浏览器访问树莓派IP(http://192.168.xxx.xxx),创建管理员用户
· 确认默认路径建立完成:ls /var/snap/nextcloud/common/nextcloud/
· 修改路径并重启:
sudo snap stop nextcloud #(关闭nextcloud服务)
sudo mv /var/snap/nextcloud/common/nextcloud/data /mnt/cloud/data #(把原始data移动到外接盘)
sudo ln -s /mnt/cloud/data /var/snap/nextcloud/common/nextcloud/data #(创建一个符号链接,让系统仍然认为数据在源路径)
sudo chown -R root:root /mnt/cloud/data #(确保权限,给snap的默认权限)
sudo snap start nextcloud
四、设置公网访问
配置公网访问有两种方式:端口映射和内网穿透,其中端口映射方式简单但是需要公网IP,比较难以获得;因此我选择了内网穿透方式。
Cloudflare Tunnel是官方提供的安全的隧道服务
- 注册Cloudflare 账号(https://dash.cloudflare.com/)
- 购买自己的域名
- 将域名托管到Cloudflare服务器下:在域名管理仪表盘修改DNS服务器,自定义DNS,将当前的名称服务器替换为 Cloudflare 名称服务器(24h生效)
-
安装Cloudflare客户端:
- 因为树莓派源没有官方库,所以需要使用官方二进制包安装:
- 确认系统架构:
uname -m
-
64位ARM:
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb sudo dpkg -i cloudflared-linux-arm64.deb
- 验证安装:
cloudflared --version
- 登录Cloudflare:
cloudflared tunnel login
:浏览器登录命令行网址,添加自己的域名 - 运行
cloudflared tunnel login
: 为自己的域名授权
- 确认系统架构:
- 因为树莓派源没有官方库,所以需要使用官方二进制包安装:
<p align="center">
<img src="/assets/1760711779876.png" alt="居中图片" width="400"/>
</p>
-
配置Tunnel服务:
- 运行
cloudflared tunnel create mycloud
:由Cloudflare官方生成隧道ID(命令输出的最后一行)
</p>
-
隧道配置文件:
sudo nano /root/.cloudflared/config.yml
tunnel: 597e8a9d-e774-478b-b31e-abadccc5e7da # 刚刚生成的id credentials-file: /root/.cloudflared/597e8a9d-e774-478b-b31e-abadccc5e7da.json ingress: - hostname: cloud.jinhaispace.icu service: http://localhost:80 - service: http_status:404
-
在Clouderflare中自动创建CNAME:
cloudflared tunnel route dns mycloud cloud.jinhaispace.icu
- 运行
-
设置cloudflared 安装为 systemd 服务并启动(开机自启):
sudo cloudflared service install sudo systemctl enable --now cloudflared
-
在Nextcloud中添加可信域名(!!!必须):
sudo snap run nextcloud.occ config:system:set trusted_domains 1 --value=cloud.jinhaispace.icu
神功告成!这时候就可以通过域名访问我们的私有云了,但是因为使用谷歌服务,需要魔法才能访问,且访问速度较慢,这也是后续更新的主要方向。