Ubuntu 25.04 上部署 LM Studio 服务

文章更新于 2025.11.10,请参阅评论。

引言

本文将介绍如何在 Ubuntu 25.04 环境中将 LM Studio 作为服务部署(可能也适用于其他版本)。

LM Studio 作为服务器不仅可以加载语言模型并单独使用它们,还可以组织 API 以连接外部服务。同时,可以通过停止服务并将应用程序以常规方式启动来恢复到本地工作模式。

您将能够:

  • 使用不同的语言模型 (按需卸载未使用模型)
  • 将您的应用程序或插件连接到 API

下载

从网站下载 AppImage(本文讨论的是 Linux 应用程序):

将文件放置在 ~/llm 目录中,并使其可执行:

chmod +x ~/llm/LM-Studio-0.3.27-4-x64.AppImage

撰写本文时,该版本是最新的。

headless

只有在远程工作时才需要以服务形式部署。 立即确定:

a) 服务器(PC/笔记本电脑等)有图形界面并且用户至少已经登录过 UI 一次。 或者如果您在 UI 中工作,请跳过此步骤。

b) 服务器没有图形界面或用户从未登录过 UI。 在这种情况下,需要执行以下几个额外的命令一次:

sudo loginctl enable-linger $USER

此命令允许您在不进入图形界面的情况下使用环境工作

loginctl show-user ivan | grep Linger

此命令显示配置状态(活动或不可用):

Linger=yes

检查没有阻止任何事情发生的命令(输出应为某种可理解的状态,例如 degraded,但不允许出现错误):

systemctl --user status
systemctl --user is-system-running

systemd

如果您还没有决定使用 headless 模式(无图形界面),请跳过此步骤。

如果自动启动是您的首选,那么请创建一个脚本:

~/.config/systemd/user/lm-studio.service

并且假设 LM Studio 可执行文件位于以下地址:

%HOME/llm/LM-Studio-0.3.27-4-x64.AppImage

内容如下:

[Unit]
Description=LM Studio Service
After=network.target

[Service]
Type=simple

ExecStart=/usr/bin/xvfb-run -a --server-args="-screen 0 1920x1080x24" %h/llm/LM-Studio-0.3.27-4-x64.AppImage --run-as-service
ExecStartPost=/bin/bash -c 'sleep 10 && exec lms server start'

Restart=always
RestartSec=10
Environment=PATH=%h/.local/bin:/usr/local/bin:/usr/bin:/bin:%h/.lmstudio/bin
Environment=DISPLAY=:99
WorkingDirectory=%h/llm

[Install]
WantedBy=default.target

该脚本由两部分组成:

  • 启动应用程序
  • 启动服务器端

本质上,这种脚本是脆弱的,因为它由不了解彼此状态的两部分组成。 请勿在生产环境中使用此类解决方案。 而且 LM Studio 也不要使用,因为 VLLM 快得多。

请注意,此处将安装 systemd 为用户而不是 root。

执行常规操作以启动脚本(应用更改并启用自动启动):

systemctl --user daemon-reload
systemctl --user enable --now lm-studio.service

启动

systemctl --user status lm-studio.service

服务现在应该保持沉默,因为尚未启动过它。

systemctl --user start lm-studio.service

然后检查服务器状态:

lms server status

它应该正在监听 1234 端口。

严格来说,您应该首先使用 LM Studio 的 UI 来设置所需的参数并加载模型。 以及将侦听地址从 127.0.0.1 更改为 0.0.0.0,以便组织外部 API 连接(潜在危险,因为首先安装加密和授权)。

CURL

检查服务器端点:

curl -v http://127.0.0.1:1234/v1/models

您应该会收到可用的模型:

*   Trying 127.0.0.1:1234...
* Connected to 127.0.0.1 (127.0.0.1) port 1234
* using HTTP/1.x
> GET /v1/models HTTP/1.1
> Host: 127.0.0.1:1234
> User-Agent: curl/8.12.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
<
{
  "data": [
    {
      "id": "nvidia_nvidia-nemotron-nano-9b-v2",
      "object": "model",
      "owned_by": "organization_owner"
    },
    {
      "id": "text-embedding-qwen3-embedding-0.6b",
      "object": "model",
      "owned_by": "organization_owner"
    },
    {
      "id": "qwen/qwen3-8b",
      "object": "model",
      "owned_by": "organization_owner"
    },
    {
      "id": "google/gemma-3-4b",
      "object": "model",
      "owned_by": "organization_owner"
    }
  ],
  "object": "list"
* Connection #0 to host 127.0.0.1 left intact

REST API

现在您可以连接到您的 REST API,使用以下端点:

GET  http://127.0.0.1:1234/v1/models
POST http://127.0.0.1:1234/v1/chat/completions
POST http://127.0.0.1:1234/v1/completions
POST http://127.0.0.1:1234/v1/embeddings

在 0.3.31-2 和 0.3.31-7 版本之间,发生了一个变化,它强制将监听接口从外部更改为 127.0.0.1 并禁用 CORS。

由于 LM Studio 支持 HTTP 服务器配置的 热重载(至少在修改 corsnetworkInterface 时),因此可以在不重启的情况下进行更改(仅执行一次):

%h/.lmstudio/.internal/http-server-config.json
jq '.cors = true | .networkInterface = "0.0.0.0"' ~/.lmstudio/.internal/http-server-config.json | sponge ~/.lmstudio/.internal/http-server-config.json

请注意,sponge 包含在 moreutils 包中,请确保已安装。

要使更改自动发生,请修改启动脚本:

$HOME/.config/systemd/user/lm-studio.service
[Unit]
Description=LM Studio Service
After=network.target

[Service]
Type=simple

ExecStart=/usr/bin/xvfb-run -a --server-args="-screen 0 1920x1080x24" %h/llm/lmstudio --run-as-service

# 1. 启动 HTTP 服务器
ExecStartPost=/bin/bash -c 'sleep 15 && exec lms server start'

# 2. 应用所需的设置(在服务器启动后)
ExecStartPost=/bin/bash -c ' \
  sleep 2 && \
  jq \".cors = true | .networkInterface = \\\"0.0.0.0\\\"\n     \\\"%h/.lmstudio/.internal/http-server-config.json\\\" \
     > \\\"%h/.lmstudio/.internal/http-server-config.json.tmp\\\" && \
  mv \\\"%h/.lmstudio/.internal/http-server-config.json.tmp\\\" \
     \\\"%h/.lmstudio/.internal/http-server-config.json\\\"\n'

Restart=always
RestartSec=10
Environment=PATH=%h/.local/bin:/usr/local/bin:/usr/bin:/bin:%h/.lmstudio/bin
Environment=DISPLAY=:99
WorkingDirectory=%h/llm

[Install]
WantedBy=default.target

应用更改并重启服务(无需 sudo):

systemctl --user daemon-reload
systemctl --user stop lm-studio.service
systemctl --user start lm-studio.service

请注意对