构建终极家庭实验室NUC集群 - 第三部分:Docker自动化与媒体堆栈

本文详细介绍了在家庭实验室NUC集群中使用Docker搭建自动化媒体堆栈的全过程,包括Portainer管理界面、Watchtower自动更新、Homarr仪表板以及完整的'arr应用套件部署指南。

现在你已经搭建了一个测试环境,剩下的就是进行一些自动化和媒体工作。我最初使用Proxmox设置,但后来选择直接使用裸机并采用Debian/Ubuntu基础系统。在这个设置中,我将使用Docker和各种Docker镜像。最终,我们将拥有一个类似这样的仪表板,其中包含为你设置的不同子部分:

初始设置

Docker是你的好帮手,我不会逐步介绍如何安装Ubuntu/Debian,但基本上你需要一个Ubuntu或Debian的基础设置;版本并不那么重要,因为初始步骤是相同的。

我喜欢编写简短脚本来自动化我的生活,这次也不例外。以下脚本将准备你的Ubuntu镜像并安装正确版本的Docker:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

# 添加Docker的官方GPG密钥:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 将存储库添加到Apt源:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

它首先查找所有以前安装的Docker版本并将其删除。然后,它经过更新周期安装相关软件包,最后安装Docker和Docker-compose。

在使用docker镜像之前,值得设置一个文件夹,用于存放所有docker镜像,以便在创建镜像时更轻松地管理。为此,我选择创建/volume1/docker来容纳我的各种文件夹,即当创建新镜像时,我在这里创建一个子文件夹,将文件系统映射到镜像。这在需要在镜像之间共享文件夹时尤其重要,如下文所述。

基础镜像

安装Docker后,我们将安装一些基础镜像,用于管理我们的堆栈。我倾向于首先安装的镜像包括辅助工具,包括Portainer社区版和WatchTower:

Portainer用作通过浏览器部署Docker堆栈的管理界面;它还允许我们快速查看镜像的状态以及是否存在任何错误:

1
2
3
4
5
6
7
docker run -d --name=portainer \
-p 8000:8000 \
-p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /volume1/docker/portainer:/data \
--restart=always \
portainer/portainer-ce

启动后,仪表板将在一个地方显示你的所有实例,点击堆栈将显示你的所有容器、镜像和堆栈,以及主机上正在使用的资源。

在容器下有各种可用信息,包括容器的健康状况和正在运行的内容(这是我的一个NUC堆栈的示例,但如果你是首次部署,这里将大部分为空):

Watchtower将充当自动更新监视器,并在有新镜像可用时拉取;它将优雅地关闭现有容器,并使用最初部署时使用的相同选项重新启动它。但有一些注意事项,如果你有特定的镜像,如PiHole或其他依赖正常运行时间的镜像,你可能希望将它们从watchtower中排除,这可以通过将以下内容添加到你的docker compose文件来实现:

1
LABEL com.centurylinklabs.watchtower.enable="false"

或者,将它们作为独立镜像/虚拟机运行。要设置和运行watchtower,可以使用以下docker命令,该命令将容器连接到docker套接字,允许它与其他容器通信:

1
2
3
4
docker run -d --name=watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=always \
containrrr/watchtower --cleanup

如果你正在运行媒体堆栈或类似的东西,这会非常有效,因为它消除了保持诸如Plex之类的东西更新的麻烦。

仪表板

有了监控和自动更新,下一步是构建我们的基础仪表板。为此,我选择使用Homarr,因为它带有各种自定义选项。此外,它通常作为家庭网络上各种可访问应用程序的良好仪表板,你可以根据偏好设置或不设置身份验证,例如,如果你想要一个家庭实验室板和一个媒体堆栈,或者像我一样有tailscale,因此你希望更改仪表板上的链接以匹配tailscale IP,你也可以这样做。

要设置我们的镜像,我们将在现有的/volume1/docker/目录中创建以下目录:

1
/volume1/docker/homarr
1
2
3
4
5
6
7
8
9
docker run -d --name=homarr \
-p 80:7575 \
-v /volume1/docker/homarr:/app/data/configs \
-v /volume1/docker/homarr/icons:/app/public/icons \
-v /volume1/docker/homarr/data:/data \
-v /var/run/docker.sock:/var/run/docker.sock \
-e TZ=Europe/London \
--restart always \
ghcr.io/ajnart/homarr:latest

设置homarr后,我们可以在构建其他应用程序后填充它,但在基础级别,接下来的几个应用程序构建运行在以下端口上,因此你可以在仪表板中预构建/分配它们:

  • Overseerr - http://你的DOCKER主机IP:5055
  • Sonarr - http://你的DOCKER主机IP:8989
  • Deluge - http://你的DOCKER主机IP:8112
  • Radarr - http://你的DOCKER主机IP:7878
  • Plex - http://你的DOCKER主机IP:32400

安装和配置Tailscale(可选)

Tailscale是我远程访问家庭实验室的最爱工具,有很多关于使用它进行各种操作的指南,我喜欢它的一点是在*nix主机上的部署非常容易:

1
curl -fsSL https://tailscale.com/install.sh | sh

只需在终端中运行以下脚本,脚本将完成其余工作。如果你希望在运行之前查看脚本的作用,你也可以在浏览器中浏览脚本https://tailscale.com/install.sh并逐行阅读。

构建’arr堆栈

‘arr应用程序堆栈是任何家庭实验室/媒体堆栈的重要补充,因为它提供了一种简单直观的方式来管理你的媒体收藏,并且通过添加overseerr,你可以从流媒体服务收集额外内容。可以将其视为一个一体化仪表板,插入plex,允许你从你付费的多个订阅服务流式传输,并可以轻松浏览可用内容。

Plex

在我们深入探讨各种媒体管理镜像之前,第一个核心部分是Plex,它将是我们管理和中心观看的仪表板。此外,我们将为我们的不同docker镜像创建一些目录以便相互通信:

1
2
3
4
/volume1/docker/plex
/volume1/docker/radarr/movies
/volume1/docker/sonarr/tv
/volume1/web/downloads

创建文件夹后,可以部署plex镜像并将其映射到相关文件夹:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
docker run -d --name=plex \
-e TZ=Europe/London \
-e VERSION=docker \
-v /volume1/docker/plex:/config \
-v /volume1/docker/radarr/movies:/movies \
-v /volume1/docker/sonarr/tv:/tv \
-v /volume1/web/downloads:/downloads \
--restart always \
--net=host \
ghcr.io/linuxserver/plex

要访问plex,导航到http://你的DOCKERIP:32400/web,Plex将提示你登录并完成设置步骤。完成后,你可以通过指向我们先前映射的文件夹并相关设置它们来添加你的库,因此TV = /tv和Films/Movies = /movies,这将直接映射到主机操作系统,从而在docker镜像之间工作。

Sonarr

对于Sonarr和其他’arr镜像,我们将创建一个共享文件夹,它们都可以从中操作和访问内容,以便在docker镜像之间通信。我选择创建/volume1/web/downloads并将其映射到不同的docker镜像之间以确保连续性。

1
2
3
4
5
6
7
8
docker run -d --name=sonarr \
-p 8989:8989 \
-e TZ=Europe/London \
-v /volume1/docker/sonarr/config:/config \
-v /volume1/docker/sonarr/tv:/tv \
-v /volume1/web/downloads:/downloads \
--restart always \
ghcr.io/linuxserver/sonarr

部署后,现在是时候设置身份验证方法,对大多数人来说默认和最佳选项是表单(登录页面),确保设置需要身份验证:(启用)。最后输入你自己的用户名和密码,然后单击保存。接下来,我们希望将我们的共享文件夹链接在一起,以便数据可以在我们的镜像之间共享。在设置下,单击媒体管理。向下滚动页面,直到找到名为添加根文件夹的蓝色按钮。在文件浏览器中,键入/然后选择/tv/

Radarr

Radarr的工作方式与Sonarr相同,只是它用于电影管理。要部署docker镜像,可以使用以下命令。

1
2
3
4
5
6
7
8
docker run -d --name=Radarr \
-p 7878:7878 \
-e TZ=Europe/London \
-v /volume1/docker/radarr:/config \
-v /volume1/docker/radarr/movies:/movies \
-v /volume1/web/downloads:/downloads \
--restart always \
ghcr.io/linuxserver/radarr

部署后,你需要按照步骤链接我们先前设置的目录。首先浏览到你的docker主机的相关端口/IP和我们设置的端口,然后创建用户名和密码。在设置下,单击媒体管理。向下滚动页面,直到找到名为添加根文件夹的蓝色按钮。在文件浏览器中,键入/然后选择/movies/

Overseerr

Overseerr是一个请求管理和媒体发现工具,构建用于与你现有的Plex生态系统配合使用,它直接与Radarr、Sonarr和其他工具很好地挂钩。要拉取和构建docker镜像,我们将使用相同的docker共享基础文件夹,但为overseerr创建一个新目录。

1
2
3
4
5
6
docker run -d --name=overseerr \
-e TZ=Europe/London \
-v /volume1/docker/overseerr:/config \
--net=host \
--restart always \
ghcr.io/linuxserver/overseerr

与Radarr和Sonarr不同,Overseerr不需要映射到各种目录,因为主要设置在首次访问应用程序时配置,http://你的DOCKER主机IP:5055它将提示你登录plex并要求你提供plex所在的主机,在我们的情况下,这将与我们的overseerr主机相同的IP,默认端口为32400。

下载和VPN

为了有效简化Overseerr设置以与所有不同应用程序通信,你可能希望设置一些东西来执行下载,这可以通过Deluge实现,它是一个开源下载客户端。有一个docker镜像将deluge与VPN客户端结合,以确保下载的匿名性和增强的隐私。Arch Deluge VPN docker镜像能够使用不同的VPN提供商,确保你不会将你的外部IP地址暴露给任何下载。在部署之前,我们将在docker文件夹内创建一个专用文件夹,类似于其他应用程序,称为deluge,我们将使用与其他镜像共享的现有下载文件夹。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
docker run -d \
    --cap-add=NET_ADMIN \
    -p 8112:8112 \
    -p 8118:8118 \
    -p 58846:58846 \
    -p 58946:58946 \
    --name=delugevpn \
    -v /volume1/docker/deluge:/config \
    -v /volume1/web/downloads:/downloads \
    -e VPN_ENABLED=yes \
    -e VPN_USER=你的用户名 \
    -e VPN_PASS=你的密码 \
    -e VPN_PROV=pia \
    -e VPN_CLIENT=openvpn \
    -e STRICT_PORT_FORWARD=yes \
    -e ENABLE_PRIVOXY=yes \
    -e LAN_NETWORK=<你的LAN范围在此> \
    -e NAME_SERVERS=1.1.1.1 \
    -e DELUGE_DAEMON_LOG_LEVEL=info \
    -e DELUGE_WEB_LOG_LEVEL=info \
    -e DELUGE_ENABLE_WEBUI_PASSWORD=yes \
    -e VPN_INPUT_PORTS=1234 \
    -e VPN_OUTPUT_PORTS=5678 \
    -e DEBUG=false \
    -e UMASK=000 \
    -e TZ=Europe/London \
    binhex/arch-delugevpn

设置完所有镜像后,你可以在设置中配置每个镜像,并让它们相互通信。我不会在这篇博客文章中详细介绍这一点,因为它相当直接,并且有无数关于如何做的教程。然而,此时你已经建立了一个’arr堆栈、plex和一个homarr仪表板来整理一切。你还可以从仪表板链接到你先前创建的其他家庭实验室机器,以便轻松导航,这可能非常有用。

前进

通过这个设置,你现在拥有一个功能齐全的基于Docker的家庭实验室,包括自动化、监控和良好集成的媒体堆栈。无论你是将其用于安全研究、个人项目,还是仅仅更有效地管理家庭媒体,这个结构提供了一个可扩展且易于维护的解决方案。通过利用Portainer进行管理、Watchtower进行更新和Homarr进行导航等工具,你可以以最少的手动干预保持一切平稳运行。一如既往,家庭实验室是高度个人化的设置,因此请随意调整和扩展这个基础以满足你的需求。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计