Manage CapRover PaaS instances via API: create/update apps, deploy from Docker image or custom Dockerfile (tar file), configure ports, volumes, env vars, and serviceUpdateOverride for Docker Swarm settings. Use when the user wants to deploy, configure, or diagnose an app on a CapRover server — including setting up TCP ports for non-HTTP servers (game servers, databases), mounting persistent volumes, building custom Docker images on the host, or reading build/runtime logs.
CapRover 是一个自托管的平台即服务(PaaS),它封装了 Docker Swarm。它提供 REST API 以实现完整的应用生命周期管理。
始终从身份验证开始:
python
import urllib.request, json, ssl
ctx = ssl.createdefaultcontext()
ctx.check_hostname = False
ctx.verifymode = ssl.CERTNONE # CapRover 上常见自签名证书
BASE = https://
def api(path, data=None, token=None, timeout=60):
body = json.dumps(data).encode() if data else None
headers = {Content-Type: application/json}
if token:
headers[x-captain-auth] = token
req = urllib.request.Request(f{BASE}{path}, data=body, headers=headers)
resp = urllib.request.urlopen(req, context=ctx, timeout=timeout)
return json.loads(resp.read())
token = api(/api/v2/login, {password:
所有端点请参见 references/api.md。现成的辅助类请参见 scripts/caprover.py。
python
api(/api/v2/user/apps/appDefinitions/register,
{appName: myapp, hasPersistentData: False}, token)
如果应用需要持久卷,请设置 hasPersistentData: True。
python
api(/api/v2/user/apps/appDefinitions/update,
{appName: myapp, imageName: nginx:latest}, token)
api(/api/v2/user/apps/appData/myapp/redeploy,
{appName: myapp, gitHash: }, token)
将 captain-definition、Dockerfile 和支持文件打包成 .tar.gz,然后 POST:
python
with open(app.tar.gz, rb) as f:
tar_data = f.read()
boundary = ----FormBoundaryCaprover
body = (
f--{boundary}\r\n
fContent-Disposition: form-data; name=sourceFile; filename=app.tar.gz\r\n
fContent-Type: application/octet-stream\r\n\r\n
).encode() + tar_data + f\r\n--{boundary}--\r\n.encode()
req = urllib.request.Request(
f{BASE}/api/v2/user/apps/appData/myapp,
data=body,
headers={
Content-Type: fmultipart/form-data; boundary={boundary},
x-captain-auth: token,
},
)
resp = urllib.request.urlopen(req, context=ctx, timeout=180)
这会在 CapRover 主机上原生构建镜像——对于预构建的 amd64 镜像无法运行的 ARM64 主机至关重要。
python
api(/api/v2/user/apps/appDefinitions/update, {
appName: myapp,
envVars: [{key: MY_VAR, value: hello}],
ports: [{hostPort: 25565, containerPort: 7777}],
volumes: [{containerPath: /data, volumeName: myapp-data}],
instanceCount: 1,
}, token)
⚠️ 端口更新问题:ports 字段更新有时会在 CapRover 上返回 HTTP 500(已知问题)。解决方法:在应用创建时一次性设置端口,或使用 serviceUpdateOverride。
用于标准 API 未暴露的设置——卷挂载、自定义 DNS、资源限制:
python
override = json.dumps({
TaskTemplate: {
ContainerSpec: {
Mounts: [{
Type: volume,
Source: captain--myapp-data, # CapRover 命名:captain--
Target: /data
}]
}
}
})
api(/api/v2/user/apps/appDefinitions/update,
{appName: myapp, serviceUpdateOverride: override}, token)
⚠️ 将 serviceUpdateOverride 设置为 (空字符串)会清除它并移除所有 Docker Swarm 覆盖设置,包括卷挂载。
python
如果 CapRover 主机是 ARM64(uname -m 返回 aarch64):
| 症状 | 可能原因 | 修复方法 |
|---|---|---|
| 端口更新时 HTTP 500 | CapRover 问题 | 在应用创建时设置端口,或使用 serviceUpdateOverride |
| 容器崩溃,无日志 |
python
r = api(/api/v2/user/system/info, token=token)
nodes = r[data][nodes]
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 caprover-management-1776285253 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 caprover-management-1776285253 技能
skillhub install caprover-management-1776285253
文件大小: 9 KB | 发布时间: 2026-4-16 17:50