故障排除
这里汇总了按症状分类的原因和处理方法。大多数问题可以通过以下3个命令缩小原因范围。
cd /opt/kopens/plantpulse-studio-docker
bash bin/status.sh # ① 컨테이너 상태 + 헬스 + 세션 수
curl -s localhost:5170/health # ② 서버가 살아 있는가
docker logs --tail 100 plantpulse-studio-server # ③ 무엇이 잘못됐는가
如何查看日志
| 对象 | 命令 |
|---|---|
| 工作室服务器(最重要) | docker logs -f --tail 200 plantpulse-studio-server |
| Web (nginx) | docker logs --tail 100 plantpulse-studio-web |
| 构建器 Sidecar | docker logs --tail 100 plantpulse-studio-agent-server |
| 使用脚本跟踪 | bash bin/logs.sh(默认服务器)· bash bin/logs.sh studio-web |
| 自动备份 | tail -50 dist/backup.log |
| 应用会话容器 | 通过 docker ps --filter label=plantpulse-studio=1 确认名称后执行 docker logs <name> |
按时间范围缩小范围
docker logs --since 30m plantpulse-studio-server
docker logs --since "2026-07-28T09:00:00" plantpulse-studio-server
日志中不会留下密钥
API 密钥和令牌不会记录在日志中(审计日志也只记录指纹而非值)。将日志转交给支持团队时, 只需确认站点名称和设备名称等现场信息即可。
一次性确认此安装“可以做什么”
GET /api/v1/diagnostics (관리자 전용)
对于“画面能显示但 PDF 不生成”“应用打不开”之类的咨询,这是首先应该查看的地方。
{"ok": true,
"os": {"ok": true, "detail": "Debian GNU/Linux 13"},
"chromium": {"ok": true, "detail": "Chromium 153…"},
"pdf": {"ok": true, "detail": "26568 bytes"},
"fontsCjk": {"ok": true, "detail": "15 faces"},
"docker": {"ok": true, "detail": "server 29.8.1"}}
每个项目都有 {ok, detail} ,最上面的 ok 只有在所有项目都为真时才为真。pdf 不是说明,
而是实际生成了一页韩文 PDF 的结果,docker 检查能否启动会话容器。
这是一个与
/health 不同的问题——请不要在画面上轮询/health 是以低成本、高频率询问“是否存活”,而诊断是高成本、低频率询问“能否完成
(实际生成 PDF)”。如果在仪表板上定期调用,这本身就会造成负载。
症状 → 原因快速对照
| 症状 | 常见原因 | 确认 | 处理措施 |
|---|---|---|---|
| Web 画面完全打不开 | 栈已停止运行,或端口 80 被占用 | bash bin/status.shdocker logs plantpulse-studio-web | bash bin/up.sh · 清理其他占用端口 80 的服务 |
| 画面能显示但登录失败 | 引导账户未设置,或无法访问平台 | grep STUDIO_LOCAL_USERS .envcurl -s localhost:5170/health | 在 .env 中指定账户后执行 bash bin/restart.sh |
| 登录突然受阻(稍后重试) | 登录速率限制(每个 IP 每分钟 10 次) | docker logs --tail 50 plantpulse-studio-server | 等待 1 分钟后重试 |
| 健康检查持续 DOWN,日志显示数据库认证错误 | 只修改了 DATABASE_URL 的密码,但未修改数据库中的角色 | docker logs plantpulse-studio-server在外部 PG 中通过 psql 直接连接 | 恢复为原始密码,或先在 PostgreSQL 中修改账户密码 |
| 项目打开失败(500) | 缺少会话运行时镜像 | docker image inspect plantpulse-studio-runtime:latest | 重新执行 bash bin/up.sh(隔离网络导入请使用 bin/load.sh) |
| 预览或部署应用为空白画面(IP 访问) | 防火墙阻止了 5171 端口 | curl -I http://<server-ip>:5171/ | 在防火墙中开放 5171 |
预览为空白画面 + 控制台 Mixed Content | 工作室使用 HTTPS,但应用资源通过 HTTP 请求 | 浏览器开发者工具控制台 | 在代理中添加 X-Forwarded-Proto $scheme → 域名 |
| 修改了代码但预览未更新 | 代理未升级 HMR WebSocket | 开发者工具 → 网络 → WS 请求是否为 101 | 在两个 vhost 中添加 Upgrade/Connection 标头 |
| 构建聊天耗时较长时出现“连接错误: network error” | 代理无传输超时(默认 60 秒) | 检查代理 vhost 配置 | 在两个 vhost 中设置 proxy_read_timeout 3600s |
| 回复不是实时的,而是成块出现 | proxy_buffering 已开启(默认值) | 同上 | proxy_buffering off |
| 使用任何域名访问都跳转到错误的位置 | Web nginx 配置的加载顺序(第一个 server 是默认服务器) | docker exec plantpulse-studio-web ls /etc/nginx/conf.d | 将 vhost 文件名更改为以 zz- 开头 |
| 部署应用中实时数据返回 401 | ①在分离域名之前登录的会话 ②平台密钥未设置 | 尝试注销→重新登录 环境设置 → 平台选项卡 | ①重新登录一次 ②设置 PLATFORM_API_KEY 后执行 bin/restart.sh |
| 已修改密钥但未生效 | 只修改了 .env ,而 docker restart 未重新读取 .env | 环境设置界面中的徽章是否为 환경변수 기본값 | 快速方法 —— 在环境设置界面中输入新密钥(无需重启立即生效)。如果需要修改环境变量,请执行 bash bin/restart.sh(或 docker compose up -d --force-recreate) |
| 应用构建因“Sidecar”错误而失败 | 构建器 Sidecar 未启动 | docker ps --filter name=plantpulse-studio-agent-servercurl -s localhost:8000/health | bash bin/restart.sh · 紧急情况下,在环境设置 → 代理中将构建器引擎切换为内置 |
聊天中显示**「无法连接到 AI 提供商 <address>。请在环境设置 → AI 选项卡中确认地址和密钥。」** | AI 地址或密钥错误,网关宕机 | 环境设置 → AI 选项卡中的连接测试docker logs --tail 50 plantpulse-studio-server | 在画面中修改地址和密钥 — 立即生效(无需重启) |
| 聊天中显示**「未设置 AI 提供商(环境设置)。」** | AI 提供商完全为空 | 环境设置 → AI 选项卡 | 输入地址和密钥后点击[连接测试] |
| 3D 或大型应用构建中途崩溃 | 内存不足(会话容器上限 2 GB,主机可用内存不足) | docker stats · free -h | 减少同时打开的项目 · 增加主机内存 |
| 自动备份未运行 | 未安装 cron,或无法访问数据库 | cat /etc/cron.d/pp-studio-backuptail -50 dist/backup.log | 重新安装 sudo bash bin/install-backup-cron.sh · 使用 DRYRUN=1 bash bin/restore.sh 确认数据库可达性 |
| 磁盘已满 | 备份和构建产物累积 | df -hdu -sh dist /var/lib/pp-studio/* | 减少保留数量(BACKUP_KEEP) · 清理旧备份 |
| 更新后画面仍然显示旧内容 | 浏览器缓存或镜像拉取失败 | 浏览器强制刷新(Ctrl+Shift+R)bash bin/update.sh 输出的拉取结果 | 确认注册表登录后重新执行 bash bin/update.sh |
详细诊断
栈无法启动时
cd /opt/kopens/plantpulse-studio-docker
bash bin/status.sh
docker ps -a --filter name=pp-studio # Exited 인 컨테이너 찾기
docker logs --tail 200 plantpulse-studio-server
如果容器不断重启(Restarting),日志的最后一行包含原因。最常见的是
数据库连接失败和 .env 值错误。
grep -E '^(DATABASE_URL|COMPOSE_PROFILES|PG_|DATA_ROOT|PLATFORM_API_TARGET)' .env
一次性判定安装“是否处于正常状态”
bash bin/smoke-install.sh
按顺序检查健康检查、无认证设置 API、Web 响应、实际登录、会话运行时镜像、容器状态, 并告知第一个失败的项目。
应用会话(项目打开)问题
docker ps --filter label=plantpulse-studio=1 # 지금 떠 있는 세션 컨테이너
docker image inspect plantpulse-studio-runtime:latest >/dev/null && echo "런타임 이미지 OK"
- 会话容器在空闲 30 分钟后会自动回收——列表中不存在并不代表错误。
- 服务器重启后,残留的会话容器会自动清理。
- 多个用户同时打开时会消耗相应的内存(通过
docker stats确认)。
平台(实时数据)连接问题
症状通常是“聊天查询可以,但值不出来”或“设备列表为空”。
- 在环境设置 → 平台选项卡中确认连接状态。
- 确认
.env的PLATFORM_API_TARGET地址是否正确。 - 确认是否已设置
PLATFORM_API_KEY→ 密钥管理 - 在服务器日志中查看平台调用错误。
docker logs --tail 200 plantpulse-studio-server | grep -i platform
当平台暂时不可用时,Watcher 执行会自动跳过(重启后自动恢复)。
域名和代理问题
症状多种多样,但原因通常是 4 个设置中缺少了一项。 请直接对照域名和反向代理中的检查清单。
恢复手段
| 情况 | 处理措施 |
|---|---|
| 配置错误导致栈异常 | 恢复到 .env 后执行 bash bin/restart.sh |
| 数据损坏 | 备份与恢复 — bash bin/restore.sh |
| 更新后出现问题 | 将 .env 的 PP_IMAGE_TAG 固定为先前版本后执行 bash bin/update.sh |
| 部署的应用出现问题 | 在工作室界面的部署历史中回滚到先前版本 |
申请支持时一并发送的内容
cd /opt/kopens/plantpulse-studio-docker
bash bin/status.sh > /tmp/pp-status.txt
docker logs --tail 500 plantpulse-studio-server &> /tmp/pp-server.log
grep -vE 'KEY|TOKEN|PASSWORD' .env > /tmp/pp-env-safe.txt # 비밀 제외본
- 从何时开始,在哪些操作下发生
- 画面截图(包含浏览器开发者工具控制台更佳)
- 安装版本(
.env的PP_IMAGE_TAG,如果为空,则用VERSION的 CalVer)和访问方式(IP / 域名 / 是否有代理)
在发送日志或配置之前
.env 原始文件包含 API 密钥。请按照上述方法创建一个排除机密信息的副本后发送。