科技 2026-04-26 ChenReal 34

【PicoClaw】野生小龙虾的养殖实战(一)客户端部署

研究PicoClaw在公司的应用落地,有大半个月了。我们老板每人配置一只龙虾的愿望,基本实现了。我也要开始总结总结经验了~


【PicoClaw】野生小龙虾的养殖实战(一)客户端部署

首先我们总结一下,小龙虾客户端的落地。

之前我写过一篇文章:【PicoClaw】玩转野生小龙虾讲的也是怎么在Windows平台落地小龙虾客户端。不过,实际上我并没有用这个方案,主要原因是:

  • 我的需求是能让一台服务器多开PicoClaw客户端,使用v0.24的版本是可以没问题的。但是,升级到v0.26以上,问题就来了。因为新版本增加了密码鉴权的功能,升级之后,原来的多开了的客户端会有冲突,A端口登录了,就会把B端口踢下线,反正没办法再一台机器上和谐共处。
  • 尝试多种隔离方案,最后还是不得不用Docker。既然都Docker了,那么还是上Linux吧。

于是,最终因为PicoClaw的一次升级,我便不得不来一个华丽的转弯,切换到Linux+Docker的大道上。

安装环境

首先,准备一个Linux环境,我用的是Debian13,如果你的也是同款,那么应该可以直接用的脚本,如果不一样仅供参考。

安装Docker

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

做饭之前,先准备好食材,制作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

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

启动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_portsvr_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

以上脚本执行完成之后,用户便可以用共享目录跟自己小龙虾交互文件内容了。

评论 (0)

发表评论

验证码
返回