使用树莓派搭建自己的私有云

最近手机内存告急,刚好有一块吃灰的树莓派和内存卡,虽然现在各种云盘网盘服务很发达,但是本着可以不做但是不能不会的原则,我希望自己构建一个私有云。

设备:树莓派4B(32G启动盘)+ 32G存储

写在前面:建议先将自己的域名托管在Cloudflare服务器下,具体见四(3),这一步等待服务器DNS同步很费时间

一、树莓派启动

通过树莓派烧录工具(树莓派镜像烧录器)安装Raspberry操作系统

操作系统安装成功后配置wifi:

  1. 在树莓派系统盘根目录建立空白的SSH文件(文件名为SSH,无后缀)
  2. 在树莓派系统盘根目录建立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
    }
    
  3. 树莓派上电开机
  4. 在路由器后台(连接Tenda设备浏览器登录192.168.0.1;电信路由器192.168.1.1)获取树莓派IP
  5. 通过PUTTY使用SSH连接到设备(注意:树莓派默认不启动VNC,需要在SSH状态下开启VNC才可以使用VNC viewer远程连接桌面)
    1. 在PUTTY登录用户
    2. 使用 sudo raspi-config 进入bios设置
    3. 选择 Interface Options 设置
    4. 开启VNC服务
    5. 最后通过VNC viewer成功连接: <p align="center"> 居中图片

    </p>

二、硬盘挂载

  1. 外接硬盘名称为sda
  2. 首先通过命令 df -h 看到MOUNTPOINT为空,即就是还没有格式化
  3. 使用 sudo parted /dev/sda 进入parted
  4. 使用 sudo parted -s /dev/sda mklabel gpt 创建GPT分区表
  5. 使用 sudo parted -s /dev/sda mkpart primary ext4 1MiB 100% 创建新分区
  6. 使用 sudo mkfs.ext4 -F /dev/sda1 格式化为ext4(便于做云盘)
  7. 创建挂载点并挂载:

    sudo mkdir -p /mnt/cloud
    sudo mount /dev/sda1 /mnt/cloud
    
  8. 设置开机自动挂载:

    1. 编辑/etc/fstab:sudo nano /etc/fstab
    2. 在 /etc/fstab 最后添加: /dev/sda1 /mnt/cloud ext4 defaults 0 2
    3. 退出后执行:sudo mount -a

三、使用Nextcloud在局域网内访问

  1. 首先安装snap环境:

    sudo apt update
    sudo apt install snapd -y
    
  2. 安装Nextcloud:

    sudo snap install nextcloud
    
    
  3. 迁移存储路径: · 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是官方提供的安全的隧道服务

  1. 注册Cloudflare 账号(https://dash.cloudflare.com/
  2. 购买自己的域名
  3. 将域名托管到Cloudflare服务器下:在域名管理仪表盘修改DNS服务器,自定义DNS,将当前的名称服务器替换为 Cloudflare 名称服务器(24h生效)

居中图片

  1. 安装Cloudflare客户端:

    1. 因为树莓派源没有官方库,所以需要使用官方二进制包安装:
      1. 确认系统架构:uname -m
      2. 64位ARM:

        wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb
        sudo dpkg -i cloudflared-linux-arm64.deb
        
      3. 验证安装:cloudflared --version
      4. 登录Cloudflare:cloudflared tunnel login:浏览器登录命令行网址,添加自己的域名
      5. 运行 cloudflared tunnel login: 为自己的域名授权

居中图片

  <p align="center">
       <img src="/assets/1760711779876.png" alt="居中图片" width="400"/>
     </p>
  1. 配置Tunnel服务:

    1. 运行 cloudflared tunnel create mycloud :由Cloudflare官方生成隧道ID(命令输出的最后一行)

      居中图片

    </p>

    1. 隧道配置文件:

       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
      
    2. 在Clouderflare中自动创建CNAME:cloudflared tunnel route dns mycloud cloud.jinhaispace.icu

  2. 设置cloudflared 安装为 systemd 服务并启动(开机自启):

    sudo cloudflared service install
    sudo systemctl enable --now cloudflared
    
  3. 在Nextcloud中添加可信域名(!!!必须):sudo snap run nextcloud.occ config:system:set trusted_domains 1 --value=cloud.jinhaispace.icu

神功告成!这时候就可以通过域名访问我们的私有云了,但是因为使用谷歌服务,需要魔法才能访问,且访问速度较慢,这也是后续更新的主要方向。

居中图片