Files
曾志威 9da95beb42
continuous-integration/drone Build is failing
feat: refine management UI, connection diagnostics and local startup
Migrate the workspace to React and Ant Design, improve account forms and responsive layouts, support outbound diagnostics and SSH fingerprint confirmation, and persist the management startup port. Preserve database migrations, remove S3 settings storage, and improve gateway audit handling.
2026-10-13 19:43:23 +08:00

276 lines
34 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# linkport 模块说明
本文按当前源码整理,帮助使用者理解功能,也帮助维护者找到修改入口。核对日期:2026-09-27。
全模块重构的模式、扩展规则、实际拆分与保留清单见 [设计模式与扩展边界](architecture-patterns.md)。
## 1. 核心对象
| 对象 | 负责什么 | 典型配置 | 使用的账号 |
| --- | --- | --- | --- |
| 网关服务 Gateway | 对客户端开放监听端口,认证客户端,执行访问策略,再转发请求 | 监听地址和端口、协议、目标引用、来源限制、连接上限 | 网关账号:客户端连接 linkport 时填写 |
| 目标服务 Target | 描述真正要访问的数据库、服务器或 HTTP 服务 | 目标地址和端口、TLS、目标账号、SSH 身份校验、出口引用 | 目标账号:linkport 登录上游服务时使用 |
| 代理出口 Outbound | 决定 linkport 通过什么网络路径到达目标 | 直连、SOCKS5、SSH 跳板机、sing-box 单 outbound、Kubernetes port-forward | 出口凭据:登录代理或访问 Kubernetes 时使用 |
| 文件资产 Asset | 集中保存可复用的文件凭据与证书 | Kubeconfig、SSH 私钥、公钥列表、用户证书、TLS/CA 证书、其他文本配置 | 由目标、账号和出口按类型引用 |
一个目标可以被多个同协议网关复用,一个网络代理可以被多个目标或 TCP 纯转发网关引用。「代理管理」独立维护 Kubeconfig、SSH、SOCKS5 和 sing-box,类型在创建表单顶部直接选择;文件仅作为凭据保留。普通协议网关的每个网关账号一对一选择目标账号后才能启动,并沿用目标的代理;Redis、MongoDB 和 TCP 的空账号也作为明确映射端点。TCP 纯转发可用 `tcpForward.mode="proxy"` 直接引用网络代理。详见 [网络代理管理](network-proxies.md)。
例如:客户端用网关账号 `reporter` 连接本机 MySQL 网关,网关选择目标账号 `db_reader`,通过 SSH 跳板机连接内网 MySQL。网关密码、数据库密码和跳板机密码是三组独立凭据。
## 2. 管理请求与业务流量的关系
```mermaid
flowchart LR
UI[浏览器管理界面] --> API[internal/api 管理接口]
API --> Store[internal/store 配置与审计存储]
API --> Manager[internal/gateway 运行管理]
Client[数据库或 SSH 等业务客户端] --> Manager
Manager --> Protocol[internal/protocol 协议处理]
Protocol --> Outbound[internal/outbound 网络出口]
Outbound --> Target[真实目标服务]
Protocol -. 命令审计与认证事件回调 .-> Manager
Manager --> Store
Alerts[internal/alerts 告警引擎] --> Manager
Alerts --> Store
```
管理接口负责配置、权限和操作;业务客户端直接连接网关监听端口。协议模块通过 `model.Handler` 接口提供 `Serve` 和 `Test`,通过传入的 `DialFunc` 使用网络出口,通过上下文和回调上报审计及事件。
## 3. 启动、桌面与基础设施
下文源码链接均相对于本文所在目录,可直接点击定位。
| 模块 / 入口 | 职责 | 什么时候看这里 |
| --- | --- | --- |
| [cmd/linkport/main.go](../cmd/linkport/main.go) | 组合根;准备数据锁与存储、创建协议工厂和运行管理器,协调命令与服务生命周期 | 修改启动编排 |
| [commands.go](../cmd/linkport/commands.go)、[bootstrap.go](../cmd/linkport/bootstrap.go)、[management.go](../cmd/linkport/management.go) | 独立/维护命令分派、TLS 与网关恢复、管理 HTTP/桌面/信号/定期清理 | 调整命令或运行生命周期 |
| [cmd/devcert/main.go](../cmd/devcert/main.go) | 独立开发证书工具,调用证书模块生成本机测试证书 | 生成开发 TLS 材料 |
| [internal/desktop](../internal/desktop) | Windows/macOS/Linux 本地模式;数据目录、数据库文件权限与进程锁、首次管理员设置和打开浏览器 | 排查本机启动、首次设置与跨平台运行 |
| [internal/localcert/cert.go](../internal/localcert/cert.go) | 生成 localhost 开发 TLS 证书及私钥 | 调整开发证书生成规则;正式证书由部署者提供 |
| [internal/security/vault.go](../internal/security/vault.go) | AES-GCM 加解密、32 字节主密钥校验及安全随机令牌;用用途标识绑定密文 | 修改配置加密基础能力;个人登录密码校验在 store/store.go |
| [internal/buildinfo/version.go](../internal/buildinfo/version.go) | 组织版本、提交、构建时间、Go 版本和平台信息 | CLI、API 与界面版本展示 |
| [version.go](../version.go)、[VERSION](../VERSION) | 根包嵌入默认版本值,供构建信息模块读取 | 更新项目版本 |
| [web/embed.go](../web/embed.go) | 将 Vite 构建出的 web/dist 嵌入 Go 程序并提供静态文件服务 | 排查打包后页面缺失;须先构建前端,再编译 Go |
## 4. 数据模型:internal/model
模型层定义配置结构、合并规则、校验和协议公共接口,供 API、存储及运行层共同使用。
| 文件 | 负责什么 |
| --- | --- |
| [proxy.go](../internal/model/proxy.go) | 网关运行时配置快照及出口、SSH 公共配置结构 |
| [runtime.go](../internal/model/runtime.go) | Handler、DialFunc、EventFunc、TestResult 等协议运行契约 |
| [target.go](../internal/model/target.go) | 目标结构,将目标配置组合进运行时网关;GatewayOnly 去掉网关记录里的上游材料 |
| [target_account.go](../internal/model/target_account.go)、[target_auth.go](../internal/model/target_auth.go) | 目标多账号、密码/空密码/SSH 私钥认证、支持协议的无认证模式、账号选择和凭据更新规则 |
| [gateway_account.go](../internal/model/gateway_account.go) | 网关账号结构、选择与目标映射、权限上限、多账号校验、稳定 ID 和编辑时保留已存秘密的规则 |
| [credential_lifecycle.go](../internal/model/credential_lifecycle.go) | 凭据到期与提醒、目标账号引用校验、账号映射和运行时凭据有效性检查 |
| [outbound_profile.go](../internal/model/outbound_profile.go)、[sing_box.go](../internal/model/sing_box.go)、[kubernetes.go](../internal/model/kubernetes.go) | 可共享的出口配置与合并校验;sing-box 单对象、大小、复杂度和宿主能力限制;Kubernetes 资源、命名空间和配置字段校验 |
| [validation.go](../internal/model/validation.go) | 协议、地址、端口、来源范围、访问模式等公共配置校验 |
| [audit.go](../internal/model/audit.go) | 命令审计结构与上下文回调,使协议模块可以上报命令而无需直接操作数据库 |
## 5. 管理接口:internal/api
业务接口统一位于 `/api/v1/`;`/healthz` 和 `/readyz` 是独立探针路径。API 校验会话或 Token 权限,进行输入校验,再调用存储或运行模块。
| 文件 | 接口 / 功能 | 负责什么 |
| --- | --- | --- |
| [server.go](../internal/api/server.go) | 公共请求入口 | 服务状态、后台任务装配、安全响应头、来源检查及请求管线协调 |
| [authorization.go](../internal/api/authorization.go)、[routes.go](../internal/api/routes.go) | 认证与路由管线 | Bearer/本地/cookie 身份适配、CSRF、按请求传递会话 ID、路由优先级和配置操作串行锁 |
| [http_helpers.go](../internal/api/http_helpers.go) | 公共 HTTP 工具 | 请求大小限制、JSON 解码、统一响应和错误、来源地址提取 |
| [auth.go](../internal/api/auth.go) | login、logout、reveal-password | 登录限流、登录认证、会话退出、查看秘密前的身份校验 |
| [tokens.go](../internal/api/tokens.go)、[token_response.go](../internal/api/token_response.go) | tokens、Bearer Token 响应 | Token 创建、列表、撤销、作用域判断;读写 JSON 响应清除敏感值 |
| [targets.go](../internal/api/targets.go) | targets | 目标服务、目标账号、引用保护、连接测试和 SSH 目标身份确认 |
| [proxies.go](../internal/api/proxies.go) | proxies | 网关列表、配置创建/更新及状态视图 |
| [gateway_actions.go](../internal/api/gateway_actions.go) | proxies/{id}/{action} | 网关资源路由与命令分发,包含启停、测试、SSH 指纹确认及目标/凭据操作委派;认证和操作锁由公共请求管线管理 |
| [outbounds.go](../internal/api/outbounds.go) | outbounds | 共享出口管理、目标引用保护、SSH 跳板机测试及 sing-box `check` 配置检查 |
| [validation.go](../internal/api/validation.go) | 保存配置的公共检查 | 可编辑字段、SSH 密钥等 API 层校验和辅助逻辑 |
| [commands.go](../internal/api/commands.go)、[events.go](../internal/api/events.go) | commands、events | 命令审计与连接事件的筛选、分页、CSV 导出 |
| [connections.go](../internal/api/connections.go) | connections | 列出活动业务连接、按连接 ID 主动断开 |
| [monitoring.go](../internal/api/monitoring.go) | monitoring | 查询运行指标、发起目标健康检查、保存周期检查间隔 |
| [prometheus.go](../internal/api/prometheus.go) | metrics | 将运行和健康状态输出为 Prometheus 文本指标 |
| [readiness.go](../internal/api/readiness.go) | readyz | 根据已绑定网关及监听器状态判断就绪;目标协议可用性由健康检查判断 |
| [alerts.go](../internal/api/alerts.go) | alerts | 告警查询、检查、确认和通知设置 |
| [configuration.go](../internal/api/configuration.go) | configuration | 加密配置导出、合并导入预览、提交、历史差异和恢复;导出包含全部资产文件与凭据;导入与恢复要求网关已停止 |
| [webdav_sync.go](../internal/api/webdav_sync.go) | configuration/webdav | WebDAV 脱敏设置、状态、手动同步及独立备份;禁止 API Token |
| [templates.go](../internal/api/templates.go) | templates | 脱敏配置模板的保存、列表、读取与删除 |
新增接口应放在对应领域文件中,`server.go` 协调公共控制,`routes.go` 明确路由及锁边界。页面隐藏按钮只是交互控制,真正的权限检查在后端执行。
## 6. 运行、协议与网络出口
### 6.1 网关运行:internal/gateway
| 文件 | 负责什么 |
| --- | --- |
| [manager.go](../internal/gateway/manager.go) | 开关监听器、接受客户端连接、来源与连接数限制、调度协议 Handler |
| [session.go](../internal/gateway/session.go)、[instance.go](../internal/gateway/instance.go) | 单连接认证/审计/流量/异常释放;统一实例停止与锁外等待 |
| [connections.go](../internal/gateway/connections.go) | 记录连接 ID、来源、账号、认证状态及开始时间;支持单连接断开和证书到期信息 |
| [monitoring.go](../internal/gateway/monitoring.go) | 连接及认证指标、手动健康探测、有限重试;周期以最多 4 个并发检查所有目标账号,取消时保留上次结果,稳定排序并恢复已保存间隔 |
| [failure.go](../internal/gateway/failure.go) | 把底层错误转换成稳定的失败阶段和对外提示,供 API 与监控展示 |
### 6.2 协议处理:internal/protocol
通过 [handlers.go](../internal/protocol/handlers.go) 的 `NewHandlers` 工厂注册 11 个协议类型,复用 9 个协议处理目录:SSH/SFTP 共用 sshproxy,HTTP/HTTPS 共用 httpproxy。每次工厂调用返回独立的注册表。TCP 端口映射不使用网关或目标账号,客户端直接向目标认证。
| 目录 | 协议类型 | 主要职责与当前边界 |
| --- | --- | --- |
| [tcpproxy](../internal/protocol/tcpproxy) | tcp | 双向 TCP 字节透传、写半关闭和取消清理;默认监听 0.0.0.0,复用来源/连接数限制与出口。不进行账号认证、TLS 终止、命令解析或只读控制;测试仅检查端口可达 |
| [mysqlproxy](../internal/protocol/mysqlproxy) | mysql | MySQL 握手与账号替换、TLS、查询和预编译转发、zlib 压缩、SQL 审计、可选只读白名单;健康检查要求 COM_PING 响应。gateway.go 为入口,policy.go、audit.go、compression.go 分别处理策略、审计、压缩 |
| [mongoproxy](../internal/protocol/mongoproxy) | mongodb | MongoDB wire protocol、双端 SCRAM-SHA-256、压缩、命令审计和可选只读白名单;客户端需 directConnection=true。gateway.go 为入口,wire.go、policy.go、compression.go 分别处理报文、策略、压缩 |
| [pgproxy](../internal/protocol/pgproxy) | pgsql | PostgreSQL 启动认证、上游 MD5/SCRAM、普通和扩展查询转发、SQL 审计;不代理独立 CancelRequest,不提供只读策略 |
| [sqlserverproxy](../internal/protocol/sqlserverproxy) | sqlserver | TDS 预登录、TLS、SQL 密码认证与账号映射、SQL Batch/RPC 审计;wire.go 处理报文细节,不支持 Windows/Kerberos 集成登录 |
| [redisproxy](../internal/protocol/redisproxy) | redis | RESP 命令、AUTH/HELLO 账号映射、流水线、订阅推送和审计;面向 standalone,不自动处理 Cluster 重定向 |
| [rabbitproxy](../internal/protocol/rabbitproxy) | rabbitmq | AMQP 0-9-1 PLAIN 认证映射、虚拟主机连接和帧转发;记录方法/通道元数据,不保存消息正文 |
| [sshproxy](../internal/protocol/sshproxy) | ssh、sftp | SSH 握手、主机密钥验证、网关密码/公钥认证、目标密码/私钥认证、会话桥接和审计;sftp 类型仅开放 SFTP 子系统。ssh.go 为连接入口,audit.go 处理 exec、交互输入和文件操作审计 |
| [httpproxy](../internal/protocol/httpproxy) | http、https | HTTP 请求转发、网关 Basic Auth、目标 Basic Auth 替换、TLS 和请求审计;不支持 CONNECT 或 WebSocket 升级 |
| [transport](../internal/protocol/transport) | 协议公共工具 | TCP/TLS 传输、连接转发、取消清理,以及协议共享的网关账号与来源检查;自身不注册为业务协议 |
只读策略目前由 MySQL/MongoDB 的协议模块实现。命令审计记录的是网关看到的请求和放行/拦截决定,不代表上游执行成功;详细边界见 [只读策略](readonly.md) 和 [运维说明](gateway-operations.md)。
### 6.3 网络出口:internal/outbound
| 文件 | 负责什么 |
| --- | --- |
| [dial.go](../internal/outbound/dial.go)、[strategy.go](../internal/outbound/strategy.go) | 工厂选择直连、SOCKS5、SSH、sing-box 或 Kubernetes 策略;公共装饰器按调用校验选项、设置建连期限并返回 DialFunc,失败不回退直连 |
| [socks5.go](../internal/outbound/socks5.go) | SOCKS5 握手、认证与目标协商;保留目标域名、诊断阶段和取消清理 |
| [ssh.go](../internal/outbound/ssh.go) | 用密码连接 SSH 跳板机、核对主机指纹,建立 direct-tcpip 转发通道;提供跳板机连接测试 |
| [singbox.go](../internal/outbound/singbox.go) | 定位外部 binary、生成私有 loopback SOCKS5 运行配置、执行 10 秒 `check`、按规范化 outbound 共享 `run` 子进程,并记录独立启动/本地协商阶段;不嵌入 sing-box module |
| [kubernetes.go](../internal/outbound/kubernetes.go) | 使用 client-go 读取集群配置、解析 Pod/Service/Deployment/StatefulSet、建立 port-forward,并在连接结束时清理资源;不依赖 kubectl |
`protocol/sshproxy` 是客户端要使用的 SSH/SFTP 服务代理;`outbound/ssh.go` 是访问任意目标时可选的 SSH 跳板路径。sing-box 是 linkport 管理的外部子进程,发布包不捆绑它。所有出口故障都不会自动回退直连。
### 6.4 集群发现:internal/cluster
[cluster.go](../internal/cluster/cluster.go) 负责校验、节点遍历、拓扑筛选和目标选择;[strategies.go](../internal/cluster/strategies.go) 集中六种协议探测策略,`redis.go` 与 `databases.go` 保留协议实现。遍历接受探测函数,便于用 fixture 验证取消、节点上限和 Sentinel 凭据切换。
## 7. 配置、审计与告警存储
### 7.1 持久化:internal/store
| 文件 | 负责什么 |
| --- | --- |
| [store.go](../internal/store/store.go) | 打开 SQLite、初始化表结构、组织迁移、公共存储操作与日志清理 |
| [portable.go](../internal/store/portable.go) | 单 SQLite 主密钥、迁移和可移植存储;沿用 local_metadata 格式,不引入另一套 local_key 表 |
| [services.go](../internal/store/services.go) | 保存和查询网关、目标,解析关联目标与出口,维护引用关系 |
| [outbounds.go](../internal/store/outbounds.go) | 共享出口加密保存、查询及引用统计 |
| [gateway_migration.go](../internal/store/gateway_migration.go) | 迁移网关表的目标引用约束,使网关可以在未关联目标时独立保存 |
| [target_account_migration.go](../internal/store/target_account_migration.go) | 将旧目标凭据转换为多账号结构,并维护引用一致性 |
| [identity.go](../internal/store/identity.go) | 验证唯一的个人登录账号及身份修订号;密码重置使旧会话和 Token 失效 |
| [tokens.go](../internal/store/tokens.go) | API Token 哈希、作用域、过期及撤销;当前文件也包含模板 CRUD,模板记录加密保存,保存及详情读取进行脱敏 |
| [templates.go](../internal/store/templates.go) | 模板结构、版本和资源 ID 校验;模板允许缺少凭据,实际导入另做完整校验 |
| [backup.go](../internal/store/backup.go) | 配置包、模板脱敏、口令加密备份、导入合并、引用校验和事务恢复;加密导出包含全部资产原文、文件名、引用及恢复所需凭据 |
| [backup_codec.go](../internal/store/backup_codec.go) | 备份与同步信封、PBKDF2/AES-GCM 编解码;快照一致性与数据库操作仍归各仓储函数 |
| [webdav_sync.go](../internal/store/webdav_sync.go)、[sync_bundle.go](../internal/store/sync_bundle.go) | WebDAV 加密设置、租约和同步基线;规范化快照、加密、冲突及完整替换 |
| [assets.go](../internal/store/assets.go)、[api/assets.go](../internal/api/assets.go) | 多类型文件资产加密存储、上传更新、目标/账号/代理引用保护和脱敏接口;更新后引用配置使用最新内容,资产纳入配置备份和历史 |
| [import_preview.go](../internal/store/import_preview.go) | 共用导入合并规则,生成新增/覆盖/未变更列表、脱敏差异与配置修订标识;识别预览后的配置变更 |
| [config_history.go](../internal/store/config_history.go)、[config_diff.go](../internal/store/config_diff.go) | 配置历史版本及字段对比;敏感值仅报告是否变化,账号按稳定 ID 比较 |
| [commands.go](../internal/store/commands.go)、[audit_shards.go](../internal/store/audit_shards.go) | 命令审计写入、加密内容、跨日期查询和分页;按 UTC 日期分库、迁移旧日志、清理过期记录 |
| [event_shards.go](../internal/store/event_shards.go) | 连接与管理事件的日期分库、迁移、跨日期读取和清理 |
| [monitoring.go](../internal/store/monitoring.go) | 持久保存健康检查间隔;0 表示关闭,启用范围为 10–86400 秒 |
| [alerts.go](../internal/store/alerts.go) | 通知设置、告警状态、去重、确认、投递结果与保留期清理 |
配置与审计使用独立存储位置:配置数据库保存网关、目标、出口、用户、Token、模板和运维设置;`audit/YYYY-MM-DD.sqlite` 保存命令与事件,日志保留 7 天。密码哈希、Token 哈希与加密配置使用不同存储方式,并非将整个 SQLite 文件统一加密。
### 7.2 告警引擎:internal/alerts
[engine.go](../internal/alerts/engine.go) 编排周期检查、状态持久化和投递重试;[conditions.go](../internal/alerts/conditions.go) 评估健康、认证窗口、账号与证书到期规则;[notifier.go](../internal/alerts/notifier.go) 适配 Webhook,保留 HMAC-SHA256、5 秒超时与禁重定向。[repository.go](../internal/alerts/repository.go) 声明消费者需要的存储端口,条件更新与去重仍由 Store 负责。手动检查不发送通知,启用 Webhook 后周期投递最多尝试三次。HTTP 接口放在 api/alerts.go,告警记录放在 store/alerts.go。
### 7.3 WebDAV 同步与传输
[internal/syncjob/engine.go](../internal/syncjob/engine.go) 管手动/定时调度、锁、租约、取消及完成记录;[transfer.go](../internal/syncjob/transfer.go) 管同步基线、冲突选择和独立 JSON 备份,依赖消费者侧 Repository 与 [ObjectStore](../internal/backup/object_store.go) 条件对象存储接口。WebDAV 适配器复用 [webdav.go](../internal/backup/webdav.go) 的 Basic/匿名认证、目录创建、GET 和条件 PUT。S3 设置存储已删除,当前页面、API 和调度不使用 S3;本次未删除独立的 S3 传输帮助代码。操作及格式说明见 [WebDAV 同步备份](webdav-sync.md)。
## 8. 前端页面与公共状态:web/src
| 文件 / 组件 | 负责什么 | 用户在哪里使用 |
| --- | --- | --- |
| [main.ts](../web/src/main.ts) | 创建 Vue 应用、加载 Element Plus 和样式 | 页面入口 |
| [App.vue](../web/src/App.vue) | 导航、登录、作用域、概览、目标和网关主视图、编辑子页面、批量操作及审计页面协调,资源缓存委派给 useResourceCatalog | 管理后台主框架 |
| [SidebarNavigation.vue](../web/src/components/SidebarNavigation.vue) | 按名称与关键词搜索有权访问的菜单,支持键盘选择和手机搜索子页面 | 左侧菜单 |
| [Connections.vue](../web/src/Connections.vue)、[useConnectionCanvas.ts](../web/src/composables/useConnectionCanvas.ts)、[connectionCanvas.ts](../web/src/domain/connectionCanvas.ts) | 可移动服务画板,网关蓝色、目标绿色;平移缩放、全屏、本地布局保存;拖拽或点选账号完成映射,支持启停、维护目标和断开关联,见[画板说明](connection-canvas.md) | 拖拽连线 |
| [TargetAccounts.vue](../web/src/components/TargetAccounts.vue) | 编辑目标多个账号、空密码/私钥及支持协议的无认证模式 | 目标配置 |
| [GatewayAccounts.vue](../web/src/components/GatewayAccounts.vue) | 在独立账号页签编辑网关账号、目标账号映射、禁用、来源及账号策略 | 网关配置 |
| [SourceAllowlist.vue](../web/src/components/SourceAllowlist.vue) | 单行编辑 IP/CIDR 列表,区分网关与账号作用范围,支持逗号分隔多项 | 网关配置与账号页签 |
| [AssetsManager.vue](../web/src/components/AssetsManager.vue)、[AssetUpload.vue](../web/src/components/AssetUpload.vue)、[AssetSelect.vue](../web/src/components/AssetSelect.vue) | 多类型文件资产上传替换、引用展示及删除保护;按类型选择资产,目标/账号/代理按 ID 复用文件;KubeconfigUpload 为兼容包装 | 资产管理与配置编辑 |
| [CredentialExpiry.vue](../web/src/components/CredentialExpiry.vue) | 复用的账号到期和提醒配置 | 目标/网关账号编辑 |
| [OutboundManager.vue](../web/src/components/OutboundManager.vue) | 共享出口列表、创建编辑、引用关系、删除及 SSH 测试 | 代理菜单 |
| [OutboundFields.vue](../web/src/components/OutboundFields.vue) | 复用的 SOCKS5、SSH 和 Kubernetes 出口表单 | 出口配置 |
| [OpsPanel.vue](../web/src/components/OpsPanel.vue) | 运行指标、目标账号健康检查、周期设置,组合下方运维组件 | 监控运维 |
| [ActiveSessions.vue](../web/src/components/ActiveSessions.vue) | 活跃业务连接列表、刷新和管理员断开连接 | 监控运维 → 活跃会话 |
| [AlertsPanel.vue](../web/src/components/AlertsPanel.vue) | 告警列表、检查、确认和 Webhook 设置 | 监控运维 → 告警中心 |
| [ConfigurationManager.vue](../web/src/components/ConfigurationManager.vue) | 加密配置导出(含全部资产文件)、导入预览和重新预览、确认导入、历史差异与恢复 | 配置管理 → 配置备份/历史 |
| [TemplateManager.vue](../web/src/components/TemplateManager.vue) | 保存当前配置为模板、文件导入、查看编辑、导出、预览应用和删除 | 配置管理 → 配置模板 |
| [WebDAVSyncManager.vue](../web/src/components/WebDAVSyncManager.vue) | WebDAV 连接设置、手动及自动多端同步、独立加密备份、状态和冲突选择 | 多端同步 |
| [TokenManager.vue](../web/src/components/TokenManager.vue) | 选择作用域和有效期创建 Token、一次性显示密钥、查看与撤销 | 监控运维 → API Token |
| [VersionInfo.vue](../web/src/components/VersionInfo.vue) | 查询和展示构建版本信息 | 管理界面版本信息 |
| [composables/useApi.ts](../web/src/composables/useApi.ts) | 封装 JSON 请求、会话 CSRF 更新、错误结果;仅在明确的 CSRF 拒绝后重试一次写请求 | 所有管理请求共用 |
| [composables/useResourceCatalog.ts](../web/src/composables/useResourceCatalog.ts) | 通过注入请求维护四类共享资源、刷新代次与加载状态、保存响应更新和退出清空;阻止过期读取覆盖新数据 | 资源列表和共享选择器 |
| [domain/connectionDraft.ts](../web/src/domain/connectionDraft.ts) | 连接草稿工厂、旧账号编辑适配、API 字段白名单和秘密省略 | 新建/编辑目标与网关 |
| [composables/useSecretReveal.ts](../web/src/composables/useSecretReveal.ts) | 凭据请求代次、关闭失效及 30 秒清理 | 查看凭据页面 |
| [composables/useCursorPage.ts](../web/src/composables/useCursorPage.ts) | 事件和命令共用的游标加载、分页状态与旧响应抑制 | 审计分页 |
| [composables/useCanvasFullscreen.ts](../web/src/composables/useCanvasFullscreen.ts)、[useCanvasMeasurements.ts](../web/src/composables/useCanvasMeasurements.ts) | 全屏事件、DOM 测量、ResizeObserver 和卸载清理 | 连线画板 |
| [composables/useAudit.ts](../web/src/composables/useAudit.ts) | 命令和事件筛选、翻页、导出,以及避免旧请求结果覆盖新筛选 | 命令审计、连接事件 |
| [composables/useConfigurationHistory.ts](../web/src/composables/useConfigurationHistory.ts) | 管理历史资源选择、列表和差异请求时序,忽略过期响应,绑定恢复对象并防止重复提交 | 配置历史与恢复 |
| [composables/useWebDAVSync.ts](../web/src/composables/useWebDAVSync.ts) | WebDAV 设置草稿、秘密保留/清除、同步备份请求及状态轮询 | 多端同步 |
| [composables/useMonitoring.ts](../web/src/composables/useMonitoring.ts) | 每 5 秒读取监控、请求去重、页面可见性与生命周期、刷新失败提示,以及检查间隔草稿保护 | 监控运维 |
| [domain/outbound.ts](../web/src/domain/outbound.ts) | 统一出口类型名称及摘要文案 | 出口列表和引用展示 |
| [theme.ts](../web/src/theme.ts)、[style.css](../web/src/style.css) | 主题选择、浏览器偏好保存、跟随系统和全局响应式样式 | 全局外观 |
App.vue 协调目标和网关编辑、导航与提交;草稿构造和载荷规则归 domain,独立异步状态归 composables,可复用视图归组件。全模块的模式及扩展方式见 [设计模式与扩展边界](architecture-patterns.md)。
## 9. 构建、部署、测试和本地目录
| 入口 / 目录 | 负责什么 |
| --- | --- |
| [go.mod](../go.mod)、[go.sum](../go.sum) | Go 模块与依赖版本、校验信息;当前固定 Go 1.25.0 以兼容 Vitess |
| [web/package.json](../web/package.json)、[web/package-lock.json](../web/package-lock.json) | 前端依赖、构建及 Playwright 命令和锁定版本 |
| [web/vite.config.ts](../web/vite.config.ts)、[web/tsconfig.json](../web/tsconfig.json)、[web/index.html](../web/index.html) | 前端构建、TypeScript 检查和 HTML 模板 |
| [scripts/build.ps1](../scripts/build.ps1)、[scripts/build.sh](../scripts/build.sh) | 开发构建入口,构建前端、执行 Go 测试并输出程序;Windows 脚本复用前端缓存,支持跳过测试、强制前端构建、自定义输出和阶段计时 |
| [start-dev.cmd](../start-dev.cmd)、[scripts/start-dev.ps1](../scripts/start-dev.ps1) | Windows 项目/发布包启动入口;源码模式默认快速构建到临时产物目录,成功后停旧服务、备份并替换程序。FullCheck 附加 Go 全量测试,BuildOnly 只构建,RebuildWeb 强制前端重建 |
| [scripts/start-dev.test.ps1](../scripts/start-dev.test.ps1) | 使用临时项目和构建测试桩,验证启动参数传递、仅构建模式隔离与失败时不使用旧产物 |
| [package.cmd](../package.cmd)、[scripts/package.ps1](../scripts/package.ps1) | Windows 发布打包、程序和证书工具构建、元信息、校验和、发布包验证及 ZIP 压缩 |
| [scripts/build-web.mjs](../scripts/build-web.mjs) | 按依赖、源码、环境与产物摘要复用前端构建缓存;支持强制重建 |
| [scripts/build-lock.ps1](../scripts/build-lock.ps1) | Windows 开发构建与发布打包共用的排他锁,防止前端生成和 Go 资源嵌入相互干扰;失败或退出后自动释放 |
| [scripts/version.ps1](../scripts/version.ps1) | 读取版本和 Git 信息,生成构建注入参数 |
| [scripts/package.ps1](../scripts/package.ps1)、[scripts/verify-package.mjs](../scripts/verify-package.mjs)、[scripts/verify-desktop.mjs](../scripts/verify-desktop.mjs) | Windows 单 EXE 打包、原生发布包及本地模式验证;当前没有六目标 package.mjs 入口 |
| [Dockerfile](../Dockerfile)、[.env.example](../.env.example)、[packaging/windows](../packaging/windows) | 容器构建、部署配置示例及 Windows 发布说明;环境示例文件不会被程序自动加载 |
| [.drone.yml](../.drone.yml) | Linux amd64 CI 测试、单文件构建与校验、版本归档及可选 IPFS 标签发布;真实运行仍须在 Drone 环境验证 |
| [deploy/ha](../deploy/ha) | 两个独立实例加 HAProxy 的部署示例;不提供内置复制、自动同步或会话迁移 |
| [scripts/test-matrix.ps1](../scripts/test-matrix.ps1)、[scripts/test-matrix.sh](../scripts/test-matrix.sh) | 启动隔离 Docker 环境,运行真实 MySQL、MongoDB 和 SSH 集成矩阵 |
| [deploy/compose.test.yml](../deploy/compose.test.yml)、[deploy/mongo](../deploy/mongo)、[deploy/ssh](../deploy/ssh)、[deploy/fixtures](../deploy/fixtures) | 矩阵使用的容器、MongoDB 副本集初始化、SSH 配置和测试辅助服务 |
| [internal/testutil](../internal/testutil) | 后端测试共用的网络出口等辅助设施;不属于生产功能模块 |
| 各 Go 目录下的 `*_test.go` | 本模块单元、回归和集成测试;带真实服务环境要求的用例需要相应测试环境 |
| [web/tests](../web/tests)、[web/playwright.config.ts](../web/playwright.config.ts) | 页面与接口交互回归;start-server.mjs 使用临时数据启动开发模式和认证模式实例,通过 LINKPORT_E2E_BINARY 指定被测程序 |
| `data/` | 项目本地运行数据:SQLite、audit、TLS 和 Windows 主密钥材料;保留并按完整目录备份 |
| `bin/` | 程序、发布包、验证产物、构建缓存与完整备份,见 [输出目录](build-output.md) |
| `web/dist/`、`web/node_modules/`、`web/test-results/`、`web/playwright-report/` | 前端产物、依赖和测试结果 |
| `vendor/` | Go 第三方依赖源码副本;不是项目业务模块,当前保留本地、未纳入上次提交 |
验证时先使用 Go 1.25.0 运行后端测试与 vet,再完成前端构建,最后构建包含最新页面的程序并运行 Playwright。Vite 正在替换 dist 时不要同时编译嵌入该目录的 Go 程序。真实服务矩阵、本地协议测试桩和浏览器流程测试覆盖不同层次,不能互相代替。
## 10. 想改某个功能,从哪里开始
| 修改目标 | 建议定位顺序 |
| --- | --- |
| 增加一种业务协议 | model 协议校验 → protocol 新目录实现 Handler → protocol.NewHandlers 注册 → API 输入/测试能力 → 前端协议选项与表单 → 协议及浏览器测试 |
| 增加一种代理出口 | model 出口结构及校验 → outbound Dialer 分支 → API 出口保存/测试 → OutboundFields 与 domain/outbound → 出口测试 |
| 增加账号字段或改变映射 | model 账号结构/合并校验 → store 持久化与旧数据迁移 → API → TargetAccounts/GatewayAccounts → 认证、脱敏和迁移回归 |
| 调整导入导出或历史恢复 | store/backup、import_preview、config_history、config_diff → api/configuration → ConfigurationManager;同步检查脱敏与引用完整性 |
| 调整身份或 Token 权限 | store/identity、tokens → api/authorization、auth、tokens、token_response → TokenManager → 权限与秘密隔离回归 |
| 增加监控指标或告警 | gateway/monitoring、connections → alerts/engine 与 store/alerts → api/monitoring、prometheus、alerts → OpsPanel/AlertsPanel |
| 增加命令审计能力 | protocol 对应协议解析 → model.AuditCommand → store/commands → api/commands → useAudit 与审计页面 |
| 排查启动或打包 | cmd/linkport → desktop 或 buildinfo → scripts 构建/验证入口;先确认实际数据目录与程序版本 |
## 11. 相关文档
- [README](../README.md):项目入口、支持能力、运行环境和常用命令。
- [网关账号与运维](gateway-operations.md):多账号、监控、告警、备份、模板、Token 与验证范围。
- [目标账号](target-accounts.md):目标账号管理与网关选择。
- [SSH 连接测试](ssh-connection-test.md):SSH 出口测试与失败信息。
- [只读策略](readonly.md):MySQL/MongoDB 白名单与能力边界。
- [Kubernetes](kubernetes.md):集群配置、资源选择、转发与权限要求。
- [sing-box 连接资产](sing-box.md):外部 binary、单 outbound、安全限制、版本与验证边界。
- [测试说明](testing.md):测试环境与真实服务验证边界。
- [高可用部署](high-availability.md):独立节点和外部负载均衡示例。
- [Drone/IPFS 发布](ipfs.md):CI 发布配置说明;使用时同时检查当前流水线入口。
- [开发计划](development-plan.md):历史设计与阶段计划,其中旧协议数量和“未包含”列表不作为当前功能清单。