Skip to main content
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

你找到了你需要的东西吗?

编辑此页面
隐私政策