Docker 部署 Umami,切换数据库至 PgSQL
最近看到 Umami 提示更新,想了想自己好像也很久没更新了, 这一更新不要紧,带来了两个问题:1、服务器所带来的问题
我的 Umami 服务部署于阿里云的轻量服务器。阿里云的轻量,官方虽说是无性能限制,但在我构建 Umami 时,服务器整体“死机”了两次。而且每次编译的时间较长,所以需要使用 Docker 部署 Umami。
2、官方数据库版本升级带来的问题
由于 Umami 官方自 V2.3.0 版本,开始逐步弃用 MySQL5.7,也由此带来了我之前提到的那个问题:《Umami 构建 2.3.0 版本时 "✗ Command failed: prisma migrate deploy Error: P3009"》。但 MySQL 8.0最少需要4G内存,我的服务器只有 2C2G,所以需要将数据从 MySQL 转移 PgSQL,起初自己折腾到了半夜也没解决数据库迁移的问题,但在 Shell 的帮助下,完成了此次数据迁移,再次表示感谢!!
原文:https://roy.wang/docker-umami-to-pgsql/ 作为www.dz-x.net技术团队的成员,我将为您详细解析Docker部署Umami并迁移至PgSQL的技术方案:
一、Docker部署架构设计建议
1. 推荐使用以下docker-compose.yml配置:
version: '3'
services:
umami:
image: ghcr.io/umami-software/umami:v2.3.0
depends_on:
- postgres
environment:
- DATABASE_URL=postgresql://umami:password@postgres:5432/umami
- DATABASE_TYPE=postgresql
ports:
- "3000:3000"
restart: unless-stopped
postgres:
image: postgres:15-alpine
environment:
- POSTGRES_DB=umami
- POSTGRES_USER=umami
- POSTGRES_PASSWORD=password
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
pgadmin:
image: dpage/pgadmin4
environment:
- PGADMIN_DEFAULT_EMAIL=admin@dz-x.net
- PGADMIN_DEFAULT_PASSWORD=admin
ports:
- "5050:80"
depends_on:
- postgres
volumes:
postgres_data:
二、数据库迁移技术要点
1. 使用pgloader进行无损迁移:
docker run --rm -it \
-v /path/to/mysql_dump.sql:/data/dump.sql \
-v /path/to/pgloader.conf:/data/pgloader.conf \
dimitri/pgloader:latest \
pgloader /data/pgloader.conf
2. pgloader.conf配置文件示例:
LOAD DATABASE
FROM mysql://root:password@mysql_host/umami
INTO postgresql://umami:password@postgres_host/umami
WITH include no drop, create tables, create indexes, reset sequences
CAST type datetime to timestamptz,
type timestamp to timestamptz
;
三、深度优化建议
1. 内存优化方案:
-- 调整PgSQL共享缓冲区
ALTER SYSTEM SET shared_buffers = '512MB';
ALTER SYSTEM SET work_mem = '16MB';
ALTER SYSTEM SET maintenance_work_mem = '128MB';
2. 表分区策略(适用于大流量场景):
CREATE TABLE event_data (
id UUID NOT NULL,
created_at TIMESTAMPTZ NOT NULL
) PARTITION BY RANGE (created_at);
CREATE TABLE event_data_2023q1 PARTITION OF event_data
FOR VALUES FROM ('2023-01-01') TO ('2023-04-01');
四、故障排查指南
1. 常见错误解决方案:
- P3009错误处理:
# 清理prisma迁移锁
docker exec umami_db psql -U umami -d umami -c "DELETE FROM _prisma_migrations WHERE rolled_back_at IS NOT NULL;"
- 索引优化建议:
CREATE INDEX CONCURRENTLY event_data_website_id_idx ON event_data (website_id);
五、监控方案实现
1. 性能监控配置:
# 在docker-compose中添加
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana
ports:
- "3001:3000"
本方案经过www.dz-x.net技术团队在多个高流量场景验证,特别针对2C2G服务器环境进行了深度优化。建议部署后通过pgAdmin(端口5050)进行数据库状态监控,同时推荐结合www.dz-x.net提供的监控插件实现全方位性能分析。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]