Initial commit of Step Admin panel
This commit is contained in:
138
README.md
Normal file
138
README.md
Normal 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 或加强安全散列算法。
|
||||
Reference in New Issue
Block a user