前言
随着家庭 AI Server 的逐渐完善,我发现越来越多的开发工作实际上是在两台机器之间切换:
-
Mac mini M4
- 24×7 在线
- 日常开发
- Git
- SSH
- Codex CLI
- 配置管理
-
Ubuntu AI Server
- RTX 4070 Ti SUPER
- ComfyUI
- Ollama
- Docker
- CUDA
- AI 推理
如果两台机器分别维护:
.codex.ssh- Git 配置
- 项目目录
很快就会出现历史不同步、配置漂移的问题。
因此决定把 Mac 作为开发主机(Source of Truth),Ubuntu 只负责计算。
为什么不用复制 .codex
最开始想到的是:
scp -r ~/.codex ai-server:~
虽然可行,但有几个问题:
- 每次都要同步
- 会话历史容易冲突
- 配置可能覆盖
- 新机器还要重新同步
实际上 Codex 的配置和历史都是本地文件,因此更好的方案是:
直接共享 Mac 的
.codex。
Ubuntu 始终读取同一份数据。
最终架构
Mac mini(24×7)
/Users/kevin
│
├── .codex
├── .ssh
├── Projects
├── Documents
└── Downloads
│
│ SMB
▼
Ubuntu AI Server
/mnt/mac-home
以后 Ubuntu 实际访问的是:
/mnt/mac-home/.codex
而不是自己的:
~/.codex
真正做到:
- 一份配置
- 一份历史
- 一份 Session
第一步:开启 macOS 文件共享
打开:
系统设置
↓
通用
↓
共享
↓
文件共享
添加:
/Users/kevin
或者仅共享:
/Users/kevin/.codex
推荐直接共享整个 Home,以后还能共享:
- Projects
- .ssh
- dotfiles
- Downloads
同时确认:
Options...
开启:
☑ Share files and folders using SMB
并勾选自己的用户:
☑ kevin
第一次会要求输入 Mac 登录密码。
第二步:Ubuntu 挂载
创建目录:
sudo mkdir -p /mnt/mac-home
测试挂载:
sudo mount -t cifs \
//192.168.1.2/kevin \
/mnt/mac-home \
-o username=kevin,uid=$(id -u),gid=$(id -g)
第一次我遇到了:
mount error(13): Permission denied
最后发现原因非常简单:
密码输错了。
因此以后遇到:
Permission denied
先不要怀疑权限,先检查:
- 用户名
- Share Name
- SMB 是否开启
- 密码是否正确
第三步:持久化挂载
不要把密码直接写进 fstab。
先创建凭据文件:
mkdir -p ~/.smb
nano ~/.smb/mac-home
内容:
username=kevin
password=你的Mac登录密码
设置权限:
chmod 600 ~/.smb/mac-home
编辑:
sudo nano /etc/fstab
加入:
//192.168.1.2/kevin /mnt/mac-home cifs credentials=/home/kevin/.smb/mac-home,uid=1000,gid=1000,iocharset=utf8,vers=3.0,nofail,x-systemd.automount,_netdev 0 0
测试:
sudo umount /mnt/mac-home 2>/dev/null || true
sudo mount -a
ls -la /mnt/mac-home
没有报错并且能够读取目录,就说明配置正确。
第四步:共享 Codex
先备份 Ubuntu 原来的配置:
mv ~/.codex ~/.codex.bak
创建软链接:
ln -s /mnt/mac-home/.codex ~/.codex
验证:
ls -ld ~/.codex
应该看到类似:
/home/kevin/.codex -> /mnt/mac-home/.codex
以后 Ubuntu 与 Mac 就共用:
- Config
- History
- Session
推荐的目录规划
最终我决定统一所有网络共享目录:
/mnt
│
├── mac-home
├── mac-ssd
└── mac-nas
对应:
Mac
│
├── /Users/kevin
├── /Volumes/ssd-antz
└── /Volumes/nas-antz
这样的命名比:
/mnt/kevin-home
更直观,也方便以后增加更多共享。
注意事项
虽然共享同一份 .codex 很方便,但仍需注意以下问题:
- 不建议 Mac 和 Ubuntu 同时运行并写入同一个 Codex 会话。
- SMB 挂载异常或 Mac 休眠时,Ubuntu 端的 Codex 可能无法读取配置。
- 登录凭据在 macOS 与 Linux 上可能使用不同的系统存储机制;如果认证失效,应在 Ubuntu 上重新登录。
- 不建议把
.ssh整个目录直接通过 SMB 共享后作为 Linux 的 SSH 配置目录使用,因为 SSH 对权限和文件系统语义要求较严格。 - Git 配置、Shell 配置更适合使用 dotfiles 仓库同步,而不是全部依赖网络挂载。
我的家庭 AI 架构
Mac mini(24×7)
────────────────
Home
Projects
.codex
.ssh
│
┌──────────────┼──────────────┐
│ │ │
SMB SMB SMB
│ │ │
▼ ▼ ▼
Ubuntu AI mac-ssd mac-nas
Server
Docker
ComfyUI
Ollama
CUDA
RTX 4070 Ti SUPER
Mac 负责:
- 开发
- Git
- 配置
- SSH
- Codex
Ubuntu 负责:
- GPU
- AI 推理
- Docker
- 长时间运行任务
职责清晰,维护成本也更低。
后续计划
目前已经统一了文件系统,接下来准备继续完善整个开发环境:
- 使用同一套 Git 配置
- 建立统一的 dotfiles 仓库
- 统一常用 Shell 配置
- 整理 Projects 目录的跨平台协作方式
- 避免直接共享对权限敏感的
.ssh - 最终实现任何一台机器登录,都能快速恢复接近一致的开发环境
对于长期运行的家庭 AI Server 来说,这种模式比维护两套完全独立的配置更容易管理,也更适合后续扩展。