ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Plausible Analytics 贡献指南:本地开发环境搭建、种子数据与提交 Pull Request 全流程

Plausible Analytics 贡献指南:本地开发环境搭建、种子数据与提交 Pull Request 全流程 后端数据分析数据可视化【免费下载链接】analyticsOpen source, privacy-first web analytics. Lightweight, cookie-free Google Analytics alternative. Self-hosted or cloud.项目地址https://gitcode.com/GitHub_Trending/an/analytics点击查看免费下载Plausible Analytics 是一个开源、隐私优先的轻量级网站分析工具无需 Cookie、可自托管技术栈以 Elixir/Phoenix 为后端、ClickHouse 存储事件数据、Postgres 存储业务数据、Node.js 构建前端与跟踪脚本。本文以仓库根目录的 CONTRIBUTING.md 为主线完整还原从零搭建开发环境、启动 Phoenix 服务、填充演示数据到通过 pre-commit 检查并提交 Pull Request 的全过程并结合 Makefile、.tool-versions、mix.exs、priv/repo/seeds.exs 等源码文件进行深度解读。读完本文你将能够独立在本机跑起 Plausible 开发环境生成带统计数据的演示站点并理解整个贡献流程背后的实现细节。一、开发环境概览依赖三件套在开始搭建之前先明确 Plausible 开发环境需要哪些组件以及为什么需要它们组件作用版本要求Docker运行 Postgres 与 ClickHouse 容器隔离数据存储需预先安装Elixir / ErlangPhoenix 应用主语言与虚拟机见 .tool-versionsNode.js编译前端资源assets/与跟踪脚本tracker/见 .tool-versionsPython运行 pre-commit 钩子可选仅用于提交前检查仓库根目录的 .tool-versions 明确记录了当前推荐的版本组合可与 asdf 之类的版本管理工具配合使用erlang 28.5.0.5 elixir 1.20.4-otp-28 nodejs 24.17.0从 mix.exs 可以看到项目声明了elixir: ~ 1.18即 Elixir 1.18 及以上版本均可同时mix.exs中列出的核心依赖包括 Phoenix~ 1.8.2、Phoenix LiveView~ 1.1.17、Ecto~ 3.13.5、ecto_chClickHouse 适配器、postgrex、ua_inspectorUA 解析、ref_inspector来源识别等这些会在mix deps.get时统一拉取。二、启动数据库容器make postgres 与 make clickhousePlausible 采用双数据库架构Postgres 存放用户、站点、订阅等业务数据ClickHouse 存放海量事件/会话统计数据。CONTRIBUTING.md 推荐直接用 Docker 运行两者最省事的方式就是使用仓库根目录 Makefile 中预置的 target。make postgres # 启动 Postgres 容器 make clickhouse # 启动 ClickHouse 容器查看 Makefile 可以看到这两个命令的实际行为Postgresdocker run --detach -e POSTGRES_PASSWORDpostgres -p 5432:5432 --name plausible_db --volumeplausible_db:/var/lib/postgresql/docker postgres:latest容器名为plausible_db密码为postgres数据卷名为plausible_db监听宿主机 5432 端口。ClickHousedocker run --detach -p 8123:8123 -p 9000:9000 --ulimit nofile262144:262144 --name plausible_clickhouse --env CLICKHOUSE_SKIP_USER_SETUP1 --network host --volume$PWD/.clickhouse_db_vol:/var/lib/clickhouse ...容器名为plausible_clickhouseHTTP 端口 8123、原生协议端口 9000使用--network host与本地数据卷。Makefile 还提供了两个常用的运维 targetmake clickhouse-client # 进入 ClickHouse 客户端docker exec -it plausible_clickhouse clickhouse-client -d plausible_events_db make postgres-client # 进入 Postgres 客户端docker exec -it plausible_db psql -U postgres -d plausible_dev另外若需要与生产环境完全一致的数据库版本可运行make postgres-prodPostgres 18与make clickhouse-prodClickHouse 25.11.5.8-alpine这在你排查生产复现问题时非常有用。三、一键安装make install 或逐步执行数据库容器就绪后接下来安装 Elixir 依赖、创建数据库、构建前端资源。CONTRIBUTING.md 提供了两种方式方式一一键完成make install查看 Makefilemake install实际按顺序执行了以下命令等价于方式二的组合mix deps.get mix ecto.create mix ecto.migrate mix download_country_database npm install --prefix assets npm install --prefix tracker npm run deploy --prefix tracker方式二逐步执行便于理解每一步的作用# 1. 下载 Elixir 依赖 mix deps.get # 2. 在 Postgres 与 ClickHouse 中创建所需数据库 mix ecto.create # 3. 构建数据库 schema mix ecto.migrate # 4. 填充种子数据可选详见下文 Seeds 章节 mix run priv/repo/seeds.exs # 5. 安装前端dashboard依赖 npm ci --prefix assets # 6. 安装 tracker跟踪脚本依赖 npm ci --prefix tracker # 7. 安装 Tailwind 与 Esbuild mix assets.setup # 8. 生成 tracker 文件到 priv/tracker/js npm run deploy --prefix tracker # 9. 下载地理定位数据库 mix download_country_database其中几个关键步骤值得展开说明mix ecto.create/mix ecto.migrate从 config/config.exs 可以看到项目同时注册了两个 Ecto RepoPlausible.RepoPostgres与Plausible.IngestRepoClickHouse因此这条命令会同时作用于两个数据库。mix ecto.migrate会执行 priv/repo/migrationsPostgres 侧下的全部迁移文件。mix assets.setup等价于mix tailwind.install --if-missing与mix esbuild.install --if-missing见 mix.exs 中定义的 alias。mix download_country_database从源码 lib/mix/tasks/download_country_database.ex 看该任务会从 DB-IP 下载当月若 404 则回退到上月的dbip-country-lite-YYYY-MM.mmdb.gz并保存到priv/geodb/dbip-country.mmdb.gz用于访问来源国家/地区的地理定位解析。npm ci --prefix trackernpm run deploy --prefix trackertracker 是随站点嵌入的 JavaScript 统计脚本源码位于 tracker/src需要先安装依赖再编译输出到 priv/tracker/js。小提示若你想一次性完成「创建数据库 迁移 种子」的整套初始化mix ecto.setupalias见 mix.exs会依次执行ecto.create、ecto.migrate和run priv/repo/seeds.exs。四、启动服务器make server安装完成后启动 Phoenix 服务器make server # 等价于 mix phx.server系统随即运行在http://localhost:8000。在开发模式下config/dev.exs 配置了一组 watchers会在启动时自动执行esbuild编译assets/js/app.js、assets/js/dashboard.tsx等前端入口支持--sourcemapinline --watch热更新tailwind监听 assets/css/app.css 输出priv/static/css/app.cssnpm --prefix assets run typecheck对 TypeScript 前端代码做类型检查npm run deploytracker 目录持续编译跟踪脚本。同时开发环境开启了code_reloader、debug_errors与 LiveView 调试选项方便调试 lib/plausible_web/controllers 与 lib/plausible_web/live 下的代码。五、Seeds一键获得带统计数据的演示账号CONTRIBUTING.md 推荐通过种子脚本自动创建账号和站点这是快速体验完整功能Dashboard、目标、漏斗、导入数据等的最佳路径。mix run priv/repo/seeds.exs make server # 打开 http://localhost:8000/login登录凭证为邮箱userplausible.test密码plausible登录后你会看到一个dummy.site站点它自带生成好的统计数据。5.1 种子脚本内部做了什么阅读 priv/repo/seeds.exs 可以发现它远比创建一个账号复杂值得了解以便更好地调试主用户与站点创建userplausible.test用户以及两个站点dummy.site原生统计覆盖过去约 720 天另有约 180 天的导入统计区间与another.site约 320 天原生统计。多种角色示例通过add_guest添加了Arnold Wallabyviewer 角色与Lois Laneeditor 角色还创建了Mary Jane、Harvey Dent订阅了 Business 计划、Bruce Wayne等示例用户覆盖邀请、转让站点、团队成员等团队功能场景。目标Goals与漏斗为dummy.site创建了/、/register、/login等页面路径目标、Purchase收入目标、Outbound Link: Click事件目标以及带自定义属性logged_in的目标在企业版EE环境下还会创建多个漏斗如From homepage to login。统计生成逻辑脚本用Plausible.TestUtils.populate_stats()按天批量生成随机的 pageview/engagement 事件包含随机浏览器、操作系统、来源、UTM 参数、地理位置等字段最终写入 ClickHouse。其他开发便利设施为dummy.site插入 IP 规则与国家规则PL、EE绑定 Google 搜索控制台授权并生成一个 Plugins API 开发用 Tokenplausible-plugin-dev-seed-token见脚本中Plausible.Plugins.API.Token.generate(seed-token)一段。5.2 手动注册 生成伪造事件如果你不想用种子脚本也可以完全手动创建打开http://localhost:8000/register填写注册表单后续表单中的域名使用dummy.site跳过 JS 代码片段直接点击开始收集数据在终端运行mix send_pageview生成一条伪造的 pageview 事件。mix send_pageview是一个位于 lib/mix/tasks/send_pageview.ex 的 Mix Task它通过 HTTP 向/api/event发送事件类似 tracker 的真实行为默认参数如下参数默认值说明--hosthttp://localhost:8000目标 Plausible 实例地址--domaindummy.site站点域名--page/页面路径--referrerhttps://google.com来源地址--eventpageview事件名称--ip127.0.0.1模拟客户端 IP通过x-forwarded-for头--user_agent一个 Chrome/Opera UA模拟浏览器标识--hostname同--domain用于拼装 URL 的主机名--props{}自定义属性--queryparams空附加到 URL 的查询参数--revenue_currency/--revenue_amount无收入事件金额--interactivetrue是否计入交互设为false可模拟非交互事件例如生成一条带收入信息的自定义事件mix send_pageview --event Purchase --revenue_currency USD --revenue_amount 19.99六、停止 Docker 容器与数据保留开发结束后可以用以下命令停止并移除容器make postgres-stop # docker stop plausible_db docker rm plausible_db make clickhouse-stop # docker stop plausible_clickhouse docker rm plausible_clickhouse需要注意这也是 CONTRIBUTING.md 特别提醒的数据卷会被保留。重新执行make postgres/make clickhouse后之前的注册账号、站点与统计状态都会原样恢复无需重新注册。正因容器被删除而卷仍存在执行docker volume prune前务必谨慎——它可能连同数据库卷一起清掉导致你不得不重新走一遍注册流程。七、Pre-commit 钩子提交前的自动检查Plausible 使用 pre-commit 框架在提交前自动检查代码质量覆盖 Elixir、JavaScript 与 CSS。安装方式pip install --user pre-commit # 安装框架需要本机有 Python pre-commit install # 在仓库中启用钩子如果这些提示过于频繁、影响你的提交节奏可以直接卸载pre-commit uninstall仓库根目录的 .pre-commit-config.yaml 定义了实际生效的检查项Elixir 格式检查mix-format来自elixir-pre-commit-hooks仓库确保.ex/.exs文件符合mix format规范通用文件检查来自pre-commit-hookscheck-case-conflict防止大小写冲突的文件名check-symlinks/destroyed-symlinks检查失效符号链接check-yaml校验 YAML 语法end-of-file-fixer确保文件以换行结尾priv/tracker/js下生成的文件被排除mixed-line-ending统一行尾符trailing-whitespace去除行尾空白。八、寻找任务与提交 Pull Request 的建议CONTRIBUTING.md 对贡献流程给出三点核心建议Bug 类任务项目 issue 跟踪器中通常能找到可认领的 bug这类任务一般直接认领即可无需提前讨论。新功能必须先讨论任何新功能都需要先与核心团队和社区沟通确认方向。建议在 Discussions 讨论区提出方案再动手实现并提交 Pull Request。贡献者被明确要求在开 PR 之前先在讨论区用评论的形式提出解决方案。无关联 PR 的处理策略没有对应 issue 或 discussion 的 Pull Request 仍可能被合并但维护者会优先处理那些已经充分讨论过的变更。对于想快速上手了解项目的贡献者仓库本身还提供了非常丰富的探索入口端到端测试位于 e2e/tests/dashboard覆盖注解、行为、细分、过滤、主图、分段、验证等场景基于 Playwright单元/集成测试位于 test/plausible 与 test/plausible_web。阅读这些测试不仅能理解现有功能的行为约定也是为新功能编写配套测试的最佳参照——Plausible 的 CI 体系见 mix.exs 中定义的test、test.e2e等 alias会统一执行它们。九、常见问题速查现象排查建议mix ecto.create报连接错误确认make postgres/make clickhouse已成功运行容器分别监听 5432 与 8123/9000登录后没有dummy.site重新执行mix run priv/repo/seeds.exs填充种子数据tracker 文件缺失运行npm ci --prefix tracker npm run deploy --prefix tracker重新生成国家/地区数据为空运行mix download_country_database检查priv/geodb/dbip-country.mmdb.gz是否存在提交被 pre-commit 拦截按提示运行mix format等修复命令或pre-commit uninstall临时卸载按照上述流程你就能在本地完整跑起 Plausible 的开发环境双数据库容器就绪 → 依赖与资源构建完成 → Phoenix 服务运行在 8000 端口 → 种子数据提供带统计的演示站点。在此基础上无论是修复 bug 还是实现新功能你都可以依照本文第八节提到的讨论与 PR 流程安全、合规地参与这个开源项目。赞分享后端数据分析数据可视化【免费下载链接】analyticsOpen source, privacy-first web analytics. Lightweight, cookie-free Google Analytics alternative. Self-hosted or cloud.项目地址https://gitcode.com/GitHub_Trending/an/analytics点击查看免费下载相关推荐Project AIRI 贡献指南本地开发环境搭建与首次 Pull Request 提交全流程Project AIRI 贡献指南本地开发环境搭建与首次 Pull Request 提交全流程 本篇指南基于 Project AIRI 官方贡献文档 DevAI 应用人工智能大模型数字人AI Agent语音前端后端桌面应用移动开发即时通讯3D渲染从克隆到跑通大麦自动抢票快速上手指南从克隆到跑通大麦自动抢票快速上手指南 这个项目是一个 Python 大麦自动抢票工具覆盖 Web 端Selenium和 Android 端AppiumGUI 自动化RPARedwood 框架贡献全流程指南从本地开发环境搭建到提交 Pull RequestRedwood 框架贡献全流程指南从本地开发环境搭建到提交 Pull Request 本文以 Redwood 官方文档《Contributing: Step后端前端Web框架开发工具上一篇Source Han Sans TTF终极指南构建完美屏幕显示的中文字体下一篇前端工程化高级进阶Core Web Vitals 深度优化、微前端与 Monorepo 架构演进及 AI 驱动未来趋势创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表