From 71997c61349284fcefa3406304b9969064a72d54 Mon Sep 17 00:00:00 2001 From: Yin Kou Date: Fri, 6 Nov 2026 21:45:54 +0800 Subject: [PATCH] feat(phase1-2): finish macmini base setup, lock agy route to SG Azure, and start Lucky container --- CHANGELOG.md | 44 ++++++++++++++++++++++++++++ PLAN.md | 26 ++++++++-------- README.md | 15 ++++++++-- stacks/azure-edge/Caddyfile | 16 ++++++++++ stacks/azure-edge/docker-compose.yml | 23 +++++++++++++++ stacks/lucky/docker-compose.yml | 15 ++++++++++ 6 files changed, 123 insertions(+), 16 deletions(-) create mode 100644 stacks/azure-edge/Caddyfile create mode 100644 stacks/azure-edge/docker-compose.yml create mode 100644 stacks/lucky/docker-compose.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index c33d34e..d4c26e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,3 +25,47 @@ - 创建 [`README.md`](file:///Users/ixvii0iv/homelab/README.md)(全局网络拓扑与设备资产表) - 创建 [`PLAN.md`](file:///Users/ixvii0iv/homelab/PLAN.md)(4 阶段实施蓝图与进度表) - 创建 [`CHANGELOG.md`](file:///Users/ixvii0iv/homelab/CHANGELOG.md)(本变更日志文件) + +### 3. 配置 Mac mini 免密 sudo 与服务器电源防休眠策略 (`pmset`) +- **操作时间**:2026-11-06 21:37 +- **目标设备**:Mac mini (`192.168.31.164`) +- **变更内容**: + 1. 创建 `/etc/sudoers.d/ixvii0iv`(权限 `0440`),赋予 `ixvii0iv` 用户免密 `sudo` 权限,便于自动化运维。 + 2. 执行 `sudo pmset -a sleep 0 disksleep 0 displaysleep 10 standby 0 autorestart 1 womp 1 tcpkeepalive 1 powernap 1`,彻底关闭系统与磁盘休眠,并开启断电恢复自动启动与网络唤醒。 +- **回滚方式**: + - 删除免密 sudo:`ssh mini "sudo rm -f /etc/sudoers.d/ixvii0iv"` + - 恢复默认休眠:`ssh mini "sudo pmset -a sleep 1 disksleep 10 autorestart 0"` + +### 4. 编写 Lucky 与 Azure 云边协同 Docker Compose 编排文件 +- **操作时间**:2026-11-06 21:38 +- **目标设备**:本机 MacBook Air (`/Users/ixvii0iv/homelab/stacks/`) +- **变更内容**: + - 创建 [`stacks/lucky/docker-compose.yml`](file:///Users/ixvii0iv/homelab/stacks/lucky/docker-compose.yml)(用于 Mac mini 部署 Lucky DDNS + HTTPS 反代) + - 创建 [`stacks/azure-edge/docker-compose.yml`](file:///Users/ixvii0iv/homelab/stacks/azure-edge/docker-compose.yml) 与 [`stacks/azure-edge/Caddyfile`](file:///Users/ixvii0iv/homelab/stacks/azure-edge/Caddyfile)(用于 Azure 2C4G 部署 Uptime Kuma 监控与 443 免端口反代) + +### 5. 完成 Mac mini 软件底座、OrbStack、Tailscale、开发工具链及 `agy` 安装 +- **操作时间**:2026-11-06 21:38 ~ 21:43 +- **目标设备**:Mac mini (`192.168.31.164`) +- **变更内容**: + 1. 安装 Xcode Command Line Tools 27.2 与 Homebrew 7.0.12 (`/opt/homebrew`)。 + 2. 通过 Homebrew Cask 安装并启动 **OrbStack 2.2.5** (Docker Engine `29.8.2`) 与 **Tailscale 1.104.5**。 + 3. 安装 CLI 开发工具链:`git`, `tmux`, `btop`, `ripgrep`, `fd`, `jq`, `wget`, `fnm`, `uv`。 + 4. 安装 **Antigravity CLI (`agy` 1.5.2)** 至 `/Users/ixvii0iv/.local/bin/agy`,并配置 `~/.zshrc` 与 `~/.zprofile` 的 `PATH` 环境变量。 +- **回滚方式**:可通过 `brew uninstall` 卸载对应软件包,或删除 `~/.local/bin/agy`。 + +### 6. 锁定小米路由器 Mihomo 策略组出口至 SG Azure (`233boy-sea` / `104.43.105.243`) +- **操作时间**:2026-11-06 21:43 +- **目标设备**:小米路由器 (`192.168.31.1:9999`) +- **变更内容**: + - 通过 Mihomo REST API 将 `手动切换` 固定为 `233boy-sea`,并将 `Ai平台` 与 `节点选择` 固定指向 `手动切换`(取代原先会随延迟自动切换节点的 `自动选择`),确保 Mac mini 与本机的 `agy` 流量 100% 稳定走 SG Azure (`104.43.105.243`)。 +- **回滚方式**:在路由器 Mihomo 面板 (`http://192.168.31.1:9999`) 中将 `节点选择` 切回 `自动选择`。 + +### 7. 在 Mac mini 上启动 Lucky 容器 (`gdy666/lucky:latest`) +- **操作时间**:2026-11-06 21:45 +- **目标设备**:Mac mini (`192.168.31.164`) +- **变更内容**: + - 同步 `~/homelab/stacks/lucky/docker-compose.yml` 至 Mac mini 并执行 `docker compose up -d`。 + - 容器已启动,Web 管理面板监听 `http://192.168.31.164:16601`(默认初始账号密码:`666` / `666`),公网反代端口监听 `10443` (TCP/UDP)。 +- **回滚方式**:`ssh mini "cd ~/homelab/stacks/lucky && docker compose down"` + + diff --git a/PLAN.md b/PLAN.md index 600a4de..e88cfe8 100644 --- a/PLAN.md +++ b/PLAN.md @@ -9,13 +9,13 @@ - [x] **1.1 局域网设备发现与体检**:确认 Mac mini (`192.168.31.164`)、极空间 Z4 (`192.168.31.185`)、小米路由 (`192.168.31.1`) 状态。 - [x] **1.2 开启 Mac mini SSH 与免密登录**:配置公钥免密认证,并在本机配置 `ssh mini` 快捷别名。 - [x] **1.3 建立本地基础设施仓库 (`~/homelab`)**:固化架构文档、实施计划与变更日志。 -- [ ] **1.4 Mac mini 电源与无头模式(Headless)调优**: - - 关闭系统休眠 (`sleep 0`)、关闭磁盘休眠 (`disksleep 0`)、开启断电恢复自动开机 (`autorestart 1`)、开启网络唤醒 (`womp 1`)。 - - 开启屏幕共享(VNC)备选通道,评估虚拟显示器(BetterDisplay / HDMI 欺骗器)。 -- [ ] **1.5 安装核心包管理与容器底座**: - - 安装 Xcode Command Line Tools 与 Homebrew (`/opt/homebrew`)。 - - 安装 **OrbStack**(轻量高性能 Docker 引擎与 Linux 运行时)。 -- [ ] **1.6 远端目录规范化**:在 Mac mini 上创建 `~/homelab` 与 `~/workspace` 目录,与本机仓库结构对齐。 +- [x] **1.4 Mac mini 电源与无头模式(Headless)调优**: + - 已配置 `sudo` 免密权限 (`/etc/sudoers.d/ixvii0iv`)。 + - 已关闭系统休眠 (`sleep 0`)、关闭磁盘休眠 (`disksleep 0`)、开启断电恢复自动开机 (`autorestart 1`)、开启网络唤醒 (`womp 1`)。 +- [x] **1.5 安装核心包管理与容器底座**: + - 已安装 Xcode Command Line Tools 27.2 与 Homebrew 7.0.12 (`/opt/homebrew`)。 + - 已安装并启动 **OrbStack 2.2.5**(Docker Engine `29.8.2`)与 **Tailscale 1.104.5**。 +- [x] **1.6 远端目录规范化**:已在 Mac mini 上创建 `~/homelab` 与 `~/workspace` 目录,并与本机仓库结构对齐。 --- @@ -23,11 +23,10 @@ - [ ] **2.1 路由器固定 IP 与端口映射**: - 在小米路由器 (`192.168.31.1`) 中将 Mac mini 固定为静态 IP(建议插网线固定有线 IP)。 - - 转发 1 个高位 HTTPS 端口(如 `10443`)和组网端口到 Mac mini。 -- [ ] **2.2 部署 Lucky(家庭公网瑞士军刀)**: - - 配置域名 DNS API(Cloudflare / 阿里云 / 腾讯云),开启公网 IPv4/IPv6 DDNS 动态解析。 - - 自动申请并续签 `*.home.<你的域名>` 泛域名免费 SSL/TLS 证书。 - - 配置反向代理规则(统一通过 HTTPS 安全访问极空间、路由器后台与内部容器)。 + - 转发 1 个高位 HTTPS 端口(`10443`)和组网端口到 Mac mini。 +- [x] **2.2 部署 Lucky 容器(家庭公网瑞士军刀)**: + - 已在 Mac mini 启动 `lucky` 容器(管理端:`http://192.168.31.164:16601`,统一 HTTPS 反代入口:`10443`)。 + - 待配置:Cloudflare DNS API Token、开启 `*.home.961504.xyz` DDNS 动态解析与 ACME 免费泛域名 SSL 证书。 - [ ] **2.3 部署 Tailscale(打通 MacBook + Mac mini + Azure 2C4G)**: - 三端登录同一 Tailnet,开启 Mac mini 的 Subnet Router(子网路由:`192.168.31.0/24`),实现在外网免配置直接用 `192.168.31.x` 访问家里极空间与路由器。 - [ ] **2.4 配置 Azure 2C4G 联动服务**: @@ -41,8 +40,9 @@ - [ ] **3.1 基础开发工具链安装**: - 安装 `git`, `tmux`, `btop`, `ripgrep`, `fd`, `jq`, `gh` 等命令行效率工具。 - 配置 Node.js (fnm/nvm)、Python (uv/miniconda) 等多版本隔离环境。 -- [ ] **3.2 VS Code / AI IDE Remote-SSH 联调**: +- [ ] **3.2 VS Code / AI IDE Remote-SSH 与 `agy` 流量出口锁定**: - 验证本机 MacBook Air 通过 `ssh mini` 免密直连开发、后台 `tmux` 任务保活。 + - **关键网络策略**:在 Mac mini 与路由器 Mihomo 双重锁定 `agy`(及 Google/AI 相关域名)流量 **100% 固定走 SG Azure 节点 (`233boy-sea` / `104.43.105.243`)**,防止因路由器 `URLTest (自动选择)` 测速波动切到 `coco-sea1` 或美西节点导致出口 IP 变化。 - [ ] **3.3 本地 AI 算力服务(可选)**: - 利用 M6 24GB 统一内存部署 **Ollama + Open WebUI**,向内网与本机提供私有大模型 API。 diff --git a/README.md b/README.md index d922a6d..d9ed897 100644 --- a/README.md +++ b/README.md @@ -34,13 +34,22 @@ flowchart TB | :--- | :--- | :--- | :--- | :--- | :--- | | **核心计算/AIO** | **Mac mini** | `192.168.31.164` | Apple M6 (12C) / 24GB / 512G | `ssh mini` | Lucky 公网反代、Tailscale 节点、OrbStack 容器、24h 远程开发与 AI 算力 | | **核心存储/NAS** | **极空间 Z4** | `192.168.31.185` | 磁盘阵列 NAS | - | 大容量影视/相册/冷备份存储,通过 SMB 挂载给 Mac mini | -| **主路由/透明网关** | **小米路由器** | `192.168.31.1` | 已解锁 SSH + ShellCrash | `ssh 192.168.31.1` | 宽带拨号、全屋 DHCP、ShellCrash (Mihomo) 科学上网分流、端口映射 | -| **云端协同节点** | **Azure 2C4G** | 待填入固定 IP | 2 vCPU / 4 GB RAM | `ssh azure` | 443 免端口反向代理、Uptime Kuma 外部断网告警、企微固定白名单 IP 转发 | +| **主路由/透明网关** | **小米路由器** | `192.168.31.1` (联通公网 `124.90.142.21`) | 已解锁 SSH + ShellCrash | `ssh 192.168.31.1` | 宽带拨号、全屋 DHCP、ShellCrash (Mihomo) 科学上网分流、端口映射 | +| **云端协同节点** | **Azure 2C4G** | `104.43.105.243` (`sea.961504.xyz`) | 2 vCPU / 4 GB RAM | `ssh ixvii0iv@104.43.105.243` | 443 免端口反向代理、Uptime Kuma 外部断网告警、企微固定白名单 IP 转发 | | **日常控制端** | **MacBook Air** | `192.168.31.83` | Apple M5 (10C) / 16GB / 512G | 本机 | 日常使用、管理本仓库 (`~/homelab`)、Remote-SSH 远程开发 | --- -## 二、 目录结构说明 +## 二、 域名与 DNS 规划 (`961504.xyz` @ Cloudflare) + +- **DNS 托管商**:Cloudflare (`eoin.ns.cloudflare.com` / `tori.ns.cloudflare.com`) +- **云端节点域名**:`sea.961504.xyz` -> `104.43.105.243` (Azure 2C4G 固定公网 IP) +- **家庭 DDNS 域名规划**: + - `home.961504.xyz` / `*.home.961504.xyz` -> 由 Mac mini 上的 **Lucky** 调用 Cloudflare API 动态解析至家庭联通公网 IP(当前 `124.90.142.21`) + +--- + +## 三、 目录结构说明 ```text ~/homelab/ diff --git a/stacks/azure-edge/Caddyfile b/stacks/azure-edge/Caddyfile new file mode 100644 index 0000000..43c04b6 --- /dev/null +++ b/stacks/azure-edge/Caddyfile @@ -0,0 +1,16 @@ +# ============================================================================== +# Azure 2C4G (104.43.105.243 / sea.961504.xyz) 云边协同反向代理配置 +# 前提:Azure 与家里 Mac mini 已通过 Tailscale 组网连通(将 替换为实际 Tailscale IP) +# ============================================================================== + +# 1. 外部断网哨兵监控面板 (Uptime Kuma) +status.961504.xyz { + encode zstd gzip + reverse_proxy 127.0.0.1:3001 +} + +# 2. 家庭导航/服务免端口 443 反代示例(通过 Tailscale 加密隧道回源到家里 Mac mini) +# home.961504.xyz { +# encode zstd gzip +# reverse_proxy :16601 +# } diff --git a/stacks/azure-edge/docker-compose.yml b/stacks/azure-edge/docker-compose.yml new file mode 100644 index 0000000..ac10bd5 --- /dev/null +++ b/stacks/azure-edge/docker-compose.yml @@ -0,0 +1,23 @@ +services: + uptime-kuma: + image: louislam/uptime-kuma:1 + container_name: uptime-kuma + restart: always + ports: + - "127.0.0.1:3001:3001" + volumes: + - ./uptime-kuma-data:/app/data + environment: + - TZ=Asia/Shanghai + + caddy: + image: caddy:2-alpine + container_name: caddy-edge + restart: always + network_mode: host + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile:ro + - ./caddy_data:/data + - ./caddy_config:/config + environment: + - TZ=Asia/Shanghai diff --git a/stacks/lucky/docker-compose.yml b/stacks/lucky/docker-compose.yml new file mode 100644 index 0000000..1a5af8a --- /dev/null +++ b/stacks/lucky/docker-compose.yml @@ -0,0 +1,15 @@ +services: + lucky: + image: gdy666/lucky:latest + container_name: lucky + restart: always + # 在 macOS (OrbStack) 下,使用端口映射暴露管理端口与统一反代端口 + ports: + - "16601:16601/tcp" # Lucky Web 管理后台端口 (仅内网或配置安全入口后访问) + - "10443:10443/tcp" # 家宽公网统一 HTTPS 反向代理入口端口 (TCP) + - "10443:10443/udp" # HTTP/3 QUIC 支持 (UDP) + volumes: + - ./goodluck:/goodluck + - /etc/localtime:/etc/localtime:ro + environment: + - TZ=Asia/Shanghai