Ubuntu 服务器(推荐 22.04 / 24.04 LTS)上 一键安装 Umami(自托管开源统计系统)

适用人群:有 VPS / 云服务器(1核1G起步),想完全掌控数据、隐私友好
技术栈:Docker + PostgreSQL(最稳)或 MySQL
耗时:约 8 分钟

一、准备工作(3 分钟)

bash

# 1. 更新系统
sudo apt update && sudo apt upgrade -y

# 2. 安装必要工具
sudo apt install -y curl wget git docker.io docker-compose

# 3. 启动并开机自启 Docker
sudo systemctl enable --now docker

# 4. 添加当前用户到 docker 组(避免 sudo)
sudo usermod -aG docker $USER
# 重新登录终端或执行:
newgrp docker

二、创建项目目录 & 配置文件

bash

# 创建目录
mkdir -p ~/umami && cd ~/umami

# 创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'

services:
  umami:
    image: ghcr.io/umami-software/umami:postgresql-latest
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://umami:${DB_PASSWORD}@db:5432/umami
      - HASH_SALT=$(openssl rand -hex 32)
    depends_on:
      - db
    volumes:
      - umami-data:/app/data

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_DB=umami
      - POSTGRES_USER=umami
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  umami-data:
  postgres-data:
EOF

三、设置密码 & 启动服务

bash

# 生成强密码(保存好!)
DB_PASSWORD=$(openssl rand -base64 32)
echo "DB_PASSWORD=$DB_PASSWORD" > .env

# 替换 docker-compose 中的密码变量
export DB_PASSWORD=$DB_PASSWORD
envsubst < docker-compose.yml > docker-compose.final.yml
mv docker-compose.final.yml docker-compose.yml

# 启动 Umami
docker-compose up -d
等待 30 秒,数据库初始化完成

四、验证安装(浏览器访问)

http://你的服务器IP:3000

首次打开会进入 设置向导

步骤
操作
1
填写 用户名admin
2
填写 邮箱you@example.com
3
填写 密码:自定义强密码
4
点击 Create account

成功登录 → 看到仪表盘!


五、配置域名 + HTTPS(推荐 Nginx + Let’s Encrypt)1. 安装 Nginx 和 Certbot

bash

sudo apt install -y nginx python3-certbot-nginx

2. 创建 Nginx 配置文件

bash

sudo tee /etc/nginx/sites-available/umami > /dev/null << 'EOF'
server {
    listen 80;
    server_name stats.yourdomain.com;  # 改成你的域名

    location / {
        proxy_pass http://localhost: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;
    }
}
EOF

# 启用站点
sudo ln -s /etc/nginx/sites-available/umami /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

3. 申请免费 SSL 证书

bash

sudo certbot --nginx -d stats.yourdomain.com
# 按提示选 2(自动重定向 HTTP → HTTPS)

最终访问地址:https://stats.yourdomain.com


六、获取网站跟踪代码(JS)

  1. 登录 Umami 后台
  2. 点击 “+ Add website”
  3. 填写:
    • Website name: My Blog
    • Domain: blog.example.com
  4. 复制生成的代码:
html

<script async defer src="https://stats.yourdomain.com/umami.js" data-website-id="xxxx-xxxx-xxxx-xxxx"></script>
防广告拦截:可改为第一方脚本(见下文)

七、进阶:第一方脚本 + 防拦截(推荐)修改 Nginx 代理 Umami 脚本

nginx

location /umami.js {
    proxy_pass https://ghcr.io/umami-software/umami/umami.js;
    proxy_set_header Host ghcr.io;
}

然后在网站中使用:

html

<script async defer src="https://stats.yourdomain.com/umami.js" data-website-id="你的ID"></script>
这样即使用户装 AdBlock,也不会屏蔽统计!

八、常用命令(运维必备)

bash

# 查看日志
docker-compose logs -f umami

# 重启服务
docker-compose restart

# 更新 Umami 到最新版
docker-compose pull && docker-compose up -d

# 备份数据库
docker exec -t umami-db pg_dump -U umami umami > backup.sql

# 完全卸载
docker-compose down -v && rm -rf ~/umami

九、常见问题 (FAQ)

问题
解决方案
打不开 3000 端口?
sudo ufw allow 3000sudo ufw allow 80,443
数据库连接失败?
检查 .env 密码、确保 docker-compose up -d 成功
想用 MySQL?
DATABASE_URL=mysql://umami:pass@db:3306/umami,并换 postgres 镜像为 mysql:8
数据不更新?
浏览器 F12 → Network → 查看是否有 /api/collect 请求

完整一键安装脚本(复制粘贴即可)

bash

#!/bin/bash
echo "开始安装 Umami(自托管统计)..."

# 安装依赖
sudo apt update && sudo apt install -y curl docker.io docker-compose nginx python3-certbot-nginx

# 创建目录
mkdir -p ~/umami && cd ~/umami

# 生成密码
DB_PASSWORD=$(openssl rand -base64 32)
export DB_PASSWORD

# 创建 compose 文件
cat > docker-compose.yml << EOF
version: '3.8'
services:
  umami:
    image: ghcr.io/umami-software/umami:postgresql-latest
    restart: unless-stopped
    ports: ["3000:3000"]
    environment:
      DATABASE_URL: postgresql://umami:\${DB_PASSWORD}@db:5432/umami
      HASH_SALT: $(openssl rand -hex 32)
    depends_on: [db]
  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: \${DB_PASSWORD}
    volumes: [postgres-data:/var/lib/postgresql/data]
volumes:
  postgres-data:
EOF

# 启动
docker-compose up -d

echo "Umami 已启动!"
echo "临时访问:http://$(curl -s ifconfig.me):3000"
echo "请继续配置域名 + HTTPS"
保存为 install-umami.shchmod +x install-umami.sh./install-umami.sh

总结:你现在拥有

  • 完全自托管的 Umami 统计系统
  • 支持 HTTPS + 域名访问
  • 防广告拦截(第一方脚本)
  • 数据 100% 在你服务器
  • 免费、开源、可扩展