Rundeck(二)服务配置

目录

自动化运维工具rundeck

系统环境

服务配置Configuration | Rundeck Docs

框架参数 -framework.properties

运行环境与参数-profile

全局项目属性 project.properties

认证模块 - 管理用户

主配置文件 - rundeck-config.properties

访问控制 - aclpolicy

配置邮件

WEB界面定制

系统汉化-i18n

日志

日志配置工具-log4j2

问题汇总

问题1

问题2

问题3


自动化运维工具rundeck

GitHub - rundeck 是java开发的开源自动化服务,具有 Web 控制台、命令行工具和 WebAPI。它使您可以轻松地跨一组节点运行自动化任务,适合运维自动化管理、自动发布管理、运维数据分析等

系统环境

#环境要求:
    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

服务配置Configuration | Rundeck Docs

测试中涉及到的配置文件
主要配置也可以在web中 http://rundeck.example.com/menu/systemConfig 查看
System Properties Configuration 大部分参数也可以在启动命令中指定
调整之前请先备份配置文件
#/etc/rundeck/ 或者 $RDECK_BASE/etc/
├── admin.aclpolicy              # 访问控制策略。修改不需要重启
├── apitoken.aclpolicy           # 访问控制策略。修改不需要重启
├── framework.properties         # 核心服务策略
├── rundeck-config.properties    # webapp 配置文件、日志邮件数据库等
├── profile                      # 启动环境
├── project.properties           # 项目配置文件,每个项目都用有自己的项目配置文件  #project.etc.dir = /var/lib/rundeck/projects/${project.name}/etc
├── realm.properties             # 默认用户帐户和帐号权限,
框架参数 -framework.properties
页面查看: http://rundeck.example.com/menu/systemConfig
配置文件与相关脚本中配置项太多,建议不直接修改存储路径,数据目录、日志目录软链到数据盘即可
#一些重要的设置,大部分保持默认就好。

#服务端配置
framework.server.name = localhost              #Rundeck 服务器节点的名称(身份)
framework.server.hostname = localhost          #Rundeck 服务器节点的主机名
framework.server.port = 4440                   #Rundeck 服务器端口 
framework.server.url = http://localhost:4440   #Rundeck 服务器的 Base URL。

#管理员信息鱼权限 在realm.properties 中配置  --需调整
framework.server.username:zhangsan  #连接 Rundeck 服务器的用户名 --先配上看看哪里使用到了
framework.server.password:zhangsan  #连接 Rundeck 服务器的密码   --先配上看看哪里使用到了

rdeck.base=/var/lib/rundeck                         #Rundeck Basedir
framework.projects.dir=/var/lib/rundeck/projects    #包含 Rundeck 项目目录的目录路径。默认为$RDECK_BASE/projects.
framework.var.dir=/var/lib/rundeck/var              #服务器和 CLI 工具使用的输出和临时文件的基目录。默认为$RDECK_BASE/var.
framework.logs.dir=/var/lib/rundeck/logs            #核心服务和 Rundeck Server 作业执行写入的日志文件的目录。默认为$RDECK_BASE/var/logs

#SSH 连接设置
framework.ssh.keypath = /var/lib/rundeck/.ssh/id_rsa
framework.ssh.user = rundeck

#SSH超时--需调整
#framework.ssh.timeout = 0
framework.ssh-connection-timeout = 30000    #SSH 连接超时,0不超时,单位毫秒 #已弃用:framework.ssh.timeout
framework.ssh-command-timeout=300000        #SSH 命令的超时,0不超时,单位毫秒

#https://docs.rundeck.com/docs/manual/job-workflows.html#context-variables  If false, Context Variables is disabled.
#execution.script.tokenexpansion.enabled=true   #是否启用内联脚本令牌扩展 default true, If false, Context Variables is disabled.

#可作API的身份验证令牌。
rundeck.tokens.file=/etc/rundeck/tokens.properties
#username2: token_string1;token_string2, role2

#全局变量 --按需调整
framework.globals.role= server  # ${globals.role} 访问
运行环境与参数-profile
对有优先级来说:系统环境变量 < profile < 启动命令行参数,不过我们通过了 service 或者 systemd等服务管理之后 一般不会用过命令行直接启动。
测试保持默认即可
启动命令行参数 System Properties Configuration
#修改内存使用
RDECK_JVM_SETTINGS="${RDECK_JVM_SETTINGS:- -Xmx1024m -Xms256m -server}"


#使用指定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的方法
# If no JAVA_CMD, try to find it in $JAVA_HOME
if [ -z "$JAVA_CMD" ] && [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ] ; then
  JAVA_CMD=$JAVA_HOME/bin/java
  PATH=$PATH:$JAVA_HOME/bin
  export JAVA_HOME
elif [ -z "$JAVA_CMD" ] ; then
  JAVA_CMD=java
fi
全局项目属性 project.properties
保持默认即可
默认只是定义的每个项目文件路径。
每个项目都用有自己的项目配置文件,在项目创建是自动生成和修改的
位于
project.etc.dir = /var/lib/rundeck/projects/${project.name}/etc
project.resources.file = /var/lib/rundeck/projects/${project.name}/etc/resources.xml

Property

Description

project.name

Declare the project name.

project.ssh-authentication

SSH authentication type (eg, privateKey).

project.ssh-keypath

Load SSH identify file. (Note: this is not a keystorage path but a local file system path.)

service.FileCopier.default.provider

Default script file copier plugin.

service.NodeExecutor.default.provider

Default node executor plugin.

resources.source.N...

Defines a Resource model source see Resource Model Sourcesopen in new window.

project.globals.X

Defines a Project Global variable

认证模块 - 管理用户
jaas-loginmodule.conf --加载---> realm.properties
realm.properties 定义了用户/密码、权限以及acl策略
有一定的语法格式,有一定的难度,而且编辑生效不太灵活,虽然realm.properties 是自动加载的不需要重启服务
配置文档: Authenticating Users
#修改admin默认密码,密码可以不明文支持md5等加密方式
admin:XXXXXXXXXXXXXX,user,admin,architect,deploy,build

job-runner  --> 配置文件模版 system-job_runner.aclpolicy_template
job-writer  --> 配置文件模版 system-job_writer.aclpolicy_template
job-reader  --> 配置文件模版 system-job_reader.aclpolicy_template
job-viewer  --> 配置文件模版 system-job_viewerr.aclpolicy_template
主配置文件 - rundeck-config.properties
包含了安全、GUI、数据、日志等基本参数,企业版支持实时刷新(小部分属性)
#(企业)
#rundeck.security.dblogin.enabled: true|false

安全参数
#rundeck.security.jaasRolePrefix:添加到通过JAAS 身份验证确定的每个角色的前缀字符串。默认值:无。
#rundeck.security.requiredRole: roleName。如果设置此属性,则所有用户都必须是指定角色的成员。
#rundeck.login.localLogin.enabled:  false为禁止本地用户登录
#注销行为
#rundeck.logout.expire.cookies: 逗号分隔的 cookie 名称列表,注销时过期
#rundeck.logout.redirect.url:注销后重定向到此网址。这可以是完全限定的 url 或相对路径。
#多网址设置  --感觉用不上
#主节点ID  只有集群模式(企业)才用的上
#rundeck.primaryServerId=

#session 超时 单位秒
server.servlet.session.timeout=360000
#或者在【运行环境与参数】中添加指定 如:java -server -Dserver.servlet.session.timeout=3600

#登录限制
rundeck.security.enforceMaxSessions=true
rundeck.security.maxSessions=10

#隐藏debug
rundeck.feature.debug.showTracesOnResponse=false
rundeck.gui.errorpage.hidestacktrace=false

#api令牌
#超时 默认:true
rundeck.security.useHMacRequestTokens=true
#禁止cookie进行身份 请求api  默认:true
rundeck.security.apiCookieAccess.enabled=true    #见问题1
rundeck.api.tokens.duration.max=30d

#跨域&https  -# 问题2
rundeck.security.csrf.referer.filterMethod=NONE
rundeck.security.csrf.referer.allowApi=false 
rundeck.security.csrf.referer.requireHttps=false

#HTTP 请求头  -#限制其他方式方式只允许grails.serverURL配置的值的访问请求
rundeck.security.httpFirewall.enabled=true
#反向代理或负载均衡器 可能要填入主机地址
#rundeck.security.httpFirewall.allowedHostnames=127.0.0.1

#执行模式 active/passive。默认active  测试还是active方便
#active模式:可以运行作业、计划作业和临时执行。
#passive模式:无法运行作业或临时执行。
rundeck.executionMode=active

#执行完成状态重试设置
# attempt to retry the final state update
rundeck.execution.finalize.retryMax=10
rundeck.execution.finalize.retryDelay=5000

# attempt to retry updating job statistics after execution finishes
rundeck.execution.stats.retryMax=3
rundeck.execution.stats.retryDelay=5000

#执行日志设置  -优先“停止”而不是“截断  -- 先不考虑
#rundeck.execution.logs.output.limit = 5MB
#rundeck.execution.logs.output.limitAction = truncate

# Metrics捕获
rundeck.metrics.enabled=true
rundeck.metrics.requestFilterEnabled=true
rundeck.metrics.jmxEnabled=true
rundeck.metrics.api.enabled=true
# rundeck.metrics.api.[name].enabled=true  禁用或者弃用某个点

#api 分页
rundeck.pagination.default.max=20

#remoteUrl请求超时(秒)
rundeck.jobs.options.remoteUrlTimeout=10
rundeck.jobs.options.remoteUrlConnectionTimeout=30
rundeck.jobs.options.remoteUrlRetry=3

文件选项上传
#如果配置了nginx nginx也需要配置  JVM 内存也要配置
rundeck.fileUploadService.tempfile.maxsize=200M
grails.controllers.upload.maxFileSize=200M
grails.controllers.upload.maxRequestSize=200M
# 临时文件过期时间毫秒
rundeck.fileUploadService.tempfile.expiration=86400

rundeck.job.export.yaml.trimSpaces=true

#监控状态url
rundeck.feature.healthEndpoint.enabled=true
# http://rundeck.example.com/health
访问控制 - aclpolicy
默认的admin管理策略
admin.aclpolicy
apitoken.aclpolicy

调整需要编写aclpolicy 文件或者在web上编辑,有一定的语法格式,有一定的难度,企业版才具有良好的GUI页面操作:
放在【安全配置】文档中统一测试说明,先保持默认:
相关的文档如下:

访问控制策略: Access Control Policy
ACL 策略 GUI: ACL Policy GUI
ACL策略格式: ACLPOLICY
配置邮件
Email Settings
支持自定义模版,对项目和作业组合自定义,支持附加日志输出文件
RPM: /etc/rundeck/rundeck-config.properties
另外: 插件开发人员指南 - 通知插件 可以自定义通知插件,但需要使用 java或者 .groovy编写,不支持shell脚本
grails.mail.host=10.3.247.120
grails.mail.port=25
grails.mail.username=rundeck
grails.mail.password=rundeck
grails.mail.default.from=deployer@domain.com
WEB界面定制
RPM: /etc/rundeck/rundeck-config.properties
ps:这么配置后登录页面会很丑,这里是功能测试,为了美观需要再次调整调整
具体可以参考: How to customize the Rundeck GUI

#logo
#不需要重新启动。
rundeck.gui.logo=favicon.ico
#/var/lib/rundeck/user-assets/favicon.ico 需要重新启动
rundeck.gui.staticUserResources.enabled=TRUE

#标题
rundeck.gui.title=RundeckAPP
rundeck.gui.titleLink=https://www.baidu.com/

#帮助文档,公司内部使用会比较方便
rundeck.gui.helpLinkName=pwsdocs
rundeck.gui.helpLink=https://365.wps.cn/home

#登录页定制
rundeck.gui.login.disclaimer=disclaimer
rundeck.gui.login.welcome=welcome Rundeck
rundeck.gui.login.welcomeHtml=welcomeHtmlcode
rundeck.gui.login.footerMessageHtml=footerMessageHtmlcode

# 登录 -用户摘要
rundeck.gui.userSummaryShowLoginStatus=true
rundeck.gui.userSummaryShowLoggedUsersDefault=true

除了定制图标和界面风格外还有比较实用的分页等配置

#分页 - 没生效
rundeck.gui.paginatejobs.enabled=true
rundeck.gui.paginatejobs.max.per.page=100

#作业编辑页面显示的最大节点数
rundeck.gui.matchedNodesMaxCount=100

# 禁止公钥 查看和下载
rundeck.gui.keystorage.downloadenabled=false
系统汉化-i18n
官方已经提供了一个最基本的本地化文件 messages_zh_cn.properties,并不全,可以在此基础上在做修改,需要重启

#默认的本地化文件,可以覆盖默认的,也可以单独使用,通过请求后添加 ?lang=zh_cn 来指定
RPM: /var/lib/rundeck/i18n/messages.properties
WAR: $RDECK_BASE/i18n/messages.properties
--
登录默认使用汉化界面 --问题3
# RPM
sudo -u rundeck  mkdir /var/lib/rundeck/i18n/
cd /var/lib/rundeck/i18n/

#https://github.com/rundeck/rundeck/tree/main/rundeckapp/grails-app/i18n 
将其中的messages.properties、messages_zh_CN.properties 下载至文件中 #注意文件大小写

# 覆盖默认的-- 可选
mv  messages_zh_CN.properties messages.properties
chown rundeck.rundeck /var/lib/rundeck/i18n/ -R

不覆盖的话可以是用 http://rundeck.example.com/?lang=zh_CN
或者在web后台 http://rundeck.example.com/user/profile 选择


#重启
systemctl restart rundeckd 

#修改文件配置 ---- 可选
jobslist.date.format=yyyy-MM-dd HH:mm
jobslist.date.format.ko=YYYY-MM-DD HH:mm
jobslist.running.format=HH:mm
jobslist.running.format.ko=HH:mm
日志
日志分两块 一部分是程序日志在:
RPM: /var/log/rundeck
WAR: $RDECK_BASE/server/logs
另一部分是 核心服务和 Rundeck Server 的 Job 执行写入的日志文件的目录 在 framework.logs.dir=/var/lib/rundeck/logs 中定义
# /var/log/rundeck
├── command.log                 #Shell 工具将它们的活动记录到 command.log
├── rundeck.audit.log           #与 aclpolicy 相关的授权消息
├── rundeck.audit.events.log    #记录所有审核事件。请参阅审核跟踪日志。
├── rundeck.jobs.log            #所有作业定义更改的日志
├── rundeck.options.log         #记录远程HTTP请求JSON数据
├── rundeck.log                 #一般 Rundeck 应用程序消息
├── service.log                 #运行时标准输入和输出,

service.log 使用logrotate来切分,其他日志默认以切分
日志配置工具-log4j2
Log4j (log4j2.properties) 是一个用于 Java 平台的流行日志记录框架,更细化的配置日志级别、输出、格式、轮询等,
保持默认即可。
(log4j2.properties)配置文件的优先级应该低于其他配置文件。
#全局日志级别配置
[root@tserver121 rundeck]# cat rundeck-config.properties
#loglevel.default is the default log level for jobs: ERROR,WARN,INFO,VERBOSE,DEBUG
loglevel.default=INFO

#全局日志目录
[root@tserver121 rundeck]# cat rundeck-config.properties
framework.logs.dir=/var/lib/rundeck/logs

问题汇总

问题1

不显示projects了

通过浏览器- > 开发者工具 看到 实际上是请求的/api/[id]/projects 接口
#禁止cookie进行身份 请求api 默认:true
rundeck.security.apiCookieAccess.enabled=true #改为true

问题2

==> service.log <==

[2024-04-22T11:19:33,004] ERROR interceptors.RefererInterceptor - GET: reject referer: null for /user/login [REFID:98861e71-6775-4b4b-95ec-4d4dc497be4f]

允许referer
#跨域&https
rundeck.security.csrf.referer.filterMethod=NONE
rundeck.security.csrf.referer.allowApi=false
rundeck.security.csrf.referer.requireHttps=false

问题3

登录默认使用messages_zh_CN.properties汉化界面

可能与请求内容有关系

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值