Files
step-web/README.md
2026-03-24 21:33:48 +08:00

139 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Step Admin
这是一个基于 SvelteKit + SQLite + `step` CLI 构建的轻量级证书管理后台系统。旨在用于方便管理由 `step-ca` 签发的内网设备客户端证书。
## 主要特性
- 🛡️ 安全的 Admin 登录保护
- 📊 仪表盘展示证书状态统计
- 📄 发行、吊销设备证书并记录状态
- 📦 一键下载 `.crt` 证书及直接导出 `.p12` 格式
- 📝 记录基于 SQLite 的基础审计日志
---
## 🛠 开发环境搭建
### 1. 环境依赖
1. Node.js >= 20
2. [`step` CLI](https://smallstep.com/docs/step-cli/installation) 命令行工具(确保在环境变量 `PATH` 中可用)。
3. 你的本地或远程的 `step-ca` 根 CA 已被系统信任(用于正常测试颁发与吊销)。
### 2. 克隆与安装
```bash
# 进入前端项目目录
cd step-web
# 安装依赖模块
npm install
```
### 3. 配置环境变量
复制环境模板并进行配置:
```bash
cp .env.example .env
```
此时你需要编辑 `.env` 文件:
- `APP_ADMIN_USERNAME`:登录用的管理员用户名(如 admin
- `APP_ADMIN_PASSWORD_HASH`:登录用的明文密码或哈希值(本示例暂时为弱校验)
- `APP_SESSION_SECRET`:用于签署 Cookie避免被篡改
- `STEP_BIN`:如果你本地安装的 step CLI 不在全局 `PATH`,请填写它的绝对路径(如 `/usr/bin/step`)。
- `STEP_CONTEXT`:所使用的 step context 配置名称。
- `STEP_CA_URL`:如果存在独立通信地址的主 ca 节点,请在此提供(如 `https://ca.local:8443`)。
### 4. 数据库初始化
初始化 SQLite 数据库及创建必要的表结构(`certificates`, `audit_logs`
```bash
npx tsx scripts/init-db.ts
```
> 如果系统提示未识别此命令,请先执行 `npm i -g tsx`。执行成功后,`data/app.db` 会被创建。
### 5. 启动本地开发服务
```bash
npm run dev
```
打开浏览器访问 `http://localhost:5173`,使用 `.env` 中的账密尝试登录和测试发证。
---
## 🚀 生产环境部署 (Node Adapter)
项目使用了 SvelteKit 的 `@sveltejs/adapter-node`,因此最终输出的是标准的 Node.js 应用进程。
### 1. 构建应用
在开发机或者 CI/CD 流程中执行:
```bash
npm run build
```
这会在 `.svelte-kit/` 与最终的 `build/` 目录下生成产物。
### 2. 服务器部署步骤
1. 将项目源码(不包括 `node_modules`)和 `build/` 目录上传到服务器(如 Linux Ubuntu/Debian 服务器)。
2. 在服务器上准备与 `.env` 中相符的 `step-ca` 环境,确保 `step` 拥有足够的权限读写你设置的 `STEP_OUTPUT_DIR`
3. 执行 `npm install --omit=dev` 仅安装生产依赖(主要为了安装适配器需要的依赖如 `better-sqlite3`)。
4. 在服务运行前同样需要初始化数据库结构(如果你没上传旧有的 `data/app.db`),可以执行 `npx tsx scripts/init-db.ts`
### 3. 运行服务 (使用 PM2 / Systemd)
#### Systemd 配置示例
创建一个 Systemd 守护进程监控这个 Web 应用运行:
```ini
# /etc/systemd/system/step-admin.service
[Unit]
Description=Step CA Admin Web Dashboard
After=network.target
[Service]
Type=simple
User=your-node-user
# 切换到你的项目目录
WorkingDirectory=/var/www/step-admin
# 指定 NODE_ENV 与加载对应的环境变量文件
Environment="NODE_ENV=production"
EnvironmentFile=/var/www/step-admin/.env
# 启动执行 build 后的入口
ExecStart=/usr/bin/node build/index.js
Restart=on-failure
[Install]
WantedBy=multi-user.target
```
执行命令启动:
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now step-admin
```
默认它会在本机的 `3000` 端口启动服务。
### 4. 配置反向代理 (Caddy 示例)
建议Web 后台不直接走公网裸奔,通过 Caddy 代理加上 HTTPS 支持更为安全可靠:
```caddyfile
admin.ca.example.com {
reverse_proxy localhost:3000
}
```
重新加载 Caddy`systemctl reload caddy`
---
## ⚠️ 安全与使用须知
- 此后台的核心功能是在服务器本地利用 child process 调用 `step` 客户端。务必注意权限控制,不要使用 `root` 用户运行这个后台服务。尽量给予一个权限克制的专门系统账户,并只开放该用户对于 `step-ca` 相关凭证目录(以及 `STEP_OUTPUT_DIR`)的存取权限。
- Web 登录认证目前为简单实现,如用于复杂组织,请进一步对接 OIDC 或加强安全散列算法。