daytona-dev

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Skill: Daytona Dev Environment

Skill:Daytona开发环境

Launch the iPolloWork Electron app in a Daytona cloud sandbox. The real desktop app runs on Daytona's XFCE/noVNC desktop stack and is accessible through your browser.
在Daytona云沙箱中启动iPolloWork Electron应用。真实的桌面应用运行在Daytona的XFCE/noVNC桌面栈上,可通过浏览器访问。

Prerequisites

前提条件

  • Daytona CLI installed:
    brew install daytonaio/cli/daytona
    or download from GitHub releases
  • Logged in:
    daytona login
  • Using the right Daytona organization for your workspace:
    daytona organization use "<org-name>"
  • 已安装Daytona CLI:
    brew install daytonaio/cli/daytona
    或从 GitHub releases 下载
  • 已登录:
    daytona login
  • 为工作区使用正确的Daytona组织:
    daytona organization use "<org-name>"

Quick Start

快速开始

1. Create and start the sandbox

1. 创建并启动沙箱

bash
bash .devcontainer/test-on-daytona.sh [branch-or-commit]
The helper uses the VNC snapshot, starts noVNC/Vite/Electron, and prints the URLs. If the snapshot is missing, create it with
bash .devcontainer/create-daytona-ipollowork-snapshot.sh
.
Use the Daytona setup as four reusable pieces. Prefer the focused skills when a request names one piece directly:
  • test-on-daytona.sh
    for the real Electron/noVNC/CDP sandbox.
  • daytona-flow-validator
    for the observe -> act -> assert -> evidence loop.
  • test-server-on-daytona.sh
    for the cloud Den server sandbox.
  • daytona-electron-den
    for Electron connected to a Daytona Den server.
  • daytona-chrome-cdp
    for standalone Chrome in the sandbox, separate from Electron.
  • ipollowork-eval-secrets:/daytona-secrets
    for provider keys and eval-only secrets.
  • ipollowork-eval-artifacts:/daytona-artifacts
    for screenshots, validation notes, and recordings.
Focused skills:
  • daytona-cloud-server
    for cloud server and Den flows.
  • daytona-electron-den
    for two-sandbox Electron + Den validation.
  • daytona-flow-validator
    for pass/fail validation and evidence.
  • daytona-chrome-cdp
    for normal Chrome browser automation in Daytona.
  • daytona-secrets-volume
    for adding or verifying secrets.
  • daytona-electron-test
    for real Electron UI validation.
  • daytona-recording-artifacts
    for screenshots, recordings, and PR evidence.
Or SSH in after the helper prints the sandbox name:
bash
daytona ssh <sandbox>
cd /workspace
bash
bash .devcontainer/test-on-daytona.sh [branch-or-commit]
该辅助脚本会使用VNC快照,启动noVNC/Vite/Electron,并打印URL。如果快照缺失,可通过
bash .devcontainer/create-daytona-ipollowork-snapshot.sh
创建。
将Daytona设置拆分为多个可复用模块。当请求直接指定某一模块时,优先使用对应的专项技能:
  • test-on-daytona.sh
    用于真实的Electron/noVNC/CDP沙箱。
  • daytona-flow-validator
    用于观察 -> 执行 -> 断言 -> 取证的循环流程。
  • test-server-on-daytona.sh
    用于云端Den服务器沙箱。
  • daytona-electron-den
    用于连接到Daytona Den服务器的Electron应用。
  • daytona-chrome-cdp
    用于沙箱中的独立Chrome,与Electron分离。
  • ipollowork-eval-secrets:/daytona-secrets
    用于提供商密钥和仅评估用的密钥。
  • ipollowork-eval-artifacts:/daytona-artifacts
    用于截图、验证笔记和录制文件。
专项技能:
  • daytona-cloud-server
    用于云端服务器和Den流程。
  • daytona-electron-den
    用于双沙箱Electron + Den验证。
  • daytona-flow-validator
    用于通过/失败验证及取证。
  • daytona-chrome-cdp
    用于Daytona中的常规Chrome浏览器自动化。
  • daytona-secrets-volume
    用于添加或验证密钥。
  • daytona-electron-test
    用于真实Electron UI验证。
  • daytona-recording-artifacts
    用于截图、录制文件和PR取证。
或者在辅助脚本打印沙箱名称后,通过SSH连接:
bash
daytona ssh <sandbox>
cd /workspace

2. Get the noVNC URL

2. 获取noVNC URL

bash
daytona preview-url ipollowork-dev -p 6080
Open that URL in your browser. You'll see the real Electron iPolloWork app.
bash
daytona preview-url ipollowork-dev -p 6080
在浏览器中打开该URL,即可看到真实的Electron iPolloWork应用。

4. Get other URLs

4. 获取其他URL

bash
undefined
bash
undefined

Den Web dashboard (if Den stack is running)

Den Web控制台(若Den栈正在运行)

daytona preview-url ipollowork-dev -p 3005
daytona preview-url ipollowork-dev -p 3005

CDP debugging endpoint

CDP调试端点

daytona preview-url ipollowork-dev -p 9825
undefined
daytona preview-url ipollowork-dev -p 9825
undefined

What's Running

运行中的服务

ServicePortDescription
noVNC6080See and interact with the Electron app in your browser
Vite HMR5173Hot module replacement for the React UI
CDP9825Chrome DevTools Protocol — for automation
Den Web3005Admin dashboard (only if MySQL is available)
Den API8788Control plane (only if MySQL is available)
服务端口描述
noVNC6080在浏览器中查看并交互Electron应用
Vite HMR5173React UI的热模块替换
CDP9825Chrome DevTools Protocol — 用于自动化
Den Web3005管理控制台(仅当MySQL可用时)
Den API8788控制平面(仅当MySQL可用时)

Running with Den (full stack)

结合Den运行(全栈)

The devcontainer's
docker-compose.yml
includes MySQL. If you're using Daytona's raw sandbox mode (no Docker Compose), the Den stack won't start because there's no MySQL. Two options:
开发容器的
docker-compose.yml
包含MySQL。如果使用Daytona的原生沙箱模式(无Docker Compose),由于没有MySQL,Den栈将无法启动。有两种选择:

Option A: Daytona sandbox + production Den

选项A:Daytona沙箱 + 生产环境Den

Just point the app to the production Den:
  1. Open the app via noVNC
  2. Sign in normally (uses production
    app.ipolloworklabs.com
    )
  3. All cloud features work
只需将应用指向生产环境Den:
  1. 通过noVNC打开应用
  2. 正常登录(使用生产环境
    app.ipolloworklabs.com
  3. 所有云功能均可使用

Option B: Daytona sandbox + local Den

选项B:Daytona沙箱 + 本地Den

If you need a local Den (for testing customization, restrictions, etc.):
  1. Use the
    docker-compose.yml
    approach (requires Docker-in-Docker)
  2. Or run Den on your local machine and tunnel to the sandbox
如果需要本地Den(用于测试自定义功能、限制等):
  1. 使用
    docker-compose.yml
    方式(需要Docker-in-Docker)
  2. 或在本地机器上运行Den并通过隧道连接到沙箱

Common Commands

常用命令

bash
undefined
bash
undefined

List running sandboxes

列出运行中的沙箱

daytona list
daytona list

SSH into sandbox

SSH连接到沙箱

daytona ssh ipollowork-dev
daytona ssh ipollowork-dev

Check logs

查看日志

daytona exec ipollowork-dev 'tail -50 /tmp/electron.log' daytona exec ipollowork-dev 'tail -50 /tmp/vite.log' daytona exec ipollowork-dev 'tail -50 /tmp/start-vnc.log'
daytona exec ipollowork-dev 'tail -50 /tmp/electron.log' daytona exec ipollowork-dev 'tail -50 /tmp/vite.log' daytona exec ipollowork-dev 'tail -50 /tmp/start-vnc.log'

Inspect Electron CDP targets

检查Electron CDP目标

daytona exec ipollowork-dev 'curl -s http://127.0.0.1:9825/json/list'
daytona exec ipollowork-dev 'curl -s http://127.0.0.1:9825/json/list'

Capture a persistent screenshot artifact

捕获持久化截图制品

daytona exec ipollowork-dev 'bash .devcontainer/capture-daytona-screenshot.sh'
daytona exec ipollowork-dev 'bash .devcontainer/capture-daytona-screenshot.sh'

Restart just the Electron app

仅重启Electron应用

daytona exec ipollowork-dev 'bash -lc "pkill -f electron || true; pkill -f electron-dev || true"' daytona exec ipollowork-dev 'bash -lc "cd /workspace && bash /opt/ipollowork-daytona/start-daytona-electron.sh --detach"'
daytona exec ipollowork-dev 'bash -lc "pkill -f electron || true; pkill -f electron-dev || true"' daytona exec ipollowork-dev 'bash -lc "cd /workspace && bash /opt/ipollowork-daytona/start-daytona-electron.sh --detach"'

Stop the sandbox (preserves state)

停止沙箱(保留状态)

daytona stop ipollowork-dev
daytona stop ipollowork-dev

Start it again

重新启动沙箱

daytona start ipollowork-dev
daytona start ipollowork-dev

Delete (destroys everything)

删除沙箱(销毁所有内容)

daytona delete ipollowork-dev
undefined
daytona delete ipollowork-dev
undefined

Updating the Code

更新代码

Inside the sandbox, the repo is at
/workspace
. To pull latest:
bash
daytona ssh ipollowork-dev
cd /workspace
git pull origin dev
pnpm install
在沙箱内,代码仓库位于
/workspace
。如需拉取最新代码:
bash
daytona ssh ipollowork-dev
cd /workspace
git pull origin dev
pnpm install

Then restart Vite/Electron

然后重启Vite/Electron

undefined
undefined

Troubleshooting

故障排查

Electron shows blank window: Vite might not be running. Check
tail /tmp/vite.log
. Restart with:
bash
cd /workspace/apps/app && IPOLLOWORK_DEV_MODE=1 nohup npx vite --host 0.0.0.0 --port 5173 > /tmp/vite.log 2>&1 &
noVNC shows black screen: Xvfb/XFCE may have crashed. Restart the desktop stack:
bash
bash /opt/ipollowork-daytona/start-daytona-vnc.sh
"no space left on device" when creating sandbox: Use
--disk 10
. The default Daytona disk can be 3 GB, which is not enough for iPolloWork dependencies and sidecar prep. Also don't use
--context .
— it uploads the entire repo (with worktrees, node_modules). Use individual
--context
flags for just the files needed.
Electron can't connect to localhost:5173: Vite must listen on
0.0.0.0
, not just
localhost
. The start script handles this, but if running manually use
npx vite --host 0.0.0.0
.
Electron显示空白窗口: Vite可能未运行。查看
tail /tmp/vite.log
。通过以下命令重启:
bash
cd /workspace/apps/app && IPOLLOWORK_DEV_MODE=1 nohup npx vite --host 0.0.0.0 --port 5173 > /tmp/vite.log 2>&1 &
noVNC显示黑屏: Xvfb/XFCE可能已崩溃。重启桌面栈:
bash
bash /opt/ipollowork-daytona/start-daytona-vnc.sh
创建沙箱时提示“no space left on device”: 使用
--disk 10
参数。Daytona默认磁盘可能为3GB,不足以容纳iPolloWork依赖项和辅助服务准备。另外不要使用
--context .
—— 它会上传整个仓库(包含工作树、node_modules)。应使用单独的
--context
标志仅上传所需文件。
Electron无法连接到localhost:5173: Vite必须监听
0.0.0.0
,而不仅仅是
localhost
。启动脚本已处理此问题,但如果手动运行,请使用
npx vite --host 0.0.0.0