Axon 手工配置说明
适用场景:
不使用自动脚本,手工为新设备部署 Axon
需要明确知道哪些文件必须修改
需要排查某台机器为什么没有按预期接入 Axon
如果不想手工逐步执行,也可以直接使用自动脚本:
bash scripts/setup_dc87_axon.sh --tag dc87 --host 192.168.112.248文档后半部分提供了脚本用法说明和与手工步骤的对应关系。
以下示例以 dc87 为目标设备说明。
目标
把目标机器配置成:
ab_patch中的 Axon 配置已经指向当前设备Docker 中存在带 Axon 的镜像
1.0.1-axondeploy/config.yaml使用1.0.1-axondeploy/start.py会直接使用本地镜像,并在进入容器前启动 Axon
前置条件
在操作前,先确认以下条件满足:
目标设备已经在 keystone 中注册
目标机器可 SSH 登录
目标机器存在部署目录
/home/psibot/deploy本地或来源机器已经准备好
ab_patch目标机器可运行 Docker
目标机器上执行
sudo不受限
整体步骤
手工配置的顺序建议固定为:
修改
ab_patch/recorder_config.yaml修改
ab_patch/transfer_config.yaml把
ab_patch拷到目标机器运行
install_to_docker.sh修改
/home/psibot/deploy/config.yaml修改
/home/psibot/deploy/start.py启动 deploy 或手动执行
run_axon_tools.sh做最终校验
自动脚本用法
最常用写法
bash scripts/setup_dc87_axon.sh --tag dc87 --host 192.168.112.248如果还希望在目标机器上直接重启容器内的 Axon 服务:
bash scripts/setup_dc87_axon.sh \
--tag dc87 \
--host 192.168.112.248 \
--container ITW-release005-latest参数说明
--tag <tag>
必填。设备标识,例如 dc87、dc93
--host <host>
目标机器。支持两种写法:
--host 192.168.112.248
--host psibot@192.168.112.248 如果只传 IP,脚本会自动补成 psibot@<ip>。
--source-host <host>
可选。仅当本地没有 ab_patch 时,脚本会从这里拉取参考补丁目录。
默认值是:psibot@192.168.112.197
--keystone <host>
可选。用于生成 recorder 和 transfer 的 websocket 地址。
默认值是:192.168.112.215
--container <name>
可选。传入后脚本会在目标机器上执行:
run_axon_tools.sh <container_name> --force-restart
脚本实际做的事情
执行一次脚本,等价于手工做完下面这些步骤:
本地没有
ab_patch时,从参考机器拉取一份修改
ab_patch/recorder_config.yaml修改
ab_patch/transfer_config.yaml把
ab_patch传到目标机器在目标机器执行
install_to_docker.sh修改目标机器上的
deploy/config.yaml修改目标机器上的
deploy/start.py如果指定了
--container,则执行run_axon_tools.sh输出关键校验结果
常见示例
为 dc93 配置环境:
bash scripts/setup_dc87_axon.sh --tag dc93 --host 192.168.112.250为 dc54 配置环境并重启 Axon 服务:
bash scripts/setup_dc87_axon.sh \
--tag dc54 \
--host 192.168.112.197 \
--container ITW-release005-latest本地没有 ab_patch,并从指定参考机器拉取:
bash scripts/setup_dc87_axon.sh \
--tag dc87 \
--host 192.168.112.248 \
--source-host 192.168.112.197第一步:修改 recorder_config.yaml
文件:ab_patch/recorder_config.yaml
需要修改的关键字段:
rpc:
mode: ws_client
ws_client:
url: ws://192.168.112.215:8091/recorder/robot_dc87需要注意
这里的
robot_dc87要和当前设备保持一致一般规则是:设备 tag 为
dc87,则写成robot_dc87如果还是
robot_dc86,说明 recorder 仍然会按旧设备身份连接 keystone地址中的
192.168.112.215是 keystone 地址,改环境时如果 keystone 变了,这里也要同步改
对照示例
dc86 上当前实际值:
url: ws://192.168.112.215:8091/recorder/robot_dc86dc87 应改为:
url: ws://192.168.112.215:8091/recorder/robot_dc87第二步:修改 transfer_config.yaml
文件:ab_patch/transfer_config.yaml
需要修改的关键字段:
device_id: "robot_dc87"通常还要确认:
ws:
url: "ws://192.168.112.215:8090/transfer"需要注意
device_id必须和 recorder 配置中的设备 ID 一致也就是
recorder_config.yaml和transfer_config.yaml两边都要对应同一个robot_<tag>如果一个文件改了,另一个没改,会出现同一台机器以两个不同身份接入的问题
ws.url通常是 transfer 服务地址,不一定每次都要改,但切环境时必须确认
对照示例
dc86 上当前实际值:
device_id: "robot_dc86"
ws:
url: "ws://192.168.112.215:8090/transfer"dc87 应改为:
device_id: "robot_dc87"
ws:
url: "ws://192.168.112.215:8090/transfer"第三步:拷贝 ab_patch 到目标机器
如果本地还没有 ab_patch,可以先从参考机器拷一份到当前目录。
示例:
scp -r psibot@192.168.112.197:/home/psibot/ab_patch ./需要注意
只有在本地没有
ab_patch时才需要这一步如果本地已经有可用版本,通常不需要重新覆盖
从参考机器拉下来后,仍然要把其中的
robot_dc86改成当前设备对应的 tag
示例:
scp -r ab_patch psibot@192.168.112.248:~/需要注意
拷贝前先确认你本地
ab_patch里的两个 yaml 已经改对如果目标机器已存在旧的
~/ab_patch,再次拷贝会覆盖或叠加内容,要确认是否为你期望的版本最好拷贝后在目标机器再检查一遍关键字段
第四步:生成 Axon 镜像
先看 deploy/config.yaml 当前使用的基础镜像是什么,再基于它生成新镜像。
当前常见基础镜像:
repository: "docker-registry.psibot.net/synrobot/x86/release/1.0.3"
tag: "latest"在目标机器上执行:
cd ~/ab_patch
bash install_to_docker.sh \
docker-registry.psibot.net/synrobot/x86/release/1.0.3:latest \
docker-registry.psibot.net/synrobot/x86/release/1.0.1-axon:latest这个步骤做了什么
启动一个基础镜像临时容器
把
ab_patch下的.deb包装进容器把
recorder_config.yaml和transfer_config.yaml复制到/etc/axon/提交成新的镜像
1.0.1-axon:latest
需要注意
不要跳过这一步,否则 deploy 改成
1.0.1-axon后会找不到镜像如果基础镜像版本不是
1.0.3:latest,命令里的第一个参数也要跟着变如果目标机器拉不到基础镜像,需要先解决 Docker 登录或网络问题
第五步:修改 deploy/config.yaml
文件:/home/psibot/deploy/config.yaml
1. 修改镜像仓库
把:
repository: "docker-registry.psibot.net/synrobot/x86/release/1.0.3"改为:
repository: "docker-registry.psibot.net/synrobot/x86/release/1.0.1-axon"2. 挂载 Axon 配置文件
在 volumes: 下增加:
- source: "/home/psibot/ab_patch/recorder_config.yaml"
target: "/etc/axon/recorder_config.yaml"
enabled: true
options: "ro"
- source: "/home/psibot/ab_patch/transfer_config.yaml"
target: "/etc/axon/transfer_config.yaml"
enabled: true
options: "ro"需要注意
这一步虽然 README 标成可选,但实际建议加上
不挂载的话,后续你改
~/ab_patch/*.yaml不会自动反映到容器里挂载后,改主机上的 yaml 更容易调试
source路径必须和目标机器上的实际位置一致
第六步:修改 deploy/start.py
文件:/home/psibot/deploy/start.py
1. 修_pull_image
找到:
def _pull_image(self, image_name: str) -> bool:改成函数一进入就直接:
def _pull_image(self, image_name: str) -> bool:
return True这样做的原因
deploy 原逻辑会去拉远端镜像,但这里我们希望直接使用目标机器本地已经制作好的 1.0.1-axon 镜像。
2. 在进入容器前启动 Axon
在下面这段附近:
# 设置 bashrc
self._setup_bashrc(container_name)并且在 # 进入容器 之前插入:
axon_sh = self.script_dir / "../ab_patch/run_axon_tools.sh"
if axon_sh.is_file():
subprocess.run(["bash", str(axon_sh), container_name], check=False)这样做的原因
手套采集启动时,Axon recorder 和 transfer 也要一起起来。否则容器起来了,但 Axon 没启动,数据不会按预期上传或记录。
第七步:运行 run_axon_tools.sh
有两种方式:
方式 1:通过 deploy 自动拉起
如果上一步 start.py 已经改好,那么正常启动 deploy 时,会自动执行:
bash /home/psibot/ab_patch/run_axon_tools.sh <container_name>方式 2:手工执行
如果你只是想补启动 Axon,可以手工运行:
bash ~/ab_patch/run_axon_tools.sh ITW-release005-latest需要注意
run_axon_tools.sh需要传入已经运行中的容器名它会在容器中启动
axon-recorder和axon-transfer如果 tmux 会话
axon已经存在,脚本会提示是否重建如果容器还没起来,脚本会直接报错
自动脚本 scripts/setup_dc87_axon.sh 在传入 --container 时,会使用 --force-restart 调用 run_axon_tools.sh,避免因为已存在的 tmux 会话卡在交互确认。
第八步:最终校验
建议至少检查以下内容。
1. 检查 ab_patch 配置
grep -nE 'robot_dc87|device_id:|url:' ~/ab_patch/recorder_config.yaml ~/ab_patch/transfer_config.yaml预期至少看到:
url: ws://192.168.112.215:8091/recorder/robot_dc87
device_id: "robot_dc87"
url: "ws://192.168.112.215:8090/transfer"2. 检查镜像是否已生成
docker images | grep 1.0.1-axon3. 检查 deploy/config.yaml
grep -nE 'repository:|recorder_config.yaml|transfer_config.yaml' ~/deploy/config.yaml4. 检查 deploy/start.py
grep -nE 'def _pull_image|run_axon_tools.sh' ~/deploy/start.py5. 检查 Axon 进程是否已拉起
如果容器名是 ITW-release005-latest:
docker exec -it ITW-release005-latest tmux ls
docker exec -it ITW-release005-latest tmux attach -t axon常见问题
1. recorder 还是显示旧设备 ID
原因通常是:
ab_patch/recorder_config.yaml没改改了本地文件,但没有重新拷到目标机器
容器内仍然使用旧配置,没有挂载 host 上的 yaml
2. transfer 连接的是旧设备
优先检查:
device_id: "robot_xxx"这个字段是否和当前设备一致。
3. deploy 启动时报镜像相关错误
优先检查:
install_to_docker.sh是否真正执行成功docker images | grep 1.0.1-axon是否能看到镜像config.yaml的repository是否已经改为1.0.1-axon
4. Axon 没起来
优先检查:
start.py是否插入了run_axon_tools.sh容器是否已经运行
手工执行
bash ~/ab_patch/run_axon_tools.sh <container_name>是否报错容器里 tmux 是否已经创建
axon会话
5. deploy 文件无法修改
如果 /home/psibot/deploy 属于 root:root,需要用 sudo 修改:
sudo vi /home/psibot/deploy/config.yaml
sudo vi /home/psibot/deploy/start.py最小检查清单
如果只想快速确认是否配好,至少检查下面 6 项:
recorder_config.yaml里的robot_<tag>是否正确transfer_config.yaml里的device_id是否正确目标机器
~/ab_patch是否是最新版本docker images中是否已有1.0.1-axon~/deploy/config.yaml是否引用1.0.1-axon~/deploy/start.py是否包含return True和run_axon_tools.sh
自动脚本补充说明
scripts/setup_dc87_axon.sh 的 --host 和 --source-host 支持两种写法:
--host psibot@192.168.112.248
--host 192.168.112.248如果只传 IP,脚本会自动补成 psibot@<ip>。
如果传了其他用户名,例如 kvzjj@192.168.112.250,脚本会直接使用你传入的用户名,不会自动替换。
推荐做法
手工配置时,建议每完成一步就做一次小检查,不要全部改完再一起排错。
推荐顺序:
先改本地
ab_patch本地确认字段正确
再拷贝到目标机器
在目标机器生成镜像
再改 deploy
最后启动并看 tmux/日志
tmux a
ctrl+b, n 切换
ctrl+b, c 创建新窗口
ctrl+b, d, 退出tmux自动化部署脚本
setup_dc87_axon.sh
灵初手套部署指南
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法