6.0 KiB
全模块源码部署自动升级方法
本教程是方便全模块源码部署的爱好者,如何通过自动命令,自动拉取源码,自动编译,自动启动端口运行。实现最高效率的升级系统。
本项目的测试平台https://2662r3426b.vicp.fun
,从开放以来就使用了该方法,效果良好。
教程可参考B站博主毕乐labs
发布的视频教程:《开源小智服务器xiaozhi-server自动更新以及最新版本MCP接入点配置保姆教程》
开始条件
- 你的电脑/服务器是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
文件复制到新的目录去,你可以这样
# 创建需要的目录
mkdir -p /home/system/xiaozhi/xiaozhi-esp32-server/main/xiaozhi-server/data/
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详细配置可以参考这里
常见问题
1、为什么没有见到8001端口?
回答:8001是开发环境使用的,用于运行前端的端口。如果你是服务器部署,不建议使用npm run serve
启动8001端口运行前端,而是像本教程一样编译成html文件,然后使用nginx来管理访问。
2、每次更新需要更新手动SQL语句吗?
回答:不需要,因为项目使用Liquibase管理数据库版本,会自动执行新的sql脚本。