c40a93f07d3f512311ca3b64d1a7015a7624ff1f
Step Admin
这是一个基于 SvelteKit + SQLite + step CLI 构建的轻量级证书管理后台系统。旨在用于方便管理由 step-ca 签发的内网设备客户端证书。
主要特性
- 🛡️ 安全的 Admin 登录保护
- 📊 仪表盘展示证书状态统计
- 📄 发行、吊销设备证书并记录状态
- 📦 一键下载
.crt证书及直接导出.p12格式 - 📝 记录基于 SQLite 的基础审计日志
🛠 开发环境搭建
1. 环境依赖
- Node.js >= 20
stepCLI 命令行工具(确保在环境变量PATH中可用)。- 你的本地或远程的
step-ca根 CA 已被系统信任(用于正常测试颁发与吊销)。
2. 克隆与安装
# 进入前端项目目录
cd step-web
# 安装依赖模块
npm install
3. 配置环境变量
复制环境模板并进行配置:
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):
npx tsx scripts/init-db.ts
如果系统提示未识别此命令,请先执行
npm i -g tsx。执行成功后,data/app.db会被创建。
5. 启动本地开发服务
npm run dev
打开浏览器访问 http://localhost:5173,使用 .env 中的账密尝试登录和测试发证。
🚀 生产环境部署 (Node Adapter)
项目使用了 SvelteKit 的 @sveltejs/adapter-node,因此最终输出的是标准的 Node.js 应用进程。
1. 构建应用
在开发机或者 CI/CD 流程中执行:
npm run build
这会在 .svelte-kit/ 与最终的 build/ 目录下生成产物。
2. 服务器部署步骤
- 将项目源码(不包括
node_modules)和build/目录上传到服务器(如 Linux Ubuntu/Debian 服务器)。 - 在服务器上准备与
.env中相符的step-ca环境,确保step拥有足够的权限读写你设置的STEP_OUTPUT_DIR。 - 执行
npm install --omit=dev仅安装生产依赖(主要为了安装适配器需要的依赖如better-sqlite3)。 - 在服务运行前同样需要初始化数据库结构(如果你没上传旧有的
data/app.db),可以执行npx tsx scripts/init-db.ts。
3. 运行服务 (使用 PM2 / Systemd)
Systemd 配置示例
创建一个 Systemd 守护进程监控这个 Web 应用运行:
# /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
执行命令启动:
sudo systemctl daemon-reload
sudo systemctl enable --now step-admin
默认它会在本机的 3000 端口启动服务。
4. 配置反向代理 (Caddy 示例)
建议Web 后台不直接走公网裸奔,通过 Caddy 代理加上 HTTPS 支持更为安全可靠:
admin.ca.example.com {
reverse_proxy localhost:3000
}
重新加载 Caddy:systemctl reload caddy
⚠️ 安全与使用须知
- 此后台的核心功能是在服务器本地利用 child process 调用
step客户端。务必注意权限控制,不要使用root用户运行这个后台服务。尽量给予一个权限克制的专门系统账户,并只开放该用户对于step-ca相关凭证目录(以及STEP_OUTPUT_DIR)的存取权限。 - Web 登录认证目前为简单实现,如用于复杂组织,请进一步对接 OIDC 或加强安全散列算法。
Description
Languages
TypeScript
51.6%
Svelte
40.8%
Dockerfile
5.1%
JavaScript
1.3%
HTML
1.1%