Skip to content

home.cong.in 服务导航面板

cong.in 所有服务的统一入口,基于 gethomepage(不是 Homer),Docker 部署在 Server1。 带服务在线探测、两台服务器资源监控、标签页分类、炫彩样式。

访问:https://home.cong.in


一、部署架构

项目
软件gethomepage(ghcr.io/gethomepage/homepage:latest)
部署机Server1(myserver,〈Server1-IP〉)
容器homepage,端口 127.0.0.1:3088:3000
配置目录Server1: /var/www/homepage/config/
反代Caddy → home.cong.in127.0.0.1:3088
必需环境变量HOMEPAGE_ALLOWED_HOSTS=home.cong.in(反代必须,否则空白页)

配置文件备份见本文件夹 config/(settings/services/widgets/custom.css/docker-compose)。 线上以 Server1 为准,本地是备份。改完线上记得同步回这里。


二、⭐ 加新服务器(两条命令)

第 1 步:在【新服务器】上装 glances(采集资源)

bash
curl -s https://scripts.cong.in/glances.sh | bash

自动装 glances 容器 + 防火墙只放行 Server1,最后打印本机公网IP。 (Windows 云电脑:glances 用 docker 不方便,建议本身就是 Linux 服务器才用这套。)

第 2 步:在【Server1】上注册进面板

bash
ssh myserver "bash /var/www/scripts/add-server.sh <新服务器IP> <名字>"
# 例:
ssh myserver "bash /var/www/scripts/add-server.sh 1.2.3.4 Server3"

自动往 widgets.yaml 追加一个 glances 框并重启 homepage。刷新面板即可看到新服务器框。

完成。新服务器框会自动带上和 Server1/Server2 一样的彩虹边框样式。


三、加新服务(网站/应用入口)

编辑 services.yaml,在对应分组下加一项:

bash
ssh myserver "nano /var/www/homepage/config/services.yaml"
ssh myserver "docker restart homepage"

格式:

yaml
    - 服务名:
        href: https://xxx.cong.in
        description: 简介
        icon: xxx.svg          # 图标库 https://github.com/walkxcode/dashboard-icons,或 mdi-xxx
        siteMonitor: https://xxx.cong.in   # 右上角在线状态绿点

新分组想进某个标签页,去 settings.yaml 的 layout 里给它加 tab: 标签名

外部资源用 bookmarks.yaml(不要用 services)

外部站点(数据库/工具)走 bookmarks.yaml不做在线探测(services 的 siteMonitor 会 ping 外部站,浪费且常误报红点)。siteMonitor 只留给自己的服务。 bookmarks 分组同样在 settings.yaml layout 里用 tab: 归标签页,分组名必须完全一致。

  • 科研」标签 = 干实验 + 湿实验两条腿:
    • 干实验·MR/药靶(①-⑦ 圆圈数字流水线):①暴露端pQTL ②结局端GWAS(含东亚/多族裔) ③变量注释 ④分析/共定位(含fine-mapping) ⑤组织落位(含eQTL Catalogue) ⑥可成药性 ⑦通路/机制解释。
    • 湿实验·模式动物验证(🐟 独立分组):MGI/IMPC(小鼠) · ZFIN(斑马鱼) · Alliance · Addgene · protocols.io。承接干实验算出的因果蛋白去动物验证。
    • 科研与自动化(services,带状态点):RStudio/FreshRSS/n8n/青龙。
    • 干/湿视觉分隔用命名法(数字 vs 🐟),不依赖脆弱的 h2:nth-of-type。

四、设计/样式要点(custom.css)

  • 背景:6 色极光渐变流动。
  • 服务器框:钩子 .information-widget-glances,每台一个框 + 流动彩虹跳动边框(其他地方都没有边框)。
  • 服务卡片:钩子 [class~='bg-theme-50'],安静玻璃磨砂,无动画。
  • 分组标题:浅色玻璃 + 左侧细彩竖条(h2:nth-of-type(n) 配不同颜色)。
  • 标签页:settings.yaml 每个分组加 tab:,标签栏高亮钩子 #myTab a / [role='tablist']

五、两台服务器资源监控(统一 glances 方案)

  • 所有服务器统一用 glances metric: info:单框显示 CPU/内存/负载/在线时长。
  • 磁盘做不到同框:glances 的 info=quicklook 接口天生不含磁盘容量;硬拼很丑,已确认放弃磁盘,不要再尝试。
  • 每台都跑 glances 容器(端口 61208,API /api/4/,glances v4)。
  • Server1 的 glances:homepage 容器通过 docker 网关 172.17.0.1:61208 访问本机。
  • Server2 通过公网 〈Server2-IP〉:61208
  • 防火墙坑:homepage 容器在 172.18 网段(不是 172.17!),Server1 的 glances 61208 必须放行 172.16.0.0/12(docker 全网段)+ 127.0.0.1,其余 DROP。远程服务器放行 Server1 IP 即可。

六、踩过的坑(别再犯)

  1. Caddy home.cong.in 块指令必须各占一行,挤成单行会返回 200 空 body → 浏览器显示旧缓存空白页。
  2. 浏览器缓存顽固(早期 Homer 的 service worker):用无痕窗口,或 F12→Application→Service Workers→Unregister。
  3. 磁盘同框做不到,别再折腾(见第五节)。
  4. 分组名必须 settings.yaml 和 services.yaml 完全一致(含空格),否则该组布局/标签失效。
  5. 标签名别用特殊符号(曾用「·」疑似破坏标签页,已去掉)。

七、待确认(历史遗留)

  • n8n 是否在用(面板里暂留)。
  • 重复服务:Jellyfin(film.cong.in vs movie.cong.in)、Alist 两套,未定保留哪个。

个人科研与运维文档 · 内容持续修订