Build Charac server and client with OIDC, SSH sessions, and packages
This commit is contained in:
+10
-26
@@ -1,32 +1,16 @@
|
||||
# Linux 部署模板
|
||||
# Linux Server 部署模板
|
||||
|
||||
当前产物用于服务宿主与用户代理框架验证。远程工作区各组件的状态由 readiness 报告。
|
||||
执行 bash ./build.sh --target Publish --runtime linux-x64,将 artifacts/publish/linux-x64/server/ 安装到 /opt/workspace-access;ARM64 使用 linux-arm64。创建受限的 workspace-access 服务账户,安装 deploy/linux/workspace-access-server.service 并按本机路径调整。目标 Linux 主机单独部署 sshd,限制为内网访问。
|
||||
|
||||
## 发布
|
||||
|
||||
执行 `bash ./build.sh --target Publish --runtime linux-x64`。将发布目录整体部署到 `/opt/workspace-access/`。ARM64 使用 `linux-arm64`。服务与用户代理共用同一程序,通过 `host`、`agent` 参数选择角色。赋予入口文件执行权限:
|
||||
|
||||
```bash
|
||||
sudo chmod 0755 /opt/workspace-access/WorkspaceAccessHost
|
||||
```
|
||||
|
||||
## 系统服务
|
||||
|
||||
由部署人员建立 `workspace-access` 系统用户及同名组,并赋予安装目录读取和执行权限。把 `workspace-access-host.service` 复制到 `/etc/systemd/system/` 后执行:
|
||||
|
||||
```bash
|
||||
```sh
|
||||
sudo install -d -m 0750 /opt/workspace-access
|
||||
sudo install -m 0755 char_rac_server /opt/workspace-access/char_rac_server
|
||||
sudo install -m 0644 workspace-access-server.service /etc/systemd/system/workspace-access-server.service
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now workspace-access-host.service
|
||||
systemctl status workspace-access-host.service
|
||||
journalctl -u workspace-access-host.service
|
||||
sudo systemctl enable --now workspace-access-server
|
||||
sudo systemctl status workspace-access-server
|
||||
```
|
||||
|
||||
模板使用低权限 broker 账户,运行目录为 `/run/workspace-access`,状态目录为 `/var/lib/workspace-access`。用户上下文启动组件按专门权限边界接入。HTTP 健康端点位于 `127.0.0.1:5080`。
|
||||
其余发布文件和运行时依赖也必须部署到同一目录。目标主机密钥、账户权限与网络策略需要另行配置;改用证书登录时再配置 SSH CA 信任。密码与私钥 SSH Broker、OIDC、Session Manager 和 WebSocket 已接入;`/health/ready` 在剩余验收项完成前仍返回 503。可在 systemd 的 `ExecStart` 末尾添加 `--config /etc/workspace-access/workspace-access.config`,由服务账户读取该文件,无需复制到发布目录。
|
||||
|
||||
## 用户代理
|
||||
|
||||
`workspace-access-agent.service` 为 systemd user unit。以目标用户身份将其放入 `~/.config/systemd/user/`,通过 `systemctl --user daemon-reload` 和 `systemctl --user enable --now workspace-access-agent.service` 启动。用户管理器随登录和 linger 策略运行,部署时明确相应生命周期。
|
||||
|
||||
此模板用于验证现有用户上下文中的 Agent 入口;完整的按需账户启动流程在用户启动组件中实现。
|
||||
|
||||
源仓库设计文档:`docs/platforms/user-environment.md`、`docs/platforms/session-lifecycle.md`、`docs/implementation-status.md`。
|
||||
本机管理通道只允许服务账户连接。服务启动后,可用相同的 `--config` 路径执行 `status` 和 `reload`,例如 `sudo -u workspace-access /opt/workspace-access/char_rac_server --config /etc/workspace-access/workspace-access.config status`。`reload` 目前只在线应用 `[Logging]`;其他配置变化需要计划性重启。服务单元没有 `PrivateTmp`,因为 .NET 在 Linux 上通过 `/tmp` 中的 Unix 域套接字实现命名管道;`UMask=0077` 与同账户检查限制本地访问。
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
[Unit]
|
||||
Description=Workspace Access User Agent
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/opt/workspace-access/WorkspaceAccessHost agent
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
UMask=0077
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
+3
-4
@@ -1,5 +1,5 @@
|
||||
[Unit]
|
||||
Description=Workspace Access Host
|
||||
Description=Workspace Access Server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
@@ -7,12 +7,11 @@ Type=notify
|
||||
User=workspace-access
|
||||
Group=workspace-access
|
||||
WorkingDirectory=/opt/workspace-access
|
||||
ExecStart=/opt/workspace-access/WorkspaceAccessHost host
|
||||
ExecStart=/opt/workspace-access/char_rac_server
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
TimeoutStopSec=30
|
||||
NoNewPrivileges=true
|
||||
PrivateTmp=true
|
||||
ProtectSystem=strict
|
||||
ProtectHome=true
|
||||
RuntimeDirectory=workspace-access
|
||||
@@ -20,4 +19,4 @@ StateDirectory=workspace-access
|
||||
UMask=0077
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
WantedBy=multi-user.target
|
||||
@@ -1,27 +1,17 @@
|
||||
# Windows 部署模板
|
||||
# Windows Server 部署模板
|
||||
|
||||
当前产物用于服务宿主与代理框架验证,健康状态列出远程工作区的集成进度。
|
||||
执行 ./build.ps1 --target Publish --runtime win-x64,将 artifacts/publish/win-x64/server/ 部署到受保护的服务目录;ARM64 使用 win-arm64。发布目录中的 char_rac_server.exe 是唯一服务端入口,不需要 host 或 agent 参数。
|
||||
|
||||
## 发布与目录
|
||||
以受限服务账户注册 Windows Service,并按环境配置监听地址及反向代理。目标 Windows 主机需单独安装和配置 OpenSSH Server,限制为内网访问,并配置目标账户映射和服务器主机密钥验证;改用证书登录时再配置 SSH CA 信任。密码和私钥 SSH Broker、OIDC、Session Manager 与 WebSocket 已接入;正式 Client 已在 Windows 开发机经 authentik 连接 Linux `.101` 并执行交互命令,目标 Windows sshd 尚待验收。可用 `--config` 指向单独维护的 INI 文件,无需复制到发布目录。
|
||||
|
||||
执行 `./build.ps1 --target Publish --runtime win-x64`,将发布目录整体部署到 `C:\Program Files\WorkspaceAccessHost`。ARM64 使用 `win-arm64`。服务与用户代理共用目录中的 `WorkspaceAccessHost.exe`,分别传入 `host` 和 `agent`。
|
||||
|
||||
服务账户需要读取安装目录和配置。框架阶段服务使用 LocalService。正式代理 IPC 的管道 ACL 配置与服务账户保持一致。
|
||||
|
||||
## 注册服务
|
||||
|
||||
在管理员 PowerShell 中执行:
|
||||
示例(请先按实际路径与服务账户调整):
|
||||
|
||||
```powershell
|
||||
sc.exe create WorkspaceAccessHost binPath= '"C:\Program Files\WorkspaceAccessHost\WorkspaceAccessHost.exe" host' start= auto obj= 'NT AUTHORITY\LocalService'
|
||||
sc.exe start WorkspaceAccessHost
|
||||
sc.exe query WorkspaceAccessHost
|
||||
sc.exe create CharacServer binPath= '"C:\Program Files\Charac\char_rac_server.exe" --config "C:\ProgramData\Charac\workspace-access.config"' start= auto obj= 'NT AUTHORITY\LocalService'
|
||||
sc.exe start CharacServer
|
||||
sc.exe query CharacServer
|
||||
```
|
||||
|
||||
健康地址为 `http://127.0.0.1:5080/health/live`。就绪地址为 `/health/ready`。日志由 .NET 日志提供程序输出。
|
||||
/health/live 返回存活状态;/health/ready 在集成完成前返回 503。
|
||||
|
||||
## 用户代理
|
||||
|
||||
以目标普通用户运行 `WorkspaceAccessHost.exe agent` 验证入口。用户登录启动任务的可执行路径指向 `WorkspaceAccessHost.exe`,参数填写 `agent`,并选择目标用户的交互登录上下文。代理 IPC 注册与终端集成完成后,按部署策略启用该启动任务。
|
||||
|
||||
源仓库设计文档:`docs/platforms/service-hosting.md`、`docs/platforms/user-environment.md`、`docs/platforms/storage.md`。
|
||||
本机 `status` 和 `reload` 命令连接正在运行的服务,不启动第二份实例。命令使用与服务启动时相同的 `--config` 路径,并须在服务账户上下文中执行;上面的 `LocalService` 示例不能直接从普通管理员终端调用同账户管道。`reload` 当前只在线应用 `[Logging]` 设置,其余配置修改需要重启服务。
|
||||
|
||||
Reference in New Issue
Block a user