Windows 下 Ollama + NSSM 服务化部署全记录

从开机自启失效到稳定运行,一个完整的排坑指南


📖 前言

最近在本地部署了 Ollama + Qwen 模型,配合 VSCode 的 Continue 插件做 AI 辅助编程。但遇到一个典型问题:明明设置了开机自启,第二天打开 VSCode 时 Continue 却连不上 Ollama。

经过一番折腾,最终用 NSSM 将 Ollama 注册为 Windows 系统服务,彻底解决了这个问题。本文将完整记录从问题发现到最终解决的全过程,包含所有命令和配置详解。


📋 目录

  1. 问题现象
  2. 环境信息
  3. 排查过程
  4. 解决方案:NSSM 服务化
  5. 关键转折:模型丢失的真相
  6. 最终验证
  7. 总结与避坑指南

1. 问题现象

第二天打开 VSCode,发现 Continue 插件报错:

text

Unable to connect to local Ollama instance. Ollama may not be running.

明明记得前一天设置了开机自启,为什么没有生效?


2. 环境信息

项目 配置
操作系统 Windows 11(版本 10.0.26200)
Ollama 安装路径 D:\AiAgent\Ollama\
Ollama 模型目录 D:\AiAgent\Ollama\models
已安装模型 nomic-embed-text, qwen2.5-coder, qwen3-vl
GPU NVIDIA GeForce RTX 5070 Ti Laptop (12GB)
VSCode 插件 Continue

3. 排查过程

3.1 检查 Ollama 服务状态

首先在终端尝试启动 Ollama:

powershell

# 尝试启动 Ollama 服务(注意:是 serve,不是 server)
ollama serve

📌 命令注释:ollama serve 用于启动 Ollama 的后台服务进程,监听 http://localhost:11434 供 API 调用。注意是 serve 不是 server,这是一个常见拼写错误。

3.2 发现开机自启失效

检查任务管理器的"启动"选项卡,发现 Ollama 虽然显示"已启用",但实际开机后并未运行。

原因分析:Ollama 在 Windows 上默认是用户级托盘程序,依赖用户登录后触发,不是真正的系统级服务。这种方式在某些情况下(如快速启动、安全软件拦截)会失效。


4. 解决方案:NSSM 服务化

4.1 什么是 NSSM?

NSSM(Non-Sucking Service Manager) 是一个开源工具,可以将任何 .exe 程序包装成标准的 Windows 系统服务,具备以下特性:

  • ✅ 开机自启(不依赖用户登录)
  • ✅ 进程守护(崩溃后自动重启)
  • ✅ 完全控制(可通过 services.msc 管理)

📌 项目地址:https://nssm.cc

4.2 下载与安装 NSSM

  1. 访问 https://nssm.cc/release/nssm-2.24-101-g897c7ad.zip 下载(或访问官网选择版本)

  2. 解压到 D:\Installer\Tools\NSSM\

  3. 目录结构:

    text

    D:\Installer\Tools\NSSM\
    ├── win64\
    │   └── nssm.exe
    ├── win32\
    │   └── nssm.exe
    └── src\          # 源代码,无需理会
    

4.3 配置环境变量

为了能在任意目录下调用 nssm 命令,需要将 NSSM 所在目录添加到系统 PATH。

操作步骤:

  1. 按 Win + R,输入 sysdm.cpl,回车

  2. 切换到"高级"选项卡 -> 点击"环境变量"

  3. 在"系统变量"区域找到 Path,双击编辑

  4. 点击"新建",添加以下路径:

    text

    D:\Installer\Tools\NSSM\win64
    
  5. 依次点击"确定"保存

📌 配置注释:

  • 系统变量 vs 用户变量:系统变量对所有账号生效,用户变量只对当前账号生效。推荐配置在系统变量,因为以管理员身份运行 CMD 时,用户变量可能不生效。
  • 为什么编辑 Path:系统通过 Path 变量查找可执行文件,添加目录后无需输入完整路径即可运行 nssm。

验证配置:

powershell

# 查看 nssm 所在路径
where nssm
# 预期输出:D:\Installer\Tools\NSSM\win64\nssm.exe

# 测试 nssm 是否可用
nssm
# 预期输出:NSSM 帮助信息

📌 命令注释:where 命令用于查找可执行文件在 PATH 中的位置,用于验证环境变量是否配置成功。


5. 关键转折:模型丢失的真相

5.1 注册 Ollama 服务

以管理员身份打开 CMD,执行:

powershell

# 安装服务(服务名不区分大小写)
nssm install Ollama

在弹出的图形化窗口中配置:

选项卡 字段 填写内容
Application Path D:\AiAgent\Ollama\ollama.exe
Application Startup directory D:\AiAgent\Ollama\
Application Arguments serve
Details Display name Ollama Service
Details Description Ollama AI model server
Details Startup type Automatic(开机自启)

📌 配置注释:

  • Arguments 填 serve:告诉 Ollama 以服务模式运行,监听 API 请求。
  • Startup type 选 Automatic:确保开机自动启动。

点击 "Install service" 安装。

5.2 启动服务

powershell

# 启动服务
nssm start Ollama
# 预期输出:ollama: START: 操作成功完成。

# 查看服务状态
nssm status Ollama
# 预期输出:SERVICE_RUNNING

5.3 意外发现:模型不见了!

执行 ollama list 查看已安装模型:

powershell

ollama list
# 输出为空!

这显然不对,明明之前下载了 3 个模型。


5.4 问题根源:账户环境不同

运行方式 账户 默认模型目录
双击图标 / 手动 ollama serve 你的用户账户 C:\Users\你的用户名\.ollama\models
系统服务(NSSM 安装) Local System C:\Windows\System32\config\systemprofile\.ollama\models

结论:Ollama 服务运行在 Local System 账户下,它去系统账户的目录找模型,当然找不到。你的模型文件本身完好无损,只是"走错门了"。

5.5 验证模型文件确实存在

用之前写的扫描脚本检查模型目录:

powershell

# 模型在 D:\AiAgent\Ollama\models 下
dir D:\AiAgent\Ollama\models\manifests\registry.ollama.ai\library\

输出显示确实有三个模型:

  • nomic-embed-text
  • qwen2.5-coder
  • qwen3-vl

5.6 解决方案:通过 NSSM 设置环境变量

Ollama 支持通过环境变量 OLLAMA_MODELS 指定模型目录。我们需要告诉服务去 D 盘找模型。

操作步骤:

以管理员身份打开 CMD:

powershell

# 编辑 Ollama 服务配置
nssm edit Ollama

在弹出的窗口中:

  1. 切换到 "Environment" 选项卡

  2. 在大的文本输入框中,另起一行输入:

    text

    OLLAMA_MODELS=D:\AiAgent\Ollama\models
    
  3. 确保 "Replace default environment (srvany compatible)" 复选框未勾选

  4. 点击 "Exit Service" 保存并关闭窗口

📌 重要注释:

  • 格式必须是 变量名=变量值,用 = 连接,中间不要有空格
  • 末尾不要加多余的反斜杠 \
  • "Exit Service" 按钮在这里的含义是"保存配置并退出",不是停止服务
  • 不要勾选 "Replace default environment",否则会清空其他必要的环境变量

重启服务:

powershell

# 重启服务使配置生效
nssm restart Ollama

5.7 备选方案:注册表修改

如果 NSSM 界面操作不顺利,可以直接修改注册表:

  1. 按 Win + R,输入 regedit,回车

  2. 导航到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ollama

  3. 在右侧空白处右键 -> 新建 -> 字符串值,命名为 Environment

  4. 双击 Environment,在数值数据中输入:

    text

    OLLAMA_MODELS=D:\AiAgent\Ollama\models
    
  5. 关闭注册表编辑器,重启服务:nssm restart Ollama

📌 注册表注释:Windows 服务的配置存储在注册表中,直接修改 Environment 键值可以达到与 NSSM 界面相同的效果。


6. 最终验证

6.1 检查模型列表

powershell

ollama list

成功输出:

text

NAME                       ID              SIZE      MODIFIED
nomic-embed-text:latest    0a109f422b47    274 MB    2 weeks ago
qwen2.5-coder:1.5b-base    02e0f2817a89    986 MB    2 weeks ago
qwen3-vl:8b                901cae732162    6.1 GB    2 weeks ago

6.2 测试 API

powershell

# 测试 Ollama API 是否正常响应
curl http://localhost:11434/api/tags

返回 JSON 格式的模型列表,说明服务完全正常。

6.3 VSCode Continue 配置

如果 VSCode 仍报找不到模型,检查 Continue 配置文件:

  1. 在 VSCode 中按 Ctrl + Shift + P
  2. 输入 Continue: Open Settings(或 Continue: Open Config.json)
  3. 确认模型配置:

json

{
  "models": [
    {
      "title": "Qwen3-VL",
      "provider": "ollama",
      "model": "qwen3-vl:8b",   // 必须与 ollama list 显示的名称完全一致
      "apiBase": "http://localhost:11434"
    }
  ]
}

📌 配置注释:model 字段的值必须和 ollama list 输出的名称完全一致(包括版本标签如 :8b、:latest 等)。


7. 总结与避坑指南

7.1 核心知识点

概念 说明
ollama serve 启动服务进程,注意不是 server
ollama list 查看已安装模型,受 OLLAMA_MODELS 环境变量影响
OLLAMA_MODELS 指定模型存储目录,解决服务找不到模型的问题
NSSM 将任意 .exe 包装为 Windows 系统服务
系统变量 vs 用户变量 系统变量对所有账号生效,用户变量只对当前账号生效
Local System 账户 系统服务运行的账户,与用户账户环境隔离

7.2 常用 NSSM 命令速查

命令 说明
nssm install <服务名> 安装服务(弹出图形化配置)
nssm edit <服务名> 编辑服务配置
nssm start <服务名> 启动服务
nssm stop <服务名> 停止服务
nssm restart <服务名> 重启服务
nssm status <服务名> 查看服务状态
nssm remove <服务名> confirm 删除服务

7.3 避坑指南

  1. 命令拼写:ollama serve 不是 ollama server
  2. 管理员权限:安装和启动服务必须以管理员身份运行 CMD
  3. 环境变量格式:OLLAMA_MODELS=D:\path\to\models,用 = 连接,无空格,无末尾反斜杠
  4. 服务名大小写:Windows 服务名不区分大小写,但建议统一使用(如 Ollama)
  5. NSSM 界面的 "Exit Service":这是"保存并退出"的意思,不是停止服务
  6. 模型名完全匹配:Continue 配置中的模型名必须与 ollama list 显示的完全一致

7.4 一句话总结

Ollama 变成系统服务后,因为账户环境不同找不到模型。通过 NSSM 设置环境变量 OLLAMA_MODELS=D:\AiAgent\Ollama\models,告诉服务去正确的位置加载模型,问题解决。


📎 附录:完整命令清单

powershell

# ===== 1. 启动 Ollama 服务(排查用) =====
# 注意:是 serve 不是 server
ollama serve

# ===== 2. 下载 NSSM =====
# 从 https://nssm.cc/release/nssm-2.24-101-g897c7ad.zip 下载

# ===== 3. 添加 NSSM 到系统 PATH =====
# 系统变量 -> Path -> 新建 -> D:\Installer\Tools\NSSM\win64

# ===== 4. 验证 NSSM 配置 =====
where nssm
# 预期输出:D:\Installer\Tools\NSSM\win64\nssm.exe

# ===== 5. 安装 Ollama 服务(管理员 CMD) =====
nssm install Ollama
# 图形化配置:
#   Path: D:\AiAgent\Ollama\ollama.exe
#   Startup directory: D:\AiAgent\Ollama\
#   Arguments: serve

# ===== 6. 启动服务 =====
nssm start Ollama

# ===== 7. 查看服务状态 =====
nssm status Ollama
# 预期输出:SERVICE_RUNNING

# ===== 8. 设置模型目录环境变量 =====
nssm edit Ollama
# Environment 选项卡 -> 输入:OLLAMA_MODELS=D:\AiAgent\Ollama\models
# 点击 "Exit Service" 保存

# ===== 9. 重启服务使配置生效 =====
nssm restart Ollama

# ===== 10. 验证模型加载成功 =====
ollama list
# 应该显示已安装的三个模型

# ===== 11. 测试 API =====
curl http://localhost:11434/api/tags
# 返回 JSON 格式的模型列表

🔗 相关资源


本文记录于 2026 年 8 月 29 日,基于 Windows 11 + Ollama 0.32.6 + NSSM 2.24-101 环境。


✅ 检查清单

  • ☑

    Ollama 服务已安装并设置为开机自启

  • ☑

    NSSM 已添加到系统 PATH

  • ☑

    环境变量 OLLAMA_MODELS 已配置到服务中

  • ☑

    三个模型已成功加载

  • ☑

    API 测试通过

  • ☑

    VSCode Continue 可正常连接


如果按照本文操作后仍有问题,请检查:

  1. 所有命令是否以管理员权限运行
  2. 路径中的目录名是否与你的实际路径一致
  3. ollama list 中的模型名是否与 Continue 配置中的完全一致
posted @ 2026-09-10 11:02  孤沉  阅读(82)  评论(0)    收藏  举报