父节点
355ae01bd9
当前提交
7ff50571e9
@ -0,0 +1,106 @@
|
|||||||
|
---
|
||||||
|
date: 2026-05-05
|
||||||
|
type: ops
|
||||||
|
module: hl-order-service-v2
|
||||||
|
priority: high
|
||||||
|
related_pr: "#1655"
|
||||||
|
notify: ["@yst"]
|
||||||
|
status: pending
|
||||||
|
---
|
||||||
|
|
||||||
|
# 在 hl-order-service-v2 K8s pod 安装 Chromium + 中文字体
|
||||||
|
|
||||||
|
## 背景
|
||||||
|
|
||||||
|
PR #1655 已合并:行程附件 PDF 渲染管线从 PDFBox 切到 **Thymeleaf HTML 模板 + Microsoft Playwright Headless Chromium**,1:1 还原 Kimi 网页样式。
|
||||||
|
|
||||||
|
代码已部署测试服 + 正式服。**但 Chromium 二进制 + 中文字体未在 K8s base image 中安装**,目前服务自动 fallback 到 PDFBox 老路径(PDF 样式跟之前一样不变,不阻断合同生成)。
|
||||||
|
|
||||||
|
要看到 Kimi 新样式,必须装 Chromium。
|
||||||
|
|
||||||
|
## K8s 改动清单
|
||||||
|
|
||||||
|
### 1. 镜像加 Chromium 二进制 + 系统依赖
|
||||||
|
|
||||||
|
`Dockerfile` 加:
|
||||||
|
|
||||||
|
```dockerfile
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
libnss3 libgbm1 libasound2 libxss1 libxshmfence1 \
|
||||||
|
libdrm2 libgtk-3-0 libxcomposite1 libxdamage1 libxfixes3 \
|
||||||
|
libxrandr2 libpango-1.0-0 libcairo2 \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 镜像装中文字体
|
||||||
|
|
||||||
|
```dockerfile
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
fonts-noto-cjk fonts-arphic-uming fonts-arphic-ukai \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 启动时下载 Chromium 二进制
|
||||||
|
|
||||||
|
Playwright-java 第一次调用时自动下载 chromium 到 `~/.cache/ms-playwright/`(约 200MB),但 K8s pod fs 通常 ephemeral,每次 pod 重启会重下,浪费时间。
|
||||||
|
|
||||||
|
**两种方案**:
|
||||||
|
|
||||||
|
#### 方案 A: PV 持久化 cache 目录(推荐)
|
||||||
|
|
||||||
|
K8s deployment 加 PersistentVolumeClaim 挂 `~/.cache/ms-playwright`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
volumes:
|
||||||
|
- name: playwright-cache
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: hl-order-v2-playwright-cache
|
||||||
|
volumeMounts:
|
||||||
|
- name: playwright-cache
|
||||||
|
mountPath: /root/.cache/ms-playwright
|
||||||
|
```
|
||||||
|
|
||||||
|
PVC 大小 500Mi 即可。首次启动 download 后所有 pod 共享。
|
||||||
|
|
||||||
|
#### 方案 B: 镜像 build 时 install(更稳妥)
|
||||||
|
|
||||||
|
Dockerfile 加:
|
||||||
|
|
||||||
|
```dockerfile
|
||||||
|
WORKDIR /app
|
||||||
|
COPY app.jar /app/
|
||||||
|
RUN java -jar /app/app.jar --spring.main.web-application-type=none \
|
||||||
|
--com.microsoft.playwright.cli=install --com.microsoft.playwright.cli.args=chromium
|
||||||
|
# 或者用 maven exec 直接装
|
||||||
|
RUN mvn -f /tmp/playwright-pom.xml exec:java \
|
||||||
|
-Dexec.mainClass=com.microsoft.playwright.CLI \
|
||||||
|
-Dexec.args="install --with-deps chromium"
|
||||||
|
```
|
||||||
|
|
||||||
|
镜像层增大约 200MB,但启动即用。
|
||||||
|
|
||||||
|
## 验证
|
||||||
|
|
||||||
|
部署完后:
|
||||||
|
|
||||||
|
1. K8s pod exec: `ls -la ~/.cache/ms-playwright/chromium-*/chrome-linux/chrome` 看二进制存在
|
||||||
|
2. 创建一份测试合同,下载行程附件 PDF
|
||||||
|
3. 标题"额吉的故乡 · 6天5晚行程线路详情" 应显示**深蓝衬线字体居中**
|
||||||
|
4. 每个 DAY 下封面图应**圆角卡片化**
|
||||||
|
5. 三餐三栏、timeline、游客名单表样式齐全
|
||||||
|
|
||||||
|
## Fallback 行为(保险)
|
||||||
|
|
||||||
|
如果 Chromium 启动失败(缺二进制/缺字体/launch 异常),ItineraryAttachmentService 自动 catch + log warn + 走 PDFBox 老路径生成 PDF。**不阻断合同生成流程**。
|
||||||
|
|
||||||
|
## OSS Render Version
|
||||||
|
|
||||||
|
OSS_RENDER_VERSION 6→7,旧订单重新申报合同会走新版本路径。已生成的旧 v6 PDF 不影响(按月分桶 OSS Key)。
|
||||||
|
|
||||||
|
## 关联
|
||||||
|
|
||||||
|
- PR #1655 (Thymeleaf + Chromium 重构)
|
||||||
|
- Issue #1651 (用户授权 完全由后端做, 不动 hl-ui)
|
||||||
|
- 模板文件: `hl-order-service-v2/src/main/resources/templates/itinerary.html`
|
||||||
|
|
||||||
|
@yst 帮忙在测试服 K8s deployment 加 Chromium 安装步骤,正式服同步处理。装好后 PD 回复一下我做 round-trip 验证。
|
||||||
正在加载...
x
在新工单中引用
屏蔽一个用户