MiGPT域名访问配置:通过公网远程控制
痛点与解决方案
你是否还在为只能在局域网内控制小爱音箱而烦恼?当你出差在外想远程启动家中设备,或在公司想提前让小爱音箱准备好迎接你的归来时,却发现无法访问?本文将通过域名解析+端口映射+反向代理三步方案,教你实现MiGPT的公网远程控制,让智能家居真正突破空间限制。
读完本文你将掌握:
- 局域网服务暴露公网的完整配置流程
- Docker容器端口映射与动态DNS设置
- Nginx反向代理与HTTPS加密配置
- 远程访问的安全加固方案
准备工作清单
| 前置条件 | 具体要求 | 检查方法 |
|---|---|---|
| 公网环境 | 拥有公网IP或通过内网穿透服务 | 访问IP138查看公网IP |
| 域名资源 | 已备案域名(推荐阿里云/腾讯云) | 域名管理平台确认备案状态 |
| 设备权限 | 路由器管理员权限 | 登录路由器管理后台测试 |
| 软件环境 | Docker 20.10+ 或 Node.js 20+ | docker -v 或 node -v 命令验证 |
| 项目文件 | 完整的MiGPT项目代码 | git clone https://gitcode.com/GitHub_Trending/mi/mi-gpt |
局域网服务配置
Docker容器端口映射
MiGPT默认未暴露网络端口,需通过Docker运行时手动映射:
# 基础运行命令(仅局域网访问)
docker run -d --name migpt \
--env-file $(pwd)/.env \
-v $(pwd)/.migpt.js:/app/.migpt.js \
idootop/mi-gpt:latest
# 添加端口映射(公网访问必备)
docker run -d --name migpt \
--env-file $(pwd)/.env \
-v $(pwd)/.migpt.js:/app/.migpt.js \
-p 3000:3000 \ # 主机端口:容器端口
--restart=always \ # 自动重启保障
idootop/mi-gpt:latest
⚠️ 注意:若使用Node.js直接启动,需修改启动脚本添加端口监听(项目暂不支持,推荐Docker方案)
第三方服务地址配置
修改.env文件配置公网可访问的服务地址:
# .env 文件配置示例
TTS_BASE_URL=http://你的域名:3000/api # 替换为实际域名和端口
# 或使用HTTPS(推荐)
TTS_BASE_URL=https://你的域名/api
网络穿透配置
路由器端口转发
以小米路由器为例,配置步骤如下:
关键参数说明:
- 外部端口:公网访问使用的端口(建议避开80/443等常用端口)
- 内部IP:运行MiGPT设备的局域网IP(可在路由器DHCP列表中固定)
- 协议选择:TCP(MiGPT通信基于TCP协议)
动态DNS配置(无固定公网IP方案)
当宽带没有固定公网IP时,需配置动态DNS:
- 在域名解析平台添加A记录指向当前公网IP
- 在路由器中启用DDNS功能(以华为路由器为例):
推荐使用阿里云解析API,配置示例:
# 安装阿里云CLI工具
npm install -g aliyun-cli
# 配置自动更新脚本(保存为ddns-update.sh)
#!/bin/bash
NEW_IP=$(curl -s http://ip138.com | grep -oP '\d+\.\d+\.\d+\.\d+')
aliyun alidns UpdateDomainRecord \
--DomainName yourdomain.com \
--RecordId 你的解析记录ID \
--RR @ \
--Type A \
--Value $NEW_IP
域名与SSL配置
Nginx反向代理设置
创建Nginx配置文件/etc/nginx/conf.d/migpt.conf:
server {
listen 80;
server_name migpt.yourdomain.com; # 替换为实际域名
# 强制HTTPS跳转
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name migpt.yourdomain.com;
# SSL证书配置(Let's Encrypt示例)
ssl_certificate /etc/letsencrypt/live/migpt.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/migpt.yourdomain.com/privkey.pem;
# 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 代理配置
location / {
proxy_pass http://127.0.0.1:3000; # 转发到MiGPT端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# API接口限流(可选)
location /api {
limit_req zone=migpt burst=10 nodelay;
proxy_pass http://127.0.0.1:3000/api;
}
}
SSL证书申请
使用Let's Encrypt免费证书:
# 安装Certbot
apt install certbot python3-certbot-nginx -y
# 获取证书并自动配置Nginx
certbot --nginx -d migpt.yourdomain.com
安全加固措施
访问控制配置
修改.migpt.js添加IP白名单限制:
// .migpt.js 安全配置部分
module.exports = {
// ...其他配置
security: {
allowedIPs: [
"192.168.1.*", // 允许局域网访问
"你的常用公网IP" // 允许指定公网IP访问
],
apiKey: "生成随机字符串作为访问密钥" // 用于API访问认证
}
}
防火墙规则
# 设置UFW防火墙规则
ufw allow 22/tcp # 保留SSH端口
ufw allow 443/tcp # 允许HTTPS
ufw allow 3000/tcp # 仅允许本地访问MiGPT端口
ufw default deny incoming
ufw enable
远程控制测试
功能验证清单
| 测试项 | 测试方法 | 预期结果 |
|---|---|---|
| 基础连接 | curl https://migpt.yourdomain.com/api/health | 返回{"status":"ok"} |
| 语音指令 | 通过手机4G网络发送"小爱同学,查询天气" | 音箱正确响应天气信息 |
| TTS服务 | 调用第三方TTS接口 | 听到清晰的自定义语音回复 |
| 安全防护 | 使用未授权IP访问 | 返回403 Forbidden |
常见问题排查
总结与展望
通过本文配置,你已成功将MiGPT服务暴露至公网,实现随时随地的远程控制。关键步骤包括:
- Docker容器端口映射确保服务可访问
- 路由器端口转发打通公网通道
- Nginx反向代理提供域名访问和SSL加密
- 多层次安全防护保障服务安全
未来MiGPT将支持内置Web管理界面和更完善的远程控制功能,敬请关注项目更新。
🔔 如果你觉得本文有帮助,请点赞收藏,并关注后续的「MiGPT高级应用系列」教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



