feat(deploy): add Uptime Kuma monitor auto-config script and update docker config

1. 为Uptime Kuma和Portainer添加环境变量监听端口配置
2. 新增setup_kuma_monitors.sh一键监控配置脚本
3. 更新部署文档,添加监控脚本使用说明
This commit is contained in:
2026-05-28 12:09:31 +08:00
parent 410ea5fe2a
commit 100218abe4
3 changed files with 341 additions and 1 deletions
+3 -1
View File
@@ -103,6 +103,8 @@ services:
container_name: myaps_uptime_kuma
restart: unless-stopped
network_mode: host
environment:
- UPTIME_KUMA_LISTEN=0.0.0.0:${UPTIME_KUMA_PORT:-3001}
volumes:
- uptime_kuma_data:/app/data
healthcheck:
@@ -119,7 +121,7 @@ services:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
command: -p 9000 --no-edge
command: --bind=:${PORTAINER_PORT:-9000} --tunnel-port ${PORTAINER_TUNNEL_PORT:-9001}
volumes:
redis_data:
+105
View File
@@ -192,8 +192,113 @@ cd scripts/deploy_docker
./export_image.sh # 导出镜像 (离线部署用)
./import_image.sh # 导入镜像
./setup_kuma_monitors.sh # 配置Uptime Kuma监控项
```
### 监控配置脚本
`setup_kuma_monitors.sh` 用于一键配置 Uptime Kuma 监控项,所有配置从 `.env` 文件读取。
**使用方法:**
```bash
# 查看帮助信息
./setup_kuma_monitors.sh --help
# 查看监控配置列表
./setup_kuma_monitors.sh --list
# 执行监控配置(幂等操作,可重复执行)
./setup_kuma_monitors.sh
# 模拟执行(不实际操作)
./setup_kuma_monitors.sh --dry-run
# 指定容器名称
./setup_kuma_monitors.sh --container my_uptime_kuma
```
**配置选项:**
| 选项 | 说明 |
|-----|------|
| `-h, --help` | 显示帮助信息 |
| `-l, --list` | 显示监控配置列表 |
| `-n, --dry-run` | 模拟执行,不实际操作 |
| `-c, --container` | 指定 Uptime Kuma 容器名称 |
**监控项列表(自动从 .env 读取配置):**
| 监控项 | 类型 | 配置来源 |
|--------|------|---------|
| MyAPI服务 | HTTP | `PORT` |
| Redis | Port | `REDIS_PORT` |
| PostgreSQL | Port | `THIS_DB_PORT` |
| Portainer | HTTP | `PORTAINER_PORT` |
| Binlog监听器 | HTTP | `PORT` |
| Uptime Kuma | HTTP | `UPTIME_KUMA_PORT` |
| MyAPS数据库 | Port | `MYAPS_DB_HOST:MYAPS_DB_PORT` |
**环境变量配置:**
`.env` 文件中配置以下变量:
```ini
# 应用端口
PORT=8000
# 数据库端口
THIS_DB_PORT=5432
MYAPS_DB_HOST=1.13.184.21
MYAPS_DB_PORT=3333
# Redis端口
REDIS_PORT=6379
# 监控服务端口
UPTIME_KUMA_PORT=3001
PORTAINER_PORT=9000
PORTAINER_TUNNEL_PORT=9001
```
**执行示例:**
```bash
$ ./setup_kuma_monitors.sh
==============================================
Uptime Kuma 监控配置一键安装脚本
==============================================
🔍 检查Uptime Kuma容器状态...
✅ 容器 myaps_uptime_kuma 运行正常
📝 生成SQL脚本...
✅ SQL脚本生成成功
📤 复制SQL脚本到容器...
✅ SQL脚本已复制到容器
⚙️ 在容器内执行SQL导入...
本次执行添加 7 条监控记录
✅ SQL导入成功
🧹 清理临时文件...
✅ 清理完成
📊 检查监控配置...
✅ 当前监控数量: 7
==============================================
🎉 监控配置导入完成!
==============================================
💡 访问地址: http://localhost:3001
查看已添加的7个监控项
```
> **注意**:脚本具有幂等性,重复执行不会产生重复监控项。
---
## 数据库配置
+233
View File
@@ -0,0 +1,233 @@
#!/bin/bash
# ==============================================
# Uptime Kuma 监控配置一键安装脚本
# 使用方法: ./setup_kuma_monitors.sh
# 功能: 自动配置7个监控项到Uptime Kuma
# ==============================================
set -e
# 配置
CONTAINER_NAME="myaps_uptime_kuma"
KUMA_DB="/app/data/kuma.db"
TEMP_SQL="/tmp/kuma_monitors_$$.sql"
ENV_FILE="../.env"
# 从.env文件读取数据库和端口配置
read_env_config() {
if [ -f "$ENV_FILE" ]; then
while IFS='=' read -r key value; do
case "$key" in
MYAPS_DB_HOST) MYAPS_DB_HOST="$value" ;;
MYAPS_DB_PORT) MYAPS_DB_PORT="$value" ;;
REDIS_PORT) REDIS_PORT="$value" ;;
THIS_DB_PORT) THIS_DB_PORT="$value" ;;
PORTAINER_PORT) PORTAINER_PORT="$value" ;;
UPTIME_KUMA_PORT) UPTIME_KUMA_PORT="$value" ;;
PORT) APP_PORT="$value" ;;
esac
done < "$ENV_FILE"
fi
MYAPS_DB_HOST=${MYAPS_DB_HOST:-1.13.184.21}
MYAPS_DB_PORT=${MYAPS_DB_PORT:-3333}
REDIS_PORT=${REDIS_PORT:-6379}
THIS_DB_PORT=${THIS_DB_PORT:-5432}
PORTAINER_PORT=${PORTAINER_PORT:-9000}
UPTIME_KUMA_PORT=${UPTIME_KUMA_PORT:-3001}
APP_PORT=${APP_PORT:-8000}
}
# 读取环境变量
read_env_config
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 清理函数
cleanup() {
rm -f "$TEMP_SQL" 2>/dev/null || true
docker exec "$CONTAINER_NAME" rm -f "$TEMP_SQL" 2>/dev/null || true
}
trap cleanup EXIT
# 显示帮助
show_help() {
echo "Uptime Kuma 监控配置一键安装脚本"
echo ""
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " --help, -h 显示此帮助信息"
echo " --list, -l 显示监控配置列表"
echo " --dry-run, -n 仅显示将要执行的操作,不实际执行"
echo " --container, -c 指定容器名称 (默认: $CONTAINER_NAME)"
echo ""
echo "监控配置列表:"
echo " 1. MyAPI服务 - HTTP http://localhost:${APP_PORT}/docs"
echo " 2. Redis - Port localhost:${REDIS_PORT}"
echo " 3. PostgreSQL - Port localhost:${THIS_DB_PORT}"
echo " 4. Portainer - HTTP http://localhost:${PORTAINER_PORT}"
echo " 5. Binlog监听器 - HTTP http://localhost:${APP_PORT}/monitor/api/binlog-listener"
echo " 6. Uptime Kuma - HTTP http://localhost:${UPTIME_KUMA_PORT}"
echo " 7. MyAPS数据库 - Port ${MYAPS_DB_HOST}:${MYAPS_DB_PORT} (从.env读取)"
}
# 生成SQL内容(幂等性保证)
generate_sql() {
cat > "$TEMP_SQL" << EOF
-- 先删除已存在的同名监控(幂等性保证)
DELETE FROM monitor WHERE name IN ('MyAPI服务', 'Redis', 'PostgreSQL', 'Portainer', 'Binlog监听器', 'Uptime Kuma', 'MyAPS数据库');
-- 插入监控配置
INSERT INTO monitor (name, type, url, interval, maxretries, active, user_id, created_date, keyword)
SELECT 'MyAPI服务', 'http', 'http://localhost:${APP_PORT}/docs', 60, 3, 1, (SELECT id FROM user LIMIT 1), datetime('now'), NULL;
INSERT INTO monitor (name, type, hostname, port, interval, maxretries, active, user_id, created_date)
SELECT 'Redis', 'port', 'localhost', ${REDIS_PORT}, 60, 3, 1, (SELECT id FROM user LIMIT 1), datetime('now');
INSERT INTO monitor (name, type, hostname, port, interval, maxretries, active, user_id, created_date)
SELECT 'PostgreSQL', 'port', 'localhost', ${THIS_DB_PORT}, 60, 3, 1, (SELECT id FROM user LIMIT 1), datetime('now');
INSERT INTO monitor (name, type, url, interval, maxretries, active, user_id, created_date, keyword)
SELECT 'Portainer', 'http', 'http://localhost:${PORTAINER_PORT}', 60, 3, 1, (SELECT id FROM user LIMIT 1), datetime('now'), NULL;
INSERT INTO monitor (name, type, url, interval, maxretries, active, user_id, created_date, keyword)
SELECT 'Binlog监听器', 'http', 'http://localhost:${APP_PORT}/monitor/api/binlog-listener', 60, 3, 1, (SELECT id FROM user LIMIT 1), datetime('now'), '"healthy": true';
INSERT INTO monitor (name, type, url, interval, maxretries, active, user_id, created_date, keyword)
SELECT 'Uptime Kuma', 'http', 'http://localhost:${UPTIME_KUMA_PORT}', 60, 3, 1, (SELECT id FROM user LIMIT 1), datetime('now'), NULL;
INSERT INTO monitor (name, type, hostname, port, interval, maxretries, active, user_id, created_date)
SELECT 'MyAPS数据库', 'port', '$MYAPS_DB_HOST', $MYAPS_DB_PORT, 60, 3, 1, (SELECT id FROM user LIMIT 1), datetime('now');
SELECT '本次执行添加 ' || changes() || ' 条监控记录' AS result;
EOF
}
# 解析参数
DRY_RUN=false
LIST_ONLY=false
while [[ $# -gt 0 ]]; do
case "$1" in
--help|-h)
show_help
exit 0
;;
--list|-l)
LIST_ONLY=true
;;
--dry-run|-n)
DRY_RUN=true
;;
--container|-c)
CONTAINER_NAME="$2"
shift
;;
*)
echo "未知选项: $1"
show_help
exit 1
;;
esac
shift
done
# 如果只显示列表
if $LIST_ONLY; then
show_help
exit 0
fi
echo -e "${BLUE}==============================================${NC}"
echo -e "${BLUE} Uptime Kuma 监控配置一键安装脚本${NC}"
echo -e "${BLUE}==============================================${NC}"
# 1. 检查容器是否存在
echo -e "\n${YELLOW}🔍 检查Uptime Kuma容器状态...${NC}"
if ! docker inspect "$CONTAINER_NAME" &>/dev/null; then
echo -e "${RED}❌ 错误: 容器 $CONTAINER_NAME 不存在${NC}"
echo -e "${RED} 请先启动Uptime Kuma容器${NC}"
exit 1
fi
# 检查容器是否运行
CONTAINER_STATUS=$(docker inspect -f '{{.State.Status}}' "$CONTAINER_NAME")
if [ "$CONTAINER_STATUS" != "running" ]; then
if $DRY_RUN; then
echo -e "${YELLOW}⚠️ [模拟] 容器未运行,将启动...${NC}"
else
echo -e "${YELLOW}⚠️ 容器未运行,正在启动...${NC}"
docker start "$CONTAINER_NAME"
sleep 5
fi
fi
echo -e "${GREEN}✅ 容器 $CONTAINER_NAME 运行正常${NC}"
# 2. 生成SQL脚本
echo -e "\n${YELLOW}📝 生成SQL脚本...${NC}"
if $DRY_RUN; then
echo -e "${YELLOW} [模拟] 将生成7条监控配置的SQL${NC}"
else
generate_sql
echo -e "${GREEN}✅ SQL脚本生成成功${NC}"
fi
# 3. 复制SQL脚本到容器
echo -e "\n${YELLOW}📤 复制SQL脚本到容器...${NC}"
if $DRY_RUN; then
echo -e "${YELLOW} [模拟] docker cp $TEMP_SQL $CONTAINER_NAME:$TEMP_SQL${NC}"
else
docker cp "$TEMP_SQL" "$CONTAINER_NAME":"$TEMP_SQL"
echo -e "${GREEN}✅ SQL脚本已复制到容器${NC}"
fi
# 4. 在容器内执行SQL
echo -e "\n${YELLOW}⚙️ 在容器内执行SQL导入...${NC}"
if $DRY_RUN; then
echo -e "${YELLOW} [模拟] docker exec -i $CONTAINER_NAME sqlite3 $KUMA_DB < $TEMP_SQL${NC}"
else
echo -e "${BLUE} 执行命令: docker exec -i $CONTAINER_NAME sqlite3 $KUMA_DB < $TEMP_SQL${NC}"
cat "$TEMP_SQL" | docker exec -i "$CONTAINER_NAME" sqlite3 "$KUMA_DB"
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
echo -e "${GREEN}✅ SQL导入成功${NC}"
else
echo -e "${RED}❌ SQL导入失败 (退出码: $EXIT_CODE)${NC}"
exit 1
fi
fi
# 5. 清理临时文件
echo -e "\n${YELLOW}🧹 清理临时文件...${NC}"
if $DRY_RUN; then
echo -e "${YELLOW} [模拟] rm -f $TEMP_SQL${NC}"
else
cleanup
echo -e "${GREEN}✅ 清理完成${NC}"
fi
# 6. 检查导入结果
echo -e "\n${YELLOW}📊 检查监控配置...${NC}"
if $DRY_RUN; then
echo -e "${YELLOW} [模拟] docker exec $CONTAINER_NAME sqlite3 $KUMA_DB 'SELECT COUNT(*) FROM monitor;'${NC}"
else
RESULT=$(docker exec "$CONTAINER_NAME" sqlite3 "$KUMA_DB" "SELECT COUNT(*) FROM monitor;")
echo -e "${GREEN}✅ 当前监控数量: $RESULT${NC}"
fi
echo -e "\n${BLUE}==============================================${NC}"
if $DRY_RUN; then
echo -e "${YELLOW}⚠️ 模拟完成,未执行实际操作${NC}"
else
echo -e "${GREEN}🎉 监控配置导入完成!${NC}"
fi
echo -e "${BLUE}==============================================${NC}"
echo -e "\n${YELLOW}💡 访问地址: http://localhost:3001${NC}"
echo -e "${YELLOW} 查看已添加的7个监控项${NC}"