资讯详情

Umami 自托管部署完整指南:从源码与 Docker 两种方式搭建隐私优先的网站分析平台

📅 2026/9/30 2:15:02 | 华诺云谱 👁 阅读
Umami 自托管部署完整指南:从源码与 Docker 两种方式搭建隐私优先的网站分析平台
后端数据分析数据可视化前端【免费下载链接】umamiUmami is a privacy-first analytics platform. Traffic, campaigns, behavior, conversions, and revenue in one place — no cookies, no surveillance, self-hosted or in the cloud.项目地址https://gitcode.com/GitHub_Trending/um/umami点击查看免费下载导读Umami 是一个以隐私为核心、简单快速、可作为 Google Analytics 替代品的开源网站分析平台。本文基于当前仓库package.json 中版本为 2.12.1的 README.md 展开完整讲解两种主流部署路径——从源码编译安装与 Docker 容器化部署并深入构建脚本、数据库迁移、环境变量与健康检查等源码级细节。读完本文你将能够在一台服务器上独立完成 Umami 的初始化、配置、启动、代理与升级全流程。一、部署前的环境要求根据 README.md 的 Installing from Source 章节从源码部署 Umami 需要满足两个前置条件Node.js 16.13 或更新版本用于执行安装、构建与启动命令数据库二选一MySQL最低 v8.0或 PostgreSQL最低 v12.14。仓库实际运行时对数据库版本的校验比 README 声明更宽松启动检查脚本 scripts/check-db.js 会执行select version()读取数据库版本并设置了兜底阈值——PostgreSQL 9.4.0、MySQL 5.7.0低于该阈值的实例会直接报错退出。因此官方 README 给出的 8.0 / 12.14 是推荐的稳妥下限而脚本内阈值是最低的硬性门槛两者并不冲突建议按 README 要求选择较新的数据库版本。此外从源码结构看Umami 的数据库抽象层src/lib/db.ts同时支持 PostgreSQL 与 MySQL通过 Prisma 查询以及 ClickHouse 大数据量方案本文聚焦 README 主推的 PostgreSQL / MySQL 场景。二、方式一从源码安装2.1 安装 YarnUmami 的依赖管理与构建脚本依赖 Yarn先全局安装npm install -g yarn2.2 获取源码并安装依赖git clone https://github.com/umami-software/umami.git cd umami yarn installyarn install会依据 yarn.lock 锁定依赖版本确保构建环境与 CI 一致。2.3 配置环境变量.env在仓库根目录创建.env文件核心变量只有一行DATABASE_URLconnection-url连接串格式如下PostgreSQL 与 MySQL 二选一postgresql://username:mypasswordlocalhost:5432/mydb mysql://username:mypasswordlocalhost:3306/mydb该连接串会被 Prisma Client 与运行脚本共同解析。底层解析逻辑可见 src/lib/db.ts脚本通过url.split(:)[0]提取协议前缀来判断数据库类型其中postgres会被归一化为postgresql。这一点与构建脚本 scripts/copy-db-files.js 中DATABASE_TYPE || url.split(:)[0]的取值方式一致——你也可以显式设置DATABASE_TYPEpostgresql或DATABASE_TYPEmysql来覆盖推断结果。环境变量缺失时的行为由 scripts/check-env.js 控制当未设置SKIP_DB_CHECK且未设置DATABASE_TYPE时必须提供DATABASE_URL否则脚本会列出缺失项并process.exit(1)终止构建。除DATABASE_URL外还有一批可选环境变量如APP_SECRET、BASE_PATH、TRACKER_SCRIPT_NAME等详见本文第五节。2.4 构建应用yarn build这一条命令背后是一整套流水线。查看 package.json 的 scripts 定义可知yarn build实际等价于npm-run-all check-env build-db check-db build-tracker build-geo build-app各阶段作用如下阶段实际执行职责check-envnode scripts/check-env.js校验DATABASE_URL等环境变量是否齐备build-dbnpm-run-all copy-db-files build-db-client先复制数据库定义文件再执行prisma generate生成 Prisma Clientcheck-dbnode scripts/check-db.js连接数据库、检查版本、检测 v1 旧表、部署迁移build-trackerrollup -c rollup.tracker.config.mjs打包前端埋点脚本script.jsbuild-geonode scripts/build-geo.js生成地理信息数据build-appnext build构建 Next.js 应用本体其中copy-db-filesscripts/copy-db-files.js会根据数据库类型把 db/postgresql 或 db/mysql 目录下的schema.prisma与migrations整体复制到根目录prisma/供 Prisma 使用——这正是仓库同时维护db/mysql、db/postgresql、db/clickhouse三套数据库定义的原因。首次安装时构建过程会完成两件重要的事情README 明确说明在数据库中自动创建全部数据表创建一个登录用户默认用户名admin、密码umami。建表与迁移的实际执行者是 scripts/check-db.js 中的applyMigration它内部调用prisma migrate deploy应用 db/postgresql/migrations或 MySQL 对应目录下的全部迁移文件。同一个脚本还会做 v1 旧版本检测如果_prisma_migrations表中存在早于2023-04-17的迁移记录说明数据库仍残留 Umami v1 表结构构建会中止并提示先完成 v1 → v2 升级。2.5 启动应用yarn start默认情况下应用监听在http://localhost:3000。README 强调你需要通过 Web 服务器反向代理请求如 Nginx或修改监听端口后直接对外提供服务。端口修改有两种途径直接改启动命令yarn start --port 3001基于 Next.js 生产模式 CLI通过环境变量查看 scripts/start-env.js 可知yarn start-env会读取PORT默认 3000与HOSTNAME默认0.0.0.0例如PORT8080 HOSTNAME0.0.0.0 yarn start-env生产服务器镜像Dockerfile正是采用start-docker入口并设置HOSTNAME 0.0.0.0、PORT 3000的方式启动的。三、方式二Docker 部署3.1 一条命令启动docker compose up -dREADME 提供的最快捷方式是直接使用仓库自带的 docker-compose.ymldocker compose up -d该编排文件会同时启动两个容器umami 服务镜像为ghcr.io/umami-software/umami:postgresql-latest将宿主机3000端口映射到容器3000db 服务镜像为postgres:15-alpine通过POSTGRES_DBumami、POSTGRES_USERumami、POSTGRES_PASSWORDumami初始化数据库并将数据持久化到命名卷umami-db-data。两个服务之间通过depends_on: db (condition: service_healthy)建立依赖db 容器通过pg_isready探活umami 容器则通过curl http://localhost:3000/api/heartbeat做健康检查——也就是说Umami 暴露了一个心跳 API/api/heartbeat可用于负载均衡器的存活探测。umami 服务本身还设置了restart: always崩溃后会自动重启。compose 文件中 umami 服务的环境变量示例DATABASE_URL: postgresql://umami:umamidb:5432/umami DATABASE_TYPE: postgresql APP_SECRET: replace-me-with-a-random-string注意其中的APP_SECRET是用于会话加密的密钥README 未展开但 compose 模板中明确要求替换为随机字符串生产环境务必生成强随机值切勿沿用模板值。3.2 只拉取镜像按数据库类型选择标签如果不想使用本地编排文件也可以只拉取官方镜像。README 给出了两个标签按数据库支持区分# PostgreSQL 支持 docker pull docker.umami.is/umami-software/umami:postgresql-latest # MySQL 支持 docker pull docker.umami.is/umami-software/umami:mysql-latest拉取后按需自行docker run并注入DATABASE_URL、DATABASE_TYPE、APP_SECRET环境变量即可。3.3 镜像内部多阶段构建解析Dockerfile 采用经典的三阶段构建理解它对排查镜像问题很有帮助deps 阶段基于node:18-alpine仅安装依赖yarn install --frozen-lockfile并设置network-timeout 300000应对慢网络builder 阶段复制源码并执行yarn build-docker即build-dbbuild-trackerbuild-geobuild-app跳过环境变量检查同时会把 docker/middleware.js 复制到src/作为 Next.js 中间件runner 阶段以非 root 用户nextjs运行利用 Next.js 的output: standalone见 next.config.js 的output: standalone配置只拷贝运行时产物显著减小镜像体积最终以yarn start-docker启动。值得留意的是 docker/middleware.js 承担的两个运行时重写职责COLLECT_API_ENDPOINT会把自定义采集端点重写到/api/sendTRACKER_SCRIPT_NAME则把自定义脚本名重写到/script.js这是源码部署时配置「隐藏埋点端点与脚本名」的底层机制详见第五节。四、升级与更新4.1 源码部署的更新README 给出的更新流程为「拉取 → 装依赖 → 重建」三步git pull yarn install yarn build由于数据库迁移是幂等部署式的prisma migrate deploy只应用未执行的迁移yarn build过程中的check-db阶段会自动完成表结构演进无需手动执行迁移命令。4.2 Docker 部署的更新docker compose pull docker compose up --force-recreatepull拉取新镜像--force-recreate强制重建容器同时保留命名卷umami-db-data中的数据。如果你的环境需要手动执行迁移仓库也提供了独立命令yarn update-db即prisma migrate deploy。五、常用环境变量速查源码级扩展README 只显式给出DATABASE_URL但仓库源码中实际支持的环境变量远不止于此。以下变量均可在 next.config.js 与 scripts/check-env.js 中找到读取证据部署时可按需配置变量作用源码依据DATABASE_URL数据库连接串必填除非显式设置DATABASE_TYPE并跳过检查scripts/check-env.jsDATABASE_TYPE显式指定数据库类型postgresql/mysqlscripts/copy-db-files.jsAPP_SECRET会话签名密钥Docker 模板要求替换为随机串docker-compose.ymlPORT/HOSTNAME覆盖监听端口与绑定地址默认3000/0.0.0.0scripts/start-env.jsBASE_PATH应用部署在子路径时使用同时影响next.config.js的basePathnext.config.jsCOLLECT_API_ENDPOINT自定义数据采集端点会重写为/api/send用于隐藏真实采集接口docker/middleware.jsTRACKER_SCRIPT_NAME自定义埋点脚本文件名支持逗号分隔多个重写为/script.jsdocker/middleware.jsDEFAULT_LOCALE默认语言区域next.config.jsDISABLE_LOGIN禁用登录配合云模式使用next.config.jsDISABLE_UI禁用前端界面next.config.jsFORCE_SSL开启后注入 HSTS 响应头Strict-Transport-Securitynext.config.jsALLOWED_FRAME_URLS允许被 iframe 嵌入的站点写入 CSP 的frame-ancestorsnext.config.jsPRIVATE_MODE私有模式开关next.config.jsCLOUD_MODE/CLOUD_URL云模式设置后需同时提供CLOUD_URL/settings等路由会重定向到云端scripts/check-env.jsCLICKHOUSE_URL启用 ClickHouse 数据层启用时必须同时提供KAFKA_BROKER、KAFKA_URL、REDIS_URLscripts/check-env.js需要强调的是以上均为可选高级配置标准自托管场景只需DATABASE_URL即可跑通。六、初始化登录与密码管理无论源码还是 Docker 方式首次构建/启动完成后使用以下凭据登录用户名admin密码umami出于安全考虑登录后应立即修改默认密码。除了在界面中修改仓库还提供了命令行工具 scripts/change-password.js可直接执行yarn change-password重置指定用户密码适合忘记密码或脚本化初始化场景。登录后即可在界面上创建网站、获取埋点脚本。埋点脚本的前端实现位于 src/tracker/index.js配套类型声明在 src/tracker/index.d.ts如需定制或二次开发可参考。七、部署后的常规检查清单结合本文涉及的源码证据给出部署完成后的自检要点环境变量是否完整运行yarn build时若提示 The following environment variables are not defined按 scripts/check-env.js 列出的缺失项补齐数据库是否可达若构建报 Unable to connect to the database检查DATABASE_URL的账号、密码与网络连通性对应 scripts/check-db.js 的$connect探测版本是否兼容数据库版本低于脚本阈值会报 Database version is not compatible反向代理源码方式默认监听3000通过 Nginx 等代理/路径并建议将FORCE_SSL设为true以获得 HSTS 头健康检查Docker 部署时可轮询http://localhost:3000/api/heartbeat判断服务存活与 docker-compose.yml 内置探活一致安全加固替换APP_SECRET为随机串、修改默认登录密码、生产环境不要使用弱口令数据库账号。结语Umami 的部署并不复杂一条DATABASE_URL驱动整个构建与运行时源码安装与 Docker 安装殊途同归——最终都是「Prisma 建表 Next.js 起服务」。本文以 README.md 为骨架结合 package.json、Dockerfile、docker-compose.yml 与 scripts 目录下的构建/检查脚本把每一步命令背后的真实机制拆解清楚。无论是追求最小依赖的源码部署还是追求开箱即用的容器化部署按本文流程操作即可完成一个可投入使用的隐私优先分析平台。赞分享后端数据分析数据可视化前端【免费下载链接】umamiUmami is a privacy-first analytics platform. Traffic, campaigns, behavior, conversions, and revenue in one place — no cookies, no surveillance, self-hosted or in the cloud.项目地址https://gitcode.com/GitHub_Trending/um/umami点击查看免费下载相关推荐Fathom Lite完整部署指南从零开始构建隐私优先的网站分析平台Fathom Lite完整部署指南从零开始构建隐私优先的网站分析平台 Fathom Lite是一款简单、注重隐私保护的网站分析工具采用Golang和Prea数据分析后端Ratatouille企业级应用终极指南如何将Elixir TUI框架用于生产环境 Ratatouille企业级应用终极指南如何将Elixir TUI框架用于生产环境 Ratatouille是一款专为Elixir语言设计的声明式终端用户UI库/组件Ackee 开源项目推荐隐私优先的自托管网站分析工具Ackee 开源项目推荐隐私优先的自托管网站分析工具 在数字隐私日益受到重视的今天网站管理员们面临着一个两难选择要么使用功能强大但可能涉及用户隐私的第三方数据可视化数据分析后端上一篇Windows 11系统清理终极指南用Win11Debloat彻底移除臃肿软件下一篇终极英雄联盟本地自动化工具League Akari 完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑