Troop是由Golang编写的运维自动化底层基础设施,一套完整的服务器集中化管理系统。
- 服务端:General
- 客户端(Agent):Scout
- 文件服务器:FileManager
- 命令行工具:Client
yum install -y mysql-server
docker pull rabbitmq:management
docker run -d --hostname my-rabbit --restart=always -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 --name rabbitmq rabbitmq:3.7.7-management
wget https://github.com/kurolz/troop-service/raw/master/troop_file_linux_1.0.0_amd64.tar.gz
tar -zxvf troop_file_linux_1.0.0_amd64.tar.gz
cd troop_file_linux_1.0.0_amd64
./install.sh
# 修改配置文件
/usr/local/troop-scout/conf/config.ini
# 重启服务
service troop-scoutd restart
保证服务器必须拥有General配置文件中的plugin-git地址的clone和pull权限,如未填写git地址或无权限拉取,所有Scout的自更新和插件功能将无法使用
wget https://github.com/kurolz/troop-service/raw/master/troop_general_linux_1.0.2_amd64.tar.gz
tar -zxvf troop_general_linux_1.0.2_amd64.tar.gz
cd troop_general_linux_1.0.2_amd64
./install.sh
# 修改配置文件
/usr/local/troop-general/conf/config.ini
# 重启服务
service troop-generald restart
wget https://github.com/kurolz/troop-service/raw/master/troop_client_linux_1.0.1_amd64.tar.gz
tar -zxvf troop_client_linux_1.0.1_amd64.tar.gz
cd troop_client_linux_1.0.1_amd64
./install.sh
# 修改配置文件
/usr/local/troop-client/conf/config.ini
wget https://github.com/kurolz/troop-service/raw/master/troop_scout_linux_1.0.2_amd64.tar.gz
tar -zxvf troop_scout_linux_1.0.2_amd64.tar.gz
cd troop_scout_linux_1.0.2_amd64
./install.sh
# 修改配置文件
/usr/local/troop-scout/conf/config.ini
# 重启服务
service troop-scoutd restart
点击链接下载
https://github.com/kurolz/troop-service/raw/master/troop-scout.msi
双击安装,最好直接安装到C:\
修改配置文件
# 配置文件
安装目录\troop-scout\config.ini
重启服务
net stop troop-scout
net start troop-scout
[debug]
enabled = true # debug输出信息,当设置为false时,会将输出信息打印到log文件
[mysql]
host = 127.0.0.1 # MySQL连接Host
port = 3306 # MySQL连接端口
user = root # MySQL连接用户名
password = # MySQL连接密码
db = general # 使用的数据库
charset = utf8 # 字符集
max_idle_connection = 10 # MySQL连接池允许的最大闲置的连接数
max_open_connection = 100 # MySQL连接池允许的最大打开的连接数
[rpc]
listen = 6954 # 监听的RPC端口
[rabbit_mq]
user = guest # RabbitMQ连接用户名
password = guest # RabbitMQ连接密码
host = 127.0.0.1 # RabbitMQ连接Host
port = 5672 # RabbitMQ连接端口
vhost = / # RabbitMQ使用的vhost
max_connection_num = 3 # RabbitMQ连接池允许的最大连接数
max_channel_num = 5 # RabbitMQ连接池允许的最大channel数
[http]
listen = 6858 # 监听的HTTP端口
token = default-token # HTTP请求验证token
[file]
address = http://127.0.0.1:6859 # 文件服务器的连接信息,应使用所有Scout都能访问的地址
[log]
logfile = "general.log" # 输出日志文件名
[scout]
auto_accept = false # 是否自动接受Scout握手、交换密钥
[plugin]
git = ssh://git@gitlab.com/troop/plugins/plugin.git
# 插件的git地址,保证服务器必须拥有此git地址的clone和pull权限,
# 如不填写或无权限拉取,所有Scout的自更新和插件功能将无法使用
[ignore_command]
file = .ignore_command # 要过滤的危险命令文件,将要过滤的命令写在此文件里,每行一条命令
[debug]
enabled = true # debug输出信息,当设置为false时,会将输出信息打印到log文件
[host]
hostname = # 服务端识别本机器的唯一值,如未配置,默认通过`hostname`命令获取
ip = # 服务端会保存每台机器的IP,如未配置,默认自动探测本机IP
tag = # 给机器打上标签,服务端可通过标签识别机器,支持多个标签,通过英文逗号`,`分隔
[general]
addresses = 127.0.0.1:6954 # 服务端的地址,格式: Ip:Port
timeout = 5000 # 连接服务端的超时时间, 格式: 秒*1000,如5秒,则填5000
[log]
logfile = scout.log # 输出日志文件名
[rabbit_mq]
user = guest # RabbitMQ连接用户名
password = guest # RabbitMQ连接密码
host = 127.0.0.1 # RabbitMQ连接Host
port = 5672 # RabbitMQ连接端口
vhost = / # RabbitMQ使用的vhost
[plugin]
dir = plugins # 存放插件的目录
plugins = # 需要安装的插件,多个插件用英文逗号`,`分隔,可指定版本,如: pluginName:v1.3.4
[ignore_command]
file = # 要过滤的危险命令文件,将要过滤的命令写在此文件里,每行一条命令
[general]
addresses = 127.0.0.1:6954 # 服务端的地址,格式: Ip:Port
token = default-token # 访问服务端使用的token
[debug]
enabled = true
[http]
listen = 6859
token = default-token # 和服务端交互使用的token
[log]
logfile = "file.log"
troop --help
troop scout -l # 查看scout列表
troop scout -a # 接受scout握手
troop scout -r # 拒绝scout握手
troop scout -d # 删除scout
###################################
# 通用参数说明
-d, --detach 指定任务在后台运行,默认false
--device string 指定执行任务的机器设备类型,默认:server
-o, --os string 指定执行任务的机器操作系统类型, 如:linux 或 windows
-t, --tag string 通过执行任务的机器标签
###################################
# 获取后台运行的任务结果
troop result <task_id>
# 测试连通性
troop ping.pong '*'
# 执行Linux命令:
troop command '*' ifconfig -o linux
troop command '*' "/bin/bash -c ifconfig" -o linux
# 执行Windows命令:
troop command '*' ipconfig -o windows
troop command '*' "cmd /c ipconfig" -o windows
# 分发文件:
troop file.send '*' /opt/test.txt /tmp/
# 插件:
troop plugin.update '*' # 指定目标机器更新插件
troop plugin.version '*' # 获取目标机器的安装的插件版本列表
troop plugin '*' <plugin_name> deploy # 让目标插件执行`部署服务`任务
troop plugin '*' <plugin_name> start # 让目标插件执行`启动服务`任务
troop plugin '*' <plugin_name> stop # 让目标插件执行`停止服务`任务
troop plugin '*' <plugin_name> restart # 让目标插件执行`重启服务`任务
troop plugin '*' <plugin_name> status # 获取目标插件管理的`服务状态`
# 更新scout
troop scout.update '*' http://example.com/scout.tar.gz
- 增加插件拉取接口。
- 增加可指定Scout安装新插件功能。
- 优化指定不存在的插件更新不报错的问题。
- 增加新插件分发到Scout自动修改配置文件。
- 数据库Scout表增加plugins字段存储Scout安装的插件。
- 修复插件指定版本更新失败问题。
- 优化Troop-Scout解密数据失败导致进程异常退出的问题。
- 优化Scout Rpc请求并发问题。
- 增加可同时指定多个hostname执行任务
- 优化general mysql断线重连机制。
- 增加执行命令接口的
环境变量
和执行目录
参数。 - 增加过滤危险命令功能。
- 修复插件配置文件推送不执行的问题。
- 优化Scout当RabbitMQ连接中断,队列未自动删除,导致RESOURCE_LOCKED的问题。
- 增加通过命令行工具获取主机列表时同时显示主机名、Scout版本、IP、安装的插件
- 修复并发导致rabbitmq阻塞问题。
- 修复因网络波动重连失败MQ的问题。