feat(web): add Docker deployment support with comprehensive configuration and documentation for web beta

This commit is contained in:
Kang committed 2026-10-04 20:33:04 +08:00
1 parent b81e56c4c9
commit 0ceda365a6
7 files changed
+81 -7

No files matched your search

+5
View File
@@ -322,6 +322,10 @@ AUR package: [`nyaterm-bin`](https://aur.archlinux.org/packages/nyaterm-bin)
> `nyaterm-bin` is a community-maintained binary AUR package. If the AUR package has not yet caught up with the latest release, download the official package from [Releases](https://github.com/nyakang/nyaterm/releases). > `nyaterm-bin` is a community-maintained binary AUR package. If the AUR package has not yet caught up with the latest release, download the official package from [Releases](https://github.com/nyakang/nyaterm/releases).
## Web / Docker Deployment
The Web Beta serves the browser interface and API from a single container for one trusted administrator. See [deploy/web/](./deploy/web/README.md) for build and Compose commands, and the [deployment guide](./docs/web-deployment.md) for configuration and supported capabilities.
## Prerequisites for Development ## Prerequisites for Development
- Node.js 18+ - Node.js 18+
@@ -351,6 +355,7 @@ pnpm tauri dev
│ ├── src/core/ # SSH, SFTP, PTY, Telnet, Serial, AI, backup logic │ ├── src/core/ # SSH, SFTP, PTY, Telnet, Serial, AI, backup logic
│ ├── src/config/ # Persistent config models │ ├── src/config/ # Persistent config models
│ └── crates/otp/ # Local OTP implementation │ └── crates/otp/ # Local OTP implementation
├── deploy/web/ # Web Dockerfile, Compose, and deployment entry point
├── docs-site/ # Docusaurus documentation site ├── docs-site/ # Docusaurus documentation site
├── public/ # Static assets ├── public/ # Static assets
└── scripts/ # Checks, version sync, and demo helper scripts └── scripts/ # Checks, version sync, and demo helper scripts
+5
View File
@@ -329,6 +329,10 @@ AUR 软件包:[`nyaterm-bin`](https://aur.archlinux.org/packages/nyaterm-bin)
> `nyaterm-bin` 为社区维护的 AUR 二进制包。如果 AUR 版本暂未同步到最新发布版,可以从 [Releases](https://github.com/nyakang/nyaterm/releases) 下载官方安装包。 > `nyaterm-bin` 为社区维护的 AUR 二进制包。如果 AUR 版本暂未同步到最新发布版,可以从 [Releases](https://github.com/nyakang/nyaterm/releases) 下载官方安装包。
## Web / Docker 部署
Web Beta 通过单个容器提供浏览器界面与 API,面向一个可信管理员。构建与 Compose 命令见 [deploy/web/](./deploy/web/README.md),配置和能力范围见 [部署指南](./docs/web-deployment.md)。
## 开发环境要求 ## 开发环境要求
- Node.js 18+ - Node.js 18+
@@ -358,6 +362,7 @@ pnpm tauri dev
│ ├── src/core/ # SSH、SFTP、PTY、Telnet、串口、AI、备份逻辑 │ ├── src/core/ # SSH、SFTP、PTY、Telnet、串口、AI、备份逻辑
│ ├── src/config/ # 持久化配置模型 │ ├── src/config/ # 持久化配置模型
│ └── crates/otp/ # 本地 OTP 实现 │ └── crates/otp/ # 本地 OTP 实现
├── deploy/web/ # Web Dockerfile、Compose 与部署入口
├── docs-site/ # Docusaurus 文档站点 ├── docs-site/ # Docusaurus 文档站点
├── public/ # 静态资源 ├── public/ # 静态资源
└── scripts/ # 检查、版本同步与演示辅助脚本 └── scripts/ # 检查、版本同步与演示辅助脚本
+1
View File
@@ -1,4 +1,5 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
# Build from the repository root: docker build -f deploy/web/Dockerfile -t nyaterm-web .
FROM node:24-bookworm-slim AS frontend FROM node:24-bookworm-slim AS frontend
WORKDIR /app WORKDIR /app
RUN corepack enable && corepack prepare pnpm@11.10.0 --activate RUN corepack enable && corepack prepare pnpm@11.10.0 --activate
+54
View File
@@ -0,0 +1,54 @@
# Web / Docker 部署入口
此目录提供 Web Beta 的镜像构建与 Compose 配置。完整的环境变量、秘密生成、HTTPS / 子路径代理、备份和能力范围见 [部署指南](../../docs/web-deployment.md)。
## 文件与执行目录
- `Dockerfile`:Node、Rust、Debian 三阶段构建,生成前端资源与 `nyaterm-web` 服务。
- `docker-compose.yml`:服务运行配置与持久数据卷。
- 仓库根目录 `.dockerignore`:排除依赖、构建产物、秘密与本地数据。
以下命令均在仓库根目录执行。Dockerfile 的位置与构建上下文不同:上下文必须是仓库根目录,才能复制前端和 Rust 源码。
## Compose 启动
安装 Docker Engine / Docker Desktop 和 Compose V2。提前在当前 shell 或仓库根目录的受限 `.env` 中设置:
- `NYATERM_WEB_PASSWORD`:至少 32 字符的随机登录密码。
- `NYATERM_WEB_ENCRYPTION_KEY`:标准 Base64 编码的 32 字节随机密钥,需持久保存。
- `NYATERM_WEB_PUBLIC_URL`:浏览器实际访问地址,默认 `http://localhost:8080/`;非回环地址默认要求 HTTPS。
```sh
docker compose -f deploy/web/docker-compose.yml up --build -d
docker compose -f deploy/web/docker-compose.yml logs --tail 200 nyaterm
docker compose -f deploy/web/docker-compose.yml down
```
使用外部环境文件时,在 Compose 命令中添加 `--env-file /absolute/private/nyaterm.env`。生产环境推荐 `secrets` 挂载与 `_FILE` 变量,操作示例见部署指南。
默认项目名为 `nyaterm`,持久数据卷为 `nyaterm_nyaterm-data`。从旧版根目录 Compose 迁移时,如果原项目名不是 `nyaterm`,继续使用 `-p <原项目名>` 或 `COMPOSE_PROJECT_NAME`,并沿用原登录密码和加密密钥。普通 `down` 保留数据卷;`down -v` 会删除数据卷。
## 手工构建镜像
```sh
docker build -f deploy/web/Dockerfile -t nyaterm-web .
```
子路径部署示例:
```sh
docker build -f deploy/web/Dockerfile --build-arg NYATERM_WEB_BASE_PATH=/nyaterm/ -t nyaterm-web .
```
运行时的 `NYATERM_WEB_PUBLIC_URL` 路径须与构建路径一致。单独运行容器、挂载秘密和配置反向代理见部署指南。
## 部署验收
在已安装项目依赖及 Playwright Chromium 的 Docker 环境执行:
```sh
pnpm exec playwright install chromium
pnpm test:web:e2e
```
验收脚本分别构建根路径与 `/nyaterm/` 镜像,通过临时 OpenSSH 容器验证浏览器功能,失败产物写入 `artifacts/web-e2e/`。
@@ -1,7 +1,10 @@
name: nyaterm
services: services:
nyaterm: nyaterm:
build: build:
context: . context: ../..
dockerfile: deploy/web/Dockerfile
args: args:
NYATERM_WEB_BASE_PATH: ${NYATERM_WEB_BASE_PATH:-/} NYATERM_WEB_BASE_PATH: ${NYATERM_WEB_BASE_PATH:-/}
ports: ports:
+10 -6
View File
@@ -49,8 +49,10 @@ pnpm web:serve
## Docker ## Docker
部署文件集中在 [deploy/web/](../deploy/web/README.md)。以下 Docker 和 Compose 命令均在仓库根目录执行;构建上下文仍是仓库根目录,使用根目录的 `.dockerignore`。
```sh ```sh
docker build -t nyaterm-web . docker build -f deploy/web/Dockerfile -t nyaterm-web .
docker volume create nyaterm-data docker volume create nyaterm-data
docker run -d --name nyaterm-web --init \ docker run -d --name nyaterm-web --init \
-p 127.0.0.1:8080:8080 \ -p 127.0.0.1:8080:8080 \
@@ -66,20 +68,22 @@ docker run -d --name nyaterm-web --init \
容器使用 UID / GID `10001:10001`。绑定目录时,确保该用户可以读取秘密文件和写入数据目录;新 named volume 会继承镜像中 `/data` 的所有权。默认端口映射仅暴露本机。如需远程访问,使用下面的 HTTPS 反向代理配置。 容器使用 UID / GID `10001:10001`。绑定目录时,确保该用户可以读取秘密文件和写入数据目录;新 named volume 会继承镜像中 `/data` 的所有权。默认端口映射仅暴露本机。如需远程访问,使用下面的 HTTPS 反向代理配置。
仓库还提供 `docker-compose.yml`,它通过外部环境变量注入密码和密钥: 仓库还提供 `deploy/web/docker-compose.yml`,它通过外部环境变量注入密码和密钥:
```sh ```sh
docker compose -f docker-compose.yml up --build -d docker compose -f deploy/web/docker-compose.yml up --build -d
``` ```
提前在当前 shell 或受限 `.env` 中设置两个必填秘密。`.env*` 已排除在 Git 和 Docker build context 外。生产环境优先将 Compose 改为 `secrets` 挂载和 `_FILE` 变量,避免把秘密写入镜像。Dockerfile 使用 Node、Rust、Debian 三阶段构建,最终镜像只含 dist、服务程序和运行依赖。 提前在当前 shell 或仓库根目录的受限 `.env` 中设置两个必填秘密。使用外部环境文件时,在 Compose 命令中显式添加 `--env-file /absolute/private/nyaterm.env`。`.env*` 已排除在 Git 和 Docker build context 外。生产环境优先将 Compose 改为 `secrets` 挂载和 `_FILE` 变量,避免把秘密写入镜像。Dockerfile 使用 Node、Rust、Debian 三阶段构建,最终镜像只含 dist、服务程序和运行依赖。
Compose 默认项目名显式设为 `nyaterm`,与原先在名为 `nyaterm` 的仓库根目录运行的默认项目名一致,数据卷仍为 `nyaterm_nyaterm-data`。如果旧部署使用其他仓库目录名、`-p` 或 `COMPOSE_PROJECT_NAME`,迁移后须通过 `-p <原项目名>` 或 `COMPOSE_PROJECT_NAME` 沿用原值,确保继续使用原数据卷和镜像;原登录密码和加密密钥也须保持一致。
## HTTPS 和子路径 ## HTTPS 和子路径
例如部署到 `https://terminal.example.com/nyaterm/`: 例如部署到 `https://terminal.example.com/nyaterm/`:
```sh ```sh
docker build --build-arg NYATERM_WEB_BASE_PATH=/nyaterm/ -t nyaterm-web . docker build -f deploy/web/Dockerfile --build-arg NYATERM_WEB_BASE_PATH=/nyaterm/ -t nyaterm-web .
``` ```
运行时设置 `NYATERM_WEB_PUBLIC_URL=https://terminal.example.com/nyaterm/`。前端和后端必须使用相同的 origin 和路径;后端会校验原始 Host / Origin,不使用转发头放宽校验。代理应保留完整路径,不能剥掉 `/nyaterm`。 运行时设置 `NYATERM_WEB_PUBLIC_URL=https://terminal.example.com/nyaterm/`。前端和后端必须使用相同的 origin 和路径;后端会校验原始 Host / Origin,不使用转发头放宽校验。代理应保留完整路径,不能剥掉 `/nyaterm`。
@@ -165,7 +169,7 @@ File 菜单的导出在浏览器中设置并确认本次备份密码,下载密
## 部署日志与诊断 ## 部署日志与诊断
服务默认输出 JSON 日志到 stdout,可用 `docker logs --tail 200 nyaterm-web` 或 `docker compose logs --tail 200 nyaterm` 查看。同时写入数据目录的 `logs/` 子目录。日志按 UTC 日期或 10 MiB 轮转,总量不超过 100 MiB;诊断设置中的级别和保留天数保存后立即生效,保留天数为 1–30 天。文件写入失败时继续 stdout 日志并保持业务运行,正常停机刷新日志。 服务默认输出 JSON 日志到 stdout,可用 `docker logs --tail 200 nyaterm-web` 或 `docker compose -f deploy/web/docker-compose.yml logs --tail 200 nyaterm` 查看。同时写入数据目录的 `logs/` 子目录。日志按 UTC 日期或 10 MiB 轮转,总量不超过 100 MiB;诊断设置中的级别和保留天数保存后立即生效,保留天数为 1–30 天。文件写入失败时继续 stdout 日志并保持业务运行,正常停机刷新日志。
Compose 使用 Docker `json-file` 日志驱动,单文件 10 MiB、最多 3 个。单独 `docker run` 时也可添加 `--log-opt max-size=10m --log-opt max-file=3`。Docker stdout 日志与应用数据目录日志分别轮转。 Compose 使用 Docker `json-file` 日志驱动,单文件 10 MiB、最多 3 个。单独 `docker run` 时也可添加 `--log-opt max-size=10m --log-opt max-file=3`。Docker stdout 日志与应用数据目录日志分别轮转。
+2
View File
@@ -71,6 +71,8 @@ try {
const image = `${id}-${name}`; const image = `${id}-${name}`;
docker([ docker([
"build", "build",
"-f",
"deploy/web/Dockerfile",
"--build-arg", "--build-arg",
`NYATERM_WEB_BASE_PATH=${basePath}`, `NYATERM_WEB_BASE_PATH=${basePath}`,
"-t", "-t",