739 字
4 分钟
Docker部署Umami 从安装到备份迁移 打造可维护的私有化统计程序
Random Cover
Umami 是一个简单易用、自托管的开源的网站访问统计分析工具。 Google Analytics 替代品。 项目地址: umami
一、部署
1.这里以docker部署为例,在opt/umami目录下创建 docker-compose 文件和.env
docker-compose内容:
version: '3.8'
services: umami: image: ghcr.io/umami-software/umami:postgresql-latest container_name: umami ports: - "3000:3000" env_file: - .env environment: DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB} APP_SECRET: ${APP_SECRET} depends_on: db: condition: service_healthy restart: always logging: driver: "json-file" options: max-size: "10m" max-file: "3"
db: image: postgres:15-alpine container_name: umami_db env_file: - .env volumes: - umami-db-data:/var/lib/postgresql/data restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] interval: 10s timeout: 5s retries: 5 logging: driver: "json-file" options: max-size: "10m" max-file: "3"
volumes: umami-db-data:.env文件内容:
POSTGRES_USER=umamiPOSTGRES_PASSWORD=your_very_secure_password_herePOSTGRES_DB=umamiAPP_SECRET=your_random_secret_string_here2.保存并启动
docker compose up -d3.如果报错:
[dotenv@17.2.1] injecting env (0) from .env -- tip: ? prevent committing .env to code: https://dotenvx.com/precommit ✓ DATABASE_URL is defined. ✗ Unable to connect to the database: Authentication failed against database server, the provided database credentials for umami are not valid. Please make sure to provide valid database credentials for the database server at the configured address. ELIFECYCLE Command failed with exit code 1. ERROR: "check-db" exited with 1. ELIFECYCLE Command failed with exit code 1.手动修改数据库密码:
docker exec -it umami_db psql -U umami -d umami然后在 psql 里执行:
ALTER USER umami WITH PASSWORD 'your_very_secure_password_here';4.设置反向代理
访问http://ip:3000 反代用1panel面板就行。
5.登录后台
默认账号:admin ,默认密码:umami 在设置界面可以设置语言为中文。
二、备份umami数据库
1.如果你的服务器没有安装rclone,请先安装rclone,并设置好坚果云webdav,在1panel面板计划任务中添加以下代码:
#!/bin/bash
set -e # 出错立即退出
# 配置CONTAINER_NAME="umami_db" # PostgreSQL 容器名DB_USER="umami" # 数据库用户名(和 .env 一致)DB_NAME="umami" # 数据库名(和 .env 一致)LOCAL_BACKUP_DIR="/root/backups" # 本地临时备份目录BACKUP_FILENAME="umami_backup_latest.sql.gz"RCLONE_REMOTE="jianguoyun:/umami_backup"
# 创建本地备份目录mkdir -p "$LOCAL_BACKUP_DIR"
# 导出数据库并压缩echo "? 正在备份数据库..."docker exec -t "$CONTAINER_NAME" pg_dump -U "$DB_USER" "$DB_NAME" | gzip > "$LOCAL_BACKUP_DIR/$BACKUP_FILENAME"
# 确认备份生成if [ ! -f "$LOCAL_BACKUP_DIR/$BACKUP_FILENAME" ]; then echo "❌ 备份失败,未生成文件" exit 1fi
# 确保坚果云目录存在rclone mkdir "$RCLONE_REMOTE"
# 上传前先清理坚果云旧备份echo "? 正在清理坚果云旧备份..."rclone delete "$RCLONE_REMOTE"
# 上传新备份echo "☁️ 正在上传到坚果云..."if rclone copy "$LOCAL_BACKUP_DIR/$BACKUP_FILENAME" "$RCLONE_REMOTE"; then echo "✅ 上传成功" rm "$LOCAL_BACKUP_DIR/$BACKUP_FILENAME" # 上传成功后删除本地备份else echo "❌ 上传失败" exit 1fi
echo "? 最新备份已完成并上传(只保留最新)"三、迁移数据库并导入数据库
1.请确保你新的服务器的PostgreSQL 容器在运行
docker ps | grep umami_db输出中应该能看到 umami_db 容器状态是 Up。
2.这里假设数据库备份在/root/backups,直接用 docker exec 将备份导入 PostgreSQL 容器:
gunzip < /root/backups/umami_backup_latest.sql.gz | docker exec -i umami_db psql -U umami -d umami-U umami -d umami:使用数据库用户名和数据库名(必须和 .env 中一致)
3.验证数据
docker exec -it umami_db psql -U umami -d umami -c "SELECT * FROM event LIMIT 5;"如果能查到数据,说明导入成功,到这里就全部配置完成了。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Docker部署Umami 从安装到备份迁移 打造可维护的私有化统计程序
https://www.weirain.com/posts/329/ 最后更新于 2025-08-20,距今已过 162 天
部分内容可能已过时
风尘落微雨