我如何将我的 Raspberry Pi 变成私有云服务器

2025-05-27

我如何将我的 Raspberry Pi 变成私有云服务器

我确实喜欢旅行和拍照,即使其中大多数都毫无意义😄

回家后,我习惯把所有拍的照片都转移到笔记本电脑上,然后挑选出最好的照片上传到云端。我喜欢用谷歌相册。但有一个问题。
因为我用的是免费套餐,所以我上传的照片不是原始尺寸的。这意味着照片质量会下降。

这就是为什么我决定购买一个硬盘并将我的照片上传到上面,不再使用 Google 相册。

该死,我太怀念它了。

当我不在硬盘旁边时,我就无法访问我的照片了。无法展示或分享它们。

从那时起,私有云的想法就开始浮现在我的脑海中。

你可能会说买个硬盘不算钱?那就花钱买 Google Photos 吧!你说得对,但没有什么比亲手打造的东西带来的满足感更棒的了。我喜欢这种感觉,所以我创建了我的私人 Google Photos!它实际上是一个完全私人的云服务——文档、视频、图片、电子邮件等等——但我只用它来存储我的照片。

先决条件

Raspberry Pi 和 Micro SD

为了设置我的照片服务器,我使用了 Raspberry Pi 4(4 GB RAM),配备 16 GB Micro SD 和外部 USB 驱动器作为存储。

替代文本

Docker 和 Docker Compose🐳

我还在我的 Raspberry Pi 上安装了Docker:我不想重新安装所有内容,以防出现问题。

一旦安装,我确实确保用户pi可以使用它(我不想sudo每次都使用)



curl -fsSl https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker pi


Enter fullscreen mode Exit fullscreen mode

也安装了Docker Compose - 感谢Roahn的帮助



sudo apt-get install -y libffi-dev libssl-dev python3 python3-pip
sudo apt-get remove python-configparser
sudo pip3 install docker-compose


Enter fullscreen mode Exit fullscreen mode

由于 Raspberry Pi 的架构与经典的 Ubuntu 不同,因此我需要通过 安装 Docker Compose pip3

基础设施

为了设置Nextcloud,我使用了一个yml文件docker-compose.yml



version: '2'

volumes:
  nextcloud:

services:
  app:
    image: nextcloud
    ports:
      - 8080:80
    volumes:
      - nextcloud:/var/www/html
    restart: always


Enter fullscreen mode Exit fullscreen mode

yml文件包含我想要构建的基础架构。这种构建基础架构的方式称为IaC(基础架构即代码):你声明想要运行的服务以及它们如何相互通信,Docker Compose 会为你完成这项工作。

在本例中,我声明了我想使用nextcloud镜像在端口8080(主机 - 我通过此端口访问它)上运行一个应用程序,并重定向到容器的“内部”端口80。点击此处volume了解如何公开端口。我还指定了容器存储数据(我的照片)的路径。

启动并运行

现在一切docker-compose.yml准备就绪,是时候启动了🚀



docker-compose up -d


Enter fullscreen mode Exit fullscreen mode

该选项-d代表detached mode,容器在后台运行。

要检查我们在文件中声明的容器是否yml已启动并正在运行,请运行



docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
a1d31d5ee1d6        nextcloud           "/entrypoint.sh apac…"   About an hour ago   Up About a minute   0.0.0.0:8080->80/tcp   nextcloud_app_1


Enter fullscreen mode Exit fullscreen mode

我可以用 Docker Compose 做类似的事情。在包含该文件的根文件夹中docker-componse.yml,运行



docker-compose ps

     Name                    Command               State          Ports
-------------------------------------------------------------------------------
nextcloud_app_1   /entrypoint.sh apache2-for ...   Up      0.0.0.0:8080->80/tcp


Enter fullscreen mode Exit fullscreen mode

docker ps的区别docker-compose ps在于docker ps列出了docker引擎中所有正在运行的容器,而docker-compose ps列出了与文件中声明的镜像相关的容器docker-compose.yml

如果你使用的是 Raspberry Pi,请前往http://localhost:8080/。如果你是通过 SSH 连接到 Raspberry Pi,请打开浏览器并前往http://[HOSTNAME]:8080/

如果你不知道你的 Raspberry Pi 的 IP 地址,只需运行



hostname -I

192.168.1.162 172.17.0.1 172.29.0.1 169.254.70.85 172.21.0.1 169.254.52.242 2a00:23c7:8e8b:1201:f35:95a7:4c14:6ed


所以,就我而言,我的 Raspberry 的 IP 地址是192.168.1.162。除非你断开 Raspberry 与互联网的连接,或者重启路由器,否则它不会改变。

这是一篇关于如何通过 SSH 连接到 Raspberry Pi 的好文章。

太棒了!Nextcloud 已启动并运行,随时可用!🎉 🎉 🎉

设置管理员帐户,不要更改存储和数据库设置。现在还不是时候。

让我们仔细看看

太棒了,Nextcloud 已经可以正常工作了,而且只需要连接 WiFi 即可。我还可以用我的智能手机上传照片了!

现在让我们看一下容器。运行



docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
a1d31d5ee1d6        nextcloud           "/entrypoint.sh apac…"   2 hours ago         Up 37 minutes       0.0.0.0:8080->80/tcp   nextcloud_app_1


Enter fullscreen mode Exit fullscreen mode

并复制容器 ID。现在运行



docker exec -it <CONTAINER_ID> bash


Enter fullscreen mode Exit fullscreen mode

-it以交互模式使用进入容器本身bash

您将看到类似



root@a1d31d5ee1d6:/var/www/html#


Enter fullscreen mode Exit fullscreen mode

您以 身份进入了容器,root它正在等待命令。那么,让我们来看看容器将在哪里存储我的图片。卷路径是/var/www/html。在这个容器中,Apache 正在运行,这就是它/var/www的来源。

要列出所有文件,请运行ls -l。要发现 Nextcloud 存储我的数据的位置,让我们打开config.php文件来预览一下。



more config/config.php

<?php
$CONFIG = array (
  'htaccess.RewriteBase' => '/',
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'apps_paths' =>
  array (
    0 =>
    array (
      'path' => '/var/www/html/apps',
      'url' => '/apps',
      'writable' => false,
    ),
    1 =>
    array (
      'path' => '/var/www/html/custom_apps',
      'url' => '/custom_apps',
      'writable' => true,
    ),
  ),
  'instanceid' => 'ocagdfr8srkl',
  'passwordsalt' => 'Mw2SMCooFW1CAUuyzK7TV5Uh7cbGge',
  'secret' => 'KpK7QWHnzWs/NgdkQSATn4EogqLLrIFLXO0mu0cShbG6zJVQ',
  'trusted_domains' =>
  array (
    0 => '192.168.1.162:8080',
  ),
  'datadirectory' => '/var/www/html/data',
  'dbtype' => 'sqlite3',
  'version' => '18.0.4.2',
  'overwrite.cli.url' => 'http://192.168.1.162:8080',
  'installed' => true,
);


Enter fullscreen mode Exit fullscreen mode

datadirectory, 知道了!

跑步



cd data/<NEXTCLOUD_USERNAME>/files/
ls -l


Enter fullscreen mode Exit fullscreen mode

文件和文件夹在这里!照片存储在Photos文件夹中。

替代文本

下一步

我的私有云已准备就绪,现在我可以安全地存储我的高清照片了!一切皆有可能!

还没有🚫我确实有两个限制:

  1. 如果我不在家,就无法上传照片
  2. 由于 Micro SD 卡的存储容量有限,我无法上传所有想要的照片

为了克服这些问题,一个域和一个外部硬盘就足够了🔜

文章来源:https://dev.to/rossanodan/how-i-turned-my-raspberry-pi-into-a-private-cloud-server-1lpn
PREV
Python 新手常犯的 3 个错误
NEXT
在 TON 的 Stonfi 上寻找 memecoin,或者 Notcoin 之外还有其他生命吗