当前位置: 首页 > news >正文

树莓派组建nas,云服务器及家庭影院

树莓派家庭小服务器记录

  • 设备
  • 功能
  • 网口映射
  • omv安装
    • 安装Portainer(图形化管理docker, 可以不装,as you like)
  • 配置NAS
  • 安装nextcloud
    • 创建共享目录
    • 构建docker compose文件
    • 配置docker源(树莓派有科学上网环境可以忽略)
    • 拉起nextcloud服务
    • 配置nextcloud
  • 安装JellyFin

设备

树莓派4b 2G内存版本 + 32G内存卡,安装树莓派lite系统,桌面版不支持
旧电脑拆机 机械硬盘320G(仅仅作为演示)
本教程只将大致过程以及遇到的主要问题做个记录,方便后面环境崩掉再操作(笑哭),有任何问题emil to me(1253210676@qq.com), will check and reply as soon as possible.

功能

  • nas服务器基本功能
  • frp映射到公网服务器,实现公网链接
  • 搭建openmediavault(OMV服务器),管理磁盘,共享目录,用户权限管理,SAMBA等。
  • 小米摄像头视频存储在samba。
  • nextcloud实现私人云服务,实现手机图片视频备份。
  • jellyfin搭建家庭影院,可以播放小米摄像头视频,及nextcloud每个用户放在指定目录的视频。

网口映射

需要一台公网可以访问的云服务器,阿里云或者腾讯云都可以租到(另外有其它可能更划算的方式实现端口映射,但本人有一轻量服务器,本次就利用起来了)
下载frp

wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_arm64.tar.gz # arm64格式, 树莓派可以用
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz # 服务器(我租的是x86的机器)

解压后修改配置文件,其中服务器修改frps.toml如下:

# frps.toml
bindPort = 7000               # 服务端监听端口,用于与客户端通信
auth.token = "xxxxxxx"     # 认证令牌,客户端需要配置相同的token才能连接
# 可选:Web管理面板
webServer.addr = "0.0.0.0"    # 管理面板监听地址
webServer.port = 7500         # 管理面板端
webServer.user = "xxx"      # 管理面板用户名
webServer.password = "xxx"  # 管理面板密码
# 日志配置(可选)
log.level = "info"            # 日志级别
log.maxDays = 3               # 日志保留天数
log.to = "xxx/xxx/xxx/frps.log"  # 日志文件路径(可选)

以上xxx自己修改。
起一个后台服务,nohup或者tmux都行,或者直接写一个frps.service 并enable。使其执行./frps -c frps.toml
客户端也就是树莓派上面解压arm64格式的,首先映射端口22到云服务器,使公网可以访问。frpc.toml修改后如下

serverAddr = "xxx"  # 你的云服务器公网 IP
serverPort = 7000       # 与服务端 bindPort 一致
auth.token = "xxx"[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000  # 访问云服务器此端口将转发到内网 SSH

记得云服务器防火墙打开6000 端口,之后将frpc.toml文件保存在/etc/frp下。frpc放在/usr/local/bin/下写一个服务,内容如下

~/work/frp $ cat /etc/systemd/system/frpc.service
[Unit]
Description=Frp Client Service
After=network.target sshd.service[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStartPre=/bin/sleep 5
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml[Install]
WantedBy=multi-user.target
Alias=frpc.service

之后执行systemctl enable frpcsystemctl start frpc 启动,公网用户就可以通过ssh -p 6000 <树莓派用户名>@<公网ip>登录ssh了

omv安装

获取omv-install.sh脚本,获取方式如下,也可以联系我

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install > omv_install.sh

可以在能科学上网的机器上获取脚本(树莓派可以的话,当我没说)。然后执行以下命令安装

sudo ./omv_install.sh -m "https://mirrors.tuna.tsinghua.edu.cn"

安装指定omv后续安装包的源地址,避免对外_网依赖。如果仅仅国内网络环境,脚本执行最后会有对openmediavault-omvextrasorg_latest_all7.deb文件依赖不能满足,同样从科学上网的环境中获取deb文件,并适当修改脚本使其走到最后。
安装完成后,树莓派会自动重启。并默认映射8000端口,浏览器输入<树莓派ip>:8000即可访问omv管理界面,默认管理员用户名:admin,密码:openmediavault. 界面如下
在这里插入图片描述
在之后将端口映射到公网,修改/etc/frp/frpc.toml添加以下内容

[[proxies]]
name = "omv-manager"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080  # 访问云服务器此端口将转发到omv管理

这样公网也可以访问了。
安装compose插件,用来管理docker,后面有依赖,点ui界面左边“系统”,
之后点插件,搜索compose
在这里插入图片描述
点安装,如上图所示。(上图是安装完成后的界面,没安装的话不是这样)
树莓派能科学上网的,点完应该就万事大吉了,但偏偏我的树莓派不可以,此时漫长的等待之后就是依赖没满足,但这个组件显示已安装,怎么办呢:
安装过程中会有log窗口,显示对regctl的依赖,和对yq的依赖都要从科学上网环境上获取,并push到树莓派对应的位置(注意一定要前面点完安装后log里显示依赖的版本,太高太低都不行,血泪教训)。记得卸载掉组件再重新安装。
最后还一个坑,就是安装到最后会执行omv-compose-download-icons命令,这其实在板子里是个脚本在/usr/sbin/omv-compose-download-icons 路径,其本质是个脚本,更新omv界面上的icon,从github上获取的图标并解压到指定位置,你只要从科学上网的环境下获取到,并更新下脚本即可。
最后在重新安装,应该就可以成功了。

安装Portainer(图形化管理docker, 可以不装,as you like)

找个终端执行

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

通过https://树莓派IP:9443 访问Portainer, 注意加s,https.
界面如下
在这里插入图片描述
也可以通过/etc/frp/frpc.toml之后重启frpc服务映射到公网。内容如下

[[proxies]]
name = "portainer"
type = "tcp"
localIP = "127.0.0.1"
localPort = 9443
remotePort = 8081  # 访问云服务器此端口将转发到内网 portainer

配置NAS

我们这里搭建的smb,方便小米摄像机接入,保存历史录像。

  1. 打开omv管理界面,点击存储器,选择对应的磁盘,然后点击擦除,选择快速擦除即可(注意做好备份,擦除了磁盘就被清空了)。在这里插入图片描述
  2. 再点击文件系统,将刚才擦除的磁盘格式化成ext4格式(Linux支持比较好的文件系统)。
  3. 再点击“共享文件夹”->“创建”,之后配置共享文件夹的名字,选择刚才格式化的磁盘,再配置相对路径(这里配置的xiaomi/camera),配置权限(samba一般不能所有用户可见,否则小米摄像头不支持),最后根据需要配置标签,然后保存。在这里插入图片描述
  4. 点击用户,并点击添加,如下,添加访问samba共享目录权限的用户。这里我们叫“xiaomi”
    添加一个](https://i-blog.csdnimg.cn/direct/5418594b4dfb481f97dfec0145701793.png)然后选择刚配置的用户名,点击权限管理,选择刚才创建的文件给读写权限在这里插入图片描述
    在这里插入图片描述
  5. 点击服务,选择SMB/CIFS,再选择设置,其它可以选择默认配置,但最低协议一定选择SMB1(小米摄像头支持到1),然后勾选“啟用 NetBIOS”不然小米摄像头搜索不到。
  6. 点击服务,选择SMB/CIFS,再选择“共享”,里面选择刚刚创建的文件夹,上面勾线“已启动”复选框。其它根据需要配置。
  7. 最终就是米家里面配置摄像头将视频保存到nas,然后自动搜索,用刚刚创建的用户及对应的密码登录

对OMV的修改完成后,上面都会有一个勾要应用修改

安装nextcloud

上面docker compose安装好之后,后面就操作相对简单了。

创建共享目录

首先按照上面的方式创建一个保存docker compose配置的共享文件夹,这里我们叫“docker”(相对路径也是docker);之后创建一个放家庭影院相关的目录,名字叫movie(相对路径nextcloud/movie),用于后续家庭影院扩展,使nextcloud可以挂载,所有用户都可上传影音文件;最后创建一个用于保存nextcloud数据(相对路径nextcloud_data)的“”三个共享目录都有所有用户可读性权限。

构建docker compose文件

终端打开,刚创建好的“docker”路径一般是“/srv/dev-disk-by-uuid-xxxxxxxxxxx/docker/”格式,创建nextcloud文件夹,创建docker-compose.yml文件,内容如下:

version: "3.8"services:nextcloud-db:image: mariadb:10.5 # 使用MariaDB作为数据库container_name: nextcloud-dbrestart: alwaysnetworks:- nextcloud-netenvironment:- MYSQL_ROOT_PASSWORD=xxxx # 请修改为安全的密码- MYSQL_PASSWORD=xxxx # Nextcloud数据库用户密码- MYSQL_DATABASE=nextcloud- MYSQL_USER=nextcloudvolumes:- nextcloud_db_data:/var/lib/mysql # 数据库数据卷command: --transaction-isolation=READ-COMMITTED --binlog-format=ROWnextcloud-app:image: nextcloud:latestcontainer_name: nextcloud-apprestart: alwaysports:- "8082:80" # 映射端口,宿主端口:容器端口networks:- nextcloud-netdepends_on:- nextcloud-dbenvironment:- MYSQL_HOST=nextcloud-db- MYSQL_DATABASE=nextcloud- MYSQL_USER=nextcloud- MYSQL_PASSWORD=xxxx# 与上面设置的密码一致volumes:# Nextcloud 主数据卷(用户文件、配置)- /srv/dev-disk-by-uuid-xxxxxxxxxxxxx/nextcloud_data:/var/www/html# - /path/to/your/apps:/var/www/html/custom_apps  # (可选) 映射自定义应用目录# - /path/to/your/config:/var/www/html/config  # (可选) 映射配置目录# 额外挂载小米摄像机录像目录(请先在宿主机上挂载 SMB 到 /srv/smb_mount/xiaomi)- /srv/dev-disk-by-uuid-xxxxxxxxxxxxxxxx/xiaomi/camera:/mnt/xiaomi:rw- /srv/dev-disk-by-uuid-xxxxxxxxxxxxxxxx/nextcloud/movie:/media/movie:rwvolumes:nextcloud_db_data: # 命名卷,持久化数据库数据name: nextcloud_db_datanetworks:nextcloud-net:name: nextcloud-net

需要修改的地方:mysql的密码、端口映射(这里docker映射给宿主机即树莓派的端口是8082,可以通过树莓派ip+8082访问到nextcloud的控制端)、volumes里面的磁盘挂载:其中第一个是必要的,后面两个分别用作小米摄像头即SAMBA目录映射,另一个用作家庭影院方便nextcloud用户上传影音文件。

配置docker源(树莓派有科学上网环境可以忽略)

接下来有一个坑点:如果树莓派没有科学上网环境,docker是pull不到的(哎。。。一声长叹),解决办法更新docker源,虽然速率不快,但在这网络环境下只能如此,修改/etc/docker/daemon.json文件,添加内容如下:

"registry-mirrors": ["https://docker.1ms.run","https://doublezonline.cloud","https://dislabaiot.xyz","https://docker.fxxk.dedyn.io","https://dockerpull.org","https://docker.unsee.tech","https://hub.rat.dev","https://docker.1panel.live","https://docker.nastool.de","https://docker.zhai.cm","https://docker.5z5f.com","https://a.ussh.net","https://docker.udayun.com","https://hub.geekery.cn"]

主打一个量大管饱,给足,总有一个源能用的,后面重新加载配置并重启docker服务.

sudo systemctl daemon-reload
sudo systemctl restart docker

拉起nextcloud服务

最后把nextcloud服务拉起来,执行以下命令

sudo docker compose up -d

如果要更新配置,可以执行以下命令重新加载,并不会失去旧的配置及数据。

docker stop nextcloud-app nextcloud-db
docker rm nextcloud-app nextcloud-db
# 修改docker-compose.yml文件
docker compose up -d

会自动拉取镜像并启动,之后可以通过树莓派ip+配置的端口登录。比如我们配置的端口是8082,就通过树莓派ip:8082访问
最后配置/etc/frp/frpc.toml映射到公网。

[[proxies]]
name = "nextcloud"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8082
remotePort = 8082  # 访问云服务器此端口将转发到内网 nextcloud

另外一个坑点是需要将公网的ip添加到信任列表里,否则公网访问不到,具体配置文件在路径“/srv/dev-disk-by-uuid-xxxxxxxxxx/nextcloud_data/config/config.php”
在**‘trusted_domains’ =>**属性里添加服务器的ip,如下

... #此处做省略'trusted_domains' =>array (0 => '<树莓派ip>:8082',1 => '<公网ip>:8082',),... #此处做省略
);

配置nextcloud

nextcloud支持丰富的插件,有些是保存本地的,可以手动安装,但有些要从github获取,so …
这里我安装了register插件,方便新用户注册,安装及配置方法可自行gpt搜索。
另外使能了external storage app,方便挂载之前映射进来的路径。
配置方法如下:

  1. 首先通过对应端口进入nextcloud界面,首次登录要配置管理员用户及对应的密码。
  2. 点击右上角头像,再点击应用,就可以启用external storage app了。
  3. 只有点击头像,再点击“管理设置“ 添加我们加进来的两个路径。在这里插入图片描述
  4. 最后就可以点左上角文件,就可以看到了,上面一定选择对所有用户可见,这样所有用户都会多两个文件夹,“本地”里可以查看摄像头录像,movie可以上传电影,音乐等。后面jellyfin可以播放实现家庭影音在这里插入图片描述
    最后手机安装nextcloud客户端,可以自行配置自动上传,备份手机里面的数据,自行GPT。

安装JellyFin

还是用docker compose安装,在上面创建的docker目录下,创建一个jellyfin的目录,记录docker-compose.yml文件内容,具体路径为“/srv/dev-disk-by-uuid-641225bf-b897-43c0-8a9e-63de6e4f3c69/docker/jellyfin/docker-compose.yml”,内容如下:

version: "3.8"services:jellyfin:image: jellyfin/jellyfin:latestcontainer_name: jellyfinrestart: unless-stoppednetwork_mode: bridgeports:- "8096:8096" # Web- "8920:8920" # HTTPS(可选)volumes:# 配置和缓存- jellyfin_config:/config- jellyfin_cache:/cache# 挂载宿主机的媒体目录(只读)- /srv/dev-disk-by-uuid-xxxx/xiaomi/camera:/media/camera:rw- /srv/dev-disk-by-uuid-xxxx/nextcloud/movie:/media/movie:rwenvironment:- TZ=Asia/Shanghailogging:driver: "json-file"options:max-size: "50m"max-file: "3"volumes:jellyfin_config:name: jellyfin_configjellyfin_cache:name: jellyfin_cache

然后执行拉起docker服务

docker compose up -d

最后通过端口8096访问jellyfin页面,注册管理员界面,添加媒体库“/media/camera”和“/media/movie”,然后开启自动扫面,就可以看到了。


文章转载自:

http://WTci4Oqc.kdLzz.cn
http://rqYRwRP0.kdLzz.cn
http://ftx1s6PR.kdLzz.cn
http://TU7WE7hF.kdLzz.cn
http://vEcfrBzv.kdLzz.cn
http://u56zk9Ei.kdLzz.cn
http://9mhyAZcR.kdLzz.cn
http://ohfNedHv.kdLzz.cn
http://8veVZIQU.kdLzz.cn
http://krbkf4hf.kdLzz.cn
http://if8Xjxqg.kdLzz.cn
http://fKXgRC5E.kdLzz.cn
http://lkzhIAix.kdLzz.cn
http://E5j5Fgdg.kdLzz.cn
http://6vNh3Ktf.kdLzz.cn
http://kFiXkR3E.kdLzz.cn
http://sNXYe014.kdLzz.cn
http://Ao91eygp.kdLzz.cn
http://tinfMgBu.kdLzz.cn
http://g6NM8Ac4.kdLzz.cn
http://apwccSye.kdLzz.cn
http://FYDRSbpt.kdLzz.cn
http://7gETmkiN.kdLzz.cn
http://CDQBOZX9.kdLzz.cn
http://5s2G5X0e.kdLzz.cn
http://cHb5ZRqh.kdLzz.cn
http://OmxntKuo.kdLzz.cn
http://p3QW2jhn.kdLzz.cn
http://FVTPJttR.kdLzz.cn
http://7S3UiX5p.kdLzz.cn
http://www.dtcms.com/a/382167.html

相关文章:

  • 二叉树hot100-中等
  • MX 模拟赛二总结
  • windows rocketmq 启动时报 java.lang.NullPointerException
  • 文本处理三剑客——grep、sed、awk
  • o2oa待办流程和已办流程表
  • 【WebSocket✨】入门之旅(三):WebSocket 的实战应用
  • 闪电科创-交通信号灯仿真SUMO
  • 【自动化】深入浅出UIAutomationClient:C#桌面自动化实战指南
  • 自定义类型:结构体、联合与枚举(1)
  • 在 Ubuntu 系统中基于 Miniconda 安装 VLLM 并启动模型 + Dify 集成指南
  • JavaWeb--day4--WebHttp协议Tomcat
  • Linux命令行的核心理念与实用指南(进阶版)
  • 机器学习-模型验证
  • 3-机器学习与大模型开发数学教程-第0章 预备知识-0-3 函数初步(多项式、指数、对数、三角函数、反函数)
  • 使用Aop和自定义注解实现SpringTask定时任务中加锁逻辑的封装
  • 远程依赖管理新范式:cpolar赋能Nexus全球协作
  • 【个人项目】【前端实用工具】OpenAPI to TypeScript 转换器
  • 贪心算法应用:物流装箱问题详解
  • 《用 TensorFlow 构建回归模型:从零开始的预测之路》
  • charles功能
  • Ceph OSD 元数据信息
  • Stanford CS336 | Assignment 2 - FlashAttention-v2 Pytorch Triotn实现
  • 【Docker】容器
  • C++ 类型推导(第一部分)
  • 联邦学习模型完成之后在验证集上面,如何判断输出正确与否
  • 优选算法---链表
  • 从理据到算法:认知语义学象似性对人工智能深层语义分析的重塑与前瞻
  • 39.网络流入门
  • PTQ 模型 量化方法
  • 基于Spring Boot的家政服务管理系统+论文示例参考