feat(web): add Docker deployment support with comprehensive configuration and documentation for web beta
This commit is contained in:
1 parent
b81e56c4c9
commit
0ceda365a6
7 files changed
+81
-7
No files matched your search
@@ -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
|
||||||
|
|||||||
@@ -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,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
|
||||||
@@ -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
@@ -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 日志与应用数据目录日志分别轮转。
|
||||||
|
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in new issue
Block a user