使用Docker部署Umami统计服务 | Nginx | PostgreSQL

2024/1/29 15:13:39Chixm6 阅读0 点赞0 评论

前言

关于访客统计,我最早用的是百度统计,直到我看到了Umami

Umami 是一个开源的、注重隐私的网站访问统计工具。它提供了简洁直观的界面,支持多种统计维度,是 Google Analytics 的轻量级替代方案。

部署要求

  • 支持 Docker 环境
  • 支持 Nginx 反向代理

部署步骤

简单记录基于Docker-Compose文件部署

Docker-Compose配置

BASH
# 创建应用目录

cd ~
mkdir umami

# 编辑docker-compose.yml(参考下文配置)

# 请将<yourpassword>和<yourhashsalt>更改

vim ~/umami/docker-compose.yml

配置内容参考如下:

YAML
---

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

启动容器

BASH
cd ~/umami

# 可以先拉取所需的两个镜像
docker-compose pull postgres
docker-compose pull umami

# 拉取成功后启动容器
docker-compose up -d

部分命令

BASH
# 启动容器
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数据库备份与恢复

BASH
# 备份数据库
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配置

部分配置内容参考

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

评论区