添加服务配置文件和更新 .gitignore,包含 MinIO、Gitea、HedgeDoc、Homepage、Uptime Kuma 的 Docker Compose 配置

This commit is contained in:
2026-03-21 11:55:48 +08:00
commit 19a8f64203
8 changed files with 183 additions and 0 deletions

19
.gitignore vendored Normal file
View File

@@ -0,0 +1,19 @@
# 忽略所有服务的数据和配置持久化目录
minio/data/
gitea/data/
hedgedoc/data/
uptime-kuma/data/
homepage/config/
# 忽略 Docker 相关文件
*.log
*.pid
# 忽略编辑器和系统文件
.vscode/
.idea/
.DS_Store
Thumbs.db
# 忽略环境变量文件
.env

56
README.md Normal file
View File

@@ -0,0 +1,56 @@
针对你的硬件资源(一台高性能无公网的本地宿主机 + 一台国内低延迟弱鸡 VPS + 一台免备案海外弱鸡 VPS + 一个域名),我们可以设计一套既能保证私有数据安全、国内访问低延迟,又能对外提供特定 Web 服务的混合架构。
以下是一套推荐的重构与部署方案:
### 第一阶段:网络架构重构 (FRP + Mesh VPN 混合网络)
以前你主要用 `frp`,这在暴露单点服务时很好用,但对于全面的 homelab 管理,引入 **Mesh VPN (如 Tailscale 或 ZeroTier)** 会让体验产生质的飞跃。
* **私有访问与管理核心 (Tailscale / ZeroTier):** * 在台式机、笔记本、手机上全部安装 Tailscale。这会为你组建一个虚拟大内网。
* **发挥国内云服务器的优势:** 阿里云虽然性能弱且不能绑域名建站(没备案会拦截 80/443 端口),但它的**国内网络极佳**。你可以将其配置为 Tailscale 的自定义 DERP 中继服务器(或 ZeroTier 的 Moon 节点)。这样,当你在国内异地访问家里的台式机,且 P2P 打洞失败时,流量会从阿里云高速中转,极其丝滑,非常适合 SSH、大文件拉取或远程桌面。
* **公共 Web 服务暴露 (Bandwagon + FRP):**
* 由于域名没有备案,必须且只能将域名解析到 Bandwagon。
* 在 Bandwagon 上部署 `frps` 和反向代理(推荐 Nginx Proxy Manager 或 Traefik
* 台式机运行 `frpc`**只把需要对外公开的服务**(比如想分享给他人的文档、你的个人博客等)通过 FRP 穿透到 Bandwagon再通过域名访问。
* 像 MinIO 这类存储重型、或者纯私人的服务,坚决不走 Bandwagon 公网暴露VPS 带宽太小会成为瓶颈),而是直接通过刚才建好的 Tailscale 大内网用虚拟 IP 访问。
### 第二阶段:台式机服务部署规范 (Docker Compose)
在滚动更新的 CachyOS 上,强烈建议所有服务全部容器化,避免日后系统滚挂或者依赖冲突。
1. **统一目录结构:**
建立一个统一的 `/opt/homelab``~/homelab` 目录。
```text
homelab/
├── compose.yml # 核心网络和基础代理配置
├── minio/
│ ├── compose.yml
│ └── data/ # 挂载的持久化数据
├── hedgedoc/ # CodiMD 的社区继承版本,推荐用这个
│ ├── compose.yml
│ └── data/
└── .env # 统一管理数据库密码、密钥等敏感信息
```
2. **网络隔离:** 在 Docker 中创建一个自定义 bridge 网络(比如 `homelab_net`),让相关的服务可以通过容器名互相通信,而无需暴露端口到宿主机。
### 第三阶段:服务推荐与规划
除了你提到的基础服务,结合日常的开发需求(比如写代码、开发游戏),你可以考虑部署以下组合:
**1. 生产力与存储 (你已有的)**
* **MinIO:** 对象存储。部署时注意挂载你台式机上性能最好、容量最大的硬盘。
* **HedgeDoc (原 CodiMD):** 实时协作 Markdown 笔记。建议搭配 PostgreSQL 数据库容器一起部署。
**2. 开发与代码托管 (新服务推荐)**
* **Gitea / Forgejo:** 非常轻量级的 Git 托管服务。对于开发《Silidox》这种游戏项目或者管理多线程编程的实验代码在本地有一个极速的 Git 仓库体验极佳,尤其是 Push/Pull 大量游戏美术资产时,局域网/Tailscale 速度远超 Github。
* **Gitea Actions 或 Jenkins:** 轻量级 CI/CD 平台。可以用来自动打包你的 C++ 项目或游戏,甚至写脚本自动化执行单元测试。
**3. 运维监控与导航**
* **Uptime Kuma:** 极简的监控面板。不仅可以监控你的各个服务是否存活,还可以监控你的阿里云和 Bandwagon VPS 的网络状态。
* **Homepage 或 Dashy:** 一个好看的导航页。把 MinIO、HedgeDoc、路由器后台等全放在上面设为浏览器主页。
---
**下一步怎么走?**
我们可以先从最核心的基础设施开始。你是想先**把 Tailscale + 阿里云高速中继的网络架构搭起来**,还是想先**在 CachyOS 上把基础的 Docker Compose 环境和目录结构规范好**?我可以为你提供具体的配置文件和步骤。

7
compose.yml Normal file
View File

@@ -0,0 +1,7 @@
networks:
homelab_net:
driver: bridge
services:
# 这里只定义网络和基础服务,具体服务在各自子目录
# 可扩展如 traefik/nginx-proxy-manager 等

19
gitea/compose.yml Normal file
View File

@@ -0,0 +1,19 @@
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
volumes:
- ./data:/data
ports:
- "3001:3000"
- "222:22"
networks:
- homelab_net
networks:
homelab_net:
external: true

33
hedgedoc/compose.yml Normal file
View File

@@ -0,0 +1,33 @@
services:
db:
image: postgres:15
container_name: hedgedoc_db
restart: unless-stopped
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- ./data:/var/lib/postgresql/data
networks:
- homelab_net
hedgedoc:
image: quay.io/hedgedoc/hedgedoc:latest
container_name: hedgedoc
restart: unless-stopped
environment:
- CMD_DB_URL=postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@db:5432/$(POSTGRES_DB)
- CMD_DOMAIN=localhost
- CMD_URL_ADDPORT=true
- CMD_PROTOCOL_USESSL=false
depends_on:
- db
ports:
- "3000:3000"
networks:
- homelab_net
networks:
homelab_net:
external: true

15
homepage/compose.yml Normal file
View File

@@ -0,0 +1,15 @@
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
restart: unless-stopped
volumes:
- ./config:/app/config
ports:
- "3003:3000"
networks:
- homelab_net
networks:
homelab_net:
external: true

19
minio/compose.yml Normal file
View File

@@ -0,0 +1,19 @@
services:
minio:
image: minio/minio:latest
env_file:
- ../.env
container_name: minio
restart: unless-stopped
volumes:
- ./data:/data
command: server /data --console-address ":9001"
ports:
- "9000:9000"
- "9001:9001"
networks:
- homelab_net
networks:
homelab_net:
external: true

15
uptime-kuma/compose.yml Normal file
View File

@@ -0,0 +1,15 @@
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
restart: unless-stopped
volumes:
- ./data:/app/data
ports:
- "3002:3001"
networks:
- homelab_net
networks:
homelab_net:
external: true