我如何将我的 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
我也安装了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
由于 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
此yml
文件包含我想要构建的基础架构。这种构建基础架构的方式称为IaC(基础架构即代码):你声明想要运行的服务以及它们如何相互通信,Docker Compose 会为你完成这项工作。
在本例中,我声明了我想使用nextcloud
镜像在端口8080
(主机 - 我通过此端口访问它)上运行一个应用程序,并重定向到容器的“内部”端口80
。点击此处volume
了解如何公开端口。我还指定了容器存储数据(我的照片)的路径。
启动并运行
现在一切docker-compose.yml
准备就绪,是时候启动了🚀
docker-compose up -d
该选项-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
我可以用 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
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
并复制容器 ID。现在运行
docker exec -it <CONTAINER_ID> bash
-it
以交互模式使用进入容器本身bash
。
您将看到类似
root@a1d31d5ee1d6:/var/www/html#
您以 身份进入了容器,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,
);
datadirectory
, 知道了!
跑步
cd data/<NEXTCLOUD_USERNAME>/files/
ls -l
文件和文件夹在这里!照片存储在Photos
文件夹中。
下一步
我的私有云已准备就绪,现在我可以安全地存储我的高清照片了!一切皆有可能!
还没有🚫我确实有两个限制:
- 如果我不在家,就无法上传照片
- 由于 Micro SD 卡的存储容量有限,我无法上传所有想要的照片
为了克服这些问题,一个域和一个外部硬盘就足够了🔜
文章来源:https://dev.to/rossanodan/how-i-turned-my-raspberry-pi-into-a-private-cloud-server-1lpn