Token导航 LogoToken导航TokenDH.com
fleet (Wrxck) logo
运维云端未说明官方级别未说明来源级核验

fleet (Wrxck)

MCP Server

fleet是一个用于管理Docker Compose应用的CLI工具和MCP服务器,提供系统d编排、nginx路由、加密秘密、健康监控等功能。

工具数

0

提示词数

0

GitHub Stars

17

资源数

0
TypeScriptClaude云端部署Claude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

wrxck

提供方

wrxck

最后核验

2026/5/17 20:22

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

舰队

![audited by auto-audit](https://auto-audit.hesketh.pro)

Docker生产管理CLI+MCP服务器

![CI](https://github.com/wrxck/fleet/actions/workflows/ci.yml) ](https://www.npmjs.com/package/@matthesketh/fleet) ](https://nodejs.org) ![TypeScript](https://www.typescriptlang.org/) ![License](LICENSE)

在单个服务器上管理Docker Compose应用程序——systemd编排、nginx路由、年龄加密密钥、健康监控、依赖性跟踪、Git工作流和用于AI辅助操作的MCP服务器。

文档 -- --

______________________________________________________________________

建筑

graph TD
    CLI["fleet CLI"]
    TUI["TUI Dashboard"]
    MCP["MCP Server"]
    BOT["fleet-bot (Go)"]

    CLI --> Core
    TUI --> Core
    MCP --> Core
    BOT -->|"via MCP"| Core

    subgraph Core["Core Modules"]
        Registry["Registry"]
        Docker["Docker Compose"]
        Systemd["systemd"]
        Nginx["nginx"]
        Secrets["Secrets Vault"]
        Health["Health Checks"]
        Git["Git / GitHub"]
        Deps["Dependency Monitor"]
    end

    Docker --> Containers["Containers"]
    Systemd --> Services["systemd Services"]
    Nginx --> Proxy["Reverse Proxy"]
    Secrets --> Vault["vault/*.age"]
    Secrets --> Runtime["/run/fleet-secrets"]
    Health --> Alerts["Telegram / iMessage"]

每个Docker Compose应用程序都注册了其编写路径、域、端口和容器名称。Fleet生成systemd单位,以便应用程序在启动时以正确的顺序启动。秘密在静止时用加密 年龄 并在启动时解密为tmpfs。

安装

npm install -g @matthesketh/fleet

主要特点

部署和管理应用程序 -- fleet deploy 在一个命令中注册、构建和启动应用程序。控制服务 start, stop, restart,以及 logs.

加密的秘密 --具有自动备份、预密封验证、漂移检测和原子回滚功能的年龄加密保管库。启动时解密为tmpfs——机密永远不会触及磁盘。

Nginx路由 --使用以下命令生成代理、SPA或Next.js服务器块 fleet nginx add.自动配置测试和重新加载。

健康监测 --三层检查(systemd+容器+HTTP) fleet healthThe watchdog 命令在cron上运行,并在失败时发送警报。

依赖关系扫描 --检测所有注册应用程序中的过时包、CVE(通过OSV)、Docker映像更新和运行时EOL。

Git工作流 --将应用程序安装到GitHub,从CLI管理分支、PR和版本。

交互式仪表盘 --裸奔 fleet 启动具有实时状态的全屏TUI。

请参阅 CLI参考 查看完整的命令列表。

秘密流

graph LR
    Import["fleet secrets import"]
    Set["fleet secrets set"]

    Import --> Encrypt["age encrypt"]
    Set --> Encrypt

    Encrypt --> Vault["vault/*.age"]
    Vault -->|"boot / fleet secrets unseal"| Decrypt["age decrypt"]
    Decrypt --> Runtime["/run/fleet-secrets (tmpfs)"]
    Runtime -->|"env_file / secrets"| Containers["Docker Containers"]

    Runtime -->|"fleet secrets seal"| Encrypt
    Vault -.->|"drift detection"| Runtime

秘密被单独导入或设置,随年龄加密,并存储在保险库中。在引导(或手动)时,它们被解密为Docker容器引用的tmpfs挂载。密封将运行时更改写回vault。漂移检测将vault与运行时进行比较,以捕获未保存的更改。

每次秘密轮换(v1.6)

每个秘密都携带元数据(lastRotated, provider, strategy)因此,舰队知道什么时候会变质,以及如何安全地轮换。

fleet secrets ages []            # what's stale, who owns it, when last rotated
fleet secrets ages --motd             # MOTD-formatted summary
fleet secrets motd-init               # install /etc/update-motd.d/99-fleet-secrets

fleet secrets rotate  []    # interactive walkthrough, [--dry-run] [--no-restart]
fleet secrets rollback           # restore latest snapshot, [--to ]
fleet secrets snapshots          # list available snapshots
fleet secrets rotate-key              # legacy: rotate the AGE master key

旋转策略(从秘密名称自动检测,请参阅 src/core/secrets-providers.ts):

策略示例行为
immediateSTRIPE_SECRET_KEY, GITHUB_TOKEN, OPENAI_API_KEY替换旧模具
dual-modeJWT_SECRET, NEXTAUTH_SECRET, SESSION_SECRET新成为主要, 老保持为 _PREVIOUS 因此,现有的用户会话在宽限期内保持有效(您的应用程序必须同时读取这两个数据以进行验证)
at-rest-keyENCRYPTION_KEY, FIELD_ENCRYPTION_KEY拒绝,除非 --data-migrated 已通过(您必须先重新加密存储的数据)
user-issuedUSER_API_TOKEN, CUSTOMER_API_KEYS拒绝-在应用程序内按用户轮换

每次旋转时的安全轨道:

  • 旋转前快照 vault/.snapshots/-.env.age (原子复制+重命名)
  • 隐藏输入提示;新值从未完全响应(仅 prefix…suffix (N chars) 确认)
  • 根据提供程序正则表达式进行格式验证(捕获粘贴拼写错误)
  • 熵检查拒绝占位符(changeme, password,所有字符相同,\ # interactive: retention/size/level

fleet logs setup --all # bulk default (7d / 100MB / info) fleet logs status [] # per-container size, driver, policy applied fleet logs prune # vacuum journald + truncate runaway json-file logs fleet logs --since 30m --grep err --level warn # filtered tail


`fleet logs setup` 写 `/.fleet/logging.override.yml` 使用json文件驱动程序选项进行旋转。要激活,请在编写启动命令(或舰队的systemd单元)中包含覆盖。

MCP工具——所有代币都是保守的,默认值很小 `truncated` 旗帜:

- `fleet_logs_recent(app, lines=50, level=warn, sinceMinutes=15)` --有界尾
- `fleet_logs_summary(app, sinceMinutes=60)` --计数+前10条不同的错误消息
- `fleet_logs_search(app, query, sinceMinutes=60, maxResults=20)` --有界grep
- `fleet_logs_status(app?)` --驾驶员+每个集装箱的尺寸
- `fleet_egress_snapshot(app)` --出境目的地+违规行为

### 出口观察(v1.6)

fleet egress observe # snapshot current outbound flows via nsenter+ss fleet egress show # show config + allowlist fleet egress allow # add to allowlist (supports *.host wildcards)


v1是 **仅观察** --它从不阻止数据包,因此没有破坏应用程序的风险。通过以下方式读取每个容器的网络命名空间 `nsenter` 因此,它看到了真正的容器出口(而不仅仅是主机侧的NAT流)。反向将远程IP解析为主机名。RFC1918目的地不算作违规。

`enforce` 模式(通过nftables进行实际默认拒绝)被推迟到未来阶段——根据设计,它要求操作员明确地升级一个影子清理应用程序,从不自动升级。

## 部署流程

graph TD Deploy["fleet deploy app-dir"] Deploy --> Register{"Already\nregistered?"} Register -->|No| Add["Register app"] Register -->|Yes| Build Add --> Build["docker compose build"] Build --> Start{"Service\nrunning?"} Start -->|No| StartSvc["systemctl start"] Start -->|Yes| Restart["systemctl restart"] StartSvc --> Healthy["App deployed"] Restart --> Healthy


## 启动刷新

在每次启动systemd(包括重新启动)时,Fleet都会从GitHub中提取最新代码,并在启动容器之前根据需要重建映像。该流程完全是故障安全的:任何步骤的任何故障(脏工作树、无远程、获取错误、非快进合并、构建失败或900秒的挂钟超时)都会被记录下来,并转化为普通故障 `docker compose up` 与现有图像。容器将始终启动。

**新命令**

|命令|描述|
|---------|-------------|
| `fleet boot-start ` |入口点systemd现在调用(`ExecStart`).然后运行刷新 `docker compose up`。通常不用手操作。 |
| `fleet rollback ` |重新标记 `:fleet-previous` → `:latest` 并重新启动服务。Fleet在每次构建之前自动标记上一个图像。 |
| `fleet patch-systemd` |重写 `ExecStart` 在所有要使用的已安装单元文件中 `fleet boot-start`,套 `TimeoutStartSec=900`,并将原件备份到 `
.service.bak`. |
| `fleet patch-systemd --rollback` |恢复全部 `.bak` 单元文件和运行 `daemon-reload`. |

**紧急停止开关**

要完全禁用启动刷新,请执行以下操作 `systemctl start` 直接进入 `docker compose up`:

sudo touch /etc/fleet/no-auto-refresh


删除文件以重新启用。

**注册表字段: `lastBuiltCommit`**

注册表中的每个应用程序都存储上次构建的Git提交。舰队启动了这个 `fleet deploy` 以及每次成功的启动刷新构建。启动刷新跳过 `docker compose build` 当HEAD已经匹配此值时,在没有代码更改的情况下保持快速启动。

**升级后的首次启动**

任何带有 `lastBuiltCommit` unset将在升级到此版本后首次启动时触发完全重建。预计这些应用程序的首次启动时间会更长。

**回收逃生口**

|形势|行动|
|-----------|--------|
|一个应用程序在构建后出现异常| `fleet rollback ` |
|注册表损坏|自动加载 `.bak` 下次阅读|
|启动行为存在广泛问题| `sudo touch /etc/fleet/no-auto-refresh` |
|最坏情况——还原所有单元文件| `fleet patch-systemd --rollback` |

## MCP服务器

Fleet通过 [模型上下文协议](https://modelcontextprotocol.io/) 用于人工智能辅助服务器管理。跑 `fleet mcp` 要启动stdio服务器,或将其安装到Claude Code中:

sudo fleet install-mcp


工具涵盖了整个表面区域:应用程序生命周期、秘密、nginx、Git、健康检查和依赖关系监控。请参阅 [MCP文件](https://fleet.hesketh.pro/mcp/) 查看完整的工具列表。

## 舰队机器人

Go伴侣机器人(`bot/`)它通过Telegram或iMessage提供远程服务器管理。它运行Claude Code会话,可以访问车队的MCP工具进行免提操作。

请参阅 [bot文档](https://fleet.hesketh.pro/bot/setup/) 有关设置说明。

## 自我更新

当 `fleet`的TUI发布它做了一个非阻塞 `git fetch` 反对 `origin/develop`。如果本地回购落后,则标题下会出现一个横幅:

↑ Update available: 3 commits ahead — feat: ... Press U to install.


按压 `U` 跑 `git pull --ff-only` 然后 `npm run build` (如果工作树很脏,则拒绝)。新的二进制文件将在下一个版本中上线 `fleet …` 调用。对于长时间运行的TUI会话,每30分钟进行一次复查。

## 测试

npm test # unit + mocked tests (1106 passing) FLEET_INTEGRATION=1 npm test # also runs boot-refresh integration tests (1156 passing, 0 skipped)


集 `FLEET_INTEGRATION=1` 选择进入真正的systemd/docker集成测试。在CI中默认跳过。

## 发展

git clone https://github.com/wrxck/fleet.git cd fleet npm install npm test # vitest npm run build # compile TypeScript to dist/ npm run dev # run with tsx (no build needed)


## 许可证

麻省理工学院

目录标签

目录标签

TypeScriptClaude云端部署Docker管理本地部署容器编排CLI工具秘密管理健康监控

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

none

部署方式(deploymentType,部署类型)

local-only

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明nonelocal-only

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP