在线代码执行引擎piston安装方法

  app

📦 ​​安装步骤(Ubuntu/Debian 系统)​

1. ​​安装 Docker 引擎​

# 卸载旧版本(可选)
sudo apt remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt update
sudo apt install ca-certificates curl

# 添加官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 添加仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

💡 ​​验证安装​​:sudo docker run hello-world 若输出 “Hello from Docker!” 则成功。

2. ​​配置镜像加速(国内用户必选)​

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://<你的阿里云镜像加速地址>"]
}
EOF
sudo systemctl restart docker

🔗 阿里云加速地址需登录容器镜像服务控制台获取。

3. ​​部署 Piston 服务​

# 拉取 Piston 镜像
docker pull engineerman/piston

# 启动容器(关键配置)
docker run -d \
  --name piston_api \
  -p 2000:2000 \
  --cap-add=SYS_ADMIN \
  --tmpfs /piston/jobs:exec,uid=1000,gid=1000,mode=711 \
  -v $(pwd)/piston_packages:/piston/packages \
  engineerman/piston

⚠️ ​​安全注意​​:

  • --cap-add=SYS_ADMIN 为沙箱隔离必需权限
  • tmpfs 挂载确保临时文件隔离销毁

⚙️ ​​自定义执行环境(以添加 AWS CLI 为例)​

1. 修改 Bash 环境配置

编辑 piston/packages/bash/5.2.0/build.sh

#!/usr/bin/env bash
PREFIX=$(realpath $(dirname $0))
mkdir -p build
cd build
curl "https://ftp.gnu.org/gnu/bash/bash-5.2.tar.gz" -o bash.tar.gz
tar xzf bash.tar.gz --strip-components=1
./configure --prefix "$PREFIX"
make -j$(nproc)
make install -j$(nproc)

# 新增 AWS CLI 安装
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install -i $PREFIX/aws-cli -b $PREFIX/bin
rm -rf awscliv2.zip aws

2. 添加环境变量

编辑 environment 文件:

export PATH=$PWD/bin:$PATH
export PATH=$PWD/aws-cli:$PATH  # 新增 AWS CLI 路径

3. 重建自定义包

docker exec -it piston_api sh
cd /piston/repo
sh build_package.sh bash=5.2.0
sh build_package.sh release  # 发布到 GitHub

🔍 ​​验证服务状态​

# 测试 Python 代码执行
curl -X POST http://localhost:2000/api/v2/execute \
  -H "Content-Type: application/json" \
  -d '{
    "language": "python",
    "version": "3.10.0",
    "files": [{"content": "print(1+1)"}]
  }'

# 预期返回
{"run":{"stdout":"2\n","stderr":"","exit_code":0}}

🛡️ ​​安全加固建议​

  1. ​资源限制​
    docker-compose.yml 中追加: environment: - PISTON_RUN_TIMEOUT=5000 # 超时5秒 - PISTON_OUTPUT_MAX_SIZE=10240 # 输出限制10KB - PISTON_MEMORY_LIMIT=134217728 # 内存限制128MB
  2. ​网络隔离​docker network create piston_net docker run ... --network piston_net --restrict-networking
  3. ​系统调用过滤​
    使用 seccomp 配置文件限制危险调用(参考 Piston 安全文档

❌ ​​常见问题排查​

问题现象解决方案
容器启动失败检查 --cap-add=SYS_ADMIN 权限
下载包超时替换 build.sh 中的下载源为国内镜像
执行环境缺失确认 build_package.sh 已运行完成
返回结果为空检查 tmpfs 挂载配置是否正确

📌 ​​完整自定义指南​​:


通过此方案,您可在 ​​30 分钟内​​部署支持 200+ 编程语言的在线代码执行引擎,且通过沙箱隔离保障系统安全。后续可结合 WebSocket 实现实时交互式编程环境。

LEAVE A COMMENT