Initial commit of Step Admin panel

This commit is contained in:
Chaos
2026-03-24 21:33:48 +08:00
commit 81045c5d57
45 changed files with 4327 additions and 0 deletions

138
README.md Normal file
View File

@@ -0,0 +1,138 @@
# 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 或加强安全散列算法。