部署
StackRivet 部署为单个后端 jar 加一个静态管理端包。Flyway 在启动时自动迁移数据库,所以一次部署就是:构建、配环境、运行。
# 后端 fat jarcd stackrivet-servermvn -pl stackrivet-app -am package -DskipTests # → stackrivet-app/target/stackrivet-app.jar
# 静态管理端包cd ../stackrivet-admin-uipnpm install && pnpm build # → dist/从环境加载配置,再运行 jar:
cd stackrivet-serverset -a && source .env && set +a # STACKRIVET_DB_*、STACKRIVET_SECURITY_JWT_SECRET、REDIS_*、存储凭据export JAVA_HOME=$(/usr/libexec/java_home -v 21) # JDK 21java -jar stackrivet-app/target/stackrivet-app.jar应用在 :8080 启动 Tomcat、运行 Flyway,约 13 秒就绪。确认:
curl http://127.0.0.1:8080/actuator/health # {"status":"UP"}把管理端 dist/ 作为静态文件托管(如放在 Nginx 后),并把 /api/* 和 /actuator/* 代理到后端。
| 形态 | 布局 |
|---|---|
| 本地开发 | Vite dev server + Spring Boot + Docker MySQL/PostgreSQL + MinIO |
| 小团队生产 | Nginx → 静态管理端 + Spring Boot 应用 → 托管 MySQL/PostgreSQL → S3 / OSS |
| 企业 | 负载均衡 → 多个应用节点 → HA 数据库 + 企业对象存储 + OIDC/SAML/LDAP |
由于应用以无状态为目标——上传直传对象存储、重任务走异步任务、列表分页——横向扩展就是在负载均衡后加节点。
- 对象存储,不是本地磁盘。 把
STACKRIVET_STORAGE_TYPE设为s3或aliyun_oss(见配置对象存储);本地文件挺不过重启或扩容。 - 轮换初始 admin 密码。 引导
admin账号带一个已知的开发密码——暴露应用前改掉它。 - 设置强
STACKRIVET_SECURITY_JWT_SECRET,所有密钥放环境里,绝不提交进代码仓库。 - Redis 必需——它支撑 JWT 吊销和健康检查。
- 限制 actuator/metrics 端点。
/actuator/health和/actuator/prometheus按设计无需认证可达;生产中用网络 ACL 挡住。 - 托管、有备份的数据库。 用托管 MySQL/PostgreSQL,并有经过测试的备份恢复流程。
从卡住的启动恢复
Section titled “从卡住的启动恢复”| 症状 | 检查 |
|---|---|
port 8080 failed to start | lsof -nP -iTCP:8080 -sTCP:LISTEN——杀掉残留进程 |
| 密码正确却登录 401 | STACKRIVET_SECURITY_JWT_SECRET 在 token 签发后被改过 |
| Flyway checksum 不匹配 | 见数据库迁移 → 恢复 |
Helm chart、多实例 HA、SSO(OIDC/SAML/LDAP)属于 Enterprise——见价格页。Community 作为 Nginx 后的单实例运行良好。