iMac 服务器改造方案 · 模拟执行手册(首次 · 非真执行)

选中任意文字 → 点「✎ 批注」提交修改意见(粒度:字/句/段/章/篇)。你的网络信息与提交时间会被记录,用于反哺需求改造。

版本:V01.00 | 撰写:2026-07-27 07:20 | 性质:彩排 / Dry-Run(不改动任何真实环境) 配套主文档:imac-server-plan.md(V02.16)|概览:overview.md

〇、先说清楚:这本手册怎么用

这是"彩排",不是"实战"。 全程你不需要真的去点、去敲命令。目标是让你闭着眼也能照着做——把计划里每一阶段、每一环节,拆成"你点哪里 / 敲什么 / 预期看到什么 / 卡住怎么办"。

图例约定

标记含义
🖱️你在图形界面上的点击/操作
⌨️你要在终端(Terminal)里敲的命令(本手册里是给你照抄的,彩排时不真敲
👀你预期会看到的结果
⚠️容易踩的坑 / 必须注意
🔌这一步有前置依赖(见下方清单)

模拟前置依赖(彩排时假设这些都已就位)

  1. 硬件就位:那台 Apple Silicon iMac 通电、联网(先连家里 WiFi 或有线);你的 MBA 也在手边。
  2. 域名就位sixstars.cn 已在腾讯云注册、未备案;stocktrading.sixstars.cn 已跑通 EdgeOne 海外区(主文档附录 C 已验证)。
  3. 凭证在手(敏感,真实执行时才用,彩排不展示):
  1. 本环境连接器状态:当前 edgeone-pages 连接器是 disconnected,所以真实部署需你在 MBA 本地终端跑 CLI(昨日 stocktrading 已验证),或等连上。彩排时假设你在 MBA 本地终端操作。

一、阶段 0:准备 + 判断网络(模拟耗时 30 分钟)

0.1 确认 iMac 芯片型号

🖱️ 坐到 iMac 前 → 点屏幕左上角苹果图标 🍎 → 点「关于本机」。 👀 弹窗里看「芯片」一行:应该是 Apple M1 / M2 / M3 / M4(某一代)。 📝 记下来。用途:后面装 OrbStack 时确认是 Apple Silicon 版(不是 Intel 版)。

0.2 判断"有没有公网 IP"(这一步只影响动态服务,不卡静态展示)

原理:你家路由器从运营商拿到一个 IP。如果这个 IP 和"外界看到的你家 IP"是同一个 → 有公网 IP;如果不一样 → 没有(被运营商关在"内网"里了)。

  1. 🖱️ 用 iMac 浏览器打开 https://ip138.com
  1. 🖱️ 登录你家路由器管理页(通常是浏览器开 192.168.1.1192.168.0.1,账号密码在路由器背面)→ 找「网络状态 / WAN 口状态 / 上网信息」。
  1. 📝 对比两个数字

操作: 👀 页面中央会显示一串数字,如 113.66.xx.xx——这是外界看到的你家 IP。 👀 看「WAN IP」或「外网地址」那一行,也是一串数字。

彩排结论假设:本步骤结果是 X(有/无),但无论哪种,静态展示都走 EdgeOne,不受影响

0.3 给 iMac 绑固定内网 IP

🖱️ 路由器管理页 → 「DHCP 静态分配 / 地址保留 / 绑定 MAC 与 IP」→ 找到 iMac 的 MAC 地址(在"关于本机→网络"里能看到)→ 把它绑成一个固定内网 IP,比如 192.168.1.50。 👀 之后 iMac 每次联网都拿到 192.168.1.50,不会变。 📝 记下来这个 192.168.1.50——它就是"iMac 在家里的门牌号",后面 Web 管理内网直连带它。

0.4 确认域名托管状态

🖱️ 登录腾讯云 DNS 解析控制台,看 sixstars.cn 的解析记录。 👀 应该能看到 stocktrading 那条 CNAME 指向 EdgeOne 节点(昨日已建)。 📝 确认 sixstars.cn 没有迁出(仍由腾讯云 DNS 管),后面加 projects 的 CNAME 就在这里加。


二、第一优先级 · 操作通道(模拟耗时 1 小时)

目标:让你在外(比如用 MBA 连 4G)也能稳定管 iMac。这条通道不依赖公网 IP,靠 Cloudflare Tunnel 打通。

2.1 装 OrbStack(iMac 上的容器引擎底座)

🖱️ 打开浏览器 → 访问 https://orbstack.dev → 下载 Apple Silicon 版 → 双击 .dmg → 拖进「应用程序」。 🖱️ 首次打开 OrbStack → 按向导点「下一步」→ 同意条款 → 它可能要你输入一次开机密码(授权装底层网络组件)。 👀 菜单栏右上角出现 OrbStack 图标,状态显示「Running」。 ⚙️ 设置开机自启:🖱️ 菜单栏 OrbStack 图标 → Settings → 勾选「Start at login」。 📝 以后所有服务(Portainer、NPM、Uptime Kuma)都跑在 OrbStack 里的容器上。

2.2 起 Cloudflare Tunnel(打通"外→iMac"的加密隧道)

先在 Cloudflare 里建一个 Tunnel,再在 iMac 上跑它的客户端 cloudflared

🖱️ 登录 Cloudflare 控制台 → 选 sixstars.cn → 左侧「Zero Trust」→「Networks → Tunnels」→ 「Create a tunnel」→ 取名比如 imac-tunnel → 选系统 macOS。 👀 页面给你一段安装 + 登录命令。

⌨️ 在 iMac 的「终端」App 里(彩排时照抄,不真敲):

# 1) 装 cloudflared(用 Homebrew;没装就先 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)")
brew install cloudflare/cloudflared/cloudflared

# 2) 把本机连到刚才建的 tunnel(会弹浏览器让你登录 Cloudflare 授权)
cloudflared tunnel login

# 3) 把 tunnel 配置成本机服务,开机自起
cloudflared service install

👀 终端最后显示 Successfully installed cloudflared as a system service 之类。此时 Tunnel 已通。

2.3 配 Cloudflare Access(给管理界面加"邮箱验证码"门)

🖱️ Cloudflare 控制台 → Zero Trust → 「Access → Applications」→ 「Add an application」→ 选「Self-hosted」。 🖱️ 应用名 manage,子域名填 manage,域名 sixstars.cn → 下一步。 🖱️ 访问策略(Policy):加一条「允许某个邮箱」→ 填你自己的邮箱(如 sixstars@qq.com)→ 选「Email」验证方式。 👀 保存后,外界访问 manage.sixstars.cn 会先弹邮箱验证码,不对的邮箱连登录页都进不去(零信任)。

2.4 起 Portainer(Web 管理界面主力)

⌨️ 在 iMac 终端(彩排照抄):

# 建个专放配置的目录
mkdir -p ~/docker/portainer && cd ~/docker/portainer

# 起 Portainer 容器(端口 9001,仅内网/Tunnel 访问,绝不挂公网)
docker run -d --name portainer \
  --restart always \
  -p 9001:9001 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

👀 终端回一行容器 ID。等 10 秒。 🖱️ 浏览器开 http://192.168.1.50:9001(内网直连)→ 首次设置管理员账号密码(⚠️ 设强密码,别用 123456)。 📝 记下账号密码。以后"在外管服务器"就靠它。

2.5 验证操作通道(关键验收)

🖱️ 拿起 MBA → 关掉家里 WiFi,只连手机 4G 热点(模拟"在外面")。 🖱️ MBA 浏览器开 https://manage.sixstars.cn。 👀 预期:先跳邮箱验证码页 → 输你邮箱、收码、填码 → 才进 Portainer 登录页 → 登进去能看到 iMac 上的容器列表。 ✅ 通了 = 操作通道建成。⚠️ 不通:先看 Cloudflared 服务在跑没(cloudflared tunnel info imac-tunnel);再看 Access 策略邮箱写对没。

2.6 远程桌面预案(零成本预留,现在就能做)

🖱️ iMac → 「系统设置 → 通用 → 共享」→ 打开「屏幕共享」。 👀 开关变绿。这一下零成本,需要时直接能用。 📝 向日葵 / ToDesk 客户端现在不装——大概率用不上几次,等真需要(Web 失灵、要动系统层)时再装,5 分钟的事。预案逻辑:Web 管 90%+ 场景;真救场时 5 分钟装好向日葵连上即可。


三、第二优先级 · 展示通道(静态试水 · 分支 C / EdgeOne)

这是当前最该做的"试水"——把 projects-prototype 那个静态网页,部署成 projects.sixstars.cn。 好处:内容在腾讯云,iMac 完全不用开;免费;国内经 CNAME 能稳定访问。 ⚠️ 真实执行时下面 ⌨️ 命令要在你 MBA 本地终端跑(本环境连接器断了)。

3.1 准备静态文件

📂 彩排假设文件已就绪:/Users/sixstars/WorkBuddy/大欣的实践积累/xin_accumulate/2026-07-23/projects-prototype/index.html(含自包含 CSS、留言板、邮箱防爬、实时时钟、落款等,都按附录 B 定稿)。 📝 部署时把这个目录整体交给 EdgeOne。确认目录里至少有一个 index.html(入口页)。

3.2 在 EdgeOne 建「海外区」项目

🖱️ 登录腾讯云 → 「EdgeOne」→「Pages」→「创建项目」→ 项目名填 projects(无连字符,和子域名一致)。 ⚠️ 加速区域必须选「全球可用区(不含中国大陆)= 海外区」——国内区绑自定义域名要求 ICP 备案,你的 sixstars.cn 没备案,选国内区会卡住。 👀 建好后,EdgeOne 会给你一个"目标值"(一串 .edgeonepages.com 或类似地址),后面 DNS 的 CNAME 就指向它。记下来。

3.3 部署(两种方式,CLI 优先)

方式 A:CLI 自动部署(推荐,可复用成脚本) ⌨️ MBA 本地终端(彩排照抄,-a overseas 不能漏):

# 进入原型目录
cd "/Users/sixstars/WorkBuddy/大欣的实践积累/xin_accumulate/2026-07-23/projects-prototype"

# 部署到 EdgeOne 海外区项目 projects
edgeone pages deploy . -n projects -t <你的EdgeOne_API_Token> -e production -a overseas

⚠️ 关键坑:漏掉 -a overseas 会默认按 global 区域找项目,找不到已存在的 projects,误判"项目不存在"去新建第二个——白忙活。务必带 -a overseas。 👀 终端跑完回一个线上地址,类似 https://projects.edgeonepages.com 或直接在 projects.sixstars.cn 生效。

方式 B:控制台手动上传(适合首次建站) 🖱️ EdgeOne Pages 项目里点「直接上传」→ 把 projects-prototype 目录里的文件拖进去 → 确认。 👀 同样生成线上地址。

3.4 腾讯云 DNS 加 CNAME

🖱️ 腾讯云 DNS 解析 → sixstars.cn → 「添加记录」: 👀 保存。等几分钟 DNS 生效。

3.5 加上访问保护(复用 stocktrading 那套)

projects-prototype 的 HTML 里确认已带: 👀 这些在prototype 里已实现,部署后自动生效。

3.6 验证静态试水

🖱️ 手机切 4G(不用 WiFi)→ 浏览器开 https://projects.sixstars.cn。 👀 预期:先弹口令闸门 → 输对当天口令 → 进 projects 首页(能看到项目列表 + 留言板 + 邮箱 + 实时时钟 + 落款)。 ✅ 通了 = 试水成功,计划从"需求定稿"正式跨入"实施验证"。 ⚠️ 不通排查:① DNS 没生效(等几分钟 / dig projects.sixstars.cn 看指向对不对);② CNAME 值填错;③ EdgeOne 项目区选成国内区(必须海外区)。


四、第二优先级 · 展示通道(动态服务 · 分支 A/B,挂起模拟)

这部分当前挂起——取决于 0.2 的"有无公网 IP"判断。下面只做彩排演示,真实不执行,等需求方拍板 + 判断结果再动。

4.1 情景一:有公网 IP → 分支 A

⌨️ 起 DDNS-GO(自动把变化的公网 IP 同步给域名解析)+ 路由器端口转发 8443: 👀 外面访问 https://projects.sixstars.cn:8443 能命中 iMac 上的 NPM。

4.2 情景二:无公网 IP → 分支 B

⌨️ 在 2.2 建好的 Cloudflare Tunnel 里,加一条「公共主机名 projects → 服务 localhost:8443」的路由。 👀 外面访问 https://projects.sixstars.cn 经 Tunnel 命中 iMac,不用开端口转发(但延迟 300~800ms,偏慢)。

4.3 起 NPM + 测试容器(两种情景都通用)

⌨️ 用 Portainer(2.4 起的)起 Nginx Proxy Manager(后台端口 9002)+ 一个 nginx 欢迎页测试容器(内部 5080)。 🖱️ Portainer 里建 docker-compose → 起完 → 在 NPM 后台(http://192.168.1.50:9002)加一条「域名 projects.sixstars.cn → 转发到 测试容器:5080」+ 自动申请 HTTPS 证书。

4.4 验证动态服务

🖱️ 手机 4G 开对应地址 → 看到 nginx 欢迎页 = 动态通道打通。


五、阶段 3:监控(模拟耗时 30 分钟)

⌨️ 用 Portainer 起 Uptime Kuma(端口 9003,仅内网/Tunnel):

docker run -d --name uptime-kuma --restart always -p 9003:3001 louislam/uptime-kuma

🖱️ 浏览器开 http://192.168.1.50:9003 → 首次建管理员账号 → 「Add New Monitor」: 🖱️ 告警通知:接「Server 酱」→ 微信收告警(Server 酱给个 Key,填进 Uptime Kuma 的 Notification)。 👀 以后哪个服务挂了,微信立刻弹消息。


六、端口规划(贯穿全程的记忆口诀)

区段用途对外?举例
8xxx对外 Web 入口(NPM 监听)8443 HTTPS 主入口(固定用这个)
9xxx管理后台否(仅内网/Tunnel)9001 Portainer / 9002 NPM / 9003 Uptime Kuma / 9004 DDNS-GO
5xxx应用服务(容器内部,NPM 转发)5080 某 Web 应用
4xxx数据库否(绝不对外)4001 PostgreSQL / 4002 MySQL / 4003 Redis

记忆口诀:8 对外、9 管理、5 应用、4 数据库。 对外其实只需记一个端口 8443。数据库(4xxx)永远不转发到公网——这是安全红线。


七、阶段 4:按需上服务(以后 Expansion)

以后想跑什么展示/动态服务:

  1. 📂 找对应的 docker-compose.yml(或写一个新的)。
  2. 🖱️ 丢进 Portainer → 起容器(记得设 restart: always 开机自恢复)。
  3. 🖱️ NPM 后台加一条「子域名 → 容器」转发。
  4. 完事。

八、安全防护 / 运维补课(挂起模拟,不阻塞试水)

这些不影响静态试水,但长期必须补。彩排演示做法:

九、模拟收尾 · 验收清单(Checklist)

彩排走完一遍,真实执行时你手里应拿到这些"凭证":


十、本手册与计划的关系 & 下一步


sixstars.cn ☆ 大欣,欣欣向荣的欣 ☆ 2026.07.27-07:20:01