使用 Docker 部署 Umami 数据库分离的两种常见场景
参考资料
当然可以。在上一个示例中,数据库虽然是一个独立的容器,但它仍然和 Umami 应用在同一个 docker-compose 项目里,通过内部网络通信。如果你希望把数据库完全分离——比如使用云数据库(AWS RDS、阿里云 RDS)、自建的独立 PostgreSQL 服务器,或者同一台机器上另一个 Docker 网络中的数据库——完全没问题。
✅ 数据库分离的两种常见场景
1. 使用外部 PostgreSQL 实例(IP 或域名可访问)
步骤:
准备一个 PostgreSQL 数据库(版本 12+),创建好数据库(例如
umami)、用户名和密码。确保 Umami 容器所在的网络能够连通该数据库(防火墙/安全组放行 5432 端口)。
在 Umami 的启动配置中,将
DATABASE_URL指向外部地址。
示例 docker-compose.yml(不再包含 db 服务):
version: '3' services: umami: image: ghcr.io/umami-software/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://用户名:密码@你的数据库IP或域名:5432/umami DATABASE_TYPE: postgresql APP_SECRET: "一个强随机字符串" restart: always
注意:不再需要
db服务和volumes定义。
然后直接运行:
docker compose up -d
Umami 容器启动时会自动检查数据库表结构,如果不存在则会自动创建。
2. 使用 Docker 但独立运行数据库容器(不同 compose 项目或网络)
如果你想在 Docker 中单独运行一个数据库容器,供多个应用(包括 Umami)共用,也可以。
启动独立的数据库容器:
docker run -d \ --name postgres-umami \ -e POSTGRES_DB=umami \ -e POSTGRES_USER=umami \ -e POSTGRES_PASSWORD=强密码 \ -v umami_data:/var/lib/postgresql/data \ -p 5432:5432 \ # 将端口暴露到宿主机 postgres:15-alpine
然后在 Umami 的 DATABASE_URL 中使用宿主机的 IP(如果数据库和 Umami 在同一台机器上,可以用 host.docker.internal 或宿主机内网 IP):
DATABASE_URL: postgresql://umami:强密码@host.docker.internal:5432/umami
⚠️ 注意事项
数据库初始化
Umami 首次连接时会自动创建所需的数据表和索引,不需要手动导入 SQL。你只需要确保数据库、用户名已存在,且用户对该数据库有 CREATE/ALTER/DROP/INSERT/SELECT 等完整权限。网络延迟
如果外部数据库与应用不在同一内网或同一可用区,增加的延迟可能影响 Umami 采集性能。建议将数据库部署在与 Umami 容器网络尽量近的位置(比如同一 VPC 下的云数据库)。安全性
绝对不要将数据库暴露在公网(除了通过 VPN/内网)。
DATABASE_URL中包含明文密码,如果放在环境变量中,确保只有 Umami 容器能访问。使用强密码,并为数据库设置仅允许 Umami 服务器的 IP 连接。
备份与维护
分离后你需要自行负责数据库的备份、升级和监控。不过这也带来了灵活性:你可以使用专业的数据库管理工具(如 pgBackRest、云数据库自动备份)。同时连接多个 Umami 实例
如果多个 Umami 实例(比如开发环境、生产环境)连接同一个数据库,可能会导致数据混乱。通常建议一个 Umami 实例对应一个独立的数据库(或 schema)。
📌 总结
可以分离,只需修改
DATABASE_URL指向外部数据库。如果不需要在 Docker 中管理数据库,可以完全省略
db服务。分离后 Umami 应用容器变得更轻量,但你需要自己承担数据库的运维责任。
如果你想尝试,直接从上面的“外部 PostgreSQL 实例”方案开始即可,非常方便。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
本文来自《西里网 . docker 部署》 -- 发布时间:2025-03-29
本页链接:https://docker.ciilii.com/show/news-21.html
原创声明:本篇文章均为西里网原创,由《DeepSeek-R1 模型》自动生成。内容真实性仅供参考学习。
本作品采用 知识共享署名—非商业性使用—相同方式共享 4.0 国际许可协议 (CC BY-NC-SA 4.0) 进行许可。
