目录
自动化运维工具rundeck
GitHub - rundeck 是java开发的开源自动化服务,具有 Web 控制台、命令行工具和 WebAPI。它使您可以轻松地跨一组节点运行自动化任务,适合运维自动化管理、自动发布管理、运维数据分析等
- 网站:https://www.rundeck.com
- 最新文档:Rundeck | Process Automation Documentation
- 新手引导:Rundeck | tutorial
- 最佳实践:Rudeck | howto
它能做什么
- 分布式命令执行
- 工作流程(包括参数传递、条件、错误处理和多种工作流程策略)
- 可插拔执行系统(默认为 SSH 和 WinRM;可使用 PowerShell)
- 可插拔资源模型(从外部系统获取基础设施的详细信息)
- 按需(Web GUI、API 或 CLI)或计划的作业执行
- 支持密码和密钥
- 基于角色的访问控制策略,支持 LDAP/ActiveDirectory/SSO
- 可编辑/管理访问控制策略
- 历史和审计日志
- 使用任何脚本语言
社区版本基本够用,社区vs企业 | Rundeck
功能文档: 使用文档
系统环境
#环境要求:
https://docs.rundeck.com/docs/administration/install/system-requirements.html
测试环境:
openjdk version "11.0.22"
CentOS Linux release 7.4.1708 (Core)
rundeck-5.2.0.20240410-1
Database:mysql Server 5.7.36 #MySQL5.6已经禁用了,MySQL5.7 需要utf8mb4字符集,推荐MySQL8.0
Logstore:syslog
下载与安装
下载地址
pagerduty/rundeck - Packages · packagecloud
Rundeck Community Version History
注意:Rundeck 5.0.x 需要在 Java 11 上运行
error: Failed dependencies:
有其他版本的java正在使用 -见 问题1
ubuntu debian windows tomcat docker 安装请查看官网
#https://docs.rundeck.com/docs/administration/install/
# 【java】 如果没有安装,可以使用官方推荐的java和rundeck
curl https://raw.githubusercontent.com/rundeck/packaging/main/scripts/rpm-setup.sh 2> /dev/null | sudo bash -s rundeckpro
sudo yum install java rundeckpro-enterprise #pro
# RPM 方式安装
yum localinstall rundeck-5.2.0.20240410-1.noarchm
rpm -ql rundeck # 查看安装路径主要目录
/etc/rundeck/ # 主要配置文件
/var/lib/rundeck # lib库、日志、work目录等
# war 包方式安装
mkdir -p /opt/app/rundeck
cd /opt/app/rundeck/
wget https://packages.rundeck.com/pagerduty/rundeck/packages/java/org.rundeck/rundeck-4.17.6-20240402.war?distro_version_id=167
java -Xms4g -Xmx4g -Xmn1024m -jar rundeck-5.2.0.20240410-1.war # 启动
#第一次启动需要等待一小会(383.544 s),担心卡死的可以使用 strace 命令查看一下,最后看到就是成功
Grails application running at http://localhost:4440 in environment: production
# 后面都是用 rpm 安装为例
主要的目录(RPM)
/etc/rundeck/ # 主要配置文件
├── profile
├── project.properties
└── rundeck-config.properties
/var/lib/rundeck/ #也是用户家目录
├── bootstrap # war程序目录
├── data # H2数据库目录 --改为mysql
├── i18n # 本地化目录
├── libext # lib目录
├── projects # 项目配置
├── repository # 插件存储库
├── var # Cache目录
└── work
/var/log/rundeck #日志目录
配置与启动(单节点)
首先看看框架的默认配置文件framework.properties
,可以看到大致的web信息和重要目录配置,修改之前先备份rundeck-config.properties
配置mysql
Database Configuration Overview
支持mysql、 postgresql、 sql server 、 oracle
配置文件:
RPM:/etc/rundeck/rundeck-config.properties
WAR:$RDECK_BASE/server/config/rundeck-config.properties
注意:mysql需要授权 REFERENCES 权限 - 见 问题2
#注释
#dataSource.url = jdbc:h2:file:/var/lib/rundeck/data/rundeckdb;DB_CLOSE_ON_EXIT=FALSE;NON_KEYWORDS=MONTH,HOUR,MINUTE,YEAR,SECONDS
# 添加如下配置:
dataSource.driverClassName = org.mariadb.jdbc.Driver
dataSource.url = jdbc:mysql://myserver/rundeck?autoReconnect=true&useSSL=false
#autoReconnect=true 连接保活 修复 Rundeck 服务器与 Mysql 的连接在一段时间内不活动后被中断,从而导致错误消息:“消息:无法从服务器读取响应"
dataSource.username = rundeckuser
dataSource.password = rundeckpassword
#使用带有特殊字符的密码时,等号后面不要有空格
mysql初始化
mysql> create database rundeck;
mysql> create user 'rundeckuser'@'localhost' identified by 'rundeckpassword';
mysql> grant ALL on rundeck.* to 'rundeckuser'@'localhost';
mysql> GRANT REFERENCES ON *.* TO 'rundeckuser'@'localhost';
配置URL
web访问登录后的跳转地址
配置文件:
RPM:/etc/rundeck/rundeck-config.properties
WAR:$RDECK_BASE/server/config/rundeck-config.properties
我前端是nginx代理了 所以就改成 rundeck.example.com;
登录后一直转圈圈 - 问题3
# change hostname here
grails.serverURL=http://rundeck.example.com #不能有空格
# rundeck.multiURL.enabled=true 多域名配置
# 设url前缀, 默认是'/',此配置可以很好的集成到其他系统中,共用同一个域名。
# grails.serverURL=http://rundeck.example.com/rundeck
# server.servlet.context-path=/rundeck #不能有空格
启动rundeck
指定java版本
若环境中有其他版本的java 正在使用,后续启动时需要指定java版本
#/etc/passwd
# rundeck:x:1007:1007::/var/lib/rundeck:/bin/bash
#指定加载java版本
runuser -u rundeck vim /var/lib/rundeck/.bash_profile
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.22.0.7-1.el7_9.x86_64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
启动与开机启动
#第一次启动需要初始化,需要等待一小会,最后看到就是成功 Grails application running at
http://localhost:4440
in environment: production
# 默认启动端口
> 4440 (http)
> 4443 (https)
> 5985(Windows http )
> 5986(Windows https )
# 命令支持功能
rundeckd [start|stop|restart|condrestart|status]
# RPM 安装方式启动
# 脚本位置:/etc/init.d/rundeckd
# 添加开机启动
chkconfig rundeckd on
#启动
service rundeckd start
systemctl status rundeckd
# war 包方式
启动:
export RDECK_BASE='/opt/app/rundeck/'
$RDECK_BASE/server/sbin/rundeckd start
# war默认监听的 127.0.0.1
简单的配置一个nginx 代理
当然也可以不用nginx代理,用 http://ip:4440 直接访问
upstream rundeck_upstream {
server 127.0.0.1:4440;
}
server{
listen 80;
server_name rundeck.example.com;
access_log /data/logs/nginx/rundeck.example.com.access.log json;
error_log /data/logs/nginx/rundeck.example.com.error.log;
location / {
real_ip_header X-Forwarded-For;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://rundeck_upstream;
}
}
登录
默认用户名: admin 默认用户密码: admin
升级
升级之前做好数据和代码的备份。 不同的版本升级方式不一致,请查看升级说明 General Upgrade Guide,支持H2数据库升级,从 4.1+ 升级到 5.0,需要更新数据库结构
通用 RPM/YUM方式
在 RPM 或 Yum 升级的情况下,任何更改的配置文件都不会被修改,并且新文件将以扩展名保存.rpmnew
。如果您更改了配置文件,请将其与该.rpmnew
文件进行比较,以了解可能需要包含哪些更改。
#rpm
rpm -Uvh rundeck-5.2.0.20240410-1.noarch
warning: /etc/rundeck/framework.properties created as /etc/rundeck/framework.properties.rpmnew
warning: /etc/rundeck/rundeck-config.properties created as /etc/rundeck/rundeck-config.properties.rpmnew
rundeck.server.uuid = XXXXXXXXXXXXXXX
#yum
yum upgrade rundeck
通用war 包方式
https://docs.rundeck.com/docs/upgrading/upgrading.html#runnable-war
问题汇总
问题1
error: Failed dependencies:
java-11-headless is needed by rundeck-0:5.2.0.20240410-1.noarch
安装
yum install java-11-headless
版本切换 - 永久:
update-alternatives --display java
update-alternatives --config java
版本切换 - 临时:
若环境中有其他版本的java 正在使用,后续启动时需要指定java版本
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.22.0.7-1.el7_9.x86_64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
# java -version
openjdk version "11.0.22" 2024-01-16 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.22.0.7-1.el7_9) (build 11.0.22+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.22.0.7-1.el7_9) (build 11.0.22+7-LTS, mixed mode, sharing)
问题2
liquibase.exception.DatabaseException: (conn=9387) REFERENCES command denied to user
REFERENCES-command-denied-to-user错误详解 - 云数据库RDS | 百度智能云文档
在5.5和5.6版本中只需要增删查改权限即可,而5.7正式启用REFERENCES权限,需要显示的授予REFERENCES权限才能创建外键关系到表。
解决方案
对MySQL5.7版本的数据库账户,显示的授予REFERENCES权限,解决导入含外键关系表的过程中导致的报错。
GRANT REFERENCES ON *.* TO 'rundeckuser'@'localhost';
问题3
登录一直转圈,提示:Request URL: http://****:4440/ 不通
rundeck-config.properties 配置错误,需要改成你实际访问的地址
grails.serverURL= http://rundeck.example.com