使用 heimdall 打造 NAS 导航页

发布于 2023-06-23  38 次阅读


前言

NAS 上部署了很多个服务,一堆的端口很容易忘记,所以打算用 heimdall 部署一个自定义导航页!因为界面好看吖~

部署

这里以威联通的 QTS 为例,因为我打算输入 NAS 地址后就直接显示这个导航页的,所以对 NAS 已经开启的 web 服务器地址需要做下更改:

给 80 端口让道!

然后打开 ContainerStation(在 APP Center 里面安装),然后选择 创建 标签 -> 创建应用程序,应用程序名称 自取,YAML 里面输入如下信息:

version: '3'

services:
  heimdall:
    image: linuxserver/heimdall
    restart: unless-stopped
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "80:80"
    volumes:
      - /share/Container/dockerdata/heimdall/config:/config  # 改成你自己的持久化路径

点击创建,如果没下载镜像会自动下载,下载后再次输入 NAS 地址,就出现导航页界面了~

使用

常规

首先,点右下角⚙可以进入设置,里面可以更改语言、背景和搜索条等几个项:

然后右下角点 应用列表 项,添加自己的应用:

heimdall 里面内置了很多的应用,可以直接在应用类型里面选择,当然网址也别忘了填~

对于一些应用,在底下的配置项中填入信息还可以开启一些标签功能:比如 Ariang 里面,填入 aria2 的 RPC 服务地址和密码,就能在标签中看到当前下载信息了!

美化

以下均为一些高级设置,在设置中的高级项中,填入 自定义 CSS 或 自定义 JavaScript 即可看到相应效果(特别感谢 这位大佬 贴出的相关代码,我只是做了一个搬运工):

鼠标停留标签页时放大效果

在 自定义 CSS 中填入以下信息:

/** 鼠标悬浮效果 **/
.item:hover {
    transform: scale(1.05);
    z-index: 9;
    will-change: opacity;
}

导航栏闲置时隐藏

在 自定义 CSS 中填入以下信息:

/** 导航栏隐藏 **/
#config-buttons {
    bottom: 0;
    display: flex;
    flex-direction: column;
    position: fixed;
    right: 0;
    transform: translateY(calc(100% - 27px));
    transition: transform 0.5s;
}
 
#config-buttons:hover {
    transform: translateY(0);
}
 
#config-buttons::before:hover + #config-buttons {
    transform: translateY(0);
}
 
#config-buttons::before {
    content: "^";
    top: -38px;
    background: rgba(0,0,0,.8);
    height: 26px;
    width: 50px;
    text-align: center;
    font-size: 19px;
    font-weight: 700;
    line-height: 32px;
    cursor: pointer;
    color: #ffffff;
}

自定义页面标题和图标

在 自定义 JavaScript 中填入以下信息:

// 自定义标题和图标
$('title').text('欢迎访问'); // 标题

const icon = 'https://yourdomain.com/fav.ico'; // 图标
 
$('link[rel="mask-icon"]')[0].href = icon;
$('link[rel="icon"]').each(function() {
    $(this)[0].href = icon;
})
$('link[rel="apple-touch-icon"]').each(function() {
    $(this)[0].href = icon;
})

背景高斯模糊

在 自定义 JavaScript 中填入以下信息:

// 背景高斯模糊
const backgroundImage = document.querySelector('#app').style.backgroundImage;
document.querySelector('#app').style.backgroundImage = '';
const contant = document.querySelector('#app .content');
contant.style.overflow = 'auto';
contant.style.height = '100vh';
document.body.style.overflow = 'hidden'
console.log(backgroundImage);
const styleElem = document.head.appendChild(document.createElement("style"));
styleElem.innerHTML = `#app::before {
    background-image: ${backgroundImage};filter: blur(2.5px);
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
    content: "";
    position: absolute;
    min-height: 100vh;
    width: 100%;
    transform: scale(1.02);
    z-index: 0;
}`;

随机 bing 精选壁纸

在 自定义 JavaScript 中填入以下信息:

// 随机 bing 精选壁纸
const backgroundImage = 'url("https://api.vvhan.com/api/bing?rand=sj")';
$("#app")[0].style.backgroundImage = backgroundImage;