Gotenberg 工程实践:从前端 URL 到可控 PDF 导出的完整落地
在很多后台系统中,“导出 PDF” 看似一个按钮,实则需要一条完整的渲染链路。本文记录一次基于 Gotenberg 的工程实践:从需求与技术选型出发,到 URL 转 PDF、登录态传递、前端打印模式、动态分页与 waitForExpression,再到 POC 验证、参数调优、批量导出与踩坑经验,抽取出可复用的落地思路。
在很多后台系统中,“导出 PDF” 看似一个按钮,实则需要一条完整的渲染链路。本文记录一次基于 Gotenberg 的工程实践:从需求与技术选型出发,到 URL 转 PDF、登录态传递、前端打印模式、动态分页与 waitForExpression,再到 POC 验证、参数调优、批量导出与踩坑经验,抽取出可复用的落地思路。
本站原使用 GitHub Pages 的 “Deploy from branch” 模式部署,随着站点复杂度增加,在构建环境隔离、Secrets 管理和多平台同步上逐渐力不从心。本文记录将 Hugo + LoveIt 主题项目完整迁移至 GitHub Actions 过程中踩过的 7 个坑及对应解法,涵盖双仓库推送、代理配置、计费陷阱与版本控制等最佳实践。
Docker Engine 与 Docker Compose 的版本搭配是容器化部署中极易被忽视却至关重要的兼容性问题。本文梳理 Compose 从 V1(Python)到 V2(Go)再到 V5 的版本演进史与完整兼容矩阵,解释为何版本号从 v2.40 直接跳跃到 v5.x。同时给出 Docker 25.0.0 的最佳适配版本推荐、V1/V2 架构与功能差异对比,以及生产环境的版本选择决策树和升级路径。
控制平面修复后节点仍处于 NotReady 状态,根因是 CNI 网络插件没有部署。本文完整记录 NotReady 的排查思路、Calico 以 Operator 方式在线/离线部署的操作步骤,并深入分析 Kubelet 系统污点引发 CNI 部署死锁的原因及 Operator 模式如何破局。
现代版本的 Calico 不再把所有组件挤在 kube-system 中,而是通过 Tigera Operator 开辟了 tigera-operator、calico-system、calico-apiserver 三个独立 Namespace。本文用大白话逐层剖析这一"三权分立"设计:如何打破网络插件的部署死锁、如何实现管理面与数据面解耦、以及如何通过聚合 API 让 kubectl 原生管理 Calico 网络资源。
虚拟机 IP 没有变化,仅将 VMware 网络模式从桥接切换为 NAT,K8s 集群的控制平面却彻底瘫痪。本文按"网络 → 运行时 → 静态 Pod → Kubelet"的顺序记录完整的排查与原地修复过程,包括证书更新、kubeconfig 重建、静态 Pod 刷新和镜像地址替换,并剖析网络模式变更导致集群瘫痪的根本原因。
手动执行 Go 交叉编译重复性高、效率低,Windows BAT 批处理可以快速实现本地构建自动化。本文从一段实际编译脚本切入,从零讲解 BAT 基础语法(变量、注释、错误判断等)和工程常用进阶写法(路径获取、静默输出、错误码退出)。最后精简落地三套可直接复用的 Go 编译批处理模板,覆盖日常编译、多端构建与版本发布场景。
本文基于 Kylin V10/CentOS/RHEL 系列 + Docker 25.0.0 + Compose v2.24.1 环境,完整介绍 MySQL 8.0 容器化的生产部署实践。内容包括 MySQL 客户端安装、标准目录规划、my.cnf 生产级配置、docker-compose.yml 编排(含健康检查、资源限制、日志轮转),以及验证部署、自动备份脚本和故障排查速查表,最终交付一套数据持久化、自动拉起、可追溯的生产级数据库实例。
从 Python、Java 等语言转向 Shell 编程,最容易在 if 语句上栽跟头:Shell 的布尔逻辑与主流语言完全相反,退出码 0 表示成功(True),非 0 表示失败(False)。本文通过真实的部署脚本案例,拆解这一陷阱的底层原理、常见踩坑场景和正确心智模型。
本文记录基于 GitLab 社区版搭建 CI/CD 的完整实践,适用于中小团队。以 Gin-Vue-Admin 后端 server 服务为例,实现代码 push/merge 到 master 后自动完成镜像构建、推送 Harbor、Kubernetes 部署以及钉钉通知的全流程,并详细介绍 GitLab Runner 的部署与配置。