chore: focus delivery on source and docker
This commit is contained in:
312
README.md
312
README.md
@@ -1,206 +1,166 @@
|
||||
# SSH 管理器
|
||||
|
||||
基于 Web 的 SSH / SFTP 工作区项目,适合源码交付、私有部署和二次开发。技术栈:Vue 3、Spring Boot(JDK 8)、JSch、xterm.js。
|
||||
这是一个适合按“源码 + Docker 部署”方式售卖的 SSH / SFTP 管理项目。
|
||||
|
||||
## 功能
|
||||
买家拿到后,不需要装 Windows 客户端,只要会用 Docker,就能按说明启动。后面如果要二开,也可以直接在源码上改。
|
||||
|
||||
- **认证**:本地用户登录(JWT)
|
||||
- **账户安全**:默认管理员登录后会提示修改密码
|
||||
- **连接管理**:SSH 连接的增删改查(密码或私钥)
|
||||
- **Moba 工作区**:统一入口 `/moba`,支持多工作区实例、多标签和终端/SFTP 分屏
|
||||
- **Web 终端**:通过 WebSocket + xterm.js 实现实时 SSH 终端
|
||||
- **SFTP**:文件浏览、搜索、隐藏文件切换、上传/下载、远程传输、删除、创建目录
|
||||
- **批量能力**:批量命令执行、操作日志、传输历史
|
||||
- **交付辅助**:首次启动引导、关于与交付信息、诊断摘要、备份恢复
|
||||
## 这项目适合谁
|
||||
|
||||
## 环境要求
|
||||
|
||||
- JDK 8+
|
||||
- Node.js 18+
|
||||
- Maven 3.6+
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 后端
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
mvn spring-boot:run
|
||||
```
|
||||
|
||||
后端运行在 http://localhost:48080
|
||||
|
||||
默认登录:`admin` / `admin123`
|
||||
|
||||
### 前端
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
前端运行在 http://localhost:5173(API 与 WebSocket 会代理到后端)
|
||||
- 经常连服务器的开发者
|
||||
- 小团队运维
|
||||
- NAS / 云主机用户
|
||||
- 想找 FinalShell / MobaXterm 替代方案的人
|
||||
|
||||
默认登录后进入 `/moba` 工作区。历史路径 `/connections`、`/terminal` 会跳转到 `/moba`;带连接 ID 的旧深链接 `/terminal/:id`、`/sftp/:id` 会先打开对应工作区,再进入 `/moba`。
|
||||
在 `/moba` 中,点击左侧连接会创建新的工作区实例;同一连接可重复打开多个实例。
|
||||
## 这项目能做什么
|
||||
|
||||
## 交付形态
|
||||
- SSH 终端
|
||||
- SFTP 文件管理
|
||||
- 批量命令执行
|
||||
- 连接和会话树备份恢复
|
||||
- 历史日志与传输记录
|
||||
- 默认管理员首次登录强制改密
|
||||
|
||||
当前仓库支持两种交付方向:
|
||||
## 建议怎么卖
|
||||
|
||||
- 源码仓库版:适合会自己部署、要二开的买家
|
||||
- Windows 安装版:适合普通买家,安装后双击快捷方式即可使用
|
||||
建议你对外只卖这一种:
|
||||
|
||||
## 源码交付建议
|
||||
`源码交付 + Docker 部署版`
|
||||
|
||||
如果你按源码版本售卖,建议交付时至少包含:
|
||||
建议交付给买家的内容只有这几样:
|
||||
|
||||
- 当前仓库源码
|
||||
- `README.md` 或独立部署文档
|
||||
- Docker 启动方式
|
||||
- 默认账号与修改密码说明
|
||||
- 环境变量说明
|
||||
- 备份导入导出示例
|
||||
- 售后排查时用到的诊断摘要入口说明
|
||||
1. 当前仓库源码
|
||||
2. 这份 `README.md`
|
||||
3. 默认账号说明
|
||||
4. Docker 部署说明
|
||||
|
||||
源码版当前不依赖授权码,买家拿到后可自行部署、二开和迁移环境。
|
||||
不再提供 Windows 安装包,也不再提供双击启动脚本。
|
||||
|
||||
## Windows 安装版
|
||||
|
||||
Windows 成品版仍然是本地 Web 应用,但可封装为安装包:
|
||||
|
||||
- 安装程序:`Setup.exe`
|
||||
- 安装目录:`C:\Program Files\SSH Manager\`
|
||||
- 数据目录:`%LOCALAPPDATA%\SSHManager\data`
|
||||
- 日志目录:`%LOCALAPPDATA%\SSHManager\logs`
|
||||
|
||||
安装后双击快捷方式会:
|
||||
|
||||
- 自动检测程序是否已启动
|
||||
- 首次生成本地密钥
|
||||
- 后台启动内置 jar
|
||||
- 自动打开浏览器到 `http://127.0.0.1:48080`
|
||||
|
||||
## 启动方式
|
||||
|
||||
### Windows 本地验证
|
||||
|
||||
- 先准备 Java 8+
|
||||
- 构建后可直接运行:
|
||||
- `scripts/windows/start-local.bat`
|
||||
- 本地打包验证:
|
||||
- `scripts/release/build-local-package.bat`
|
||||
|
||||
脚本会自动:
|
||||
- 创建 `runtime/` 和 `data/`
|
||||
- 首次生成本地密钥
|
||||
- 启动后端 jar
|
||||
|
||||
### Windows 安装版构建
|
||||
## 最简单的启动方式
|
||||
|
||||
先准备:
|
||||
|
||||
- Node.js 18+
|
||||
- Maven 3.6+
|
||||
- Inno Setup
|
||||
- 一个已解压的 Windows JRE 目录,并设置环境变量 `SSH_MANAGER_WINDOWS_JRE_DIR`
|
||||
- 发布版本号取自 `backend/pom.xml` 的 `<version>`
|
||||
- Docker
|
||||
- Docker Compose
|
||||
|
||||
建议先执行预检:
|
||||
|
||||
```bat
|
||||
scripts\release\check-windows-release.bat
|
||||
```
|
||||
|
||||
执行:
|
||||
|
||||
```bat
|
||||
scripts\release\build-windows-installer.bat
|
||||
```
|
||||
|
||||
脚本会自动:
|
||||
|
||||
- 构建前端
|
||||
- 以 `embed-frontend-dist` profile 打包后端
|
||||
- 组装 `release/windows-app/`
|
||||
- 如检测到 `ISCC.exe`,生成 `release/windows-installer/SSHManager-Setup-*.exe`
|
||||
- 自动带上安装器图标和买家 / 售后说明文档
|
||||
|
||||
### Docker 版
|
||||
|
||||
- Windows 一键启动验证:
|
||||
- `scripts/windows/start-docker.bat`
|
||||
- 停止:
|
||||
- `scripts/windows/stop-docker.bat`
|
||||
|
||||
更完整的交付说明见:
|
||||
- `docs/delivery-guide.md`
|
||||
|
||||
### 生产构建
|
||||
在项目根目录执行:
|
||||
|
||||
```bash
|
||||
# 前端
|
||||
cd frontend && npm run build
|
||||
|
||||
# 后端
|
||||
cd backend && mvn -Pembed-frontend-dist package
|
||||
docker compose -f docker/docker-compose.yml up -d --build
|
||||
```
|
||||
|
||||
## 验证建议
|
||||
启动后访问:
|
||||
|
||||
`http://localhost:48080`
|
||||
|
||||
默认登录账号:
|
||||
|
||||
- 用户名:`admin`
|
||||
- 密码:`admin123`
|
||||
|
||||
首次登录后请先修改密码。
|
||||
|
||||
## 常用命令
|
||||
|
||||
启动:
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose.yml up -d --build
|
||||
```
|
||||
|
||||
查看日志:
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose.yml logs -f
|
||||
```
|
||||
|
||||
停止:
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose.yml down
|
||||
```
|
||||
|
||||
查看状态:
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose.yml ps
|
||||
```
|
||||
|
||||
如果你习惯 `make`,也可以直接用:
|
||||
|
||||
```bash
|
||||
make up
|
||||
make logs
|
||||
make down
|
||||
```
|
||||
|
||||
## 数据会放在哪里
|
||||
|
||||
Docker 默认把数据放在命名卷 `app-data` 里。
|
||||
|
||||
日常停止服务用:
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose.yml down
|
||||
```
|
||||
|
||||
不要执行:
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose.yml down -v
|
||||
```
|
||||
|
||||
因为这会把数据一起删掉。
|
||||
|
||||
## 给买家时可以直接这样说
|
||||
|
||||
```text
|
||||
这是源码交付 + Docker 部署版,不是练手 demo。
|
||||
买回去后按说明执行一条 docker compose 命令就能跑起来。
|
||||
支持 SSH、SFTP、批量命令、备份恢复,适合开发者、运维和 NAS 用户。
|
||||
```
|
||||
|
||||
闲鱼商品文案见:
|
||||
|
||||
- `docs/xianyu-sales-copy.md`
|
||||
|
||||
## 如果你自己要开发
|
||||
|
||||
后端:
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
mvn spring-boot:run
|
||||
```
|
||||
|
||||
前端:
|
||||
|
||||
- 前端改动后至少运行:
|
||||
```bash
|
||||
cd frontend
|
||||
npm run build
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
- Moba 工作区相关回归项见:
|
||||
- `docs/moba-regression-checklist.md`
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
ssh-manager/
|
||||
├── backend/ # Spring Boot(JDK 8)
|
||||
│ └── src/main/java/com/sshmanager/
|
||||
│ ├── config/ # 安全、WebSocket、CORS
|
||||
│ ├── controller/
|
||||
│ ├── service/
|
||||
│ ├── entity/
|
||||
│ └── repository/
|
||||
├── frontend/ # Vue 3 + Vite + Tailwind
|
||||
│ └── src/
|
||||
│ ├── views/
|
||||
│ ├── components/
|
||||
│ ├── stores/
|
||||
│ └── api/
|
||||
└── docs/design-system/ # UI/UX 规范
|
||||
```
|
||||
|
||||
## 配置
|
||||
|
||||
### 后端(application.yml)
|
||||
|
||||
- `sshmanager.encryption-key`:用于加密连接密码的 Base64 32 字节密钥
|
||||
- `sshmanager.jwt-secret`:JWT 签名密钥
|
||||
- `spring.datasource.url`:H2 数据库路径(默认:`${DATA_DIR:/app/data}/sshmanager`)
|
||||
|
||||
### 环境变量
|
||||
前端开发地址:
|
||||
|
||||
- `SSHMANAGER_ENCRYPTION_KEY`:覆盖加密密钥
|
||||
- `SSHMANAGER_JWT_SECRET`:覆盖 JWT 密钥
|
||||
- `DATA_DIR`:数据目录(默认 `/app/data`,Docker 下应保持卷挂载)
|
||||
`http://localhost:5173`
|
||||
|
||||
### Docker 持久化说明
|
||||
后端开发地址:
|
||||
|
||||
- 默认通过 `make up` / `make restart` 运行,数据存放在 `app-data` 命名卷。
|
||||
- `make down` 仅停止并移除容器,不删除卷数据。
|
||||
- 不要使用 `docker compose ... down -v`,该命令会删除卷并导致数据丢失。
|
||||
|
||||
## 安全说明
|
||||
|
||||
- 连接密码与私钥均以 AES-256-GCM 加密存储
|
||||
- 所有 API 接口需 JWT 认证
|
||||
- WebSocket 连接在握手时校验 JWT
|
||||
- CORS 仅允许前端来源
|
||||
`http://localhost:48080`
|
||||
|
||||
## 环境变量
|
||||
|
||||
- `SSHMANAGER_ENCRYPTION_KEY`:连接密码加密密钥
|
||||
- `SSHMANAGER_JWT_SECRET`:JWT 密钥
|
||||
- `DATA_DIR`:数据目录
|
||||
|
||||
Docker 默认已经在 `docker/docker-compose.yml` 里给了可运行示例。正式卖给客户时,建议你改成自己的密钥再交付。
|
||||
|
||||
## 发货前自己至少检查一遍
|
||||
|
||||
1. Docker 版能正常启动
|
||||
2. 能正常登录并修改密码
|
||||
3. 能创建一条连接
|
||||
4. 能打开终端
|
||||
5. 能打开 SFTP
|
||||
6. 能导出一次备份
|
||||
|
||||
Reference in New Issue
Block a user