xiaozhi/xiaozhi-esp32-server/docs/dev-ops-integration.md
“wangquan” 57fdf656b9 add_xiaozhi
2025-07-18 13:12:09 +08:00

5.2 KiB
Executable File
Raw Blame History

全模块源码部署自动升级方法

本教程是方便全模块源码部署的爱好者,如何通过自动命令,自动拉取源码,自动编译,自动启动端口运行。实现最高效率的升级系统。

本项目的测试平台https://2662r3426b.vicp.fun,从开放以来就使用了该方法,效果良好。

开始条件

  • 你的电脑/服务器是linux操作系统
  • 你已经跑通了整个流程
  • 你喜欢跟进最新功能,但是觉得每次手动部署有点麻烦,期待有一个自动更新的方法

第二个条件必须满足因为本教程所涉及的某些文件JDK、Node.js环境、Conda环境等是需要你跑通整个流程才有的如果你没有跑通当我讲到某个文件的时候你可能就不知道什么意思。

教程效果

  • 解决国内不能拉取最新项目源码问题
  • 自动拉取代码编译前端文件
  • 自动拉取代码编译java文件自动杀掉8002端口自动启动8002端口
  • 自动拉取python代码自动杀掉8000端口自动启动8000端口

第一步 选好你的项目目录

例如,我规划了我的项目目录是,这是一个新建的空白的目录,如果你不想出错,可以和我一样

/home/system/xiaozhi

第二步 克隆本项目

此刻,先要执行第一句话,拉取源码,这句命令适用于国内网络的服务器和电脑,无需翻墙

cd /home/system/xiaozhi
git clone https://ghproxy.net/https://github.com/xinnan-tech/xiaozhi-esp32-server.git

执行完后,你的项目目录会多了一个文件夹xiaozhi-esp32-server,这个就是项目的源码

第三步 复制基础的文件

如果你之前已经跑通了整个流程对funasr的模型文件xiaozhi-server/models/SenseVoiceSmall/model.pt和你的私有配置文件xiaozhi-server/data/.config.yaml这两个文件不会陌生。

此刻你需要把model.pt文件复制到新的目录去,你可以这样

cp 你原来的.config.yaml完整路径 /home/system/xiaozhi/xiaozhi-esp32-server/main/xiaozhi-server/data/.config.yaml
cp 你原来的model.pt完整路径 /home/system/xiaozhi/xiaozhi-esp32-server/main/xiaozhi-server/models/SenseVoiceSmall/model.pt

第四步 建立三个自动编译文件

4.1 自动编译mananger-web模块

/home/system/xiaozhi/目录下,创建名字为update_8001.sh的文件,内容如下

cd /home/system/xiaozhi/xiaozhi-esp32-server
git fetch --all
git reset --hard
git pull origin main


cd /home/system/xiaozhi/xiaozhi-esp32-server/main/manager-web
npm install
npm run build
rm -rf /home/system/xiaozhi/manager-web
mv /home/system/xiaozhi/xiaozhi-esp32-server/main/manager-web/dist /home/system/xiaozhi/manager-web

保存好后执行赋权命令

chmod 777 update_8001.sh

执行完后,继续往下

4.2 自动编译运行manager-api模块

/home/system/xiaozhi/目录下,创建名字为update_8002.sh的文件,内容如下

cd /home/system/xiaozhi/xiaozhi-esp32-server
git pull origin main


cd /home/system/xiaozhi/xiaozhi-esp32-server/main/manager-api
rm -rf target
mvn clean package -Dmaven.test.skip=true
cd /home/system/xiaozhi/

# 查找占用8002端口的进程号
PID=$(sudo netstat -tulnp | grep 8002 | awk '{print $7}' | cut -d'/' -f1)

rm -rf /home/system/xiaozhi/xiaozhi-esp32-api.jar
mv /home/system/xiaozhi/xiaozhi-esp32-server/main/manager-api/target/xiaozhi-esp32-api.jar /home/system/xiaozhi/xiaozhi-esp32-api.jar

# 检查是否找到进程号
if [ -z "$PID" ]; then
  echo "没有找到占用8002端口的进程"
else
  echo "找到占用8002端口的进程进程号为: $PID"
  # 杀掉进程
  kill -9 $PID
  kill -9 $PID
  echo "已杀掉进程 $PID"
fi

nohup java -jar xiaozhi-esp32-api.jar --spring.profiles.active=dev &

保存好后执行赋权命令

chmod 777 update_8002.sh

执行完后,继续往下

4.3 自动编译运行Python项目

/home/system/xiaozhi/目录下,创建名字为update_8000.sh的文件,内容如下

cd /home/system/xiaozhi/xiaozhi-esp32-server
git pull origin main

# 查找占用8000端口的进程号
PID=$(sudo netstat -tulnp | grep 8000 | awk '{print $7}' | cut -d'/' -f1)

# 检查是否找到进程号
if [ -z "$PID" ]; then
  echo "没有找到占用8000端口的进程"
else
  echo "找到占用8000端口的进程进程号为: $PID"
  # 杀掉进程
  kill -9 $PID
  kill -9 $PID
  echo "已杀掉进程 $PID"
fi
cd main/xiaozhi-server
pip install -r requirements.txt
nohup python app.py >/dev/null &

保存好后执行赋权命令

chmod 777 update_8000.sh

执行完后,继续往下

日常更新

以上的脚本都建立好后,日常更新,我们只要依次执行以下命令就可以做到自动更新和启动

# 进入pyhton环境
conda activate xiaozhi-esp32-server
cd /home/system/xiaozhi
# 更新并启动Java程序
./update_8001.sh
# 更新web程序
./update_8002.sh
# 更新并启动python程序
./update_8000.sh
# 查看Java日志
tail -f nohup.out
# 查看Python日志
tail -f /home/system/xiaozhi/xiaozhi-esp32-server/main/xiaozhi-server/tmp/server.log

注意事项

测试平台https://2662r3426b.vicp.fun是使用nginx做了反向代理。nginx.conf详细配置可以参考这里