On this page
通过 CLI 管理
Deno CLI 包含了内置命令用于管理你的 Deno Sandbox 实例,允许你从终端创建、控制并与它们交互。
这种集成使 Deno Sandbox 的管理在你现有的 Deno 工作流程中显得自然流畅。
创建你的第一个沙箱 Jump to heading
最简单的入门方法是使用 deno sandbox create。默认情况下,这会创建一个交互式会话沙箱,准备好时会自动打开 SSH 连接:
deno sandbox create
如果你的系统没有可用的 SSH,则会显示连接信息。退出会话时,沙箱会自动清理自身。
在开发工作中,你通常会想把项目文件复制到沙箱里。--copy 选项会上传文件到沙箱内部的 /app 目录:
deno sandbox create --copy ./my-project
你可以在创建时复制多个目录:
deno sandbox create --copy ./src --copy ./config
如果你需要沙箱运行时间超过单次会话,可以用 --timeout 指定超时时间:
deno sandbox create --timeout 2m
你也可以用自定义的内存限制创建沙箱:
deno sandbox create --memory 2gib
若要公开 HTTP 端口以供 Web 应用访问:
deno sandbox create --expose-http 3000
你可以使用 --volume 标志挂载持久卷到沙箱:
deno sandbox create --volume my-volume:/data
创建沙箱并立即运行命令:
deno sandbox create ls /
这在构建和测试项目时非常有用。你可以一条命令复制文件并运行构建流程:
deno sandbox create --copy ./app --cwd /app "npm i && npm start"
对于网页应用,你可以公开端口以访问运行服务:
deno sandbox create --expose-http 3000 --copy ./web-app --cwd /app "npm i && npm run dev"
复杂的工作流可以写成带引号的命令链:
deno sandbox create --copy ./app --cwd /app "npm install && npm test && npm run build"
查看你的 Deno Sandbox Jump to heading
使用 deno sandbox list(或 deno sandbox ls)查看组织中所有的沙箱:
$ deno sandbox list
ID CREATED STATUS UPTIME
550e8400-e29b-41d4-a716-446655440000 2024-01-15 10:30:00.00 running 5m
6ba7b810-9dad-11d1-80b4-00c04fd430c8 2024-01-15 09:45:00.00 stopped 15m
这显示了每个沙箱的唯一 ID (你用它来配合其他命令),创建时间,当前状态,和运行时长。沙箱 ID 是唯一标识每个实例的 UUID。
远程运行命令 Jump to heading
deno sandbox exec 命令让你在任意运行中的沙箱里执行单条命令,而无需打开交互式会话。非常适合自动化、CI/CD 管道或快速一次性任务:
deno sandbox exec 550e8400-e29b-41d4-a716-446655440000 ls -la
大多数时候,你会想在你所复制文件所在的 /app 目录操作。用 --cwd 指定工作目录:
deno sandbox exec 550e8400-e29b-41d4-a716-446655440000 --cwd /app npm install
用于脚本或自动化时,用 --quiet 抑制命令输出:
deno sandbox exec 550e8400-e29b-41d4-a716-446655440000 --quiet --cwd /app npm test
你也可以通过引号把整条复杂命令链传入:
deno sandbox exec 550e8400-e29b-41d4-a716-446655440000 --cwd /app "npm install && npm test"
exec 命令自然支持 Unix 管道及标准输入/输出。你可以将沙箱命令输出接入本地工具:
deno sandbox exec 550e8400-e29b-41d4-a716-446655440000 'ls -lh /' | wc -l
或将本地数据通过管道输入沙箱进程用于处理:
cat large-dataset.csv | deno sandbox exec 550e8400-e29b-41d4-a716-446655440000 --cwd /app "deno run -A main.ts"
这样方便你将沙箱处理集成至更大规模的 Unix 工作流和数据管道中。
传输文件 Jump to heading
虽然你可以在创建沙箱时复制文件,但后续你可能需要更新或检索文件。deno sandbox copy 命令(也能用 deno sandbox cp)支持双向文件传输:从本机到沙箱,从沙箱到本机,甚至沙箱之间。
将文件从本地复制到沙箱:
deno sandbox copy ./app.js 550e8400-e29b-41d4-a716-446655440000:/app/
从沙箱检索文件到本地:
deno sandbox copy 550e8400-e29b-41d4-a716-446655440000:/app/results.json ./output/
在不同沙箱间复制文件:
deno sandbox copy 550e8400-e29b-41d4-a716-446655440000:/app/data.csv 6ba7b810-9dad-11d1-80b4-00c04fd430c8:/app/input/
你可以用通配符从沙箱复制多个文件:
deno sandbox copy 550e8400-e29b-41d4-a716-446655440000:/app/*.json ./config/
deno sandbox copy 550e8400-e29b-41d4-a716-446655440000:/app/logs/*.log ./logs/
还能一次复制多个文件和目录:
deno sandbox copy ./src/ ./package.json 550e8400-e29b-41d4-a716-446655440000:/app/
目标路径可定制,用以在沙箱中合理安排文件:
deno sandbox copy ./frontend 550e8400-e29b-41d4-a716-446655440000:/app/web/
部署沙箱 Jump to heading
你可以使用 deno sandbox deploy 命令,将正在运行的沙箱部署为 Deno Deploy 应用:
deno sandbox deploy 550e8400-e29b-41d4-a716-446655440000 my-app
默认部署到预览版本。若要直接部署到生产:
deno sandbox deploy --prod 550e8400-e29b-41d4-a716-446655440000 my-app
可指定自定义工作目录和入口点:
deno sandbox deploy --cwd /app --entrypoint main.ts 550e8400-e29b-41d4-a716-446655440000 my-app
给入口脚本传递参数:
deno sandbox deploy --args --port 8080 550e8400-e29b-41d4-a716-446655440000 my-app
管理卷 Jump to heading
沙箱系统支持持久卷,用于存储需要跨沙箱实例保存的数据。使用 deno sandbox volumes 命令进行管理。
创建卷 Jump to heading
创建带有名称、容量及区域的卷:
deno sandbox volumes create my-volume --capacity 10gb --region ord
列出卷 Jump to heading
列出组织内所有卷:
deno sandbox volumes list
你也可以搜索特定的卷:
deno sandbox volumes list my-volume
删除卷 Jump to heading
不再需要某卷时删除它:
deno sandbox volumes delete my-volume
管理快照 Jump to heading
快照能保存卷的当前状态,作为时间点的备份。
创建快照 Jump to heading
从已有卷创建快照:
deno sandbox snapshots create my-volume my-snapshot
你也可以用 volumes snapshot 命令:
deno sandbox volumes snapshot my-volume my-snapshot
列出快照 Jump to heading
列出组织内所有快照:
deno sandbox snapshots list
可以搜索特定快照:
deno sandbox snapshots list my-snapshot
删除快照 Jump to heading
不再需要快照时删除它:
deno sandbox snapshots delete my-snapshot
切换组织 Jump to heading
deno sandbox switch 命令允许你在配置中切换不同的组织:
deno sandbox switch
这在管理多个组织时非常实用。
交互式访问 Jump to heading
当你需要在沙箱内交互式工作,比如编辑文件、调试问题或探索环境时,可以用 deno sandbox ssh:
deno sandbox ssh 550e8400-e29b-41d4-a716-446655440000
这给你一个沙箱内部的完整 Linux shell,可以使用任何命令行工具,用 vim 或 nano 编辑文件,监视进程,安装额外软件等。断开连接后沙箱仍会继续运行,你可以稍后重新连接,或用其他命令远程操作。
管理沙箱超时 Jump to heading
延长沙箱时长 Jump to heading
有时你可能需要更多时间来完成当前沙箱中的工作。deno sandbox extend 命令允许你在不中断正在运行的进程的情况下延长沙箱超时:
deno sandbox extend 550e8400-e29b-41d4-a716-446655440000 30m
extend 命令与沙箱的任何状态无缝配合;无论你是 SSH 登录中、运行远程命令,还是有后台进程,都能保证所有活动连接和进程不中断,同时更新沙箱的过期时间。
清理与终止 Jump to heading
当完成沙箱工作时,使用 deno sandbox kill(或 deno sandbox rm)终止它并释放资源:
deno sandbox kill 550e8400-e29b-41d4-a716-446655440000
这会立即停止沙箱内所有进程并释放资源。务必在终止沙箱前保存所有重要工作,因为沙箱内的所有数据都会丢失。
常见工作流程 Jump to heading
开发与测试 Jump to heading
典型的开发流程是创建一个包含你的代码的沙箱,设置依赖,然后运行测试:
deno sandbox create --copy ./my-app
创建后,使用返回的沙箱 ID 来设置并测试项目:
deno sandbox exec 550e8400-e29b-41d4-a716-446655440000 --cwd /app npm install
deno sandbox exec 550e8400-e29b-41d4-a716-446655440000 --cwd /app npm test
当你在本地有修改时,可以更新沙箱,完成后再取回生成文件:
deno sandbox copy ./src/ 550e8400-e29b-41d4-a716-446655440000:/app/src/
deno sandbox copy 550e8400-e29b-41d4-a716-446655440000:/app/build/ ./dist/
deno sandbox kill 550e8400-e29b-41d4-a716-446655440000
数据处理 Jump to heading
针对需要获取结果的数据处理工作流,结合远程执行和 SSH 访问使用:
SANDBOX_ID=$(deno sandbox create --timeout 20m --copy ./data)
deno sandbox exec $SANDBOX_ID --cwd /app "deno run -A main.ts"
你也可以利用管道直接将数据流输入沙箱进程,适合大数据集或实时处理:
SANDBOX_ID=$(deno sandbox create --timeout 20m --copy ./processing-scripts)
curl -s https://api.example.com/data.json | deno sandbox exec $SANDBOX_ID --cwd /app jq '.items[] | select(.active)'
或者在管道中结合本地和远程处理:
grep "ERROR" /var/log/app.log | deno sandbox exec $SANDBOX_ID --cwd /app "deno run -A main.ts" | sort | uniq -c
要获取结果,复制生成文件回本地,再清理沙箱:
deno sandbox copy $SANDBOX_ID:/app/results/*.csv ./output/
deno sandbox kill $SANDBOX_ID