从0到1 搭建xxl-job 环境
背景
时间:2024年4月9日 下午7:09:23
最近收到一个需求需要搭建一下xxl-job环境,如果能docker一键自动化解决就ok了,但需要从头安装,记录一下从源码安装的过程,后续需要研究漏洞时再重新安装一遍,先记录一下给后人留下一点参考。
注意:官方文档中有的部分在此略过,请主要参考官方文档,遇到问题可以来本文章搜索答案。
耗时:2h + 0.5h
参考:https://www.xuxueli.com/xxl-job/
其他信息参考本地配置文件
环境安装
1、安装java环境 & maven环境
oracle官网下载jdk后,设置环境变量
export JAVA_HOME=/home/ec2-user/jdk1.8.0_321/
PATH=$PATH:$JAVA_HOME/bin
export MAVEN_HOME=/home/ec2-user/apache-maven-3.9.6/
PATH=$PATH:/home/ec2-user/apache-maven-3.9.6/bin
2、安装mysql 5.7环境
参考:https://cloud.tencent.com/developer/article/1886339
wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum -y install mysql-community-server
systemctl start mysqld.service
systemctl status mysqld.service
导入xxl-job的sql运行,并修改mysql的密码。
3、编译xxl-job-admin和xxl-job-core
xxl-job-admin依赖了xxl-job-core的环境,从头开始安装xxl-job-core,maven install后由于 xxl-job(父工程)在maven仓库中不存在,需要手动创建文件夹,并复制pom过去。
参考:https://blog.csdn.net/zlc521520/article/details/103425798
mvn clean package -Dmaven.test.skip=true
mvn clean install -Dmaven.test.skip=true
# xxl-job路径
cp pom.xml /home/ec2-user/.m2/repository/com/xuxueli/xxl-job/2.4.1-SNAPSHOT/xxl-job-2.4.1-SNAPSHOT.pom
# 启动xxl-job-admin
sudo /home/ec2-user//jdk1.8.0_321/bin/java -jar ./target/xxl-job-admin-2.4.1-SNAPSHOT.jar
注意点:
1、xxl-job-admin的配置文件 (xxl-job/xxl-job-admin/src/main/resources/application.properties
) 必须修改:spring.datasource.password 和 xxl.job.accessToken (执行器需要使用)
2、后台地址::http://vps-ip:8080/xxl-job-admin/,进入xxl-job-admin后台修改admin账户的密码(默认 123456)
❗️上述2个配置如果不改,大概率可能被入侵。
4、启动xxl-job-executor-sample (java)
项目中给了 官方给的 executor例子(java的)
修改配置文件 xxl.job.accessToken: /home/ec2-user/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties
编译启动即可: sudo /home/ec2-user//jdk1.8.0_321/bin/java -jar ./target/xxl-job-executor-sample-springboot-2.4.1-SNAPSHOT.jar
5、配置golang executor (golang)
https://github.com/xxl-job/xxl-job-executor-go/blob/master/example/main.go
修改: xxl.AccessToken、xxl.ExecutorIp、
exec := xxl.NewExecutor(
xxl.ServerAddr("http://127.0.0.1/xxl-job-admin"),
xxl.AccessToken(""), //请求令牌(默认为空)
xxl.ExecutorIp("127.0.0.1"), //可自动获取
xxl.ExecutorPort("9999"), //默认9999(非必填)
xxl.RegistryKey("golang-jobs"), //执行器名称
xxl.SetLogger(&logger{}), //自定义日志
)
进入xxl-job后台配置:(jobHandler为golang代码中设置的任务名)
参考:https://marksuper.xyz/2022/10/13/xxl-job/
6、配置开启启动
sudo /home/ec2-user//jdk1.8.0_321/bin/java -jar /home/ec2-user/xxl-job/xxl-job-admin/target/xxl-job-admin-2.4.1-SNAPSHOT.jar &
sudo /home/ec2-user//jdk1.8.0_321/bin/java -jar /home/ec2-user/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/./target/xxl-job-executor-sample-springboot-2.4.1-SNAPSHOT.jar &
cat /etc/systemd/system/my_service.service
[Unit]
Description=My Service
After=network.target
[Service]
Type=simple
ExecStart=/home/ec2-user/start.sh
Restart=always
[Install]
WantedBy=multi-user.target
配置:
sudo systemctl daemon-reload
sudo systemctl enable my_service
加固建议
如果你是第一次使用xxl-job,又想减少安全风险,初步的安全建议:
1、xxl-job使用最新版(低版本存在hessian2反序列化)
2、修改默认admin后台的密码
3、修改xxl.job.accessToken ,通信走https(客户端的token防泄露)
4、限制客户端暴露的handler,不暴露危险的handler给服务端使用(官方默认的java executor可以执行脚本比较危险,token泄露了就能打)