# server-ssh-manager **Repository Path**: wengxh/server-ssh-manager ## Basic Information - **Project Name**: server-ssh-manager - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-12 - **Last Updated**: 2025-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README AI Server Monitor 一个轻量的 WebSSH + 会话日志监控系统,前后端分离: - 后端:FastAPI + SQLModel + Paramiko(SQLite 存储) - 前端:React + Vite + TypeScript + Xterm 支持运行时系统设置(日志级别、SSH 超时/KeepAlive、WS 心跳、日志增量落库阈值、日志保留天数),支持会话日志查看、下载与关键字高亮。 目录结构 ``` ai-server-monitor/ backend/ # FastAPI 应用 app/ routers/ # 业务路由(servers / logs / ws / settings) services/ # SSH、加密、设置服务 models.py # SQLModel 模型(Server / SessionLog / Setting) main.py # 应用入口(包含 CORS 与路由挂载) config.py # 基础配置(.env) frontend/ # 前端应用(Vite) src/ pages/ # 页面(服务器 / 终端 / 日志 / 设置) components/ # 组件(表格、表单、状态、布局等) vite.config.ts # 本地代理:/api 与 /ws → 127.0.0.1:8005 ``` 快速开始 环境要求 - Python 3.10+ - Node.js 18+ 后端启动(开发) ```powershell # 新建虚拟环境 python -m venv .venv cd backend # 进入后端目录并安装依赖 pip install -r requirements.txt # Windows PowerShell 设置日志级别为 INFO 并启动(热重载) $env:APP_LOG_LEVEL='INFO' uvicorn backend.app.main:app --host 0.0.0.0 --port 8005 --reload ``` - 健康检查:`GET http://127.0.0.1:8005/health` - API 根路径:`/api/*` - WebSocket:`/ws/ssh/{server_id}`(通过前端代理访问) 前端启动(开发) ```powershell cd frontend npm i npm run dev ``` 访问:`http://127.0.0.1:5173` Vite 代理: - `/api` → `http://127.0.0.1:8005` - `/ws` → `ws://127.0.0.1:8005` 配置说明 环境变量(.env,可选) - `DATABASE_URL`:默认 `sqlite:///./ai_server_monitor.db` - `SECRET_KEY`:用于加密保存的密码(Fernet key) - `SSH_TIMEOUT_SECONDS`:默认 10(仅默认值,运行时可被 Settings 覆盖) 运行时系统设置(/api/settings) 后端持久化在 `Setting` 表,支持随时读取/修改: - `log_level`:`DEBUG|INFO|WARNING|ERROR` - `ssh_timeout_seconds`:SSH 连接超时(秒) - `ssh_keepalive_seconds`:SSH KeepAlive 间隔(秒) - `ws_heartbeat_seconds`:前端心跳间隔(秒),Terminal 页面进入时拉取 - `log_flush_threshold_bytes`:日志内容增量落库阈值(字节) - `log_retention_days`:日志保留天数,更新设置时会触发一次清理 接口: - `GET /api/settings/` → SettingsRead - `PUT /api/settings/` → SettingsUpdate 功能概览 - 服务器清单管理:新增/修改/删除 - WebSSH 终端:窗口自适应、输入回显兜底、心跳保活 - 会话日志:进行中增量落库、结束后完整持久化、列表筛选/下载 - 日志详情弹窗:关键字高亮、匹配计数 - SaaS 风格 UI:侧边栏/顶部栏布局、表格搜索/排序/分页、分步表单校验 常见问题排查(FAQ) - WebSocket 连接不上 - 确认前端代理 `/ws` 指向 `ws://127.0.0.1:8005` - 后端日志中是否有 `[WS] accepted` / `[WS] SSH connect start/success]` - SSH 连不上 - 检查 `host/port/username/password` 与防火墙;必要时提高 `ssh_timeout_seconds` - 日志没有内容 - 进行中会话按阈值增量写入,结束后完整覆盖;可调小 `log_flush_threshold_bytes` - 时间差 8 小时 - 后端统一保存为 UTC(含时区);前端 `toLocaleString()` 会显示本地时区时间 构建与部署 前端构建 ```powershell cd frontend npm run build ``` 产物在 `frontend/dist/`,可任意静态服务器托管,反向代理后端 `http:///api` 与 `ws:///ws`。 后端部署 - 建议 `gunicorn + uvicorn workers` 或 `uvicorn` + 反向代理(Nginx/Caddy) - 持久化 SQLite 到可靠路径 许可 根据你的仓库策略选择许可证(MIT/Apache-2.0 等)。