Files
CLICD/Mofang/README.md
T

10 KiB
Raw Blame History

CLICD 魔方财务对接模块

这是用于智简魔方 / IDCSMART 的 CLICD 服务器模块。模块通过 CLICD API 完成实例开通、删除、开关机、重启、重装、改密、资源变更、流量重置、NAT 端口映射管理、实例信息展示和 WebSSH 入口。

文件结构

clicd.php
README.md
handlers/
  webssh.php
templates/
  info.html
  nat.html

安装时请保持目录结构不变,将整个 clicd 目录放入魔方服务器模块目录:

public/plugins/servers/clicd/

服务器配置

在魔方后台添加服务器时,模块名称选择 clicd

CLICD 面板地址建议使用 HTTPS

主机名 = https://0.0.0.0:8999

也可以拆分填写:

IP地址 = 0.0.0.0
端口      = 8999
secure    = 开启

API Key 可以填写在以下任意一个字段中:

Hash
密码

模块请求 CLICD 时会同时携带:

X-API-Key: clicd_sk_xxxx
Authorization: Bearer clicd_sk_xxxx
Content-Type: application/json

产品配置项

字段 说明
virtualization 虚拟化类型,lxckvm
template_id CLICD 模板 / 镜像 ID
vcpu CPU 核心数
cpu_percent CPU 使用率限制,0 表示不额外限制
ram_mb 内存,单位 MB
disk_gb 系统盘,单位 GB
network_bw_mbps 带宽,单位 Mbps
traffic_mode total 总流量,或 in_out 入 / 出分开
monthly_traffic_gb 月流量 GB
traffic_in_gb 入站流量 GBin_out 模式使用
traffic_out_gb 出站流量 GBin_out 模式使用
io_speed_mbps 磁盘 IO 限制,0 表示不限制
port_mapping_count 开通时分配的 NAT 端口数量,最小 2
snapshot_limit 快照配额
extra_ports 额外映射的容器端口,逗号分隔,例如 80,443
assign_ipv6 开通时是否自动分配 IPv6
sync_expiry 是否同步魔方到期时间到 CLICD

客户产品的 domain 会作为 CLICD 容器名称。模块会自动把不适合作为容器名的字符替换为 -

开通后字段同步

开通、同步、重装、改密后,模块会从 CLICD 容器详情拉取最新信息并写回魔方主机表:

魔方字段 写入内容
dedicatedip NAT 外网 IP,优先使用 API 返回的公网字段,否则使用服务器 IP
username 固定写入 root
password CLICD 返回的 SSH 密码,兼容魔方 cmf_encrypt()
port CLICD 返回的 ssh_port
domainstatus CLICD 状态为 running 时写 Active,否则写 Suspended

如果接口返回的密码是 *** 这类脱敏值,模块不会覆盖魔方里已有密码。

客户区页面

模块提供两个客户区选项卡:

实例信息
NAT转发

客户区按钮提供:

WebSSH

实例信息

实例信息页展示:

  • 实例名称、运行状态、SSH 地址、IPv6
  • CPU、内存、负载、磁盘圆环状态
  • 月流量进度
  • CPU 使用率、内存使用、网络流量、磁盘 IO 图表
  • IPv4、SSH 端口、SSH 密码、资源配置、到期时间

图表数据通过客户区懒加载接口获取,不会强制刷新整个魔方页面。页面首次打开会加载一次数据,之后由用户选择是否自动刷新:

不刷新
10 秒
1 分钟
5 分钟
10 分钟

也可以点击“立即刷新”手动刷新一次。当前 CLICD 用量接口返回的是实时值,不是历史数组;图表曲线由客户区前端持续采样生成。若需要打开页面立即显示历史曲线,需要 CLICD 额外提供历史指标接口。

流量显示支持智能单位,小流量会显示 B / KB / MB,大流量显示 GB,例如:

370.5 KB / 100 GB

模块会优先调用:

GET /api/v1/containers/{name}/usage
GET /api/v1/containers/{name}/traffic

如果 /api/v1/containers/{name}/usage 不可用,模块会在容器详情存在 uuid 时尝试兼容:

GET /api/containers/{uuid}/usage

已兼容的常见用量字段包括:

cpu_usage_pct
memory_usage_bytes
disk_usage_bytes
network_rx_bps
network_tx_bps
disk_read_bps
disk_write_bps
rx_used_bytes
tx_used_bytes
total_used_bytes
limit_gb
used_pct

NAT 转发

NAT 转发是独立页面,支持:

  • 查看端口映射
  • 获取随机可用端口
  • 添加端口映射
  • 修改端口映射
  • 删除端口映射

删除端口映射时使用页面内确认弹窗,不使用浏览器自带确认框。

使用的 CLICD API

GET    /api/v1/containers/{id|uuid|name}
GET    /api/v1/containers/{id}/random-port
POST   /api/v1/containers/{id}/port-mappings
PUT    /api/v1/containers/{id}/port-mappings/{index}
DELETE /api/v1/containers/{id}/port-mappings/{index}

添加 / 修改 NAT 映射时必须使用 JSON 请求体,例如:

{
  "container_port": 8080,
  "host_port": 61320,
  "protocol": "tcp",
  "description": "HTTP"
}

WebSSH

WebSSH 按钮会调用:

POST /api/v1/ssh-ticket

请求体:

{
  "container_name": "example-vm"
}

接口返回 60 秒有效票据后,模块会打开本地 handler:

/plugins/servers/clicd/handlers/webssh.php

浏览器会从该页面直连 CLICD

wss://0.0.0.0:8999/api/ssh?container=example-vm
Sec-WebSocket-Protocol: clicd-ticket.xxxxx

注意:WebSSH 受浏览器安全策略和 CLICD 后端 Origin 校验影响。魔方客户区通常是 HTTPS,因此 CLICD 面板也必须启用 HTTPS/WSS。请把魔方服务器配置里的 主机名 改为 https://0.0.0.0:8999,或把 secure 设为 开启

新版 CLICD 已支持 WebSSH Origin 放行。部署时需要在 CLICD 后端把魔方财务客户区域名加入 WebSSH Origin 白名单,例如:

https://www.example.com

如果 WebSSH 页面显示 WebSocket errorDisconnected code=1006,但直接以 CLICD 自身 Origin 测试能返回 101 Switching Protocols,通常说明 CLICD 后端未放行魔方客户区域名的 WebSocket Origin。此时请检查 CLICD 的 WebSSH Origin 白名单配置;前端页面无法伪造浏览器 Origin。

支持的魔方操作

魔方操作 CLICD API
连接测试 GET /api/v1/dashboard
开通 POST /api/v1/containers
删除 DELETE /api/v1/containers/{name}/delete
开机 POST /api/v1/containers/{name}/start
关机 POST /api/v1/containers/{name}/stop
重启 POST /api/v1/containers/{name}/restart
重装 POST /api/v1/containers/{name}/reinstall
改密 POST /api/v1/containers/{name}/reset-password
重置流量 POST /api/v1/containers/{name}/traffic-reset
变更资源 PUT /api/v1/containers/{name}/resource-limit
变更流量 PUT /api/v1/containers/{name}/traffic-limit
同步到期 PUT /api/v1/containers/{name}/expiry
WebSSH POST /api/v1/ssh-ticket

建议 API 权限

API Key 至少需要以下权限,具体名称以 CLICD 后端实际权限系统为准:

dashboard:read
container:read
container:create
container:power
container:delete
container:reinstall
container:password
container:traffic
container:resize
container:port
task:read
ssh-ticket:create

如果 API Key 使用 *admin:*,通常可以覆盖上述权限。

建议先测试的 curl

连接测试:

curl -H "X-API-Key: clicd_sk_xxxx" \
  https://0.0.0.0:8999/api/v1/dashboard

容器详情:

curl -H "X-API-Key: clicd_sk_xxxx" \
  https://0.0.0.0:8999/api/v1/containers/example-vm

资源用量:

curl -H "X-API-Key: clicd_sk_xxxx" \
  https://0.0.0.0:8999/api/v1/containers/example-vm/usage

流量统计:

curl -H "X-API-Key: clicd_sk_xxxx" \
  https://0.0.0.0:8999/api/v1/containers/example-vm/traffic

修改 NAT

curl --location --request PUT \
  "https://0.0.0.0:8999/api/v1/containers/10/port-mappings/1" \
  --header "X-API-Key: clicd_sk_xxxx" \
  --header "Authorization: Bearer clicd_sk_xxxx" \
  --header "Content-Type: application/json" \
  --data-raw '{"container_port":8081,"host_port":61320,"protocol":"tcp","description":"HTTP"}'

创建 WebSSH 票据:

curl --location --request POST \
  "https://0.0.0.0:8999/api/v1/ssh-ticket" \
  --header "X-API-Key: clicd_sk_xxxx" \
  --header "Content-Type: application/json" \
  --data-raw '{"container_name":"example-vm"}'

常见问题

NAT 修改不生效

确认请求体必须是 JSON,不要使用 multipart/form-data。正确请求头:

Content-Type: application/json

图表刚打开只有一条横线

CLICD 当前用量接口返回的是实时值,不是历史序列。页面刚打开时只有一个采样点,所以会显示当前值横线。选择 10 秒 自动刷新或点击“立即刷新”多采样几次后,会逐步形成折线。

流量显示为 0

旧版本只显示 GB,小流量换算后会被四舍五入成 0 GB。当前版本已改为智能单位,会显示 B / KB / MB / GB。

WebSSH 打不开或提示不安全 WebSocket

请确认 CLICD 面板已经启用 HTTPS/WSS,并且魔方服务器配置使用 HTTPS:

server_host = https://0.0.0.0:8999

如果仍然使用 http://,模块会生成 ws:// 地址,HTTPS 客户区页面会被浏览器拦截。

如果 WSS 证书正常但仍返回 Forbidden 或浏览器显示 code=1006,请检查 CLICD 的 WebSSH Origin 白名单。新版 CLICD 已支持放行魔方财务域名,需要把魔方客户区访问域名完整加入白名单,例如:

https://www.example.com

注意需要填写浏览器实际访问魔方客户区时的协议和域名,http / https、带不带 www 都要与实际访问地址一致。

开通后魔方里的 IP、端口、密码不对

执行“同步状态”或重装 / 改密后,模块会重新拉取容器详情。请确认 CLICD 容器详情接口能返回:

ssh_port
ssh_password
status

公网 IP 优先使用 nat_public_ip/public_ip/host_ip/external_ip/node_ip/nat_host 等字段;如果接口没有返回,则使用魔方服务器配置的 IP。