在Ubuntu服务器部署开源小智ESP-32后端服务教程

本项目为开源智能硬件项目 xiaozhi-esp32 提供后端服务。根据 小智通信协议 使用 Python 实现。该项目是开发AI语音助手、AI陪伴、AI玩具的高效捷径!

后端部署

新建和激活一个虚拟环境

conda create -n xiaozhi-esp32-server python=3.10 -y && conda activate xiaozhi-esp32-server

为虚拟环境添加conda国内清华源通道

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge

安装音频处理库

conda install libopus -y
conda install ffmpeg -y

克隆项目GitHub库和安装项目

克隆库文件到服务器

git clone https://github.com/xinnan-tech/xiaozhi-esp32-server.git

安装项目

进入到项目根目录

cd xiaozhi-esp32-server/main/xiaozhi-server

设置pip的国内源

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

安装依赖

pip install -r requirements.txt

下载模型和配置参数

下载语音识别模型

切换到模型目录

cd /home/caovan/xiaozhi-esp32-server/main/xiaozhi-server/models/SenseVoiceSmall

下载模型

wget https://modelscope.cn/models/iic/SenseVoiceSmall/resolve/master/model.pt

修改配置文件

切换到配置文件所在目录

cd /home/caovan/xiaozhi-esp32-server/main/xiaozhi-server

新建一个文件夹data

mkdir data

将config.yaml文件复制到新文件data中,并且更名为“.config.yaml”

cp config.yaml data/.config.yaml

修改配置文件参数

vim data/.config.yaml

主要是设置各种模型的URL和api_key以及模型名称那些,如果要对服务器的IP做域名解析,这里还可以设置一下server的端口,ip一定要是“0.0.0.0”,设置好之后保存退出编辑;

启动后端服务

切换到后端app.py文件所在目录

cd /home/caovan/xiaozhi-esp32-server/main/xiaozhi-server

如果此时不在虚拟环境的激活状态,记得要先激活虚拟环境

conda activate xiaozhi-esp32-server

运行后端文件

python app.py

这里也可以写一个sh脚本,将后端服务在后台运行,避免关掉终端后服务停止。


管理后台前端服务

修改配置文件

进入到前端目录

cd /home/caovan/xiaozhi-esp32-server/main/manager-web

编辑配置文件

vim vue.config.js

下面是我的文件修改之后的内容,供参考:

const {defineConfig} = require('@vue/cli-service');
const dotenv = require('dotenv');

// 确保加载 .env 文件
dotenv.config();

module.exports = defineConfig({
    devServer: {
        host: '0.0.0.0',
        port: 10003,
        allowedHosts: 'all',
        // Bug 修复:将代理配置为环境变量中定义的 API 基础 URL
        proxy: {
            '/xiaozhi-esp32-api': {
                target: process.env.VUE_APP_API_BASE_URL || 'http://localhost:8002', // 后端 API 的基础 URL
                changeOrigin: true, // 允许跨域
                // pathRewrite: {
                //   '^/api': '', // 路径重写
                // },
            },
            '/ws': {
                target: 'ws://127.0.0.1:10002',  // 后端 WebSocket 地址
                ws: true,  // 启用 WebSocket 代理
                changeOrigin: true,
            },
        },
        client: {
            overlay: false,
            webSocketURL: 'wss://xiaozhi.caovan.cn/ws',
        },
    },
});

修改完成之后保存退出编辑!

安装前端依赖与运行前端

运行下面的命令安装前端依赖

npm install

运行前端

npm run serve

运行成功后会显示如下的内容:

DONE Compiled successfully in 5387ms 23:23:55


App running at:
- Local: http://localhost:10003/ 
- Network: http://192.168.1.2:10003/

Note that the development build is not optimized.
To create a production build, run npm run build.

服务器环境配置

修改nginx配置

运行下面的命令编辑NGINX的配置文件

sudo vim /etc/nginx/sites-available/default

添加如下的内容

# 小智AI配置文件
server {
server_name xiaozhi.caovan.cn;

# 代理所有前端请求到开发服务器
location /xiaozhi/v1/ {
proxy_pass http://192.168.1.2:10002;
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;

# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

# 调整超时时间(可选)
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}

# SSL配置(保持不变)
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/xiaozhi.caovan.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xiaozhi.caovan.cn/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

为域名添加SSL证书

在这一步之前,你首先要将域名解析到服务器的IP地址,关于解析域名的方法,这里就不多做介绍,因为我相信看这篇文章看到这里的人应该对解析域名这种事已经了如指掌了!

安装 Certbot 工具

安装 Certbot 和 Nginx 插件

sudo apt update
sudo apt install certbot python3-certbot-nginx -y

验证 Certbot 是否安装成功

certbot --version
# 应输出类似:certbot 2.6.0

获取 SSL 证书

通过 Certbot 自动申请证书
执行以下命令,按提示操作(需输入邮箱并同意协议):

sudo certbot --nginx -d xiaozhi.caovan.cn

Certbot 会自动检测 Nginx 配置中的 server_name 并完成域名验证。

成功后会提示是否将 HTTP 流量重定向到 HTTPS,建议选择 2(强制重定向)。

验证证书生成
证书文件会保存在以下路径:

/etc/letsencrypt/live/xiaozhi.caovan.cn/fullchain.pem
/etc/letsencrypt/live/xiaozhi.caovan.cn/privkey.pem

检查证书是否生效:

sudo certbot certificates

# 应看到域名 xiaozhi.caovan.cn 的证书信息

Certbot 会自动修改 Nginx 配置文件生成上面你看到的“listen 443 ssl;”以及后面的内容

重启 Nginx 服务

sudo nginx -t # 检查配置语法
sudo systemctl reload nginx

设置证书自动续订

Let’s Encrypt 证书有效期为 90 天,需配置自动续订:

手动测试续订

sudo certbot renew --dry-run
# 若输出 "Congratulations, all renewals succeeded" 表示正常

添加定时任务
Certbot 默认已配置自动续订,可通过以下命令查看:

systemctl list-timers | grep certbot
# 或检查 cron 任务
cat /etc/cron.d/certbot

至此,后端的部署基本上就完成了!我们可以打开网址https://xiaozhi.caovan.cn访问小智的管理后台了!

原创文章,作者:朋远方,如若转载,请注明出处:https://caovan.com/zaiubuntufuwuqibushukaiyuanxiaozhiesp-32houduanfuwujiaocheng/.html

Like (0)
Donate 微信扫一扫 微信扫一扫
朋远方的头像朋远方
Previous 2025年3月13日 下午4:28
Next 2025年3月16日 上午10:54

相关推荐

发表回复

Please Login to Comment