搭建采用的方式为免费版:(没钱买公网IP,没钱买云服务器)

  • VMware (产品:VMware® Workstation 17 Pro 版本17.6.4 build-24832109)
  • Windows服务器(镜像文件:cn_windows_server_2016_updated_feb_2018_x64_dvd_11636703.iso)
  • EMQX服务器(Windows版本:emqx-5.3.0-windows-amd64.zip)
  • ollama(本地版本:qwen2.5:1.5b)
  • pip(python-3.12.9-amd64.exe)
  • MQTTx(测试用)

安装VMware

直接安装就行,注意内存分配和网络连接模式,我采用的是校园网,桥接模式连不上网,就用了NAT模式

相关配置

在这里插入图片描述

注意

== 网络适配器:选择 NAT → 可以让局域网设备访问 ,我用的校园网,桥接模式连不上网,无法通过校园网认证==

安装Windows服务器

步骤

  1. 打开 VMware Workstation Player
  2. 点击 Create a New Virtual Machine / 创建新虚拟机
  3. 选择 Installer disc image file (ISO) → 浏览到你的 ISO
    文件:cn_windows_server_2016_updated_feb_2018_x64_dvd_11636703.iso
  4. 点击 Next
  5. 选择 Microsoft Windows → 版本选择 Windows Server 2016 → Next
  6. 输入虚拟机名称
  7. 设置虚拟机存储位置(默认即可) → Next
  8. 设置磁盘容量(推荐 60GB 或更大)
  9. 选择 Store virtual disk as a single file → Next
  10. 点击 Customize Hardware
  11. 内存:至少 8GB(如果电脑够大,可 16GB)
  12. CPU:至少 4 核
  13. 网络适配器:选择 NAT → 可以让局域网设备访问(校园网需要选择NAT)
  14. 确认其他设置 → Close
  15. 点击 Finish / 完成
  16. 选中你的虚拟机 → 点击 Play virtual machine / 开始
  17. 选择语言和时间 → 点击 Next
  18. 点击 Install Now
  19. 选择版本(Windows Server 2016 Standard 或 Datacenter,带 GUI 版本)
  20. 勾选 “Desktop Experience”(带图形界面,便于操作)
  21. 点击 Next → Accept license → Next
  22. 选择 Custom: Install Windows only
  23. 选择虚拟磁盘 → Next → 系统开始安装

相关配置

第 1 步:配置初步网络设置:

配置网络(NAT 模式下的静态 IP 设置)
NAT 模式下,你的虚拟机 通过 VMware 的虚拟网卡(VMnet8)共享主机的网络。
校园网环境下,NAT 是最稳定、最方便的方式。
确保服务器有:

  • 固定 IP(但要设置在 NAT 网段内)
  • 可正常上网
  • 不会与主机或其他设备冲突

第 2 步:查看 NAT 网络的网段,在 Windows 主机上查看

打开 VMware Workstation
左上角:编辑(Edit)
点击:虚拟网络编辑器 (Virtual Network Editor)
找到:VMnet8(这是 NAT 网络)
记下以下信息:
VMnet8 的子网 IP(Subnet IP) → 如:192.168.238.0
子网掩码(Subnet Mask) → 一般是 255.255.255.0
网关(Gateway IP) → 一般是 .2 → 如:192.168.238.2

第 3 步:给服务器配置静态 IP(在服务器内)

进入 Windows Server 2016 →右下角网络图标 → 打开网络和共享中心 →更改适配器设置 →
右键你的网卡(通常叫 Ethernet)→ 属性 →
双击 Internet 协议版本 4 (TCP/IPv4)

项目 填写示例
IP 地址 192.168..(自己定,只要不冲突)
子网掩码 255.255.255.0
默认网关 192.168..(必须与 VMnet8 网关一致)
首选 DNS 8.8.8.8
备用 DNS 114.114.114.114

注意

网络适配器的选择和密钥的填写
❗ 不能随便设置成校园网 IP
因为 NAT 不是桥接,虚拟机不能直接接入校园网真实网络,只能在 VMware 的虚拟 NAT 网段内使用。
❗ IP 不能与主机冲突
只要不要用 .1、.2、.254 等常用保留 IP 就没问题。
例如使用 .100 .120 都行。
❗ DNS 必须填公网 DNS
否则你会出现 “能 ping 通 IP 但无法上网”。

验证

设置好后,在 Windows Server 2016 的命令提示符输入:
ping 192.168.**.**ping 通 VMware 网关
ping 8.8.8.8 能 ping 通(网络正常)
ping www.baidu.com若能通 → DNS 正常,网络 OK。

在服务器安装EMQX服务器

步骤

第 1 步:解压 EMQX 包

第 2 步: 启动 EMQX

进入 EMQX 的 bin 目录:C:\EMQX\emqx\bin
CMD运行
cd C:\EMQXServe\emqx-5.3.0-windows-amd64\bin
启动 EMQX
.\emqx start
查看 EMQX 状态
.\emqx status
创建管理员账号
.\emqx admins add myadmin mypassword

第 3 步:查看 EMQX 是否正在运行

CMD运行
输入:emqx ctl status
正常输出类似:Node 'emqx@127.0.0.1' is started emqx 5.3.0 is running

第 4 步:测试端口是否开启

在 cmd 输入:netstat -ano | findstr 1883
看到 TCP 1883 已经监听:TCP 0.0.0.0:1883 LISTENING xxxx
这是 MQTT 端口。
测试 Dashboard(管理界面)端口:netstat -ano | findstr 18083
应该看到:TCP 0.0.0.0:18083 LISTENING

第 5 步:打开 EMQX Dashboard(管理界面)

浏览器输入:http://127.0.0.1:18083
默认账号密码:
用户:admin
密码:public

第 6 步:允许局域网访问 EMQX

默认配置 EMQX 只能本机访问,局域网访问需要确保:
Windows 防火墙允许端口 1883 & 18083
打开防火墙 → “高级设置” → “入站规则” → 新建规则:

类型:端口
TCP
端口:1883, 18083
动作:允许
名称:EMQX

第 7 步: NAT 模式下实现局域网访问(端口转发)

保持 NAT 模式才能上网,可以通过 VMware NAT 端口转发 来让局域网设备访问 EMQX:
打开 VMware NAT 配置
在宿主机(你的物理电脑)打开 VMware → 编辑 → 虚拟网络编辑器
选择 VMnet8 (NAT) → 点击 NAT 设置 → 端口转发
添加端口转发规则
假设:
虚拟机 EMQX IP:192.168.*.**
MQTT 端口:1883
Dashboard 端口:18083
添加规则

名称 协议 宿主机端口 虚拟机 IP 虚拟机端口
MQTT TCP 1883 192.168.*.** 1883
Dashboard TCP 18083 192.168.*.** 18083

第 8 步:Windows 防火墙放行端口

在虚拟机和宿主机都需要放行端口(TCP 1883 & 18083):

  1. 打开防火墙高级设置
    登录虚拟机 Windows Server 2016
    点击 开始菜单 → 控制面板 → 系统和安全 → Windows 防火墙
    点击左侧 高级设置 → 打开 Windows 防火墙高级安全 窗口
  2. 创建新的入站规则
    在左侧栏选择 入站规则(Inbound Rules)
    在右侧点击 新建规则(New Rule)
  3. 选择规则类型
    规则类型选择 端口(Port) → 点击 下一步
    选择 TCP
    在 特定本地端口(Specific local ports) 输入:
    1883,18083
    1883 → MQTT
    18083 → Dashboard
    点击 下一步
  4. 设置操作
    选择 允许连接(Allow the connection)
    点击 下一步
  5. 应用规则到配置文件
    勾选所有配置文件:
    域(Domain)
    专用(Private)
    公用(Public)
    点击 下一步
  6. 命名
    在名称栏输入:EMQX
    在描述栏写上:允许 EMQX MQTT 和 Dashboard 端口
    点击 完成(Finish)

第 9 步: 测试端口监听(测试防火墙规则是否生效)

在虚拟机 CMD 执行:
netstat -ano | findstr 1883
netstat -ano | findstr 18083
输出 LISTENING → EMQX 正常

第 10 步:测试宿主机访问

获取宿主机局域网 IP,例如 192.168.1.50
浏览器访问 Dashboard:
http://192.168.1.50:18083
MQTT 客户端连接:
Host: 192.168.1.50
Port: 1883
用户名/密码:EMQX 创建的账号
端口转发生效后,局域网内其他设备也能访问这个宿主机 IP。

验证

第 1 步: 测试 MQTT 端口 1883 netstat -ano | findstr 1883

出现类似内容表示 EMQX 正常监听:TCP 0.0.0.0:1883 LISTENING XXXX

第 2 步: 测试 Dashboard 端口 18083netstat -ano | findstr 18083

正常输出类似:TCP 0.0.0.0:18083 LISTENING XXXX

服务器部署ollama

资源 最低需求 虚拟机
RAM ≥ 4GB 8G
CPU 任意 x86 (无 GPU 也能跑) 2
硬盘空间 约 1.8GB~2GB 60G

ollama各版本大小

模型 大小 能力 适合
tinydolphin ~25 MB 最轻模型,回答简单问题 极低配置
qwen2.5:0.5b ~300 MB 中文好,简单问答 推荐
qwen2.5:1.5b ~1.1 GB 更强一些 低配也能跑
llama3.2:1b ~1 GB 英文好、性能高 低配可运行

相关配置

在虚拟机 Windows Server 安装 Ollama

第 1 步:下载 Windows 版 Ollama

下载后运行安装程序(.exe)。
安装完成后,打开 PowerShell(管理员) 输入:
ollama --version
如果出现版本号(例如 0.1.x),说明安装成功。

第 2 步: Ollama 安装 Qwen2.5-1.5B 指令

到虚拟机里运行:
ollama pull qwen2.5:1.5b
启动测试:
ollama run qwen2.5:1.5b
出现模型回复说明 Ollama 部署成功。

第 3 步: 确认 Ollama API 是否正常运行

使用 HTTP 测试工具
你虚拟机里应当有浏览器,直接访问:
http://127.0.0.1:11434/api/tags
出现:

[{"name":"qwen2.5:1.5b","model":"qwen2.5:1.5b","modified_at":"**********","details":{"parent_model":"","format":"gguf","family":"qwen2","families":["qwen2"],"parameter_size":"1.5B","quantization_level":"Q4_K_M"}}]}

即成功

ollama与嵌入式设备通信

注意

让ollama和EMQX通信需要配置EMQX的webhook规则,但是该版本的 WebHook 插件 UI 里 没有“Body Template(请求体模板)”输入框。EMQX 5.x 里的 WebHook 配置结构已经简化,只能做最基本的事件回调,不支持直接自定义 JSON Body。

桥接器

使用的 EMQX 5.3 免费版 / 社区版,确实 规则动作里没有“HTTP WebHook”选项。
规则引擎无法直接发 HTTP 请求给 Ollama
不能通过 EMQX 内置 WebHook 实现 “MQTT → Ollama API → MQTT”
必须换做 “外部桥接程序(Python 脚本)订阅 MQTT → 调用 Ollama → 发布 MQTT” 的方式

安装pip

第 1 步:下载 Python

下载 Windows x64 可执行安装程序(例如 Python 3.12.x 最新版本)
保存到虚拟机本地

第 2 步:安装 Python

双击安装程序运行
勾选 “Add Python 3.x to PATH”(非常重要,否则 PowerShell 找不到 pip)
选择 “Customize installation” → 下一步
勾选 “pip”(默认会勾选)
点击 Install
安装完成后,点击 “Disable path length limit”(推荐)
完成安装

第 3 步:验证 Python 和 pip 是否可用

打开 PowerShell 输入:
python --version
pip --version
如果输出类似:
Python 3.12.0
pip 23.2.1
说明安装成功。

第 4 步:安装依赖库

在 PowerShell 输入:
pip install paho-mqtt requests
等待安装完成,会显示:
Successfully installed paho-mqtt requests

第 5 步:测试 Python 能否调用 MQTT

在 PowerShell 输入:
import paho.mqtt.client as mqtt
import requests
print("库导入成功")
如果输出:
库导入成功
说明 Python + pip + 依赖环境都准备好了。
创建桥接器 Python 脚本
在虚拟机创建文件夹,例如:
C:\EMQXBridge\
新建文件:
C:\EMQXBridge\mqtt_ollama_bridge.py

桥接程序

将下面完整代码复制进去mqtt_ollama_bridge.py: 包含三个关键字段的Jason格式

import paho.mqtt.client as mqtt
import requests
import json

# ========== 配置 ==========
MQTT_BROKER = "192.168.###.###"  # 你自己的虚拟机 EMQX IP
MQTT_PORT = 1883
TOPIC_REQUEST = "ai/request"
TOPIC_RESPONSE = "ai/response"
OLLAMA_URL = "http://127.0.0.1:11434/api/generate" # 你自己的回环地址,或者使用IP地址也行
MODEL_NAME = "qwen2.5:1.5b"
# ==========================

# MQTT 消息回调
def on_message(client, userdata, msg):
    payload_str = msg.payload.decode()
    print(f"[MQTT] 收到消息: {payload_str}")

    # 尝试解析 JSON
    try:
        data_json = json.loads(payload_str)
        prompt = data_json.get("msg", payload_str)
    except:
        prompt = payload_str

    # 调用 Ollama API
    request_data = {
        "model": MODEL_NAME,
        "prompt": prompt,
        "stream": False
    }

    try:
        resp = requests.post(OLLAMA_URL, json=request_data)
        resp_json = resp.json()

        # 只保留需要的字段
        filtered_json = {
            "model": resp_json.get("model", MODEL_NAME),
            "created_at": resp_json.get("created_at", ""),
            "response": resp_json.get("response", "")
        }

        print(f"[Ollama] 过滤后的 JSON: {json.dumps(filtered_json, ensure_ascii=False)}")

        # 发布回 MQTT
        client.publish(TOPIC_RESPONSE, json.dumps(filtered_json, ensure_ascii=False))

    except Exception as e:
        print(f"[Error] 调用 Ollama 出错: {e}")

# 初始化 MQTT 客户端
client = mqtt.Client()
client.on_message = on_message
client.connect(MQTT_BROKER, MQTT_PORT, 60)
client.subscribe(TOPIC_REQUEST)

print("桥接程序已启动,等待 MQTT 消息…")
client.loop_forever()

第 6 步:运行桥接器

在 PowerShell 中执行:
python C:\EMQXBridge\mqtt_ollama_bridge.py
你会看到:
桥接程序已启动,等待 MQTT 消息…
说明桥接器已正常运行。

第 7 步:物理机 MQTTx 测试

连接 EMQX:
地址:192.168.*.**
端口:1883
订阅主题:
ai/response
发布主题:
ai/request
输入框输入:

{
  "msg": "你叫什么名字?"
}

在 MQTTx 中看到 Ollama 回复:

{
  "model": "qwen2.5:1.5b",
  "created_at": "*********",
  "response": "我是阿里云研发的超大规模语言模型,我叫通义千问。如果您有任何问题或需要帮助,请随时告诉我,我会尽力提供支持和解答。"
}

MQTTx端
在这里插入图片描述
虚拟服务器ollama端
在这里插入图片描述
EMQX端
在这里插入图片描述
在这里插入图片描述

完成

在进行通信时,需要登录EMQX服务器
同时,将桥接器运行 python C:\EMQXBridge\mqtt_ollama_bridge.py
打开ollamaollama run qwen2.5:1.5b
配置好MQTTx
嵌入式进行MQTT通信应该都会,不写了,累了
有的ip可能没消掉,如果有大佬的话别搞我啊,我还没玩好,谢谢大佬

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐