一个基于 Electron 的 SSH 终端应用,带有 NestJS 后端。
- 前端: Electron + React + TypeScript + MobX
- 后端: NestJS + TypeORM + PostgreSQL
- 包管理: Yarn + Turborepo
- 终端: xterm.js + ssh2
- 容器化: Docker + Docker Compose
terminal-electron/
├── apps/
│ ├── app/ # Electron 前端应用
│ └── service/ # NestJS 后端服务
├── docker/ # Docker 配置
│ ├── docker-compose.yml # 生产环境 Docker Compose 配置
│ └── README.md # Docker 使用说明
├── env/ # 环境变量文件
│ ├── development.env # 开发环境配置
│ ├── production.env # 生产环境配置
│ └── env.example # 环境变量模板
├── scripts/ # 构建脚本
│ └── build-electron.js # Electron 构建脚本
└── package.json # 根目录配置
项目使用 env/ 目录来管理不同环境的配置:
env/development.env- 开发环境配置env/production.env- 生产环境配置env/env.example- 环境变量模板
| 变量名 | 说明 | 开发环境 | 生产环境 |
|---|---|---|---|
| API_BASE_URL | API 基础地址 | http://localhost:3000 | http://localhost:3000 |
| API_TIMEOUT | API 超时时间 | 10000ms | 10000ms |
| DB_TYPE | 数据库类型 | postgres | postgres |
| DB_HOST | 数据库主机 | localhost | postgres |
| DB_PORT | 数据库端口 | 5432 | 5432 |
| DB_USERNAME | 数据库用户名 | postgres | postgres |
| DB_PASSWORD | 数据库密码 | password | postgres |
| DB_DATABASE | 数据库名称 | terminal_dev | terminal_db |
| JWT_SECRET | JWT 密钥 | dev-secret-key | your-secret-key |
| JWT_EXPIRES_IN | JWT 过期时间 | 7d | 7d |
| SERVICE_PORT | 服务端口 | 3000 | 3000 |
| BUILD_PLATFORM | 构建平台 | mac | mac |
| BUILD_ARCH | 构建架构 | arm64 | arm64 |
| BUILD_TARGET | 构建目标 | development | production |
- 复制环境变量模板:
cp env/env.example env/development.env
cp env/env.example env/production.env-
根据需要修改配置文件中的值
-
重启应用以应用新配置
# 安装 yarn (如果还没有安装)
npm install -g yarn
# 安装项目依赖
yarn install环境变量文件位于 env/ 目录:
env/development.env- 开发环境配置env/production.env- 生产环境配置
根据需要修改对应的配置文件。
应用会自动检查并创建所需的数据库和表结构:
# 启动PostgreSQL数据库
yarn docker:dev:up
# 查看数据库日志
yarn docker:dev:logs
# 停止数据库
yarn docker:dev:down# 直接启动应用,会自动创建数据库
yarn dev:service# 手动创建数据库
psql -h localhost -p 5432 -U postgres -d postgres -c "CREATE DATABASE terminal_dev;"注意:
- 在开发环境下,应用会自动检查并创建数据库(如果不存在)
- TypeORM会自动创建所需的表结构
- 确保PostgreSQL服务正在运行
- 不要在工作区目录下创建
.env文件,避免配置冲突
# 启动所有应用 (前端 + 后端) - 推荐
yarn dev
# 或者分别启动
yarn dev:app # 启动 Electron 应用
yarn dev:service # 启动 NestJS 服务# 构建所有应用
yarn build
# 构建特定应用
yarn build:app # 构建 Electron 应用
yarn build:service # 构建 NestJS 服务# 默认构建 (mac arm64 production)
yarn build:electron
# 开发环境构建
yarn build:electron:dev
# 生产环境构建
yarn build:electron:prod# macOS 构建
yarn build:electron:mac # 默认架构
yarn build:electron:mac:arm64 # ARM64 架构
yarn build:electron:mac:x64 # x64 架构
# Windows 构建
yarn build:electron:win # 默认架构
yarn build:electron:win:arm64 # ARM64 架构
yarn build:electron:win:x64 # x64 架构
# Linux 构建
yarn build:electron:linux # 默认架构
yarn build:electron:linux:arm64 # ARM64 架构
yarn build:electron:linux:x64 # x64 架构
# 全平台构建
yarn build:electron:all # 所有平台默认架构# 使用构建脚本 (平台 架构 环境)
node scripts/build-electron.js mac arm64 production
node scripts/build-electron.js win x64 development
node scripts/build-electron.js linux arm64 production构建完成后,应用文件将输出到 apps/app/release/ 目录:
- macOS:
.dmg和.zip文件 - Windows:
.exe安装程序和便携版 - Linux:
.AppImage和.deb包
构建配置在 apps/app/package.json 的 build 字段中定义:
- 应用信息:
appId,productName - 输出目录:
release/ - 目标平台: macOS, Windows, Linux
- 目标架构: ARM64, x64
- 打包格式: DMG, ZIP, NSIS, AppImage, DEB
# 代码检查
yarn lint
# 类型检查
yarn typecheck
# 代码格式化
yarn format
# 清理构建文件
yarn clean# 构建 Docker 镜像
yarn docker:build
# 启动 Docker 容器
yarn docker:up
# 查看容器日志
yarn docker:logs
# 重启服务
yarn docker:restart
# 停止并清理容器
yarn docker:down
# 完全清理 (包括数据卷)
yarn docker:clean- 数据库: 使用 PostgreSQL 数据库,数据持久化在 Docker 卷中
- 服务: NestJS 应用运行在容器中,端口 3000
- 数据持久化: PostgreSQL 数据存储在
postgres_data卷中 - 网络: 使用
terminal-network网络进行容器间通信 - 环境变量: 从
env/production.env文件加载配置
Docker 容器使用以下环境变量:
NODE_ENV=production
DB_TYPE=postgres
DB_HOST=postgres
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_DATABASE=terminal_db
JWT_SECRET=your-secret-key-change-in-production
JWT_EXPIRES_IN=7d
PORT=3000PostgreSQL 数据存储在 Docker 卷中,可以通过以下方式备份:
# 备份数据库
docker exec terminal-postgres pg_dump -U postgres terminal_db > terminal-db-backup.sql
# 恢复数据库
docker exec -i terminal-postgres psql -U postgres terminal_db < terminal-db-backup.sql
# 或者使用 Docker 卷备份
docker run --rm -v terminal-electron_postgres_data:/var/lib/postgresql/data -v $(pwd):/backup alpine tar czf /backup/postgres-data-backup.tar.gz -C /var/lib/postgresql/data .- SSH 终端连接
- 服务器管理
- SSH 密钥管理
- 端口转发
- 团队协作
- 用户认证
# 添加到根项目
yarn add <package-name>
# 添加到特定工作区
yarn workspace terminal add <package-name>
yarn workspace service add <package-name># 运行所有测试
yarn test
# 运行特定工作区的测试
yarn workspace service test如果遇到 Electron 相关的问题,可以尝试:
# 重新安装 Electron
yarn workspace terminal add electron@latest
# 清理并重新安装依赖
yarn clean
yarn install如果遇到构建问题:
# 清理构建缓存
yarn clean
# 重新安装依赖
yarn install
# 重新构建
yarn build:electron如果遇到数据库问题:
# 检查数据库连接
docker exec terminal-postgres psql -U postgres -c "SELECT 1;"
# 重新启动服务 (TypeORM会自动处理表结构)
yarn workspace service start:dev如果遇到 Docker 相关问题:
# 清理所有 Docker 资源
yarn docker:clean
# 重新构建镜像
yarn docker:build
# 启动服务
yarn docker:up如果遇到环境变量问题:
# 检查环境变量文件是否存在
ls -la env/
# 重新复制环境变量模板
cp env/env.example env/development.env
# 重启应用
yarn dev✅ 已成功从 pnpm 迁移到 yarn
- 使用 Yarn 作为包管理工具
- 配置了 Turborepo 进行构建优化
- 支持工作区管理
- 解决了 Electron 在 monorepo 中的兼容性问题
- ✅ 开发环境完全正常工作:
yarn dev可以同时启动前端和后端 - ✅ Docker 生产环境配置完成:支持容器化部署
- ✅ 环境变量管理完成:支持开发和生产环境配置
- ✅ Electron 构建配置完成:支持多平台多架构构建
- Electron 应用: http://localhost:5173/
- NestJS 服务: http://localhost:3000/
- 状态: ✅ 两个服务都正常运行
- Docker 服务: http://localhost:3000/
- 数据库: SQLite (持久化存储)
- 状态: ✅ 生产环境配置完成
- 支持平台: macOS, Windows, Linux
- 支持架构: ARM64, x64
- 构建工具: electron-builder
- 状态: ✅ 多平台多架构构建配置完成