搬瓦工 VPS 搭建 Rundeck 作业调度系统教程

Rundeck 是一款开源的作业调度和运维自动化平台,提供 Web 界面来定义、调度和执行跨节点的运维任务。与简单的 crontab 相比,Rundeck 提供了可视化管理、执行历史、权限控制和 Webhook 触发等企业级功能。本教程将介绍如何在搬瓦工 VPS 上使用 Docker 部署 Rundeck 作业调度系统。部署前请确保已安装好 Docker 和 Docker Compose

一、Rundeck 核心功能

  • 作业定义:通过 Web 界面或 YAML 定义多步骤作业,支持命令、脚本和插件步骤。
  • 节点管理:集中管理多台服务器节点,支持 SSH 和 WinRM 连接协议。
  • 调度引擎:内置 Cron 调度器,支持复杂的定时执行策略。
  • ACL 权限控制:基于策略的细粒度权限管理,支持多用户多角色。
  • Webhook 触发:通过 HTTP API 或 Webhook 远程触发作业执行。
  • 执行历史与审计:完整记录每次执行的输入输出、耗时和结果状态。

二、Docker Compose 部署

mkdir -p /opt/rundeck && cd /opt/rundeck

cat > docker-compose.yml <<'EOF'
version: '3.8'

services:
  rundeck:
    image: rundeck/rundeck:5.1.0
    container_name: rundeck
    restart: always
    environment:
      RUNDECK_GRAILS_URL: https://ops.example.com
      RUNDECK_DATABASE_DRIVER: org.postgresql.Driver
      RUNDECK_DATABASE_URL: jdbc:postgresql://postgres/rundeck
      RUNDECK_DATABASE_USERNAME: rundeck
      RUNDECK_DATABASE_PASSWORD: rundeck_db_2026
    volumes:
      - rundeck_data:/home/rundeck/server/data
      - rundeck_logs:/home/rundeck/var/logs
      - /root/.ssh:/home/rundeck/.ssh:ro
    ports:
      - "127.0.0.1:4440:4440"
    depends_on:
      - postgres

  postgres:
    image: postgres:15-alpine
    container_name: rundeck-db
    restart: always
    environment:
      POSTGRES_DB: rundeck
      POSTGRES_USER: rundeck
      POSTGRES_PASSWORD: rundeck_db_2026
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  rundeck_data:
  rundeck_logs:
  pgdata:
EOF

docker compose up -d

三、初始配置

# 通过 SSH 隧道访问
ssh -L 4440:127.0.0.1:4440 root@your-server-ip

# 默认登录: admin / admin(首次登录后务必修改密码)

四、添加远程节点

cat > /opt/rundeck/nodes.yaml <<'EOF'
web-server-1:
  hostname: 192.168.1.10
  username: root
  ssh-key-storage-path: keys/deploy-key
  tags: web,production
  osFamily: unix

db-server:
  hostname: 192.168.1.20
  username: root
  ssh-key-storage-path: keys/deploy-key
  tags: database,production
  osFamily: unix
EOF

在 Web 界面的项目设置中导入节点资源文件,或配置为 File 类型的节点源指向此 YAML 文件。

五、定义作业

# 通过 YAML 导入作业定义
cat > /opt/rundeck/deploy-job.yaml <<'EOF'
- description: 部署 Web 应用到生产服务器
  executionEnabled: true
  name: Deploy Web App
  nodeFilterEditable: true
  nodefilters:
    filter: tags:web
  schedule:
    month: '*'
    dayofmonth: '*'
    hour: '2'
    minute: '0'
  sequence:
    commands:
      - description: 拉取最新代码
        exec: cd /opt/app && git pull origin main
      - description: 安装依赖
        exec: cd /opt/app && npm install --production
      - description: 重启服务
        exec: systemctl restart app
      - description: 健康检查
        exec: curl -sf http://localhost:3000/health || exit 1
    keepgoing: false
    strategy: node-first
EOF

六、API 和 Webhook 触发

# 获取 API Token(在 Web 界面 > 用户设置 > API Tokens 生成)

# 通过 API 触发作业
curl -X POST "http://localhost:4440/api/41/job/JOB_UUID/run" \
  -H "X-Rundeck-Auth-Token: your_api_token_2026" \
  -H "Content-Type: application/json" \
  -d '{"options": {"env": "production"}}'

# 查看执行状态
curl -s "http://localhost:4440/api/41/execution/EXEC_ID" \
  -H "X-Rundeck-Auth-Token: your_api_token_2026" | python3 -m json.tool

# 查看执行日志
curl -s "http://localhost:4440/api/41/execution/EXEC_ID/output" \
  -H "X-Rundeck-Auth-Token: your_api_token_2026" \
  -H "Accept: text/plain"

七、Nginx 反向代理

cat > /etc/nginx/conf.d/rundeck.conf <<'EOF'
server {
    listen 443 ssl http2;
    server_name ops.example.com;

    ssl_certificate /etc/letsencrypt/live/ops.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ops.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:4440;
        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

nginx -t && systemctl reload nginx

八、ACL 权限管理

# 创建限制用户只能运行特定作业的 ACL 策略
cat > /opt/rundeck/deploy-acl.yaml <<'EOF'
description: Deploy team permissions
context:
  project: MyProject
for:
  job:
    - match:
        name: 'Deploy.*'
      allow: [run, read]
  node:
    - allow: [read, run]
by:
  group: deployers
EOF

九、常见问题

节点 SSH 连接失败

确保密钥已上传到 Rundeck Key Storage,且目标节点允许密钥认证登录。在容器内测试:

docker exec -it rundeck ssh -i /home/rundeck/.ssh/id_ed25519 root@target-host

作业超时

在作业定义的高级设置中配置 timeout 参数,或在全局配置中调整默认超时时间。

总结

Rundeck 是功能丰富的作业调度平台,适合跨节点运维自动化和合规审计需求。如果主要使用 Ansible,Semaphore 是更专注的选择;需要 CI/CD,推荐 Woodpecker CI。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,购买链接:bwh81.net

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。