Files
ledgerly-docs/dev/build-deploy.md
T
rosercode b979c6e498 refactor: 文档站品牌改名为汇账 Ledgerly,站点与脚本标识统一为 ledgerly
- 站点标题、首页与文档正文品牌名由「收支管理系统」改为「汇账 Ledgerly」
- package.json 包名改为 ledgerly-docs
- 维护脚本环境变量由 FINANCE_* 改为 LEDGERLY_*,测试库路径与示例同步
- 项目结构、构建部署、开发环境等文档中的目录名与 jar 名改为 ledgerly
- 保留在线体验域名与 OSS 截图前缀不变
2026-09-23 17:33:59 +08:00

97 lines
3.0 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.
# 构建与部署
## 前置条件
- **JDK 21**(Temurin 21 LTS)
- **Node.js**(构建前端时需要)
## 开发模式
前后端分离,便于调试:
```bash
# 后端(默认 8080)
cd ledgerly
set JAVA_HOME=D:\venv\jdk-21
gradlew.bat bootRun
# 前端(默认 5173,接口代理到 8080)
cd ledgerly/frontend
npm run dev
```
- 后端地址:http://localhost:8080
- 后端 API 文档:http://localhost:8080/doc.html
- 前端地址:http://localhost:5173,接口经 Vite 代理到后端 8080
## 打包可执行 jar(前后端一体化)
`bootJar` 会先执行前端 `npm run build`,再把 `frontend/dist` 复制到 jar 内的 `BOOT-INF/classes/static/`,单文件同时提供页面与接口。
```bash
gradle bootJar
# 或使用宿主机脚本
./package.sh
```
输出:`build/libs/ledgerly-0.0.1-SNAPSHOT.jar`
启动(默认 8080,可另指定端口):
```bash
java -jar build/libs/ledgerly-0.0.1-SNAPSHOT.jar --server.port=18081
```
访问对应端口即可;刷新 `/dashboard` 等子路由由后端 `SpaErrorController` 回退到 `index.html`。
::: tip 提示
jar 内置的前端为生产构建,访问时与后端同源,无需额外的反向代理。
:::
构建任务链(`build.gradle`):
- `npmInstall`:安装前端依赖(`node_modules` 存在且 `package.json` 未变化时跳过)
- `frontendBuild`:执行 `npm run build`
- `bootJar`:依赖 `frontendBuild`,并将前端产物打入静态资源目录
## Docker 部署
`run/docker-compose.yml` 定义前后端两个服务,纯复用本地镜像、不构建新镜像:
| 服务 | 镜像 | 端口 | 说明 |
|---|---|---|---|
| backend | `eclipse-temurin:21-jre` | 18080→8080 | 挂载 `run/backend/*.jar`,持久化 `config/`、`data/`、`logs/` |
| front | `nginx:alpine` | 15180→80 | 挂载 `run/front/dist` 与 Nginx 配置 |
环境变量 `DB_URL` / `DB_USERNAME` / `DB_PASSWORD` 仅作为首次启动的默认配置来源,也可在界面中完成数据库配置。
## 桌面 GUI 启动器
`launcher` 包提供系统托盘 + 控制窗口的桌面启动器(启动/停止服务、打开浏览器、查看日志),通过 `bootGuiJar` 打包:
```bash
gradle bootGuiJar
```
- 入口类:`cn.rosercode.finance.launcher.LauncherMain`
- 依赖 JavaFX 与 dorkbox SystemTray,仅加入带 GUI 的 jar(`guiRuntime` 配置),普通 jar 不含这些依赖
- 平台默认 Windows(可通过 `-PjavafxPlatform=linux` 本地验证)
- JavaFX 与 JNA 原生库需 `requiresUnpack` 从嵌套 jar 解压
> 注意:该启动器为规划中的能力,具体实现以当前源码为准。
## 分发形态
| 形态 | 说明 |
|---|---|
| jar | `bootJar`,需 JDK 21 运行 |
| jar(带 GUI) | `bootGuiJar`,内含桌面启动器 |
| 可执行文件(控制台 / GUI) | 规划中,计划采用 `jpackage`(JDK 自带,各平台分别构建) |
| Docker 镜像 | 通过 `run/docker-compose.yml` 编排 |
## 相关文档
- [项目结构](/dev/project-structure)
- [开发环境与规范](/dev/development)
- [快速开始(使用文档)](/guide/getting-started)