使用 Docker

使用 Docker

我最近购买了两个 UniFi nanoHD 接入点,但没有购买 Cloud Key。如何在 macOS 计算机上运行 UniFi 网络应用程序(以前称为 UniFi 网络控制器)?

答案1

我知道有两种不同的方法可以做到这一点。


使用 Docker

如果您已经熟悉 Docker,这可能是一个不错的选择,但否则可能不值得学习。看来 UniFi 网络应用程序有两个维护良好的 Docker 映像。

在 Docker 中运行时,必须付出额外的努力才能使采用工作。Docker 的默认网络类型(bridge)意味着容器在网络上无法访问。对于第 2 层采用,Jacob Alberty 映像的文档提到使用主机网络或 macvlan 网络。我在 Linux 中将此 Docker 映像与主机网络一起使用,效果很好,但是在撰写本文时(2022-04-10),macOS Docker Desktop 中不提供主机网络。我还没有尝试使用 macvlan,但它可能会很好地工作(对于任何一个映像,即使 LinuxServer.io 文档没有提到它)。对于第 3 层采用,似乎您必须在 UniFi 网络应用程序的设置中输入 Docker 主机的 IP(两个 Docker 映像的文档都详细说明了在哪里可以找到该设置)。

Jacob Alberty 图像似乎包含一些指定 https 证书的支持。我还没有尝试过,但如果使用浏览器信任的证书对你来说很重要,那么这可能是选择 Jacob Alberty 图像的原因。


本地安装

这很好用,运行起来也不难,但是不幸的是,工作量比应做的要多。

  1. 下载您喜欢的版本

    在以下位置查找“UniFi 网络应用程序 [版本] for macOS”Unifi 下载页面。如果您没有偏好,那么就选择最新版本。

  2. 安装网络应用程序

    在 Finder 中找到 UniFi.pkg。按住 Control 键并单击,然后选择Open with...→ 安装程序。如果没有这个,macOS 会抱怨“无法打开‘UniFi.pkg’,因为 Apple 无法检查其中是否存在恶意软件。”然后,如果出现提示,请选择“打开”并继续安装程序。

  3. 安装 Java 11

    2023-08-27 的注释:您可以尝试跳过此步骤——可能不再需要它。我能够安装版本 7.4.162,但我认为我没有安装 Java,因此它现在可能已捆绑。或者我可能错了。我在发行说明中没有看到任何相关信息。

    注意:7.3.x 之前的版本需要 Java 8,因此如果你选择安装旧版本的网络应用程序,请参阅这个答案的早期版本有关安装 Java 8 的建议以及启动旧版本网络应用程序的命令。

    对于 7.3.x 及更新版本,您需要 Java 11。(截至 2023-01-13,发行说明指出“尚不支持 Java 12 及更高版本”。大概也不支持 Java 13 到 19。)

    使用 Homebrew 安装非常简单:

    1. 跟着Homebrew 安装说明如果你还没有的话。
    2. 在终端中运行brew install openjdk@11。对我来说,这也安装了 24 个依赖项。
    3. 根据上述命令的输出建议,创建一个符号链接以允许系统 Java 包装器找到这个 JDK:sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk
  4. 调整安全设置

    注意:由于 macOS 13 Ventura 中的设置大修,这些说明发生了很大变化。您可以参考这个答案的早期版本以获取有关 macOS 12 及更早版本的指导,但还请注意,这些说明对于较新版本的网络应用程序和 Java 11 可能不准确。

    1. 导航至系统设置 → 网络。选择防火墙,然后单击按钮Options...。确保Block all incoming connections已关闭。无需进行其他更改。单击确定保存。

      几点说明:

      • 如果Automatically allow downloaded signed software to receive incoming connections启用则足以授予网络应用程序访问权限。
      • 如果Automatically allow downloaded signed software to receive incoming connections禁用,则在网络应用程序启动时系统会提示您允许传入连接。
      • 主动将Applications/UniFi允许传入连接的应用添加到列表中似乎不起作用。我不知道为什么。但这并不重要——如果需要,macOS 稍后会提示你。
      • 除了上述防火墙更改之外,您还可以完全关闭防火墙,但我不建议这样做。防火墙提供了一层有用的保护。
    2. 尝试启动网络应用程序。将来,您需要随时使用此流程来启动它:从“应用程序”文件夹运行 UniFi 应用程序,或使用+Space并搜索“UniFi”。您应该会看到此错误对话框:

      macOS 对话框的屏幕截图,显示“‘UniFi.app’已损坏,无法打开。您应该将其移至废纸篓。此文件是在未知日期下载的。”并有“移至废纸篓”和“取消”按钮
    3. “损坏”并不准确——macOS 只是阻止它正常运行。单击“取消”按钮,然后导航至“系统设置”→“隐私和安全”。向下滚动浏览所有应用程序并查找“安全”标题。您应该会看到以下对话框:

      这是 macOS 隐私和安全设置窗口的屏幕截图,其中有一条注释,指出“‘UniFi.app’ 已被阻止使用,因为它不是来自已识别的开发者。”并且有一个“仍然打开”按钮。
    4. 使用“仍然打开”按钮批准。您将获得第二对话框提示应用程序已损坏:

    macOS 对话框的屏幕截图,显示“‘UniFi.app’已损坏,无法打开。您应该将其移至废纸篓。此文件是在未知日期下载的。”,并有“打开”、“移至废纸篓”和“取消”按钮
    1. 我不知道 macOS 到底在抱怨什么。忽略它并单击“打开”按钮。(旁注:macOS 用户体验的这个方面确实需要改进。)

      如果 macOS 询问“您是否希望应用程序‘UniFi.app’接受传入的网络连接?”,您必须单击“允许”以使网络应用程序正常工作。

两条后续说明:

  1. 使用完网络应用程序后,您可以撤消对防火墙的任何更改(假设您不打算一直运行它)。不过,如果您所做的只是允许 UniFi 接收传入连接,防火墙更改几乎是无害的。

  2. 您还可以“无头”运行网络应用程序。我还没有尝试过,但https://akrabat.com/run-the-unifi-controller-headless-on-mac/看起来很有希望。请注意,您需要使用与该页面上建议的不同的执行字符串。

答案2

我通过几个简单的步骤让它在 docker 中运行!我做了一个guthub 上的 docker 配置附有完整说明,但基本步骤如下:

  1. 确定 UniFi 应在您的机器上保存持久数据的位置。

  2. 运行 docker compose 脚本。

  3. 浏览到 https://localhost:8443 并完成初始设置。

  4. 转到设置并输入您的机器的 IP 地址。

相关内容