在 Ubuntu 服务器(推荐 22.04 / 24.04 LTS)上 一键安装 Umami(自托管开源统计系统)
适用人群:有 VPS / 云服务器(1核1G起步),想完全掌控数据、隐私友好
技术栈:Docker + PostgreSQL(最稳)或 MySQL
耗时:约 8 分钟
技术栈: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)
- 登录 Umami 后台
- 点击 “+ Add website”
- 填写:
- Website name: My Blog
- Domain: blog.example.com
- 复制生成的代码:
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 3000 或 sudo 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.sh → chmod +x install-umami.sh → ./install-umami.sh
总结:你现在拥有
- 完全自托管的 Umami 统计系统
- 支持 HTTPS + 域名访问
- 防广告拦截(第一方脚本)
- 数据 100% 在你服务器
- 免费、开源、可扩展