macOS 部署
Mac 上的 Docker 都跑在一台 Linux 虚拟机里,Docker Desktop、OrbStack 和 Apple 自家的容器工具都是这样,因为云瞰这类 Linux 程序需要 Linux 内核。所以在 Mac 上装云瞰,区别只在用哪台虚拟机:一键脚本帮你建一台直接接入局域网的,功能最全;已经在用 UTM / Parallels / VMware Fusion 或 Docker Desktop / OrbStack 的,也可以直接用。Apple Silicon 和 Intel 芯片的 Mac 都能装,AI 检测只用 CPU。
装之前先知道
- AI 检测只用 CPU。虚拟机里用不到 Mac 的神经网络引擎、GPU 和视频硬件解码。摄像头多的话,给检测配子码流,并且只给重点机位开检测,见 安装部署 里的硬件档位说明。
- Mac 睡眠时不录像。当录像主机用的 Mac 要关掉自动睡眠,见下文 让 Mac 一直在线。
- 授权绑定在虚拟机上。删掉虚拟机重装,授权会把它当成一台新设备,要走一次重新绑定(30 天内限一次),见下文 授权与重装。
系统要求
| 项目 | 要求 |
|---|---|
| macOS | 13 Ventura 或更新 |
| 芯片 | Apple Silicon(M1 及以后)或 Intel |
| 内存 | 8 GB 起,16 GB 更从容。虚拟机默认分走一半(4–16 GB) |
| 磁盘 | 虚拟机磁盘上限默认 200 GB,按实际用量占用。系统盘空闲不到 50 GB 时,建议把录像放到外接盘(--recordings-dir) |
| Homebrew | 必须。没装的话先装,见下面第 1 步 |
| 网络 | 推荐网线。只有 Wi-Fi 也能装,但有些无线路由器不给虚拟机分配地址 |
三种装法怎么选
| Mac 一键脚本(推荐) | 自己装虚拟机 | OrbStack / Docker Desktop | |
|---|---|---|---|
| 适合谁 | 专门拿这台 Mac 当录像主机 | 已经在用 UTM / Parallels / VMware Fusion | 已经在用 OrbStack / Docker Desktop,不想再装一套虚拟机 |
| 自动搜索摄像头(ONVIF) | 可用 | 可用(网络选桥接) | 不可用,手动填 IP 添加 |
| 手机 App 在局域网里自动找到服务器 | 可用 | 可用(网络选桥接) | 不可用,手动填地址 |
| HomeKit / 国标 GB28181 设备接入 | 可用 | 可用(网络选桥接) | 不可用 |
| 开机自启 | 开机就启动,不用登录 macOS | 看虚拟机软件的设置,多数要登录 macOS 后才启动 | 要登录 macOS 后才启动 |
| 要做的事 | 一行命令,中途输一次管理员密码 | 自己建虚拟机、装 Ubuntu,再跑一行命令 | 下载 compose 文件,改一处配置 |
差别都在网络:一键脚本和「自己装虚拟机 + 桥接」都让云瞰像局域网里一台独立的小主机,从路由器拿自己的 IP,用起来和 Linux 主机上装的云瞰完全一样;OrbStack / Docker Desktop 的虚拟机藏在 Mac 后面(NAT),局域网广播进不去,所以自动发现类的功能都用不了。录像、回放、AI 检测、推送、外网访问三种装法都正常。
一键部署(推荐)
- 1
装 Homebrew(已装可跳过)
打开「终端」,粘贴下面这行。国内网络慢的话可以用 Gitee 镜像版。
bash/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - 2
运行 Mac 一键脚本
首次要下载虚拟机系统和云瞰镜像,耗时主要看网络。
bashcurl -fsSL https://cdn.yun-kan.com/yunkan-install-macos.sh | bash - 3
按提示输入 Mac 登录密码
脚本要装一个让虚拟机接入局域网的网络组件,并写入开机启动项,这两步需要管理员权限。不想输密码可以加
--nat,代价是自动发现类功能不可用(同上表 OrbStack 那一列)。 - 4
打开浏览器
脚本最后会打印访问地址,形如
http://192.168.1.50:23406。打开后进入 初始化向导。默认的桥接模式下这是虚拟机自己的 IP,和 Mac 的 IP 不同,手机 App 也连这个地址;--nat模式下是 Mac 的 IP。
在路由器里给虚拟机固定 IP
脚本做了什么:
- 检查 macOS 版本、Homebrew,提示 FileVault 和自动睡眠这两个会影响无人值守的设置
- 用 Homebrew 装 Lima(轻量虚拟机工具)和网络组件 socket_vmnet
- 建一台名为
yunkan的 Ubuntu 24.04 虚拟机,默认用一半的 CPU 核心(2–8 核)和一半的内存(4–16 GB),桥接到 Mac 的有线网卡 - 在虚拟机里装 Docker,再运行标准的 Linux 一键脚本 部署云瞰
- 注册开机启动项:Mac 开机就把虚拟机和云瞰拉起来,不需要登录 macOS 账户
不会共享你的个人文件
--recordings-dir 指定的录像目录会挂进虚拟机。常用参数
| 参数 | 用途 |
|---|---|
--recordings-dir /Volumes/盘名/yunkan | 录像存到 Mac 的某个目录,通常是外接大盘(必须是绝对路径) |
--interface en0 | 指定桥接用的网卡。默认自动选有 IP 的有线网卡,没有就用 Wi-Fi |
--nat | 不桥接,免管理员密码;自动发现 / HomeKit / GB28181 不可用 |
--cpus 4 --memory 8 --disk 300 | 指定虚拟机的核心数、内存(GB)、磁盘上限(GB) |
--offline 镜像包.tar.gz | 用离线镜像包安装,不从网上拉镜像 |
--no-autostart | 不注册开机自启 |
-y | 全程不提问,按默认值走 |
--uninstall | 卸载,见下文 |
# 录像放到外接盘
curl -fsSL https://cdn.yun-kan.com/yunkan-install-macos.sh | bash -s -- --recordings-dir /Volumes/Data/yunkan
# 给虚拟机 6 核 12 GB 内存
curl -fsSL https://cdn.yun-kan.com/yunkan-install-macos.sh | bash -s -- --cpus 6 --memory 12核心数、内存、网络模式要装的时候定好
录像放在哪
默认录像存在虚拟机的磁盘里,也就是 Mac 的系统盘上。录像很占空间,两种做法:
- 录像放外接盘:安装时加
--recordings-dir,指向外接盘上的目录。外接盘要设成开机自动挂载、一直接着。 - 留在系统盘:装好后到 网页后台 → 设置 → 存储 设一个录像总配额,超出后自动删最旧的录像。别只靠磁盘百分比兜底,系统盘满了 macOS 自己也会出问题。详见 保留与磁盘配额。
让 Mac 一直在线
- 1
关掉自动睡眠
Mac 睡着时虚拟机也停了,不录像也不检测。在 系统设置 → 能耗(笔记本是「电池 → 选项」)里打开「显示器关闭时防止自动进入睡眠」,或者在终端执行:
bashsudo pmset -a sleep 0 - 2
停电后自动开机(Mac mini / iMac / Mac Studio)
系统设置 → 能耗 → 打开「断电后自动启动」。
- 3
留意 FileVault
开着 FileVault 时,Mac 开机会先停在解锁界面,有人输入密码之后系统才真正启动,云瞰也要等到那时。停电来电后没人输密码就一直不录像。计划内的重启可以用
sudo fdesetup authrestart跳过这一次;要完全无人值守,只能关掉 FileVault,这是安全上的取舍,自己决定。
日常管理
| 要做什么 | 怎么做 |
|---|---|
| 升级 | 网页后台 → 设置 → 系统 → 检查更新,一键升级;或者重跑一遍一键脚本 |
| 看日志 | limactl shell yunkan docker logs -f yunkan |
| 停止 / 启动 | limactl stop yunkan / limactl start yunkan |
| 进虚拟机 | limactl shell yunkan |
授权与重装
一键脚本和自己装虚拟机这两种装法,授权都绑定在虚拟机上。重启 Mac、重启虚拟机、升级云瞰都不影响授权;但删掉虚拟机重装(包括卸载后重装、为了改核心数重装)会变成一台新设备,需要在 客户门户 申请重新绑定,30 天内限一次,见 授权与激活。
OrbStack / Docker Desktop 装法用的是这台 Mac 本身的硬件编号,删掉容器重装授权不变。
用自己的虚拟机软件(UTM / Parallels / VMware Fusion)
一键脚本做的事,用任何虚拟机软件都能手动做到:装一台 Ubuntu,网络设成桥接,再在里面跑 Linux 一键脚本。
- 1
建一台 Ubuntu 虚拟机
系统选 Ubuntu Server 24.04,Apple Silicon 的 Mac 用 ARM64 版,Intel 的 Mac 用 x86_64 版。建议 4 核、8 GB 内存起步,磁盘按录像量给。
- 2
网络选「桥接」
UTM 里是「Bridged (Advanced)」,Parallels 是「Bridged Network」,VMware Fusion 是「Bridged Networking」。选默认的共享 / NAT 网络也能用,但自动发现类功能会和 OrbStack 那一列一样不可用。
- 3
在虚拟机里跑 Linux 一键脚本
脚本会检查 Docker,没装的话会给出安装命令。细节见 Ubuntu / Debian 部署。
bashcurl -fsSL https://cdn.yun-kan.com/yunkan-install.sh | bash - 4
打开浏览器
脚本最后会打印访问地址(虚拟机的 IP 加
:23406),打开后进入 初始化向导。同样建议在路由器里给虚拟机固定 IP。
让虚拟机跟着 Mac 一起启动
用 OrbStack / Docker Desktop 部署(简易)
已经装了 OrbStack 或 Docker Desktop 的话,可以直接用 compose 文件起云瞰。先看一眼上面「两种装法怎么选」里不可用的功能。
浏览器下载 compose.yml
macOS 专用 · cpu 变体(Apple Silicon 自动用 ARM 版)· 支持网页后台在线升级
- 1
建目录、放 compose 文件
把上面下载的 compose.yml 放进去,或者:
bashmkdir -p ~/yunkan && cd ~/yunkan curl -fsSL https://yun-kan.com/compose/macos.yml -o compose.yml - 2
生成设备标识
授权要靠它认这台 Mac。必须在启动前生成,否则 Docker 会建出一个同名的空目录。
bashioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}' \ | tr -d '-' | tr 'A-F' 'a-f' > machine-id - 3
填上 Mac 的局域网 IP
先用下面的命令查 Mac 的 IP,再把 compose.yml 里
SKYVIEW_WEBRTC_EXTERN_IPS=后面改成它。不填的话实时画面会退回较慢的 HLS。Mac 换了 IP 要回来改,再执行一次docker compose up -d。bashipconfig getifaddr en0 || ipconfig getifaddr en1 - 4
Docker Desktop 要打开 host 网络(OrbStack 跳过)
Settings → Resources → Network → 勾选「Enable host networking」,需要 Docker Desktop 4.34 或更新。不开的话局域网和 Mac 本身都访问不到云瞰。
- 5
录像目录
recordings/ 下,数据库放在 Docker 的数据卷里。想把录像放外接盘,改 ./recordings 那一行左边的路径;Docker Desktop 还要在 Settings → Resources → File sharing 里放行那个目录。卸载
curl -fsSL https://cdn.yun-kan.com/yunkan-install-macos.sh | bash -s -- --uninstall卸载会把一键脚本带来的东西删干净:
- 云瞰虚拟机,连同里面的 Docker、镜像、数据库、人脸库、事件
- 开机启动项和桥接网络配置
- 脚本用 Homebrew 装的 Lima、socket_vmnet,以及 Lima 下载的系统镜像缓存
安装前你就装了的 Lima / socket_vmnet、别的虚拟机还在用的组件,都会保留。用 --recordings-dir 放在 Mac 上的录像目录会单独问你,默认保留。
虚拟机里的数据无法恢复
自己装虚拟机的:在虚拟机软件里删掉那台虚拟机即可。OrbStack / Docker Desktop 装的:在 ~/yunkan 里执行 docker compose down -v(-v 会连数据库所在的数据卷一起删),确认录像不要了再删目录。
常见问题
在 Mac 上打不开访问地址,手机却能打开
脚本报「虚拟机桥接网卡 60s 内没拿到 IP」
--uninstall 再重装,或者加 --nat 重装。搜不到摄像头
--nat 模式和 OrbStack / Docker Desktop 装法下,自动搜索收不到摄像头的回应。在添加摄像头时手动填摄像头的 IP 即可,见 摄像头接入。Mac 上能用 GPU 或神经网络引擎加速吗
Cette page vous a-t-elle été utile ?