Uptime Kuma 部署安装运维手册

Uptime Kuma 部署安装运维手册

后续 会有脚本 直接监控服务器的内存、磁盘、cpu等向Uptime Kuma 进行PUSH

目录

  1. 项目简介
  2. 环境要求
  3. 安装部署
    • [方式一:Docker Compose(推荐)](#方式一:Docker Compose(推荐))
    • [方式二:Docker 命令](#方式二:Docker 命令)
    • [方式三:非 Docker 安装](#方式三:非 Docker 安装)
  4. 环境变量配置
  5. 反向代理配置
  6. 日常运维
  7. 常见问题

1. 项目简介

什么是 Uptime Kuma?

Uptime Kuma 是一个开源的、自托管的监控工具,用于监控网站、服务器和各种服务的可用性。

主要功能

功能 说明
多协议监控 HTTP(s)、TCP、Ping、DNS、WebSocket、Docker 容器等
监控频率 最低 20 秒间隔
通知渠道 支持 90+ 种通知方式(Telegram、Discord、Slack、邮件、钉钉、企业微信等)
状态页面 可创建多个公开状态页,支持自定义域名
SSL 证书监控 自动检测证书过期时间
双因素认证 支持 2FA 增强安全性
代理支持 支持通过代理进行监控

2. 环境要求

Docker 安装方式(推荐)

组件 最低版本
Docker 20.10+
Docker Compose v2.0+
内存 512MB+
磁盘 1GB+

非 Docker 安装方式

组件 最低版本
Node.js 20.4+
Git 任意版本
PM2 最新版(用于后台运行)

端口要求

  • 默认端口:3001
  • 确保防火墙放行该端口

3. 安装部署

方式一:Docker Compose(推荐)

这是最简单、最推荐的安装方式。

步骤 1:创建目录
bash 复制代码
# 创建项目目录
mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma
步骤 2:创建 docker-compose.yml 文件
bash 复制代码
# 创建配置文件
cat > docker-compose.yml << 'EOF'
version: "3.8"

services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - ./data:/app/data
    environment:
      - TZ=Asia/Shanghai
EOF
步骤 3:启动服务
bash 复制代码
# 启动容器(后台运行)
docker compose up -d

# 查看运行状态
docker compose ps

# 查看日志
docker compose logs -f
步骤 4:访问 Web 界面

打开浏览器访问:http://你的服务器IP:3001

首次访问需要创建管理员账号。


方式二:Docker 命令

如果不想使用 Docker Compose,可以直接使用 Docker 命令。

一键启动命令
bash 复制代码
docker run -d \
  --name uptime-kuma \
  --restart=unless-stopped \
  -p 3001:3001 \
  -v /opt/uptime-kuma/data:/app/data \
  -e TZ=Asia/Shanghai \
  louislam/uptime-kuma:2
常用管理命令
bash 复制代码
# 查看容器状态
docker ps | grep uptime-kuma

# 查看日志
docker logs -f uptime-kuma

# 停止容器
docker stop uptime-kuma

# 启动容器
docker start uptime-kuma

# 重启容器
docker restart uptime-kuma

# 删除容器(数据不会丢失)
docker rm -f uptime-kuma

方式三:非 Docker 安装

适用于没有 Docker 环境的服务器。

步骤 1:安装 Node.js
bash 复制代码
# Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs

# CentOS/RHEL
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo yum install -y nodejs

# 验证安装
node -v  # 应显示 v20.x.x
npm -v
步骤 2:安装 PM2
bash 复制代码
# 全局安装 PM2
sudo npm install -g pm2
步骤 3:下载 Uptime Kuma
bash 复制代码
# 创建目录
mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma

# 克隆代码
git clone https://github.com/louislam/uptime-kuma.git .

# 切换到最新稳定版
git checkout 2.0.0-beta.2  # 或查看最新版本号
步骤 4:安装依赖并启动
bash 复制代码
# 安装依赖
npm run setup

# 使用 PM2 启动(后台运行)
pm2 start server/server.js --name uptime-kuma

# 设置开机自启
pm2 save
pm2 startup
步骤 5:验证运行
bash 复制代码
# 查看运行状态
pm2 status

# 查看日志
pm2 logs uptime-kuma

4. 环境变量配置

常用环境变量

变量名 默认值 说明
UPTIME_KUMA_HOST :: 监听地址
UPTIME_KUMA_PORT 3001 监听端口
DATA_DIR ./data 数据存储目录
TZ UTC 时区设置

SSL 相关变量

变量名 说明
UPTIME_KUMA_SSL_KEY SSL 私钥文件路径
UPTIME_KUMA_SSL_CERT SSL 证书文件路径

数据库配置(v2.0.0+)

从 v2.0.0 开始支持 MariaDB 数据库。

变量名 说明
UPTIME_KUMA_DB_TYPE 数据库类型(sqlite 或 mariadb)
UPTIME_KUMA_DB_HOSTNAME 数据库主机地址
UPTIME_KUMA_DB_PORT 数据库端口
UPTIME_KUMA_DB_NAME 数据库名称
UPTIME_KUMA_DB_USERNAME 数据库用户名
UPTIME_KUMA_DB_PASSWORD 数据库密码

Docker Compose 配置示例(带环境变量)

yaml 复制代码
version: "3.8"

services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - ./data:/app/data
    environment:
      - TZ=Asia/Shanghai
      - UPTIME_KUMA_PORT=3001
      # 如需修改其他配置,在此添加

非 Docker 环境变量配置

在项目根目录创建 .env 文件:

bash 复制代码
cat > /opt/uptime-kuma/.env << 'EOF'
UPTIME_KUMA_PORT=3001
TZ=Asia/Shanghai
EOF

5. 反向代理配置

重要提示:Uptime Kuma 基于 WebSocket,反向代理必须正确配置 WebSocket 支持!
注意 :不支持子目录部署(如 http://example.com/uptime-kuma),必须使用独立域名或子域名。

Nginx 配置

基础配置(HTTP)
nginx 复制代码
server {
    listen 80;
    server_name monitor.example.com;

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;

        # WebSocket 支持(必须)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        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;
    }
}
HTTPS 配置(推荐)
nginx 复制代码
server {
    listen 80;
    server_name monitor.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name monitor.example.com;

    # SSL 证书配置
    ssl_certificate /etc/nginx/ssl/monitor.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/monitor.example.com.key;

    # SSL 安全配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;

        # WebSocket 支持(必须)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        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;
    }
}
使用 Certbot 自动申请证书
bash 复制代码
# 安装 Certbot
sudo apt install certbot python3-certbot-nginx

# 申请证书(自动配置 Nginx)
sudo certbot --nginx -d monitor.example.com

# 测试自动续期
sudo certbot renew --dry-run

Caddy 配置(最简单)

Caddy 会自动申请和续期 SSL 证书。

bash 复制代码
# 创建 Caddyfile
cat > /etc/caddy/Caddyfile << 'EOF'
monitor.example.com {
    reverse_proxy 127.0.0.1:3001
}
EOF

# 重载配置
sudo systemctl reload caddy

Apache 配置

apache 复制代码
<VirtualHost *:80>
    ServerName monitor.example.com

    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:3001/
    ProxyPassReverse / http://127.0.0.1:3001/

    # WebSocket 支持
    RewriteEngine On
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.*)  ws://127.0.0.1:3001/$1 [P,L]
</VirtualHost>

需要启用的 Apache 模块:

bash 复制代码
sudo a2enmod proxy proxy_http proxy_wstunnel rewrite
sudo systemctl restart apache2

配置完成后

在 Uptime Kuma 的 设置 → 通用 中,启用 Trust Proxy 选项,以正确记录客户端 IP。


6. 日常运维

6.1 更新升级

Docker Compose 方式
bash 复制代码
cd /opt/uptime-kuma

# 拉取最新镜像
docker compose pull

# 重新创建容器
docker compose up -d

# 查看版本
docker compose logs | head -20
Docker 命令方式
bash 复制代码
# 停止并删除旧容器
docker stop uptime-kuma
docker rm uptime-kuma

# 拉取最新镜像
docker pull louislam/uptime-kuma:2

# 重新启动(使用相同的启动命令)
docker run -d \
  --name uptime-kuma \
  --restart=unless-stopped \
  -p 3001:3001 \
  -v /opt/uptime-kuma/data:/app/data \
  -e TZ=Asia/Shanghai \
  louislam/uptime-kuma:2
非 Docker 方式
bash 复制代码
cd /opt/uptime-kuma

# 停止服务
pm2 stop uptime-kuma

# 拉取最新代码
git fetch --all
git checkout 2.0.0-beta.2  # 替换为最新版本号

# 安装依赖
npm run setup

# 启动服务
pm2 restart uptime-kuma

6.2 数据备份

备份数据目录
bash 复制代码
# 创建备份目录
mkdir -p /backup/uptime-kuma

# 备份数据(建议先停止服务)
docker compose stop
cp -r /opt/uptime-kuma/data /backup/uptime-kuma/data_$(date +%Y%m%d_%H%M%S)
docker compose start
自动备份脚本
bash 复制代码
cat > /opt/uptime-kuma/backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/uptime-kuma"
DATA_DIR="/opt/uptime-kuma/data"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/uptime-kuma_$DATE.tar.gz -C $DATA_DIR .

# 保留最近 7 天的备份
find $BACKUP_DIR -name "uptime-kuma_*.tar.gz" -mtime +7 -delete

echo "Backup completed: uptime-kuma_$DATE.tar.gz"
EOF

chmod +x /opt/uptime-kuma/backup.sh
设置定时备份(每天凌晨 3 点)
bash 复制代码
# 编辑 crontab
crontab -e

# 添加以下行
0 3 * * * /opt/uptime-kuma/backup.sh >> /var/log/uptime-kuma-backup.log 2>&1

6.3 数据恢复

bash 复制代码
# 停止服务
docker compose stop

# 恢复数据
rm -rf /opt/uptime-kuma/data/*
tar -xzf /backup/uptime-kuma/uptime-kuma_20240101_030000.tar.gz -C /opt/uptime-kuma/data/

# 启动服务
docker compose start

6.4 密码重置

Docker 方式
bash 复制代码
# 进入容器
docker exec -it uptime-kuma bash

# 执行密码重置
npm run reset-password

# 按提示输入新密码后退出
exit
非 Docker 方式
bash 复制代码
cd /opt/uptime-kuma
npm run reset-password

6.5 查看日志

Docker 方式
bash 复制代码
# 实时查看日志
docker logs -f uptime-kuma

# 查看最近 100 行
docker logs --tail 100 uptime-kuma

# 查看指定时间段
docker logs --since "2024-01-01" uptime-kuma
非 Docker 方式
bash 复制代码
pm2 logs uptime-kuma

6.6 健康检查

bash 复制代码
# 检查服务是否运行
curl -s http://localhost:3001/api/status-page/heartbeat | head

# 检查容器状态
docker inspect uptime-kuma --format='{{.State.Status}}'

7. 常见问题

Q1: 无法访问 Web 界面

检查步骤:

bash 复制代码
# 1. 检查容器是否运行
docker ps | grep uptime-kuma

# 2. 检查端口是否监听
netstat -tlnp | grep 3001

# 3. 检查防火墙
# Ubuntu/Debian
sudo ufw status
sudo ufw allow 3001

# CentOS/RHEL
sudo firewall-cmd --list-ports
sudo firewall-cmd --add-port=3001/tcp --permanent
sudo firewall-cmd --reload

# 4. 检查日志
docker logs uptime-kuma

Q2: WebSocket 连接失败

症状:页面显示 "Connecting..." 或实时数据不更新

解决方案:检查反向代理配置,确保包含以下 WebSocket 头:

nginx 复制代码
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

Q3: 数据库损坏

症状:启动报错 "database is locked" 或 "database disk image is malformed"

解决方案

bash 复制代码
# 停止服务
docker compose stop

# 备份当前数据
cp /opt/uptime-kuma/data/kuma.db /opt/uptime-kuma/data/kuma.db.bak

# 尝试修复
sqlite3 /opt/uptime-kuma/data/kuma.db "PRAGMA integrity_check;"

# 如果无法修复,从备份恢复

预防措施:不要将数据目录放在 NFS 存储上,SQLite 需要 POSIX 文件锁支持。

Q4: 忘记管理员密码

参考 [6.4 密码重置](#6.4 密码重置)

Q5: 如何迁移到新服务器

bash 复制代码
# 旧服务器:备份数据
cd /opt/uptime-kuma
docker compose stop
tar -czf uptime-kuma-data.tar.gz data/

# 将备份文件传输到新服务器
scp uptime-kuma-data.tar.gz user@new-server:/opt/

# 新服务器:恢复数据
cd /opt
mkdir uptime-kuma && cd uptime-kuma
tar -xzf ../uptime-kuma-data.tar.gz

# 创建 docker-compose.yml(参考安装步骤)
# 启动服务
docker compose up -d

Q6: 如何修改监听端口

Docker Compose 方式 :修改 docker-compose.yml

yaml 复制代码
ports:
  - "8080:3001"  # 将外部端口改为 8080

然后重启:docker compose up -d

Q7: 通知发送失败

检查步骤

  1. 设置 → 通知 中点击 测试 按钮
  2. 检查通知配置是否正确(API Token、Webhook URL 等)
  3. 检查服务器网络是否能访问通知服务(如 Telegram API)
  4. 查看日志中的错误信息

附录

常用 Docker 命令速查

操作 命令
启动 docker compose up -d
停止 docker compose stop
重启 docker compose restart
查看状态 docker compose ps
查看日志 docker compose logs -f
更新 docker compose pull && docker compose up -d
进入容器 docker exec -it uptime-kuma bash

相关链接

相关推荐
昨夜见军贴06161 小时前
IACheck AI审核推动质量控制记录标准化,全面保障含量测定研究合规性
大数据·运维·人工智能
venus601 小时前
服务器里面多个网口,电口,光口如何区分使用
运维·服务器
A-刘晨阳1 小时前
ubuntu各版本配置apt源(阿里源)
linux·运维·ubuntu
Trouvaille ~1 小时前
【Linux】进程间通信(一):IPC基础与管道机制深度剖析
linux·运维·c++·管道·进程间通信·匿名管道·半双工
prettyxian2 小时前
【linux】进程地址空间与虚拟内存机制
linux·运维·服务器
全干工程师—2 小时前
解决Xshell无法连接 Ubuntu 问题
linux·运维·ubuntu
炽天使3282 小时前
Win11系统下安装 WSL2 + Ubuntu 流程
linux·运维·ubuntu
EverydayJoy^v^2 小时前
RH134学习进程——五.调优系统性能
linux·运维·服务器
shhpeng2 小时前
Debian packages 的签名与验证
运维·debian