使用Docker部署Umami统计服务 | Nginx | PostgreSQL
前言
关于访客统计,我最早用的是百度统计,直到我看到了Umami
Umami 是一个开源的、注重隐私的网站访问统计工具。它提供了简洁直观的界面,支持多种统计维度,是 Google Analytics 的轻量级替代方案。
部署要求
- 支持 Docker 环境
- 支持 Nginx 反向代理
部署步骤
简单记录基于Docker-Compose文件部署
Docker-Compose配置
# 创建应用目录
cd ~
mkdir umami
# 编辑docker-compose.yml(参考下文配置)
# 请将<yourpassword>和<yourhashsalt>更改
vim ~/umami/docker-compose.yml
配置内容参考如下:
---
services:
# Postgres 数据库服务,为 Umami 提供数据存储
postgres:
# 使用 postgres17 轻量 alpine 镜像
image: postgres:17-alpine
# 固定容器名称,方便 docker exec 进入容器操作
container_name: umami-postgres
# 重启策略:无论什么情况退出都自动重启(宿主机重启也会拉起)
restart: always
# Postgres 初始化环境变量(仅首次创建容器生效)
environment:
POSTGRES_USER: umami # 数据库用户名
POSTGRES_PASSWORD: <yourpassword> # 数据库密码,两处需要保持一致
POSTGRES_DB: umami_db # 自动创建的数据库名
# 数据持久化挂载:宿主机目录 ./postgres-data 映射到容器数据目录
# 即使容器删除,数据库文件保存在宿主机不会丢失
volumes:
- ./postgres-data:/var/lib/postgresql/data
# 加入自定义网桥网络,与umami容器互通
networks:
- umami-network
# 数据库健康检查:判断Postgres是否真正就绪可以连接
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 5
# Umami 网站统计应用服务
umami:
# Umami官方镜像
image: docker.umami.is/umami-software/umami:latest
# Umami容器名称
container_name: umami
# 容器退出自动重启
restart: always
# Umami程序配置环境变量
environment:
# 数据库连接地址,postgres是同网络内数据库服务名,docker内部DNS自动解析
# <yourpassword> 必须和上面postgres的密码完全相同
DATABASE_URL: postgresql://umami:<yourpassword>@postgres:5432/umami_db
DATABASE_TYPE: postgresql # 指定数据库类型为Postgres
HASH_SALT: <yourhashsalt> # 密码加密,使用 openssl rand -hex 16 生成随机串
# 端口映射:宿主机3000端口映射容器内部3000端口
# 访问地址:http://服务器IP:3000
ports:
- "3000:3000"
networks:
- umami-network
# 依赖数据库服务:等待postgres健康检查通过之后才启动umami
# 解决数据库启动慢,umami提前启动连接失败的问题
depends_on:
postgres:
condition: service_healthy
# 日志配置,防止日志文件无限膨胀占满磁盘
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
umami-network:
driver: bridge
启动容器
cd ~/umami
# 可以先拉取所需的两个镜像
docker-compose pull postgres
docker-compose pull umami
# 拉取成功后启动容器
docker-compose up -d
部分命令
# 启动容器
docker-compose up -d
# 停止容器
docker-compose down
#查看容器状态
docker-compose ps
# 检查版本号
docker-compose exec umami cat /app/package.json | grep version
# 查看 Umami 容器日志
docker-compose logs -f umami
# 查看数据库容器日志
docker-compose logs -f postgres
PostgreSQL数据库备份与恢复
# 备份数据库
docker exec -i umami-postgres pg\_dump -U umami -d umami > /umami/backup/umami-\$(date +%Y%m%d\_%H%M).sql
# 恢复数据库
docker exec -i umami-postgres psql -U umami -d umami < /umami/backup/umami-20240129_1520.sql
# 压缩备份
docker exec -i umami-postgres pg\_dump -U umami -d umami | gzip > /opt/chixm/umami/backup/umami-\$(date +%Y%m%d\_%H%M).sql.gz
gzip -dc /opt/chixm/umami/backup/umami-20240129_1520.sql.gz | docker exec -i umami-postgres psql -U umami -d umami
Nginx配置
部分配置内容参考
# ==================== Umami ====================
server {
listen 80;
listen 443 ssl;
http2 on;
server_name <your-domain>;
if ($scheme = http) {
return 301 https://$host$request_uri;
}
ssl_certificate /etc/letsencrypt/live/<your-domain>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<your-domain>/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
使用指南
默认账号密码:
- Username:
admin - Password:
umami

评论区