5分钟上手Uptime Kuma自动化部署:从源码到监控的全流程脚本实现
一、痛点直击:手动部署的3大致命伤
你是否还在为Uptime Kuma部署重复以下操作?
- 手动拉取代码 → 安装依赖 → 编译前端 → 配置服务 → 启动进程
- 服务器迁移时重新配置Nginx和PM2
- 版本更新时担心数据库迁移失败
本文提供的自动化部署脚本将彻底解决这些问题,实现: ✅ 一行命令完成从源码到运行的全流程 ✅ 自动处理依赖安装与环境检查 ✅ 内置数据库备份与版本回滚机制 ✅ 支持Docker与原生部署双模式
二、部署脚本核心架构解析
2.1 系统架构流程图
2.2 核心功能模块说明
| 模块名称 | 功能描述 | 关键技术点 |
|---|---|---|
| 环境检查模块 | 验证Node.js/Python/Docker等依赖 | 版本语义化比较、命令存在性检测 |
| 配置管理模块 | 生成环境变量与Nginx配置 | 模板引擎渲染、配置文件备份 |
| 数据库模块 | 自动迁移与备份 | SQLite3事务处理、定时备份策略 |
| 部署执行模块 | 多步骤任务调度 | 异步流程控制、错误捕获与重试 |
| 监控模块 | 部署后自监控配置 | HTTP健康检查、进程状态监控 |
三、自动化部署脚本实现(原生部署版)
3.1 部署脚本主体(deploy.sh)
#!/bin/bash
set -euo pipefail
# 配置参数
APP_DIR="/opt/uptime-kuma"
REPO_URL="https://gitcode.com/GitHub_Trending/up/uptime-kuma"
NODE_VERSION="16.17.0"
DB_BACKUP_DIR="${APP_DIR}/backups"
PM2_APP_NAME="uptime-kuma"
# 颜色输出函数
info() { echo -e "\033[34m[INFO]\033[0m $*"; }
success() { echo -e "\033[32m[SUCCESS]\033[0m $*"; }
error() { echo -e "\033[31m[ERROR]\033[0m $*" >&2; exit 1; }
# 1. 环境检查
check_environment() {
info "开始环境检查..."
# Node.js版本检查
if ! command -v node &> /dev/null; then
error "未检测到Node.js,请先安装v${NODE_VERSION}+"
fi
local node_ver=$(node -v | cut -d'v' -f2)
if [[ $(printf "%s\n%s" "$NODE_VERSION" "$node_ver" | sort -V | head -n1) != "$NODE_VERSION" ]]; then
error "Node.js版本过低,需要v${NODE_VERSION}+,当前为v${node_ver}"
fi
# 必要命令检查
for cmd in git npm pm2 sqlite3; do
if ! command -v $cmd &> /dev/null; then
error "未找到必要命令: $cmd"
fi
done
success "环境检查通过"
}
# 2. 代码拉取与更新
pull_code() {
info "处理代码仓库..."
if [ -d "$APP_DIR" ]; then
info "更新现有代码库..."
cd "$APP_DIR" && git pull origin master
else
info "克隆新代码库..."
git clone "$REPO_URL" "$APP_DIR"
fi
success "代码处理完成"
}
# 3. 数据库备份
backup_database() {
info "执行数据库备份..."
mkdir -p "$DB_BACKUP_DIR"
local backup_file="${DB_BACKUP_DIR}/kuma_$(date +%Y%m%d_%H%M%S).db"
cp "${APP_DIR}/db/kuma.db" "$backup_file"
# 保留最近10个备份
ls -tp "$DB_BACKUP_DIR"/*.db | grep -v '/$' | tail -n +11 | xargs -I {} rm -- {}
success "数据库备份完成: $backup_file"
}
# 4. 依赖安装与构建
install_dependencies() {
info "安装项目依赖..."
cd "$APP_DIR"
npm ci --production
npm run build
success "依赖安装与构建完成"
}
# 5. 服务部署与启动
deploy_service() {
info "部署服务..."
# 检查是否已存在PM2进程
if pm2 id "$PM2_APP_NAME" &> /dev/null; then
pm2 restart "$PM2_APP_NAME"
else
pm2 start server/server.js --name "$PM2_APP_NAME"
pm2 save
pm2 startup
fi
success "服务部署成功"
}
# 6. 健康检查
health_check() {
info "执行健康检查..."
local max_attempts=10
local attempt=1
while [ $attempt -le $max_attempts ]; do
if curl -s -o /dev/null "http://localhost:3001"; then
success "Uptime Kuma服务已成功启动"
return 0
fi
echo "等待服务启动中... (尝试 $attempt/$max_attempts)"
attempt=$((attempt + 1))
sleep 3
done
error "服务启动失败,请检查日志"
}
# 主流程执行
main() {
info "===== Uptime Kuma自动化部署开始 ====="
check_environment
pull_code
backup_database
install_dependencies
deploy_service
health_check
info "===== Uptime Kuma自动化部署完成 ====="
echo -e "\n访问地址: http://localhost:3001"
echo "管理命令: pm2 logs $PM2_APP_NAME"
}
main "$@"
3.2 使用方法详解
# 1. 保存脚本为deploy_kuma.sh
# 2. 添加执行权限
chmod +x deploy_kuma.sh
# 3. 执行部署(普通用户)
./deploy_kuma.sh
# 4. 如需指定端口(如3002)
PORT=3002 ./deploy_kuma.sh
四、Docker模式部署脚本实现
4.1 Docker部署架构图
4.2 Docker部署脚本(docker版)
#!/bin/bash
set -euo pipefail
# Docker模式专用部署脚本
APP_DIR="/opt/uptime-kuma"
DATA_DIR="/var/lib/uptime-kuma"
DOCKER_FILE="${APP_DIR}/compose.yaml"
# 环境检查
check_docker_environment() {
if ! command -v docker &> /dev/null || ! command -v docker-compose &> /dev/null; then
error "Docker或docker-compose未安装,请先安装Docker环境"
fi
success "Docker环境检查通过"
}
# 数据目录准备
prepare_data_volume() {
mkdir -p "$DATA_DIR"
chmod 777 "$DATA_DIR"
}
# Docker部署
docker_deploy() {
check_docker_environment
pull_code
prepare_data_volume
info "启动Docker容器..."
cd "$APP_DIR"
docker-compose up -d
info "等待服务初始化..."
sleep 10
# 检查容器状态
if [ "$(docker inspect -f '{{.State.Status}}' uptime-kuma)" = "running" ]; then
success "Docker部署成功"
echo -e "\n访问地址: http://$(hostname -I | awk '{print $1}'):3001"
echo "容器管理命令: docker-compose logs -f uptime-kuma"
else
error "Docker容器启动失败,请检查日志"
fi
}
# 主流程
if [ "$1" = "--docker" ]; then
docker_deploy
else
echo "使用Docker模式请添加参数: --docker"
exit 1
fi
五、高级特性:部署脚本增强功能
5.1 多环境部署配置示例
5.2 自定义配置文件(config.js)
// 部署脚本自动生成的配置文件示例
module.exports = {
// 服务器配置
server: {
port: process.env.PORT || 3001,
baseUrl: process.env.BASE_URL || "http://localhost:3001",
keepAliveTimeout: 60000
},
// 数据库配置
database: {
path: process.env.DB_PATH || "./db/kuma.db",
backup: {
enable: true,
interval: "1d",
retention: 10
}
},
// 安全配置
security: {
csrf: true,
rateLimit: {
windowMs: 15 * 60 * 1000,
max: 100
}
}
};
六、企业级扩展:CI/CD集成方案
6.1 GitHub Actions工作流配置
# .github/workflows/deploy.yml (脚本生成模板)
name: Uptime Kuma自动部署
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: 远程服务器部署
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /opt/deploy-scripts
./deploy_kuma.sh
pm2 logs uptime-kuma --lines 20
6.2 部署状态监控面板
部署脚本会自动创建监控项,您可以在Uptime Kuma中看到:
- 部署脚本执行状态(通过Webhook回调)
- 服务器资源监控(CPU/内存/磁盘)
- 数据库连接池状态
- 备份任务执行情况
七、问题排查与常见错误解决
7.1 部署错误速查表
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| npm install失败 | Node.js版本不兼容 | 安装指定版本Node.js: nvm install 16.17.0 |
| 数据库无法连接 | 文件权限问题 | chmod 775 ./db && chmod 664 ./db/kuma.db |
| 前端构建报错 | 内存不足 | export NODE_OPTIONS=--max_old_space_size=4096 |
| PM2启动失败 | 端口被占用 | lsof -i:3001 找到占用进程并终止 |
7.2 一键回滚操作
# 执行回滚(需在部署脚本目录下)
./deploy_kuma.sh --rollback 20231015_143022
# 参数为备份文件名前缀(不含.db扩展名)
八、总结与后续优化方向
本文提供的部署脚本已实现Uptime Kuma的全流程自动化部署,包括:
- 环境检查与依赖管理
- 代码拉取与版本控制
- 数据库备份与迁移
- 服务部署与状态监控
- 支持Docker与原生部署模式
后续可扩展方向:
- 集成Prometheus监控指标
- 实现蓝绿部署与金丝雀发布
- 添加自动化测试环节
- 多节点集群部署支持
现在就将这些脚本应用到您的Uptime Kuma部署中,享受自动化带来的效率提升吧!如有任何问题,欢迎在评论区留言讨论。
===== 部署脚本使用提示 =====
- 生产环境建议使用Docker模式,便于环境隔离
- 定期检查备份目录,确保数据安全
- 版本更新前执行手动备份:./deploy_kuma.sh --backup-only
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



