背景

时间: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泄露了就能打)