
后端前端运维【免费下载链接】flameFlame is self-hosted startpage for your server. Easily manage your apps and bookmarks with built-in editors.项目地址https://gitcode.com/gh_mirrors/flam/flame点击查看免费下载Flame 是一款基于 Node.js Express 后端与 React 前端构建的自托管服务器起始页startpage内置 GUI 编辑器即可管理应用与书签。本文以仓库根目录下的 CHANGELOG.md 为骨架逐版本梳理 Flame 从 2021-06-08 初始发布到 2026-04-24 安全加固的完整演进历程并结合仓库源码、配置与迁移文件说明每项功能的落地实现、适用前提与使用方式帮助读者理解这一自托管导航页项目的架构脉络与实战配置方法。版本时间线总览Flame 的变更记录覆盖 v1.0.02021-06-08至 v2.4.02026-04-24跨度近五年可归纳为三个主要阶段阶段版本区间时间主题基础建设期v1.0.0 ~ v1.4.02021-06 ~ 2021-06起始页核心、书签/应用管理、排序、反向代理功能扩张期v1.5.0 ~ v1.7.42021-06 ~ 2021-11搜索体系、Docker/K8s 集成、主题与自定义 CSS成熟与安全期v2.0.0 ~ v2.4.02021-11 ~ 2026-04认证系统、次级搜索、主题编辑器、高危安全修复下面按功能域而非单纯按版本顺序展开讲解每个功能域内保留其引入与演进的版本节点方便对照 CHANGELOG.md 原文。一、起始页基础能力标题、问候、日期与反向代理v1.0.0 ~ v1.3.0初始发布与核心定位v1.0.0 是 Flame 的初始版本定位为“self-hosted startpage”后端使用 Node.js前端使用 React。此时已具备应用apps与书签bookmarks两类核心数据模型对应仓库中的 models/App.js 与 models/Bookmark.js字段包括名称、URL、图标、是否固定isPinned等。自定义页面标题与 faviconv1.1.0 引入了自定义 favicon 与自定义页面标题。前端加载配置时会同步设置浏览器标签页标题见 client/src/store/action-creators/config.ts 中的document.title res.data.data.customTitle;对应配置项customTitle默认值Flame见 utils/init/initialConfig.json。天气模块、书签图标与默认固定v1.2.0 集中引入了多项基础体验改进天气模块 API Key 校验设置页在缺少 API Key 时给出提示书签可选图标书签的icon字段允许为空defaultValue: 默认固定新应用/新分类对应配置项pinAppsByDefault与pinCategoriesByDefault默认均为trueCRON 清理旧天气数据对应 utils/jobs.js 中的clearWeather定时任务WebSocket 代理前端通过代理而非硬编码主机访问 Socket。排序、隐藏与反向代理v1.3.0 引入反向代理支持reverse proxy、更多 URL 格式支持、隐藏主头部hideHeader以及问候语与日期的自动刷新。v1.4.0 进一步引入排序体系支持按名称name、创建时间createdAt或自定义顺序orderId排序排序逻辑在前端统一由 client/src/utility/sortData.ts 实现name字段使用localeCompare做大小写不敏感比较orderId与createdAt则按数值/时间升序后端查询在按名称排序时使用Sequelize.fn(lower, ...)实现大小写不敏感排序见 controllers/apps/getAllApps.js应用版本显示在设置中并支持手动检查更新、启动时自动检查更新。这些配置项的默认值可完整查看 utils/init/initialConfig.json例如useOrdering: createdAt、hideHeader: false、hideApps: false等实际读写由 utils/loadConfig.js读取data/config.json不存在则调用初始化与 controllers/config/updateConfig.js合并后写回完成。二、搜索体系从 3 个引擎到 12 个内置提供商v1.5.0 ~ v2.3.0搜索栏是 Flame 的标志性功能其演进贯穿多个版本v1.5.0引入搜索栏支持 3 个搜索引擎与 4 个服务v1.6.3新增 Deezer 与 Tidalv1.6.6新增本地搜索过滤应用与书签v1.7.0支持自定义搜索提供商且搜索栏可直接跳转合法 URL 或 IPv2.0.0新增 Wikipediav2.2.1本地搜索纳入应用描述v2.3.0支持设置次级搜索提供商。前缀语法与提供商列表搜索使用前缀prefix语法输入/g what is docker即可用 Google 搜索。全部内置提供商定义在 client/src/utility/searchQueries.json共 12 项提供商前缀URL 模板Deezerdzhttps://www.deezer.com/search/Disrootdshttp://search.disroot.org/search?qDuckDuckGodhttps://duckduckgo.com/?qGoogleghttps://www.google.com/search?qIMDbimhttps://www.imdb.com/find?qLocal searchl#Redditrhttps://www.reddit.com/search?qSpotifysphttps://open.spotify.com/search/The Movie Databasemvhttps://www.themoviedb.org/search?queryTidaltdhttps://listen.tidal.com/search?qWikipediawhttps://en.wikipedia.org/w/index.php?searchYouTubeythttps://www.youtube.com/results?search_query搜索解析与跳转逻辑client/src/utility/searchParser.ts 是搜索解析的核心实现通过正则/^\/([a-z]) $/i匹配前缀与查询内容无前缀时回退到配置项defaultSearchProvider默认l即本地搜索先判断输入是否为合法 URL 或 IPisUrlOrIp合并内置提供商与用户自定义提供商customQueries后按前缀匹配主/次级提供商前缀为l时标记为本地搜索isLocal true跳转行为由配置项searchSameTab控制。按键处理在 client/src/components/SearchBar/SearchBar.tsx 中Enter 与 Numpad Enter 均触发搜索对应 v1.7.1 的修复本地搜索无结果时回退到默认搜索引擎对应 v1.7.4 的 fallback 行为Esc与双击输入框清空搜索v1.7.1输入框未聚焦时按键聚焦并清空v2.0.0 新增的快捷键。次级搜索提供商与同标签页v2.3.0 引入secondarySearchProvider默认d见 utils/init/initialConfig.jsonv2.3.1 修复了“本地搜索作为主提供商时同标签页设置不生效”的问题对应配置项searchSameTab。这两个选项在 client/src/utility/searchParser.ts 中分别以config.secondarySearchProvider与config.searchSameTab读取。三、应用与书签管理图标、描述、排序与可见性v1.1.0 ~ v2.2.1图标体系的五阶段演进v1.2.0书签支持可选图标v1.5.0 / v1.6.1支持从设置上传自定义图标v1.6.3支持自定义 SVG 图标v2.0.0支持通过 URL 设置图标icons via URL并修复了 MDI 图标名含首尾空白时解析失败的问题v2.1.0支持.ico文件作为自定义图标。其中 v2.0.1 修复了“使用自定义图标时解析应用/书签可见性值出错”“pin by default 关闭时自定义图标不生效”两个联动 bug说明图标字段与isPinned、isPublic之间存在复杂的组合场景。应用描述v2.2.0 引入自定义应用描述对应 models/App.js 中的description字段defaultValue: v2.2.1 让本地搜索包含应用描述扩大了本地过滤的覆盖面v2.2.2 修复了使用自定义图标时应用描述不更新的问题。排序与自定义顺序v2.1.0 为书签引入自定义顺序orderId与 v1.4.0 的应用/分类自定义顺序对齐同时修复了“书签按字母排序在页面刷新前不生效”的问题前端缓存与后端查询结果不同步所致。排序字段orderId在 models/App.js、models/Bookmark.js 中均为可空的 INTEGER默认null。可见性Visibilityv2.1.0 支持在表格视图中直接修改应用、分类、书签的可见性v2.0.0 起允许设置哪些应用、分类、书签对访客guest可见对应模型中的isPublic字段v2.1.0 起空的“应用/分类”区块对访客自动隐藏。可见性在后端的实现位于 controllers/apps/getAllApps.js已登录用户查询全部记录访客仅查询isPublic: true的记录const where req.isAuthenticated ? {} : { isPublic: true };四、认证系统与访客隔离v2.0.0、v2.4.0v2.0.0 引入完整的认证系统是本项目最重要的安全里程碑只有登录用户能访问设置页用户可以设置哪些应用、分类、书签对访客可见。登录与 Token 签发登录路由定义在 routes/auth.jsPOST /api/auth/要求请求体包含password与duration。核心实现在 controllers/auth/login.jsconst isMatch process.env.PASSWORD password; if (!isMatch) { return next(new ErrorResponse(Invalid credentials, 401)); } const token signToken(duration);Token 由 utils/signToken.js 使用jsonwebtoken签发payload 为{ app: flame }expiresIn即登录时选择的会话时长。鉴权中间件链所有需要保护的 API 由 routes/config.js 所示的方式串联中间件router.route(/).get(getConfig).put(auth, requireAuth, updateConfig);middleware/auth.js解析Authorization-Flame: Bearer token请求头用process.env.SECRET验证 JWT并把结果写入req.isAuthenticatedmiddleware/requireAuth.js当req.isAuthenticated为假时直接返回 401 Unauthorized。登录密码通过环境变量PASSWORD传入v2.1.1 起也可用 Docker secrets见下文。v2.4.0 高危安全修复v2.4.02026-04-24是 CHANGELOG 中最新也是唯一明确标注“high severity”的版本修复了高严重级别的认证安全漏洞issue #465。这提醒自托管用户务必升级到该版本并检查自身部署环境的PASSWORD/SECRET配置强度。五、Docker 与 Kubernetes 集成v1.6.2 ~ v1.7.1Flame 的特色能力之一是从容器编排环境中自动发现并生成应用卡片。Docker API 与容器标签v1.6.2引入 Docker API 支持issue #14v1.6.4引入 Kubernetes 集成v1.6.7支持通过 Docker Compose 标签配置多个应用与自定义图标v1.6.9支持远程 Docker 主机v1.7.1新增 Traefik 集成可从 Traefik 路由标签自动推导 URL。启用方式在 设置 Docker 中开启 “Use Docker API”。容器需携带以下标签详见 README.mdlabels: - flame.typeapplication # app works too - flame.nameMy container - flame.urlhttps://example.com - flame.iconicon-name # optional, default is docker # - flame.iconcustom to make changes in app. ie: custom icon upload同一组标签可用;分隔多个应用labels: - flame.typeapplication - flame.nameFirst App;Second App - flame.urlhttps://example1.com;https://example2.com - flame.iconicon-name1;icon-name2源码实现useDockercontrollers/apps/docker/useDocker.js 展示了完整的拉取与同步逻辑读取配置useOrdering、unpinStoppedApps、dockerHost请求 Docker API/containers/json获取运行中容器localhost时走/var/run/docker.socksocket否则走自定义 HTTP 主机对应 v1.6.9 的远程 Docker host 能力过滤掉无标签的容器若没有flame.url标签尝试从 Traefik 1.x/2.x 的路由标签中解析出域名并拼接 URL对应 v1.7.1 的 Traefik 集成解析flame.name/flame.url/flame.icon按;拆分生成应用列表已存在的同名应用做更新isPinned: trueflame.iconcustom时不覆盖用户自定义图标对应 v1.7.0 修复的“docker 标签图标覆盖自定义图标”问题新应用则创建并自动固定到首页。远程 Docker Host 配置在 Docker 宿主机上修改/lib/systemd/system/docker.service的ExecStartExecStart/usr/bin/dockerd -H tcp://0.0.0.0:${PORT} -H unix:///var/run/docker.sock随后重启守护进程与服务并验证连通性sudo systemctl daemon-reload sudo service docker restart curl http://${IP}:${PORT}/versionDocker Secretsv2.1.1 引入 Docker secrets 支持所有环境变量均可追加_FILE后缀改用 secret 文件PASSWORD_FILE优先级高于PASSWORD。初始化逻辑见 utils/init/initDockerSecrets.js它会读取全部 secrets 并以大写变量名写入process.env。README 给出了 docker-compose 配置示例secrets: password: file: /path/to/secrets/passwordKubernetes Ingress 注解v1.6.4 引入的 Kubernetes 集成要求每个 Ingress 携带注解详见 README.mdmetadata: annotations: - flame.pawelmalak/typeapplication # app works too - flame.pawelmalak/nameMy container - flame.pawelmalak/urlhttps://example.com - flame.pawelmalak/iconicon-name # optional, default is kubernetes实现位于 controllers/apps/docker/useKubernetes.js使用kubernetes/client-node从集群内加载 kubeconfigkc.loadFromCluster()调用listIngressForAllNamespaces列出全部 Ingress过滤出带注解的条目并按相同逻辑创建/更新应用默认图标为kubernetes。v2.2.0 修复了“部署到集群时的致命错误”issue #242v1.6.8 引入的数据库迁移机制也保证了多版本集群部署时的数据兼容。六、天气组件温度、湿度与定时刷新v1.2.0 ~ v2.2.2天气模块在 client/src/components/Widgets/WeatherWidget/WeatherWidget.tsx 中渲染配置项包括WEATHER_API_KEY、lat、long数据源WeatherAPI.com凭据与坐标isCelsius默认true摄氏/华氏切换v2.1.0 修复了华氏温度显示为浮点的问题weatherData默认cloud附加数据展示项如云量、湿度v2.0.1 新增湿度显示humidity。定时拉取与数据清理utils/jobs.js 在WEATHER_API_KEY非空时注册两个 node-schedule 任务每 15 分钟调用 utils/getExternalWeather.js 拉取api.weatherapi.com/v1/current.json将温度、云量、湿度、风速、天气代码等写入Weather模型并通过 WebSocket 推送给前端每 4 小时执行 utils/clearWeatherData.js 清理旧数据对应 v1.2.0 引入的 CRON 清理任务。v1.7.2 修复了“模块被禁用时天气 API 仍在打日志”的问题增加WEATHER_API_KEY非空判断v2.2.2 允许直接从应用获取用户位置以填充经纬度。数据表结构见 db/migrations/00_initial.js 中的weather表含tempC/tempF/isDay/cloud/conditionText/conditionCode等字段。七、主题与样式自定义 CSS、内置主题库与主题编辑器v1.5.0 ~ v2.3.0自定义 CSSv1.5.0 引入从设置页自定义 CSS 的能力实验特性对应路由PUT /api/config/0/css见 routes/config.js与控制器 controllers/config/updateCSS.js。v1.7.3 修复了自定义 CSS 不更新、v1.6.0 修复了自定义 CSS 不持久化的问题。内置主题库与默认主题内置主题定义在 utils/init/themes.json共 16 个README 中提到的 15 个内置主题 v2.3.0 新增的 Mint每个主题由background背景、primary主色、accent强调色三色构成例如主题名backgroundprimaryaccenttron默认#242B33#EFFBFF#6EE2FFmintv2.3.0 新增#282525#d9d9d9#50fbc2onedark#282c34#dfd9d6#98c379v2.0.1 新增defaultTheme配置默认tron可为所有新用户设置默认主题旧版主题格式对象形式会通过 utils/init/normalizeTheme.js 规范化为primary;accent;background的字符串格式并写回data/config.json。主题创建器与编辑器v2.0.1 修复了颜色输入框过小、默认主题等问题v2.3.0 引入自定义主题编辑器issue #246前端实现为 client/src/components/Settings/Themer/ThemeBuilder/ThemeBuilder.tsx认证用户可点击 “Create new theme” 打开主题创建器ThemeCreator“Edit user themes” 进入编辑模式ThemeEditor主题列表由 ThemeGrid 展示当前编辑的主题保存在 Redux 的themeInEdit状态中。自定义主题通过 controllers/themes/addTheme.js 写入data/themes.json并要求主题名唯一重复返回 400。主题的新增、更新、删除分别对应 controllers/themes/ 下的 addTheme、updateTheme、deleteTheme、getThemes 控制器。八、工程化演进数据库迁移、镜像版本化与性能优化v1.6.8 ~ v2.3.1数据库迁移系统v1.6.8 引入数据库迁移系统。当前仓库 db/migrations/ 下已积累 6 个迁移文件从 00_initial.js建表config、weather、categories、bookmarks、apps到 05_app-description完整记录了 schema 的演进例如04_bookmarks-order.js对应书签排序、05_app-description.js对应应用描述字段。这套机制保证了用户升级版本后旧数据库可平滑演进。Docker 镜像版本化v2.0.0 起 Docker 镜像开始按版本打标签issue #110用户可按需拉取特定版本README 示例docker pull pawelmalak/flame:2.0.0ARM 设备可用multiarch标签。v2.2.0 修复了集群部署时的致命错误。后台任务与性能优化v1.7.1 / v2.2.1 多次提及性能改进与后台任务优化issue #283天气定时任务即为一例v2.2.2 调整了 Flame 创建的文件与目录的权限生产环境下应用列表接口会设置Cache-Control: no-store以强制每次拉取最新容器信息见 controllers/apps/getAllApps.js。细节修复清单v2.3.1v2.3.1 集中修复了一批 UI 与行为问题可作为质量基准参考本地搜索作为主提供商时“同标签页打开”设置不生效#270iOS 上搜索栏输入框圆角异常#394主题创建器/编辑器中颜色输入框过小#429设置项输入标签命名不一致#430同步更新了 Material Design Icons 参考页链接#414。九、其他值得关注的功能点URL 直跳与更多协议v1.6.0 ~ v1.7.0v1.6.0 支持 Steam URLv1.6.5 支持更多 URL schemev1.7.0 起输入合法 URL 或 IP 时搜索栏直接跳转不做搜索引擎处理v1.7.1 修复了以大写字母开头的 URL 不跳转的问题。书签导入脚本v1.7.4v1.7.4 提供了实验性书签导入脚本依赖 python3、Pillow、beautifulsoup4运行前需备份db.sqlite已知问题是生成的图标偶尔不正确。运行方式见 README.mdpip3 install Pillow, beautifulsoup4 cd flame/.dev python3 bookmarks_importer.py --bookmarks path to bookmarks.html --data path to flame data folder通知与静态字体v1.7.0v1.7.0 允许为通知如“有新版本可用”弹窗绑定 URL点击跳转到变更日志同时引入静态字体client/src/assets/fonts/Roboto/避免依赖外部 CDN。十、安全与升级建议从 CHANGELOG 可以整理出 Flame 的安全相关演进线索版本安全相关内容v1.2.0修复“覆盖已打开标签页”的问题v2.0.0引入完整认证系统保护设置、应用与书签v2.0.1修复 basic auth 失效问题#202v2.1.1Docker secrets 支持避免密码明文写入 composev2.4.0修复高严重级别认证安全漏洞#465升级建议自托管部署者应至少运行 v2.4.0 及以上版本若通过 Docker 部署应使用带版本号的镜像标签而非固定 latest 之外的无约束拉取方式并在升级前备份data目录中的config.json与db.sqlite数据库迁移系统会随版本自动演进 schema。结语从 CHANGELOG.md 的逐条记录可以看出Flame 的能力演进遵循清晰的路径先夯实起始页的基础体验书签、应用、排序、主题再扩张搜索与容器生态集成Docker/K8s/Traefik随后以认证系统和访客隔离补齐安全闭环最后进入稳定的缺陷修复与安全加固期。每一项功能都能在当前仓库中找到对应的控制器、模型、迁移文件与前端组件——这份变更日志本身就是一份很好的项目架构导览图。若想深入了解某功能的具体实现可直接从 controllers/、models/、db/migrations/ 与 client/src/ 对应文件入手阅读。赞分享后端前端运维【免费下载链接】flameFlame is self-hosted startpage for your server. Easily manage your apps and bookmarks with built-in editors.项目地址https://gitcode.com/gh_mirrors/flam/flame点击查看免费下载相关推荐MailHog 版本演进全解析从 v0.01 到 v1.0.0 的核心能力与发布脉络MailHog 版本演进全解析从 v0.01 到 v1.0.0 的核心能力与发布脉络 本篇指南以仓库 docs/RELEASES.md https://lin后端开发工具btop 版本演进全解析从 v1.0.0 到 v1.4.7 的核心功能、平台支持与修复脉络btop 版本演进全解析从 v1.0.0 到 v1.4.7 的核心功能、平台支持与修复脉络 btopbtop是一款用 C23 编写的跨平台系统资源CLI指标监控运维SerialTest 版本演进全解从 V0.1 到 V0.3.5 的功能脉络与源码印证SerialTest 版本演进全解从 V0.1 到 V0.3.5 的功能脉络与源码印证 本文以 CHANGELOG.md https://link.gitco开发工具测试通信创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考