BentoPDF Simple Mode 完全指南:面向自托管部署的去营销化构建(bentopdf-simple)
前端【免费下载链接】bentopdfThe Privacy First PDF Toolkit项目地址https://gitcode.com/gh_mirrors/be/bentopdf点击查看免费下载Simple Mode 是 BentoPDFThe Privacy First PDF Toolkit为自托管Self-Hosted部署场景提供的一套构建模式对应bentopdf-simple镜像。它并非功能裁剪的精简版merge、split、edit、sign、OCR、Office 转换等全部 PDF 工具在两个构建中行为完全一致唯一区别在于隐藏了只在 bentopdf.com 公网站点或商业公开部署中有意义的营销型 UIHero、FAQ、Testimonials、Footer 等。读完本文你将掌握 Simple Mode 的隐藏内容清单、五种启用方式、本地对比测试方法、生产部署形态Docker Compose、Podman Quadlet以及它在 Vite 构建管线中的底层实现原理。什么是 Simple Mode功能相同仅隐藏营销壳Simple Mode 的定位在 SIMPLE_MODE.md 中定义得非常清晰它是自托管构建bentopdf-simple的动力来源与支撑 bentopdf.com 的 Commercial build功能上完全一致。两者的唯一差异是围绕工具周边的营销 UI而非工具本身。Simple Mode 不是lite版。每一个 PDF 工具——合并、拆分、编辑、签名、OCR、Office 转换以及其他所有工具——在两个构建中都完全相同地工作。唯一的区别是工具周围的营销 UI。在镜像生态上项目维护两个构建构建镜像适用场景Self-Hosted buildSimple Modeghcr.io/alam00000/bentopdf-simple:latest推荐团队/组织内部工具、自托管私有部署Commercial buildghcr.io/alam00000/bentopdf:latestbentopdf.com 自身以及持有商业许可的公开面向用户的 PDF 部署从源码侧看Simple Mode 不是一个独立的代码分支而是同一套代码库在构建期通过SIMPLE_MODE环境变量切换的产物Vite 构建配置vite.config.ts在define阶段将__SIMPLE_MODE__编译为布尔常量同时 Rollup 的入口文件也会在 Simple Mode 下从index.html切换为simple-index.html。这一点决定了后文构建期生效、运行期不生效的关键特性。Simple Mode 隐藏了什么启用后Simple Mode 会隐藏以下 bentopdf.com 专属营销 UI导航栏Navigation bar含营销内容的 Hero 区块Features 区块Security/compliance 区块FAQ 区块Testimonials 区块Support 区块Footer同时页面标题更新为PDF Tools工具区在页面中变得更加突出。没有任何 PDF 工具被移除或禁用。这套隐藏逻辑在源码中有两处实现首页src/js/main.ts当__SIMPLE_MODE__为真时hideBrandingSections()会逐个隐藏hero-section、features-section、security-compliance-section、faq-accordion、testimonials-section、support-section、GitHub 链接以及带.hide-section的Used by companies区块并把document.title设为品牌名 - PDF Tools同时重写工具标题与副标题的样式使其更加醒目。工具页src/js/utils/simple-mode-footer.ts在__SIMPLE_MODE__下所有section中标题包含 How It Works、Related PDF Tools、Related Tools、Frequently Asked Questions 的区块都会被隐藏并在simple-mode-lang-switcher容器中注入语言切换器。此外src/js/main.ts 中 GitHub Star 计数器在__SIMPLE_MODE__下也被跳过!__SIMPLE_MODE__ !__DISABLE_GITHUB_STARS__才发起api.github.com请求这从代码层面印证了 README 中Simple Mode 构建总是跳过 Star 计数器的说明。五种启用方式方法一直接使用预构建的 Simple Mode 镜像推荐GitHub Container Registry推荐# Docker docker run -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest # Podman podman run -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latestDocker Hub# Docker docker run -p 3000:8080 bentopdfteam/bentopdf-simple:latest # Podman podman run -p 3000:8080 docker.io/bentopdfteam/bentopdf-simple:latest或使用 Docker Compose / Podman Composeservices: bentopdf: # 使用 GitHub Container Registry推荐 image: ghcr.io/alam00000/bentopdf-simple:latest # 或使用 Docker Hub # image: bentopdfteam/bentopdf-simple:latest container_name: bentopdf restart: unless-stopped ports: - 3000:8080仓库根目录的 docker-compose.yml 默认镜像正是ghcr.io/alam00000/bentopdf-simple:latest即开箱即用的自托管形态。方法二Docker Compose 本地构建docker compose -f docker-compose.dev.yml build --build-arg SIMPLE_MODEtrue docker compose -f docker-compose.dev.yml up -ddocker-compose.dev.yml 中已预留了SIMPLE_MODE构建参数注释说明false为默认模式、true为 Simple Mode直接通过--build-arg覆盖即可。方法三Docker Build 直接构建docker build --build-arg SIMPLE_MODEtrue -t bentopdf-simple . docker run -p 3000:8080 bentopdf-simpleDockerfile 与 Dockerfile.nonroot 均声明了ARG SIMPLE_MODEfalse并ENV SIMPLE_MODE$SIMPLE_MODE构建阶段会在该环境变量下执行npm run build:with-docs。Dockerfile.nonroot额外支持 LSIO 风格的PUID/PGID环境变量用于以非 root 身份运行。方法四npm 脚本本地开发最省事npm run serve:simple该命令在 package.json 中定义为serve:simple: SIMPLE_MODEtrue npm run build npm run preview -- --port 3000它会自动完成设置SIMPLE_MODEtrue以 Simple Mode 构建整个项目在http://localhost:3000上提供构建产物方法五环境变量 手动构建export SIMPLE_MODEtrue npm run build npx serve dist -p 3000注意npm run build本身是一条很长的流水线package.json先生成博客与静态工具链接再tsc类型检查、vite build、SEO 页面增强最后依次执行 i18n 页面生成、sitemap、安全响应头与 SEO 审计脚本。其中安全响应头生成scripts/generate-security-headers.mjs和打包脚本scripts/package-dist.js都会读取SIMPLE_MODE来决定产物的行为因此该环境变量必须在整个构建流程启动前设置。本地测试 Simple Mode方法一npm 脚本开发最省事npm run serve:simple自动构建并在http://localhost:3000上提供 Simple Mode 页面。方法二预构建镜像生产验证最省事# Docker - 拉取并运行 Simple Mode 镜像 docker pull ghcr.io/alam00000/bentopdf-simple:latest docker run -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest # Podman podman pull ghcr.io/alam00000/bentopdf-simple:latest podman run -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest浏览器打开http://localhost:3000即可。方法三本地构建并测试# 以 Simple Mode 构建 SIMPLE_MODEtrue npm run build # 提供构建产物 npx serve dist -p 3000浏览器打开http://localhost:3000。方法四两个构建并排对比# Commercial buildbentopdf.com 的外观 docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest # Self-Hosted buildSimple Mode docker run -p 3001:8080 ghcr.io/alam00000/bentopdf-simple:latest # Podman 用户将 docker 替换为 podmanCommercial buildhttp://localhost:3000Self-Hosted buildhttp://localhost:3001验证清单如何确认 Simple Mode 生效当 Simple Mode 正常工作时你应该看到✅ 干净的 PDF Tools 头部无营销 Hero 区块✅ Select a tool to get started 副标题✅ 工具搜索栏✅ 按分类组织的全部 PDF 工具卡片❌ 无导航栏❌ 无 The PDF Toolkit built for privacy 的 Hero 区块❌ 无 Features、FAQ、Testimonials 或 Footer 区块PDF Tools 与 Select a tool to get started 这两个文案来自 i18n 的simpleMode.title与simpleMode.subtitle见 public/locales/en/common.json且随data-i18n属性在运行时随语言切换也就是说 Simple Mode 的头部文案同样支持多语言。可用容器镜像一览Self-Hosted buildSimple Mode—— 自托管推荐GitHub Container Registry推荐ghcr.io/alam00000/bentopdf-simple:latestghcr.io/alam00000/bentopdf-simple:v1.0.0带版本号Docker Hubbentopdfteam/bentopdf-simple:latestbentopdfteam/bentopdf-simple:v1.0.0带版本号Commercial build —— bentopdf.com 与商业许可持有者使用包含完整的营销站点Hero/FAQ/Testimonials/Footer。只有当你明确想要 bentopdf.com 的外观时才拉取该镜像——例如你在商业许可下运行一个公开面向用户的 PDF 部署。GitHub Container Registry推荐ghcr.io/alam00000/bentopdf:latestghcr.io/alam00000/bentopdf:v1.0.0带版本号Docker Hubbentopdfteam/bentopdf:latestbentopdfteam/bentopdf:v1.0.0带版本号生产部署示例Docker Compose / Podman Composeservices: bentopdf: image: ghcr.io/alam00000/bentopdf-simple:latest # 推荐 # image: bentopdfteam/bentopdf-simple:latest # 备选Docker Hub container_name: bentopdf restart: unless-stopped ports: - 80:8080 environment: - PUID1000 - PGID1000PUID/PGID环境变量由 Dockerfile.nonroot 支持LSIO 风格通过 entrypoint.sh 在启动时以指定 UID/GID 运行 nginx。Podman QuadletLinux Systemd创建~/.config/containers/systemd/bentopdf-simple.container[Unit] DescriptionBentoPDF Simple Mode Afternetwork-online.target [Container] Imageghcr.io/alam00000/bentopdf-simple:latest ContainerNamebentopdf-simple PublishPort80:8080 AutoUpdateregistry [Service] Restartalways [Install] WantedBydefault.target启用并启动systemctl --user daemon-reload systemctl --user enable --now bentopdf-simpleAutoUpdateregistry让 Quadlet 可以跟随 registry 的镜像标签自动更新适合长期无人值守的自托管节点。底层原理SIMPLE_MODE 如何参与构建Simple Mode 的实现完全发生在构建期理解这一点对排查为什么环境变量没生效至关重要。相关证据集中在 vite.config.ts入口切换build.rollupOptions.input.main在SIMPLE_MODE true时指向 simple-index.html否则指向index.html。也就是说 Simple Mode 下首页是专用的精简入口模板而不是事后用 CSS/JS 擦除内容。编译期常量define.__SIMPLE_MODE__被编译为JSON.stringify(process.env.SIMPLE_MODE true)因此源码中的if (__SIMPLE_MODE__)分支会在打包时被 Tree-shaking/死代码消除处理。这正是文档Simple Mode 使用死代码消除以获得更小的 bundle这一说法的依据。产物覆盖flattenPagesPlugin在SIMPLE_MODE true且存在simple-index.htmlbundle 时将产物中的simple-index.html重命名为index.html从而保证部署后访问根路径即是精简首页。运行时兜底src/js/main.ts 中的hideBrandingSections()作为运行时第二道保险隐藏仍在 DOM 中的各营销区块src/js/utils/simple-mode-footer.ts 则负责工具页上的 How It Works、Related PDF Tools、FAQ 等区块清理与语言切换器注入。自定义入口模板的结构simple-index.html 展示了精简首页的完整结构一个极简的深色导航条仅品牌 Logo 与名称可通过VITE_BRAND_NAME/VITE_BRAND_LOGO定制、居中的 PDF Tools 标题、带键盘快捷键提示CtrlK/⌘K的搜索框、按分类渲染的工具卡片网格#tool-grid以及处理中/告警/预览/设置等模态框。它复用了 src/partials/settings-modal.html 与 src/partials/warning-modal.html 两个 Handlebars 局部模板说明 Simple Mode 并不是一套独立的简化工具集而是与主构建共享全部工具实现与模态组件。与 BASE_URL / 品牌定制的组合Simple Mode 可以与其他构建期选项叠加使用。例如 README 中给出了同时设置BASE_URL与SIMPLE_MODE的示例docker build \ --build-arg SIMPLE_MODEtrue \ --build-arg BASE_URL/pdf/ \ -t bentopdf-simple . docker run -p 3000:8080 bentopdf-simple品牌化VITE_BRAND_NAME、VITE_BRAND_LOGO、VITE_FOOTER_TEXT在完整模式与 Simple Mode 下均可用simple-index.html 中的导航条与页脚模板都通过 Handlebars 条件渲染读取这些变量语言环境变量VITE_DEFAULT_LANGUAGE与DISABLE_GITHUB_STARS也可与 Simple Mode 组合。此外DISABLE_TOOLS构建参数以逗号分隔的工具 ID 列表在两种模式下都可用于禁用指定工具——Simple Mode 只隐藏营销 UI工具层面的启用/禁用仍由部署者通过构建参数独立控制。重要注意事项预构建镜像Simple Mode 请使用ghcr.io/alam00000/bentopdf-simple:latest推荐环境变量生效时机SIMPLE_MODEtrue只在构建时生效运行时不生效。如果你docker run时设置-e SIMPLE_MODEtrue页面不会有任何变化——因为该值在镜像构建阶段已被编译进产物__SIMPLE_MODE__常量与入口选择都已固定。需要修改该配置时请重新构建镜像或换用预构建的bentopdf-simple镜像。构建期优化Simple Mode 通过死代码消除获得更小的 bundle功能一致性所有 PDF 工具在两种模式下工作方式完全相同延伸阅读自托管部署总览与更多镜像选择docs/self-hosting/index.md、docs/self-hosting/docker.md静态托管无需容器方式STATIC-HOSTING.md品牌定制与构建参数完整表格README.md--simple-mode参数默认 off可与BASE_URL、VITE_DEFAULT_LANGUAGE等组合源码级实现vite.config.ts、src/js/main.ts、src/js/utils/simple-mode-footer.ts赞分享前端【免费下载链接】bentopdfThe Privacy First PDF Toolkit项目地址https://gitcode.com/gh_mirrors/be/bentopdf点击查看免费下载相关推荐BentoPDF自托管完整指南在Docker、Vercel和Netlify上部署完整教程BentoPDF自托管完整指南在Docker、Vercel和Netlify上部署完整教程 BentoPDF是一个隐私优先的PDF工具包提供超过50种PDF处前端BentoPDF 静态托管实战指南基于 Netlify、Vercel 与 GitHub Pages 的自托管部署与 SEO 控制BentoPDF 静态托管实战指南基于 Netlify、Vercel 与 GitHub Pages 的自托管部署与 SEO 控制 BentoPDF 是一款「隐前端如何快速搭建Sentry自托管系统面向开发者的完整部署指南如何快速搭建Sentry自托管系统面向开发者的完整部署指南 在当今软件开发中错误监控和性能追踪已成为确保应用稳定性的关键环节。Sentry自托管系统提供了一运维云原生可观测性创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

VitePress 站点部署完全指南:从本地预览到 Netlify、GitHub Pages 与 Nginx 等主流平台

VitePress 站点部署完全指南:从本地预览到 Netlify、GitHub Pages 与 Nginx 等主流平台

前端文档 【免费下载链接】vitepress Vite & Vue powered static site generator. 项目地址: https://gitcode.com/gh_mirrors/vi/vitepress 点击查看 免费下载 VitePress 是 Vite 与 Vue 驱动的静态站点生成器,其部署流程本质上是一次"构建 …

2026/9/21 15:15:19 阅读更多 →
react-admin 的 `useRemoveFromStore` Hook 完全指南:从 Store 中安全移除用户偏好

react-admin 的 `useRemoveFromStore` Hook 完全指南:从 Store 中安全移除用户偏好

react-admin 的 useRemoveFromStore Hook 完全指南:从 Store 中安全移除用户偏好 【免费下载链接】react-admin A frontend Framework for single-page applications on top of REST/GraphQL APIs, using TypeScript, React and Material Design 项目地址: https:…

2026/9/21 15:15:19 阅读更多 →
TiXL 向量归一化操作符 NormalizeVector3 完全指南:从数学原理到粒子模拟实战

TiXL 向量归一化操作符 NormalizeVector3 完全指南:从数学原理到粒子模拟实战

音视频图形学桌面应用 【免费下载链接】t3 TiXL is an open source software to create realtime motion graphics. 项目地址: https://gitcode.com/GitHub_Trending/t3/t3 点击查看 免费下载 NormalizeVector3 是 TiXL(开源实时动态图形创作软件&#…

2026/9/21 15:14:19 阅读更多 →

最新新闻

梅花卷:拆解高频面试题背后的底层逻辑

梅花卷:拆解高频面试题背后的底层逻辑

梅花卷:拆解高频面试题背后的底层逻辑 面试被问原理答不上来,是应届生最尴尬的时刻。 你背了八股文,却过不了“梅花卷”式的深度追问。 这不仅是知识盲区,更是思维断层,必须靠实战补齐。 01 一句话原理:从“背题”到“解题”的认知跃迁…

2026/9/22 18:52:58 阅读更多 →
3个维度讲透PASOON选型:从入门到精通避坑指南

3个维度讲透PASOON选型:从入门到精通避坑指南

3个维度讲透PASOON选型:从入门到精通避坑指南 刚拿到一套PASOON的示例代码,本地环境配置半天,跑起来全是红叉?别急着删库重装,大概率是依赖版本和运行上下文没对齐。很多老手都栽在这个坑里,看着官方文档里的API调用示例,明明一行不差…

2026/9/22 18:52:58 阅读更多 →
3步搞定cad怎么测面积,告别官方文档坑

3步搞定cad怎么测面积,告别官方文档坑

3步搞定cad怎么测面积,告别官方文档坑 官方文档翻了三遍还是找不到重点?别急,这正是很多工程师在 实战项目 中遇到的真实困境。AutoCAD…

2026/9/22 18:52:58 阅读更多 →
3个底层逻辑拆解中国移动福:面试必问的手写实现细节

3个底层逻辑拆解中国移动福:面试必问的手写实现细节

3个底层逻辑拆解中国移动福:面试必问的手写实现细节 面试被问原理答不上来,是不是你的常态? 很多候选人简历上写着“熟悉分布式”,但一问具体实现就卡壳。 中国移动福 这个案例,正是检验你是否真懂底层逻辑的试金石,也是 面试必问 的高频考点。…

2026/9/22 18:52:58 阅读更多 →
天府通卡使用范围源码解析:3步搞定数据跑不通

天府通卡使用范围源码解析:3步搞定数据跑不通

天府通卡使用范围源码解析:3步搞定数据跑不通 刚拿到那段关于天府通卡使用范围的数据处理脚本,复制进本地环境直接报错?别急,这种“复制来的代码跑不通不知道怎么调”的情况,我在帮新人排查时见过太多次了。问题往往不在你的电脑,而在于你没看懂底层逻…

2026/9/22 18:52:58 阅读更多 →
3步搞定免费的短视频sdk:面试实战项目避坑指南

3步搞定免费的短视频sdk:面试实战项目避坑指南

3步搞定免费的短视频sdk:面试实战项目避坑指南 刚学完 Python 或 Java 语法,打开 IDE 却不知从何下手?这大概是无数转码者的噩梦。背了三天…

2026/9/22 18:51:58 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/22 8:51:04 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →