原因:开源不易,文档仅对已 Star 刚果商城项目的用户开放。
操作步骤:点击下方「Gitee 项目」和「GitHub 项目」按钮 Star 项目即可。 刚果商城所有端的代码都会完全开源,为了更好地完善这个框架,希望大家多多支持。
1)初始化数据库。
执行数据库初始化 SQL 语句,文件地址:根目录/resources/congomall-db.sql
,数据库后续变动比较少。
2)初始化建表语句&初始化数据。
执行数据库建表语句和初始化数据 SQL 文件,文件夹地址:根目录/resources
,如果后续遇到代码中关于数据库相关的报错,重新执行下对应库的 SQL 文件。
启动 MySQL 实例,复制对应的配置文件。
docker run --name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.36
# ~/docker/software/mysql/conf 是本地目录,没有的话需要创建
docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf ~/docker/software/mysql/conf
-d
:以后台的方式运行。--name mysql
:指定容器的名称为 mysql。-p3306:3306
:将容器的 3306 端口挂载到宿主机的 3306 端口上。-e MYSQL_ROOT_PASSWORD=root
:指定 root 的密码为 root。打开 ~/docker/software/mysql/conf
mysqld.cnf 文件,增加以下内容。
# 配置文件中添加如下内容,注意是在在[mysqld]目录中
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server-id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
为了后续 Canal 对接,这里直接开启 BinLog 相关配置。
删除原 MySQL 容器,通过新配置创建新的容器。
# 删除运行中的 MySQL 容器
docker rm -f mysql
# 运行 Docker 容器命令
# /etc/localtime 时间同步
# /docker/software/mysql/conf 同步配置文件,上面配置的内容就会覆盖容器中的配置文件
# /docker/software/mysql/log 同步日志目录
# /docker/software/mysql/data 同步 MySQL 的一些文件内容(对数据进行备份)
# MYSQL_ROOT_PASSWORD=root 默认 root 的密码是 root
docker run --name mysql \
-p 3306:3306 \
-v /etc/localtime:/etc/localtime \
-v ~/docker/software/mysql/conf:/etc/mysql/mysql.conf.d \
-v ~/docker/software/mysql/log:/var/log/mysql \
-v ~/docker/software/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.36
进入到 MySQL 的命令行模式来给 root 账号授权所有 ip 能够访问。
# 使用 MySQL 容器中的命令行
docker exec -it mysql /bin/bash
# 使用 MySQL 命令打开客户端:
mysql -uroot -proot --default-character-set=utf8
# 接着创建一个账户,该账号所有 IP 都能够访问
grant all privileges on *.* to 'root' @'%' identified by 'root';
# 刷新生效
FLUSH PRIVILEGES;
查看 binlog 日志是否已经开启。
# 查看 binlog 日志是否开启
show variables like 'log_%';
# 查看主结点当前状态
show master status;
如果 log_bin 为 ON,即为开启状态。
docker run -p 6379:6379 --name redis -d redis redis-server --requirepass "123456"
安装 NameServer。
docker run -d -p 9876:9876 --name rmqnamesrv foxiswho/rocketmq:server-4.5.1
安装 Brocker。
1)新建配置目录。
mkdir -p ${HOME}/docker/software/rocketmq/conf
2)新建配置文件 broker.conf。
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 此处为本地ip, 如果部署服务器, 需要填写服务器外网ip
brokerIP1 = xx.xx.xx.xx
3)创建容器。
docker run -d \
-p 10911:10911 \
-p 10909:10909 \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-v ${HOME}/docker/software/rocketmq/conf/broker.conf:/etc/rocketmq/broker.conf \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "JAVA_OPTS=-Duser.home=/opt" \
-e "JAVA_OPT_EXT=-server -Xms512m -Xmx512m" \
foxiswho/rocketmq:broker-4.5.1
安装 rocketmq 控制台。
docker pull pangliang/rocketmq-console-ng
docker run -d \
--link rmqnamesrv:namesrv \
-e "JAVA_OPTS=-Drocketmq.config.namesrvAddr=namesrv:9876 -Drocketmq.config.isVIPChannel=false" \
--name rmqconsole \
-p 8088:8080 \
-t pangliang/rocketmq-console-ng
运行成功,稍等几秒启动时间,浏览器输入 localhost:8088
查看。
docker run \
-d -p 8848:8848 \
-p 9848:9848 \
--name nacos2 \
-e MODE=standalone \
-e TIME_ZONE='Asia/Shanghai' \
nacos/nacos-server:v2.1.1
访问 http://127.0.0.1:8848/nacos/index.html (opens new window)
用户名/密码:nacos/nacos
下载 Sentinel-DashBoard。
sentinel-dashboard-1.8.4.jar.zip (opens new window)
执行启动。
nohup java -jar -Dserver.port=8686 sentinel-dashboard-1.8.4.jar > sentinel-dashboard.file 2>&1 &
浏览器输入 http://127.0.0.1:8686 (opens new window)
1)创建对应目录。
mkdir -p ~/docker/software/minio/data/
2)创建 Docker 容器。
docker run -d \
-p 9000:9000 \
-p 9001:9001 \
--name minio \
-v ~/docker/software/minio/data:/data \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
quay.io/minio/minio server /data --console-address ":9001"
3)浏览器访问。
浏览器打开访问:http://localhost:9001/ (opens new window)
用户名密码:minioadmin/minioadmin
1)初始化配置。
为了方便添加监控地址,这里将 Prometheus 配置文件单独存储在宿主机。
mkdir -p ~/docker/software/prometheus/conf
创建配置文件 prometheus.yml
。
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
2)创建容器。
创建 Docker Prometheus 容器。
docker run -d \
--restart=always \
-p 9090:9090 \
-v ~/docker/software/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml \
--name prometheus \
prom/prometheus:v2.37.0
访问 http://localhost:9090/graph (opens new window) 地址,可查看即为成功。
后续添加新的采集信息地址,修改 ~/docker/software/prometheus/conf/prometheus.yml
保存后,重启 Prometheus 容器即可。
docker restart prometheus
1)部署 Grafana
Docker 安装 Grafana。为了方便数据存储,将 Grafana 数据存储在宿主机。
首先,创建宿主机对应的 Grafana 文件夹存储目录。
mkdir -p ~/docker/software/grafana/data
Docker 创建 Grafana 容器。
docker run -d \
-p 3000:3000 \
--link prometheus:prometheus \
--name=grafana \
-v ~/docker/software/grafana/data:/var/lib/grafana \
grafana/grafana:9.0.5
-- link prometheus:prometheus
:表示可以通过容器名互相通信,容器间共享环境变量。主要用来解决两个容器通过 ip 地址连接时容器 IP 地址会变的问题。
访问 Grafana 地址,http://localhost:3000 (opens new window) 用户名密码:admin。
2)添加 Prometheus 数据源
这里直接使用 http://prometheus:9090
即可,prometheus 是创建 --link
时指定的容器间共享变量。
docker run -d \
--name seata-server \
-p 8091:8091 \
-p 7091:7091 \
seataio/seata-server:1.5.2
浏览器访问 http://localhost:7091/#/login (opens new window)
用户名密码:seata/seata
1)创建 Canal 专属账号
# 创建用户名密码都是 canal 的账号
CREATE USER canal IDENTIFIED BY 'canal';
# canal 进行授权读取
grant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'canal'@'%';
# 刷新生效
FLUSH PRIVILEGES;
2)安装 Canal 1.1.5
拉取 Docker Canal 1.1.5 镜像。
docker pull canal/canal-server:v1.1.5
启动容器,把相关配置文件从容器中复制到宿主机。
docker run --name canal \
-p 11111:11111 \
-id canal/canal-server:v1.1.5
# ~/docker/software/canal/conf 是本地目录,没有的话需要创建
docker cp canal:/home/admin/canal-server/conf/example/instance.properties ~/docker/software/canal/conf
修改 ~/docker/software/canal/conf/instance.properties
相关属性。可以把下面这份配置复制进行替换。
#################################################
## mysql serverId , v1.0.26+ will autoGen
canal.instance.mysql.slaveId=1024
# enable gtid use true/false
canal.instance.gtidon=false
# position info
canal.instance.master.address=mysql:3306
# canal.instance.master.journal.name=
# canal.instance.master.position=
# canal.instance.master.timestamp=
# canal.instance.master.gtid=
# rds oss binlog
# canal.instance.rds.accesskey=
# canal.instance.rds.secretkey=
# canal.instance.rds.instanceId=
# table meta tsdb info
# canal.instance.tsdb.enable=true
#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
#canal.instance.tsdb.dbUsername=canal
#canal.instance.tsdb.dbPassword=canal
#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=
# username/password
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==
# table regex
canal.instance.filter.regex=.*\\..*
# table black regex
# canal.instance.filter.black.regex=mysql\\.slave_.*
# table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch
# table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch
# mq config
# canal.mq.topic=example
# dynamic topic route by schema or table regex
#canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*
# canal.mq.partition=0
# hash partition config
#canal.mq.partitionsNum=3
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#canal.mq.dynamicTopicPartitionNum=test.*:4,mycanal:6
#################################################
删除旧 Canal 容器,并启动新的容器。
docker rm -f canal
docker run --name canal \
-p 11111:11111 \
-v ~/docker/software/canal/conf/instance.properties:/home/admin/canal-server/conf/example/instance.properties \
--link mysql:mysql \
-id canal/canal-server:v1.1.5
1)创建存储目录。
mkdir -p ~/docker/compose/skywalking
2)创建对应文件 docker-compose.yml
,内容复制进去。
version: '3'
services:
oap:
image: apache/skywalking-oap-server:9.3.0
container_name: oap
restart: always
ports:
- 11800:11800
- 12800:12800
skywaling-ui:
image: apache/skywalking-ui:9.3.0
container_name: ui
depends_on:
- oap
links:
- oap
ports:
- 18080:8080
environment:
- SW_OAP_ADDRESS=http://oap:12800
3)执行 Docker Compose
docker-compose -f ~/docker/compose/skywalking/docker-compose.yml up -d
可以使用下方命令查询日志,非必须。
docker-compose -f ~/docker/compose/skywalking/docker-compose.yml logs -f
执行成功后,使用 docker ps 命令查看 docker 容器是否启动正常。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8bd6993afc7f apache/skywalking-ui:9.3.0 "bash docker-entrypo…" 2 hours ago Up 2 hours 0.0.0.0:18080->8080/tcp ui
73e2614ee8e5 apache/skywalking-oap-server:9.3.0 "bash docker-entrypo…" 2 hours ago Up 2 hours 0.0.0.0:11800->11800/tcp, 1234/tcp, 0.0.0.0:12800->12800/tcp oap
浏览器访问 http://localhost:18080/general (opens new window) 查看无问题,即为成功。
1)创建挂载目录。
mkdir -p -m 777 ~/docker/software/xxl-job/{logs,conf}
conf
目录下创建 application.properties
文件。
### web
server.port=8080
server.servlet.context-path=/xxl-job-admin
### actuator
management.server.servlet.context-path=/actuator
management.health.mail.enabled=false
### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/
### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########
### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model
###更改配置文件连接mysql信息
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://dockermysql:3306/xxl_job?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&autoReconnect=true ###ip
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max-lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000
### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.from=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
### xxl-job, access token
xxl.job.accessToken=default_token
### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN
## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### xxl-job, log retention days
xxl.job.logretentiondays=30
2)数据库初始化。
创建数据库 xxl_job
。
#
# XXL-JOB v2.3.1
# Copyright (c) 2015-present, xuxueli.
CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `xxl_job`;
SET NAMES utf8mb4;
CREATE TABLE `xxl_job_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '执行器主键ID',
`job_desc` varchar(255) NOT NULL,
`add_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`author` varchar(64) DEFAULT NULL COMMENT '作者',
`alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
`schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型',
`schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型',
`misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略',
`executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',
`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
`executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',
`executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒',
`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
`glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',
`glue_source` mediumtext COMMENT 'GLUE源代码',
`glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
`glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间',
`child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',
`trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行',
`trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间',
`trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '执行器主键ID',
`job_id` int(11) NOT NULL COMMENT '任务,主键ID',
`executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
`executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',
`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
`trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
`trigger_code` int(11) NOT NULL COMMENT '调度-结果',
`trigger_msg` text COMMENT '调度-日志',
`handle_time` datetime DEFAULT NULL COMMENT '执行-时间',
`handle_code` int(11) NOT NULL COMMENT '执行-状态',
`handle_msg` text COMMENT '执行-日志',
`alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',
PRIMARY KEY (`id`),
KEY `I_trigger_time` (`trigger_time`),
KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_log_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`trigger_day` datetime DEFAULT NULL COMMENT '调度-时间',
`running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量',
`suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量',
`fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_logglue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_id` int(11) NOT NULL COMMENT '任务,主键ID',
`glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',
`glue_source` mediumtext COMMENT 'GLUE源代码',
`glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注',
`add_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_registry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`registry_group` varchar(50) NOT NULL,
`registry_key` varchar(255) NOT NULL,
`registry_value` varchar(255) NOT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`app_name` varchar(64) NOT NULL COMMENT '执行器AppName',
`title` varchar(12) NOT NULL COMMENT '执行器名称',
`address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入',
`address_list` text COMMENT '执行器地址列表,多地址逗号分隔',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '账号',
`password` varchar(50) NOT NULL COMMENT '密码',
`role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',
`permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',
PRIMARY KEY (`id`),
UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_lock` (
`lock_name` varchar(50) NOT NULL COMMENT '锁名称',
PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' );
INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock');
commit;
3)创建容器。
docker run -d \
-p 8080:8080 \
--name=xxl-job-admin \
--link mysql:dockermysql \
--restart=always \
-v ~/docker/software/xxl-job/conf/application.properties:/application.properties \
-e PARAMS='--spring.config.location=/application.properties' \
xuxueli/xxl-job-admin:2.3.1
--link
:请确保 Docker 中运行着名为 mysql 的容器。连接上 MySQL 容器后,实现网络互通。
4)访问后管。
浏览器访问:http://127.0.0.1:8080/xxl-job-admin (opens new window)
账号:admin 密码:123456
Geetest 是一个人机验证解决方案提供商,为网站和移动应用程序提供智能化验证服务,帮助网站和应用程序识别人类用户和自动化机器人之间的差异。
Geetest 通过识别用户的行为模式和交互方式,例如滑动、点击等操作,来判断用户是否是真正的人类。它的验证流程不需要用户输入验证码或其他复杂的人机验证步骤,可以提高用户的验证体验,并减少恶意机器人的攻击。
Geetest 的技术核心是基于人机交互的行为分析和识别算法。它不断地优化自己的算法模型,以适应不断变化的网络安全环境和威胁。除了提供基本的验证码服务外,Geetest 还提供了多种安全验证解决方案,例如滑动验证、拼图验证、语音验证码等,以满足不同场景的安全需求。
在刚果商城中,将 Geetest 用作帐号登录验证,功能如下图所示:
因为刚果商城中申请的 Geetest 体验帐号,如果操作过于频繁会封号,所以需要大家走一遍注册申请帐号流程。
1)选择语言为英语。
打开官网注册页面:https://www.geetest.com/Register (opens new window)
2)邮箱验证帐号。
完成上述注册步骤后,上面填写的邮箱会收到一封帐号验证的邮件,点击进去设置登录密码。
设置帐号对应的密码。
3)切换中文登录。
在这之后就可以使用中文进行操作,登录到 Geetest 后台注册应用。
4)创建应用。
这里选择 3.0 模式的行为验证。
根据下图提示创建验证相关信息。
到这里应用就创建成功了,保存 ID 和 KEY 的信息,避免丢失。
5)BFF 配置替换。
复制 ID 和 Key 替换 congomall-bff
配置文件中 geetest.captcha-id
和 geetest.private-key
。
或者大家不想改动项目中的配置,也可以通过在应用上添加 VM 参数解决。
-Dgeetest.captcha-id=xxx -Dgeetest.private-key=xxx
🚀 系统提示:访问文档失败 🚀
原因:开源不易,文档仅对已 Star 刚果商城项目的用户开放。
操作步骤:点击下方「Gitee 项目」和「GitHub 项目」按钮 Star 项目即可。 刚果商城所有端的代码都会完全开源,为了更好地完善这个框架,希望大家多多支持。