【PicoClaw】野生小龙虾的养殖实战(一)客户端部署
研究PicoClaw在公司的应用落地,有大半个月了。我们老板每人配置一只龙虾的愿望,基本实现了。我也要开始总结总结经验了~
研究PicoClaw在公司的应用落地,有大半个月了。我们老板每人配置一只龙虾的愿望,基本实现了。我也要开始总结总结经验了~
首先我们总结一下,小龙虾客户端的落地。
之前我写过一篇文章:【PicoClaw】玩转野生小龙虾讲的也是怎么在Windows平台落地小龙虾客户端。不过,实际上我并没有用这个方案,主要原因是:
于是,最终因为PicoClaw的一次升级,我便不得不来一个华丽的转弯,切换到Linux+Docker的大道上。
首先,准备一个Linux环境,我用的是Debian13,如果你的也是同款,那么应该可以直接用的脚本,如果不一样仅供参考。
apt-get update
apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.ustc.edu.cn/docker-ce/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
add-apt-repository "deb [arch=arm64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian $(lsb_release -cs) stable"
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io -y
安装好Docker之后,如果觉得拉取太慢,可以尝试切换国内的镜像:
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
]
}
EOF
systemctl daemon-reload
systemctl restart docker
做饭之前,先准备好食材,制作Docker镜像也是一样的。先把PicoClaw的bin下载到本地,/var/docker/ 作为我的制作Docker工作目录。那么,可以用一下脚本把最新版本的PicoClaw下载解压到bin目录。
#!/bin/bash
TMP_DIR=./_tmp_dir
BIN_DIR=/var/docker/bin
mkdir -p $BIN_DIR
rm -rf $TMP_DIR
mkdir $TMP_DIR
cd $TMP_DIR
wget https://picoclaw.sipeed.com/latest/picoclaw_Linux_x86_64.tar.gz
tar -xf picoclaw_Linux_x86_64.tar.gz
rm picoclaw_Linux_x86_64.tar.gz
mv picoclaw* $BIN_DIR/
cd ../
rm -rf $TMP_DIR
Dockerfile好比是我们的菜谱。我们可以根据实际需要DIY一些东西,比如把浏览器、python、node.js这些预装到Docker镜像里面,这些都是小龙虾经常会用到的工具,首次就预装好了以后跑起来会省时省心。反之,如果少了这些东西,实际执行任务的时候,会限制它的能力。
当然,PicoClaw官方也有直接开箱即用的Docker镜像,如果要偷懒可以直接“拿来主义”。
PicoClaw提供的Dockerfile示例:https://github.com/sipeed/picoclaw/tree/main/docker
下面是我自己DIY的Dockerfile,除了picoclaw,顺便把git、node.js、python、agent-browser、chromium、imagemagick等我用的上用的工具都预装装上了。文件保存在到/var/docker/。
FROM debian:stable-slim
ARG TARGETPLATFORM
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources
# 安装依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
curl \
tzdata \
git \
nodejs \
npm \
python3 \
python3-pip \
libnss3 \
libatk1.0-0 \
libatk-bridge2.0-0 \
libcups2 \
libdrm2 \
libxkbcommon0 \
libxcomposite1 \
libxdamage1 \
libxrandr2 \
libgbm1 \
libpango-1.0-0 \
libasound2 \
chromium \
imagemagick \
pass \
fonts-wqy-zenhei \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g agent-browser
ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
ENV CHROME_PATH=/usr/bin/chromium
ENV LANG=zh_CN.UTF-8
ENV LC_ALL=zh_CN.UTF-8
RUN ln -s /usr/bin/python3 /usr/bin/python
COPY ./bin/picoclaw /usr/local/bin/picoclaw
COPY ./bin/picoclaw-launcher /usr/local/bin/picoclaw-launcher
COPY ./bin/picoclaw-launcher-tui /usr/local/bin/picoclaw-launcher-tui
# 必须加执行权限(debian 复制文件默认无权限)
RUN chmod +x \
/usr/local/bin/picoclaw \
/usr/local/bin/picoclaw-launcher \
/usr/local/bin/picoclaw-launcher-tui
ENTRYPOINT ["picoclaw-launcher"]
CMD ["-console", "-public", "-no-browser"]
执行以下脚本,开始Docker镜像构建。
#!/bin/bash
cd /var/docker
docker build -t picoclaw:v1 .
大约十几分钟后,构建完成,输入命令docker images,在列表中可以找到刚才我们构建完成的镜像。
启动Docker我也准备了脚本:
!/bin/bash
name="chenreal"
ui_port=18888
svr_port=19999
mkdir -p /var/data/$name
docker run -d --restart=always \
-v /var/data/$app_name:/root/.picoclaw \
-e PICOCLAW_GATEWAY_HOST=0.0.0.0 \
--name pico_$name \
-p $ui_port:18800 \
-p $svr_port:18790 \
picoclaw:v1
在启动脚本之前,需要给每个Docker实例准备一个工作目录。比如,上面脚本对应的工作目录是:/var/data/chenreal。然后,跟Docker运行实例的/root/.picoclaw 目录做个映射。这一步很重要,不然每次重启Docker实例,我们之前的配置和工作记录都会丢失。
同时我们还需要给每个实例,设置不同的端口(脚本中的 ui_port和svr_port),保证多个实例同时运行不会冲突。
执行启动后,通过docker ps可以查看到正在运行的实例。
在开始使用之前,我们还需要配置一个登录密码,打开/var/data/chenreal/launcher-config.json,里面的launcher_token就是登录密码。
{
"port": 18800,
"public": true,
"launcher_token": "your password"
}
配置密码重启一下Docker,然后在浏览器打开:http://{server_host}:18888/ 便可以进入picoclaw的操作界面了。
上面操作完成后,已经有了用户向小龙虾下达任务指令的web界面入口。
最后,还有个需求满足的,就是能够给用户提供一个共享目录,方便他们跟小龙虾交互文件。譬如:有一个表格需要小龙虾帮我处理,可以预先放在这个目录里,然后告知小龙虾这个文件的路径,让它打开并读取信息;小龙虾处理完成生成的文档,也可以放在这个目录方便我copy到我本地电脑上。
首先需要在Linux服务器上,安装上samba服务:
#!/bin/bash
apt update
apt install -y samba samba-common-bin
然后,用下面的脚本,给每个小龙虾用户开设一个共享目录的帐号密码。
#!/bin/bash
USER_NAME="$1"
USER_PASS="$2"
useradd -m $USER_NAME
echo -e "$USER_PASS\n$USER_PASS" | smbpasswd -a $USER_NAME -s
DOC_PATH="/var/data/$USER_NAME/workspace/documents"
mkdir $DOC_PATH
chown -R $USER_NAME:$USER_NAME $DOC_PATH
chmod -R 755 $DOC_PATH
tee -a /etc/samba/smb.conf <<EOF
#============================ Share Definitions ==============================
[$USER_NAME_documents]
path = $DOC_PATH
browsable = yes
read only = no
guest ok = no
writable = yes
valid users = $USER_NAME
force user = $USER_NAME
force group = $USER_NAME
create mask = 0644
directory mask = 0755
EOF
systemctl restart smbd nmbd
以上脚本执行完成之后,用户便可以用共享目录跟自己小龙虾交互文件内容了。