博客 · AI

在 Mac mini 服务器上运行 Ollama

在 Mac mini 上安装 Ollama,选择适合 16GB 或 24GB 内存的模型,作为后台服务运行,开放 OpenAI 兼容 API 并做好安全防护。

Mac mini 安静、省电,很适合做私有 LLM 接口。本文介绍如何在 Mac mini 服务器上运行 Ollama,从安装一直到提供安全的 OpenAI 兼容 API。

准备工作

  • 一台 Apple silicon 的 Mac mini,统一内存至少 16GB,24GB 会宽裕很多。
  • 终端的管理员权限,本地或 SSH 均可。
  • 足够的磁盘空间存放模型。4-bit 的 7–8B 模型大约占 4–5GB,14B 模型大约 8–10GB。

效果好的原因在于统一内存:GPU 与 CPU 从同一个内存池读取模型权重,没有单独的显存上限。macOS 默认允许 GPU 使用大部分内存,约三分之二到四分之三。

第 1 步:安装 Ollama

macOS 上常见的安装方式有两种。通过 SSH 管理的服务器,用 Homebrew 最方便:

brew install ollama
ollama --version

也可以从 ollama.com 下载 macOS 应用。应用会在菜单栏常驻,并在登录时启动服务,适合桌面使用。无界面的服务器用 Homebrew 版本配合下文的 launchd 更容易控制。

先在前台启动一次,确认能正常运行:

ollama serve

在另一个终端确认它在默认端口 11434 上响应:

curl http://127.0.0.1:11434/api/version

第 2 步:按内存大小拉取模型

经验法则:4-bit 量化模型每十亿参数大约需要 0.5–0.7GB 内存,另外还要给上下文留空间。计算时要以 GPU 可用的那部分内存为准,而不是总内存。

Mac mini 内存较宽裕的模型规模(4-bit)示例
16GB7–8Bllama3.1:8b、qwen2.5:7b
24GB约 14B 以内qwen2.5:14b、phi4:14b
ollama pull llama3.1:8b
ollama run llama3.1:8b "Summarise what a launchd agent is in two sentences."

16GB 机器或许能加载 14B 模型,但留给上下文和 macOS 本身的空间很少,容易触发交换而变慢。全天运行的服务器应留在宽裕区间内。内存计算的完整解释见Apple silicon 本地 LLM 内存指南。

第 3 步:选择量化精度

多数 Ollama 模型标签默认使用 Q4_K_M 之类的 4-bit 量化,这是不错的默认值。其他标签可以在内存和质量之间取舍:

  • Q4_K_M:常规平衡点,体积小、速度快,聊天、摘要、编码辅助都够用。
  • Q5_K_M / Q6_K:稍大一些,更接近原始质量。内存有富余时值得一试。
  • Q8_0:体积约为 4-bit 的两倍。适合在大内存机器上跑小模型,比如在 24GB 上跑 8B。
ollama pull llama3.1:8b-instruct-q8_0
ollama list

实用原则:只要能宽裕地装下,4-bit 的大模型通常胜过 8-bit 的小模型。拉取前先在 ollama.com 查看该模型的标签列表,不同模型提供的变体不一样。

第 4 步:让 Ollama 作为后台服务运行

快捷方式:brew services

brew services start ollama
brew services list

这会注册一个 launchd agent,登录时启动 Ollama,进程退出后自动重启。它默认只监听本机,这是安全的默认值。

可配置方式:自己写 launchd plist

如果要设置监听地址、keep-alive 等环境变量,就自己写一个 agent。先执行 brew services stop ollama,然后把下面内容保存为 ~/Library/LaunchAgents/com.example.ollama.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
  <key>Label</key><string>com.example.ollama</string>
  <key>ProgramArguments</key>
  <array><string>/opt/homebrew/bin/ollama</string><string>serve</string></array>
  <key>EnvironmentVariables</key>
  <dict>
    <key>OLLAMA_HOST</key><string>127.0.0.1:11434</string>
    <key>OLLAMA_KEEP_ALIVE</key><string>24h</string>
  </dict>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><true/>
  <key>StandardErrorPath</key><string>/tmp/ollama.err.log</string>
</dict></plist>
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.ollama.plist
launchctl print gui/$(id -u)/com.example.ollama | head

LaunchAgent 只在该用户登录期间运行。远程 Mac 保持登录状态的话没有问题。如果需要在开机后、无人登录时就启动,改用 /Library/LaunchDaemons 下的 LaunchDaemon,加上 UserName 键,并在环境变量中设置 HOME,让模型存放在正确的位置。

第 5 步:OLLAMA_HOST 与 keep-alive

OLLAMA_HOST 决定服务监听的地址和端口。127.0.0.1:11434 只接受本机连接;0.0.0.0:11434 接受所有网卡上的连接,而 Ollama 本身没有认证,所以只有在你可控的防火墙或代理之后才应该监听全部地址。保持监听本机、再通过隧道或代理访问,会更安全。

OLLAMA_KEEP_ALIVE 决定模型在最后一次请求后在内存中保留多久。默认只有几分钟,之后的下一次请求要重新加载。独享服务器上可以设得更长,例如 24h,或用 -1 表示一直保留,响应会更及时。也可以在单个请求里用 keep_alive 字段设置。查看已加载的模型:

ollama ps

另外两个相关设置:OLLAMA_CONTEXT_LENGTH 提高默认上下文长度,OLLAMA_NUM_PARALLEL 让一个模型同时处理多个请求。两者都会占用更多内存,建议逐步调高并观察 ollama ps。

第 6 步:使用 OpenAI 兼容接口

Ollama 在 /v1 下提供 OpenAI 兼容 API,很多现成工具只需改一下 base URL 就能用。

curl http://127.0.0.1:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "llama3.1:8b",
       "messages": [{"role": "user", "content": "Write a haiku about build servers."}]}'

使用官方 OpenAI Python 客户端:

from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:11434/v1", api_key="ollama")
r = client.chat.completions.create(
    model="llama3.1:8b",
    messages=[{"role": "user", "content": "Hello"}],
)
print(r.choices[0].message.content)

客户端库要求填写 API key,但 Ollama 并不校验。正因如此,访问控制必须放在它前面。

第 7 步:安全的远程访问

方案 A:SSH 隧道

最简单的安全方案。Ollama 保持只监听本机,从你的电脑转发端口:

ssh -N -L 11434:127.0.0.1:11434 admin@your-mac-mini

本地工具直接调用 http://127.0.0.1:11434/v1,流量经 SSH 加密。适合个人开发者或使用 SSH 密钥的小团队。

方案 B:带认证的反向代理

给应用或多个用户使用时,在前面放一个带 TLS 和认证的反向代理。用 caddy hash-password 生成哈希后,一个最小的 Caddy 配置如下:

llm.example.com {
    basic_auth {
        apiuser $2a$14$REPLACE_WITH_HASH
    }
    reverse_proxy 127.0.0.1:11434
}

只要域名指向这台机器、80 和 443 端口可访问,Caddy 会自动申请证书。租用的 Mac 能否接受公网入站流量取决于其网络配置,如有需要请告诉我们你的需求。规模更大时,可以在代理层为每个用户分配 API key 并设置限流。

在租用的 Mac mini 上运行

以上步骤在 Hatmac 的机器上同样适用:每台都是独享的物理 Mac,拥有完整终端,不是共享虚拟机。Ollama 由你自行安装,SSH 可以作为访问方式之一开通。24GB 的 Mac mini M6 适合 14B 级模型;16GB 的 Mac mini M4 能跑 7–8B 模型,12 个月租期 $119/月起。更多信息见 Mac mini LLM 服务器页面;如需更大的模型,请看 Mac Studio 本地 LLM 指南。

常见问题

16GB 的 Mac mini 能作为 Ollama 服务器吗?

可以。4-bit 的 7–8B 模型运行很宽裕。14B 级模型建议用 24GB,给上下文和系统留出更多空间。

把 OLLAMA_HOST 设为 0.0.0.0 安全吗?

只有在防火墙或带认证的代理之后才安全。Ollama 没有内置认证,能访问该端口的人都能调用。

OpenAI 客户端库能直接用于 Ollama 吗?

可以。把 base URL 指向服务器的 /v1,API key 随便填一个占位值即可。

ollamamac minillm serveropenai apilaunchd