HomeLab(二) 黑群晖及常用软件配置

背景

之前从8100的黑群晖,切换到了N100的,但是比较慢,然后忍不了了,就又新买了一套设备组装。趁机就升级下网卡。之所以选黑群晖就是只是因为界面友好点。配套软件比较给力。然后穷买不起白裙。

需求

  • 存储
    • 文件存储(无需磁盘级别高可用) 群晖自带
    • 照片存储 immich
    • 提供远程块设备 群晖自带
    • webdav 群晖自带
    • 远端数据备份 群晖自带(只备份照片,其他的内容如果丢了就让他随风而逝吧)
  • 影音
    • 下载 qbittorrent ipv6 + 不期望再走一层群晖的nat
    • 自动追番 (autobangumi)
    • 电影下载&封面刮削 (moviepilot)

硬件配置

整体都是走的捡垃圾的路线,能省就剩

CPU: 12300t

主板: 尔英B660m

内存: 十铨冥神 ddr4 16g * 2

电源: 振华 80 plus 金牌 450w

网卡: mcx4121(中兴oem) 10G 双口,之前用的是一个 MNPA19- XTR 死活驱不上,就换了mcx4121

硬盘:

  • 10T * 1
  • 12T * 1
  • 14T * 2
  • 16T * 1

Untitled

sata 线比较乱,感觉换成定制线会好点。后边有预算了再看吧。

环境配置

系统

引导走的RR,机型选的SA6400,主要是为了能够支持12代intel的核显。

存储池

所有的存储池都是basic,后边有问题恢复也相对容易,不要做各种级别的raid。

证书

下载acmesh

1
2
3
4
5
wget https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
tar xvf master.tar.gz
cd acme.sh-master/
./acme.sh --install --nocron --home /usr/local/share/acme.sh --accountemail "[email protected]"
source ~/.profile

签发证书

1
2
3
4
5
6
export CF_Token="你的TOKEN"
export CF_Email="[email protected]"
cd /usr/local/share/acme.sh
export CERT_DOMAIN="*.home.zou.cool"
export CERT_DNS="dns_cf"
./acme.sh --issue --server letsencrypt --home . -d "$CERT_DOMAIN" --dns "$CERT_DNS"

正确的话会返回

Untitled

替换群晖的根证书

1
2
3
4
5
cd /usr/local/share/acme.sh
export SYNO_Username='phantooom'
export SYNO_Password='你的密码'
export SYNO_Certificate="bp"
./acme.sh --deploy --home . -d "$CERT_DOMAIN" --deploy-hook synology_dsm

成功会返回如下内容

Untitled

我们登录群晖会发现证书已经被替换了

Untitled

证书自动续签我们添加一个任务,使用root执行

Untitled

使用域名登录

Untitled

去cloudflare增加一个泛解析即可。

Untitled

内置软件安装

  1. container Manager (docker)
  2. webstation
  3. cloud sync

第三方软件

下载软件

这里使用的是qbittorrent ,我们需要支持ipv6,也需要一个与宿主机在同一网段的IP。所以我们需要新建一个macvlan的设备用来支持这种场景。

我们给这个macvlan设备分配一个网段。

192.168.50.128/28(192.168.50.129~142)总共10多个ip目前看足够用了。(分的时候多分点,这个设备修改subnet非常费事。)

创建macvlan

1
2
3
4
5
6
7
docker network create -d macvlan \
--subnet=192.168.50.1/24 \
--gateway=192.168.50.1 \
--ipv6 \
--subnet=fd00::/64 \
-o parent=eth1 \
bridge-host

打通宿主机与macvlan,如果不打通后期没有办法使用群辉的webstation统一管理前边的接入层,记得加入到定时任务

1
2
3
4
ip link add macvlan-host link eth1 type macvlan mode bridge
ip addr add 192.168.50.128 dev macvlan-host
ip link set macvlan-host up
ip route add 192.168.50.128/28 dev macvlan-host

配置如下

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
version: "3.5"
services:
qbittorrent:
container_name: qBittorrent
environment:
- TZ=Asia/Shanghai
- WEBUI_PORT=8080
- PUID=1026
- PGID=100
volumes:
- /volume3/homelab/docker/qb:/config
- /volume3/downloads:/downloads # 填入下载绝对路径
- /volume3/影音:/影音
ports:
- "8080:8080"
- "6881:6881"
- "6881:6881/udp"
networks:
default:
ipv4_address: 192.168.50.129
restart: always
image: superng6/qbittorrent
networks:
default:
external: true
name: bridge-host

配置一下反向代理,这个不能直接使用webstation接入,主要是因为使用了macvlan的方式。

Untitled

Untitled

我们可以看到ipv4,v6都有链接。

配置一下内网跳过安全验证

Untitled

影音库

这边使用的是jellyfin

1
2
3
4
5
6
7
8
9
10
11
12
version: '3.5'
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
ports:
- 18096:8096
volumes:
- /volume3/homelab/docker/jellyfin:/config
- /volume3/homelab/docker/jellyfin/cache
- /volume3/影音:/影音
restart: always

在webstation中配置一下域名

Untitled

Untitled

记得申请一个apikey

自动化追番软件

自动追番我们采用 autobangumi + mikanani.me 从mikan上面获取自己想要的动画的rss,后续更新了就会自动下载。并且改名。

配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: "3.5"
services:
auto_bangumi:
container_name: AutoBangumi
environment:
- TZ=Asia/Shanghai
- PGID=${GID}
- PUID=${UID}
volumes:
- /volume3/homelab/docker/auto-bangumi:/app/config
- /volume3/homelab/docker/auto-bangumi:/app/data
- /volume3/downloads:/downloads # 填入下载绝对路径
- /volume3/影音:/影音
ports:
- '17892:7892'
dns:
- 8.8.8.8
- 223.5.5.5
restart: always

Untitled

具体配置如下,可以打开电报的通知。当然也能微信通知,自己配置一下就好了。

记得设置下载器地址。就是我们之前搭的qb因为我们配置了局域网面密,所以这个密码啥的都不用管。这个代理可以完全不用配置,如果在路由上面做了透明代理。

Untitled

通知大体如下

Untitled

大体上只要把这个季度的想看的新番填上就能自动下载了。基本上回来看到更新了就能开始看了。

电影&电视剧下载

一般电影类的可能习惯使用bt/网盘下载。电视剧类的更习惯走pt,但是不管哪种方式最后都要用moviePilot去整理&获取封面资源&字幕。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: "3.5"
services:
nas-tools:
image: jxxghp/moviepilot:latest
ports:
- 13000:3000 # 默认的webui控制端口
volumes:
- /volume3/homelab/docker/moviepilot:/config
- /volume3/homelab//docker/moviepilot:/moviepilot
- /volume3/影音:/影音
- /volume3/downloads:/download
environment:
- PUID=0 # 想切换为哪个用户来运行程序,该用户的uid
- PGID=0 # 想切换为哪个用户来运行程序,该用户的gid
- UMASK=000 # 掩码权限,默认000,可以考虑设置为022

restart: always
hostname: moviepilot
container_name: moviepilot

分类配置

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
####### 配置说明 #######
# 1. 该配置文件用于配置电影和电视剧的分类策略,配置后程序会按照配置的分类策略名称进行分类,配置文件采用yaml格式,需要严格附合语法规则
# 2. 配置文件中的一级分类名称:`movie`、`tv` 为固定名称不可修改,二级名称同时也是目录名称,会按先后顺序匹配,匹配后程序会按这个名称建立二级目录
# 3. 支持的分类条件:
# `original_language` 语种,具体含义参考下方字典
# `production_countries` 国家或地区(电影)、`origin_country` 国家或地区(电视剧),具体含义参考下方字典
# `genre_ids` 内容类型,具体含义参考下方字典
# themoviedb 详情API返回的其它一级字段
# 4. 配置多项条件时需要同时满足,一个条件需要匹配多个值是使用`,`分隔

# 配置电影的分类策略
movie:
# 分类名同时也是目录名
动画电影:
# 匹配 genre_ids 内容类型,16是动漫
genre_ids: '16'
华语电影:
# 匹配语种
original_language: 'zh,cn,bo,za'
# 未匹配以上条件时,分类为外语电影
外语电影:

# 配置电视剧的分类策略
tv:
动画:
# 匹配 genre_ids 内容类型,16是动漫
genre_ids: '16'
纪录片:
# 匹配 genre_ids 内容类型,99是纪录片
genre_ids: '99'
儿童:
# 匹配 genre_ids 内容类型,10762是儿童
genre_ids: '10762'
综艺:
# 匹配 genre_ids 内容类型,10764 10767都是综艺
genre_ids: '10764,10767'
国产剧:
# 匹配 origin_country 国家,CN是中国大陆,TW是中国台湾,HK是中国香港
origin_country: 'CN,TW,HK'
欧美剧:
# 匹配 origin_country 国家,主要欧美国家列表
origin_country: 'US,FR,GB,DE,ES,IT,NL,PT,RU,UK'
日韩剧:
# 匹配 origin_country 国家,主要亚洲国家列表
origin_country: 'JP,KP,KR,TH,IN,SG'
# 未匹配以上分类,则命名为未分类
未分类:

微信图片_20240603221357.jpg

安装好了如上图所示。我们进行一些基本的配置

微信截图_20240603221605.jpg

启用本地的cookiecloud。将我们的地址填入cookiecloud的浏览器插件中。后边我们要自动同步许多支持搜索的站点用来搜索种子资源。

Untitled

填写完成之后我们去点击服务选项卡中的同步cookiecloud站点

微信截图_20240603221923.jpg

此时我们在站点管理里面就能看到我们的站点了,馒头的支持比较复杂参考 这个文章https://t.me/moviepilot_official/507610

微信截图_20240603222034.jpg

我们点击设定,选择搜索从哪些站点搜索

Untitled

目录我们根据自己实际情况设定好。

Untitled

如果这里你下载是pt,同时目录又跨盘了,尽量选择复制的方式,然后后边通过其他插件去自动清理下载目录。

下载相关的配置,配置好即可。这个这个端口可千万别忘了加,坑了半天,真的不能没有端口!人家确实没骗我,是我草率了。

Untitled

我们去搜搜一下资源试试吧

Untitled

比如我们想体验一下,背后有一个强大的祖国。想了解什么是犯我中华者虽远必诛。那么我们就看一部战狼2吧。

Untitled

点击确认即可

Untitled

这边会开始下载,下载完了会有通知

Untitled

微信截图_20240603235746.jpg

下载好了,我就不看了,毕竟都快背下来了。

还有一些比较有意思的插件简单的提一下

站点自动签到,就是一些pt站是要求登录的,但是我们平时可能也不怎么去,这个就会模拟迁到或者登录,保证账号不会被删除。

Untitled

豆瓣想看,你在豆瓣标记好自己相看的,就会自己去下载了。

Untitled

Untitled

Untitled

自动删种,pt一般都上传有要求的,所以不能下完就删除,所以要等一段时间,我们可以设定一个分享率或者时间去自动删除下载任务。

Untitled

照片管理

最开始我是用photos的大体上用了2年多,非常好用。后边出了immich就体验了一下,也挺好用的,所以。本篇文章切换到了immich来讲解

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
name: immich

services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
command: ['start.sh', 'immich']
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- ${EXTERNAL_PATH}:/usr/src/app/external
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- 2283:3001
depends_on:
- redis
- database
restart: always

immich-microservices:
container_name: immich_microservices
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/hardware-transcoding
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
command: ['start.sh', 'microservices']
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
- ${EXTERNAL_PATH}:/usr/src/app/external
env_file:
- .env
depends_on:
- redis
- database
restart: always

immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
env_file:
- .env
restart: always

redis:
container_name: immich_redis
image: registry.hub.docker.com/library/redis:6.2-alpine@sha256:84882e87b54734154586e5f8abd4dce69fe7311315e2fc6d67c29614c8de2672
restart: always

database:
container_name: immich_postgres
image: registry.hub.docker.com/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
restart: always
command: ["postgres", "-c" ,"shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]
volumes:
model-cache:
1
2
3
4
5
6
7
8
9
10
11
12
13
UPLOAD_LOCATION=/volume4/immich-data/photos
DB_DATA_LOCATION=/volume4/immich-data/postgres
EXTERNAL_PATH=/volume3/photos
# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
DB_PASSWORD=postgres

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

EXTERNAL_PATH 是外部的路径,可以加载之前整理好的照片。一定要注意,如果你以前照片是被群晖管理的可能存在许多叫做 @eaDir 的文件夹,这里面都是缩略图缓存,一定要全都删除掉。

1
find /volume* -name "@eaDir" -type d -print0 | xargs -0 rm -rf

不然缩略图也会被当成照片再解析一次,非常酸爽。

安装好如下图所示。

微信截图_20240603232542.jpg

我们调整下设置,模型换成 XLM-Roberta-Large-Vit-B-16Plus 这个支持中文,记得要在添加照片之前就换好。不然要重新提取才可以搜索。

Untitled

支持人脸聚类,支持地点展示

Untitled

如果地图带有GPS信息则也支持展示到地图中

Untitled

也支持内容搜索,至于说效果也就一般般,可能跟手机内置的相册差不多水平吧。

微信截图_20240603233948.png

APP支持同步手机相册到远端

Untitled

数据备份

数据备份使用cloud sync

这边只备份照片数据,其他的均不备份。

一份备份到自己的另一台nas,一份备份到百度云盘

Untitled

有两个小点要注意的是。如下三点:

  • 同步方向要仅本地上传的变更。这个是防止云上误操作,或者盗号导致同步到本地,本地数据也没了
  • 数据加密,百度云比较恶心人,如果他认为你的照片有问题,那么这个照片就会被删掉。而你是没有资格保存这张照片的。可能你的青春就都没了。再也找不回来了。
  • 当删除源文件夹文件时,不要删除目的地文件夹中的文件。这个也是血泪教训,如果手残删了本地,没有勾选这个的话,远程也会被删掉。

Untitled

其他

  • 虽然升级了万兆网卡,但是实际上读不分散在几块盘,读不分散在多个机器实际上是利用不上这个东西的。所以可能后边会考虑加一个读缓存。
  • 整体上moviepilot能满足大部分的影音需求,但是在动画方面还差一些。主要是针对追番场景下的订阅不太友好。完全是基于搜索实现的。我更想明确的跟某个字幕组的翻译,而不是随机来。
  • immich 还是挺有意思的。
  • 共享文件夹没有提,但是其实这个才是日常打交道最多的。
  • 带颜色的东西也有做,但是不太好分享,但是也挺有意思的。
  • 没有在群晖搭homeassist,这个东西我放到路由里面了,因为家电主要在上边。另外就是不少家电都没有接口。
  • 整体从性能看12300t 比N100 舒服不少了。至少体验上来说是这样。但是跟8100比,我目前的场景没觉得太大的提升。
  • 数据安全始终要放到第一位,切记。切记。