HummerRisk 是開源的雲原生安全平台,以非侵入的方式解決雲原生環境的安全和治理問題。核心能力包括混合雲的安全治理和容器雲安全檢測。
本文将介紹HummerRisk 1.0以後的開發準備工作。
v1.0.0 以後的版本,代碼在 dev 分支。歡迎大家在 dev 開發分支送出 pr 。
項目結構
1. 系統子產品
2. 系統需求
- JDK >= 17 (推薦17版本)
- Mysql >= 8.0 (推薦8.0.32版本)
- Maven >= 3.6 (推薦3.6.3版本)
- Node >= 16.1 (推薦16.1.0版本)
- Redis >= 6.2 (推薦6.2.10版本)
- nacos >= 2.2 (推薦2.2.0版本)
- sentinel >= 1.6.0
3. 技術選型
1)系統環境
- Java EE 17
- Servlet 3.0
- Apache Maven 3
2)主架構
- Spring Boot 3.0.0
- Spring Cloud 2022.0.1
- Spring Framework 6.0.0
- Spring Security 6.0.0
3)持久層
- Apache MyBatis 3.5.x
- Hibernate Validation 6.0.x
- Alibaba Druid 1.2.x
4)視圖層
- Vue 2.6.x
- Axios 0.21.0
- Element 2.15.x
4. 系統端口
- hmr-ui [80]
- hmr-flyway [9000]
- hmr-gateway [8080]
- hmr-auth [9200]
- hmr-system [9300, 9301, 8001]
- hmr-cloud [9400, 9401, 8002]
- hmr-k8s [9500, 9501, 8003]
- hmr-monitor [9100]
- hmr-mysql [3306]
- hmr-nacos [8848, 9848]
- hmr-redis [6379]
- hmr-job [8084]
配置開發環境
1. 環境準備
後端
HummerRisk 後端使用了 Java 語言的 Spring Cloud 架構,并使用 Maven 作為項目管理工具。開發者需要先在開發環境中安裝 JDK 17 及 Maven。
前端
HummerRisk 前端使用了 Vue.js 作為前端架構,ElementUI 作為 UI 架構,并使用 npm 或 yarn 作為包管理工具。開發者請先下載下傳 Node.js 或 Yarn 作為運作環境,IDEA 使用者建議安裝 Vue.js 插件,便于開發。
安裝 npm 或 yarn
進入網站 https://nodejs.org/en/download
或 https://yarn.bootcss.com/docs/install, 選擇相應的安裝包進行安裝即可。
相關元件
- nacos: https://nacos.io/zh-cn/docs/quick-start.html
- redis: https://redis.io/
- xxl-job: HummerRisk/xxl-job
2. 初始化配置
資料庫初始化
HummerRisk 使用 MySQL 資料庫,推薦使用 MySQL 8.0 版本。同時 hummerrisk 對資料庫部配置設定置項有要求,請參考下附的資料庫配置,修改開發環境中的資料庫配置檔案
[mysqld]
default-storage-engine=INNODB
lower_case_table_names=1
table_open_cache=128
max_connections=2000
max_connect_errors=6000
innodb_file_per_table=1
innodb_buffer_pool_size=1G
max_allowed_packet=1G
slave_max_allowed_packet=1G
transaction_isolation=READ-COMMITTED
innodb_flush_method=O_DIRECT
innodb_lock_wait_timeout=1800
innodb_flush_log_at_trx_commit=0
sync_binlog=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
skip-name-resolve
注意:Windows 系統資料庫初始化配置應删除 innodb_flush_method 參數,請參考文章。
https://bugs.mysql.com/bug.php?id=40757
請參考文檔中的建庫語句建立 HummerRisk 使用的資料庫,HummerRisk 服務啟動時會自動在配置的庫中建立所需的表結構及初始化資料。
CREATE DATABASE `hummer_config` /*!40100 DEFAULT CHARACTER SET utf8mb4 */
CREATE DATABASE `hummer_risk` /*!40100 DEFAULT CHARACTER SET utf8mb4 */
3. 配置參數
HummerRisk 本地開發需要各種配置,請參考下面配置參數。
提示: 請自行将 HMR_MYSQL_HOST 等配置參數設定為自己的 MySQL 位址,以下每一項參數都可以在項目的 bootstrap.yml 配置檔案或者 nacos 配置資料裡找到。
hummer-flyway 如圖所示,将各種配置資訊拷貝到啟動 IDEA 的環境變量中。(原理:因為首次啟動項目,hummer-flyway 需要初始化 nacos 的資料,初始化之後 hummer-flyway 項目隻要沒有更新 flyway sql,就不再需要啟動了)
# hummer-flyway 本地開發的各種配置
HMR_NACOS_SERVER_ADDR=127.0.0.1;HMR_REDIS_HOST=127.0.0.1;HMR_REDIS_PORT=6379;HMR_REDIS_PASSWORD=;HMR_MYSQL_HOST=127.0.0.1;HMR_MYSQL_PORT=33060;HMR_MYSQL_DB_NACOS=hummer_config;HMR_MYSQL_DB=hummer_risk;HMR_MYSQL_USER=root;HMR_MYSQL_PASSWORD=root;HMR_XXL_JOB_ADDR=127.0.0.1
hummer-auth、hummer-gateway、hummer-cloud、hummer-k8s、hummer-system、hummer-monitor 等項目如圖所示,将各種配置資訊拷貝到啟動 IDEA 的環境變量中。
# hummer-auth、hummer-gateway、hummer-cloud、hummer-k8s、hummer-system、hummer-monitor 本地開發的各種配置
HMR_NACOS_SERVER_ADDR=127.0.0.1;HMR_REDIS_HOST=127.0.0.1;HMR_REDIS_PORT=6379;HMR_REDIS_PASSWORD=;HMR_MYSQL_HOST=127.0.0.1;HMR_MYSQL_PORT=33060;HMR_MYSQL_DB=hummer_risk;HMR_MYSQL_USER=root;HMR_MYSQL_PASSWORD=root;HMR_XXL_JOB_ADDR=127.0.0.1;HMR_XXL_SYSTEM_ADDR=127.0.0.1;HMR_XXL_CLOUD_ADDR=127.0.0.1;HMR_XXL_K8S_ADDR=127.0.0.1
代碼運作
IDEA 方式運作
啟動順序
- 啟動 mysql、nacos、redis
- 啟動 hummer-flyway (第一次初始化資料啟動一次,後面 flyway 無變化時,跳過此步驟)
- 啟動 hummer-auth、hummer-gateway
- 啟動 xxl-job
- 啟動 hummer-cloud、hummer-k8s、hummer-system、hummer-ui、hummer-monitor(監控,本地開發可以不啟動)
先啟動本地元件
本地啟動 mysql 8.0 (本地如果已經有 mysql 5.7,可以用 docker 啟動 mysql 8.0)
docker pull mysql/mysql-server:latest
docker run -itd --name mysql -p 33060:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql/mysql-server
本地啟動 nacos (sh startup.sh -m standalone)
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
// 修改資料庫配置,連接配接本地 mysql
vim nacos/conf/application.properties
# 将如下配置進行修改
### Count of DB:
db.num=1
### Connect URL of DB:
spring.datasource.platform=mysql
db.url.0=jdbc:mysql://localhost:33060/hummer_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root
flyway.enabled=true
本地啟動 redis
redis-server --port 6379
1) 建立項目
- 建立一個 git 項目 輸入主工程 git 位址: [email protected]:HummerRisk/HummerRisk.git。
- 配置 maven 并引入 pom.xml。
- 本地采用 jdk 17,打包鏡像需要 tool.jar,但是本地開發不需要,是以注釋這一段。
- 在 HummerRisk 目錄下,執行 mvn clean install。将 common 等基礎包打到項目裡。
2) 啟動 hummer-flyway 項目
1. 在啟動配置中添加 Spring Boot 啟動項,直接啟動 Spring Boot 項目即可。
2. 後端服務成功運作如下所示。
3) 啟動 hummer-auth 項目
- 在啟動配置中添加 Spring Boot 啟動項,直接啟動 Spring Boot 項目即可。
- 後端服務成功運作如下所示。
4) 啟動 xxl-job
- 本地啟動 xxl-job(定時任務,執行檢測用,在啟動 hummerrisk 其他微服務之前啟動)
- 建立一個 git 項目 輸入主工程 git 位址: [email protected]:HummerRisk/xxl-job.git。
git clone [email protected]:HummerRisk/xxl-job.git
# 配置參數放到環境變量
HMR_NACOS_SERVER_ADDR=127.0.0.1;HMR_REDIS_HOST=127.0.0.1;HMR_REDIS_PORT=6379;HMR_REDIS_PASSWORD=;HMR_MYSQL_HOST=127.0.0.1;HMR_MYSQL_PORT=33060;HMR_MYSQL_DB=hummer_risk;HMR_MYSQL_USER=root;HMR_MYSQL_PASSWORD=root;HMR_XXL_JOB_ADDR=127.0.0.1;HMR_XXL_SYSYTEM_ADDR=127.0.0.1;HMR_XXL_CLOUD_ADDR=127.0.0.1;HMR_XXL_K8S_ADDR=127.0.0.1
# IDEA 啟動 xxl-job 項目 XxlJobAdminApplication
5) 啟動其他項目
- 在啟動配置中添加 Spring Boot 啟動項,直接啟動 Spring Boot 項目即可。
- 啟動 hummer-gateway、hummer-cloud、hummer-k8s、hummer-system、hummer-monitor(監控,本地開發可以不啟動)
- 服務成功運作如下所示。
6) 啟動前端
進入 hummer-ui 目錄,執行以下指令安裝相關前端元件。
npm install
進入到 hummer-ui 目錄,執行以下指令啟動前端服務。
npm run serve
或者使用 yarn 啟動
# 項目設定
yarn install
# 編譯并最小化生産
yarn build
# 編譯和熱重裝以進行開發
yarn serve
前端服務成功運作如下所示。
本地安裝引擎元件
- Cloud Custodian 作為雲平台檢測引擎,詳細的相關操作,請參考 線上文檔
- Prowler 作為 AWS 檢測引擎,詳細的相關操作,請參考 線上文檔
- Trivy 作為雲原生檢測引擎 ,詳細的相關操作,請參考 線上文檔
1) 準備運作環境
初始化目錄:
- mkdir -p /opt/hummerrisk/conf
- mkdir -p /opt/hummerrisk/image
- mkdir -p /opt/hummerrisk/file
- mkdir -p /opt/hummerrisk/trivy
- mkdir -p /opt/hummerrisk/logs
2) 安裝 Custodian
$ python3 -m venv custodian
$ source custodian/bin/activate
(custodian) $ pip install c7n
# c7n 為必裝, tools 下面使用哪個安裝哪個
(custodian) $ pip install -e tools/c7n_aliyun
(custodian) $ pip install -e tools/c7n_huawei
(custodian) $ pip install -e tools/c7n_tencent
(custodian) $ pip install -e tools/c7n_baidu
(custodian) $ pip install -e tools/c7n_azure
(custodian) $ pip install -e tools/c7n_gcp
(custodian) $ pip install -e tools/c7n_jdcloud
(custodian) $ pip install -e tools/c7n_kube
(custodian) $ pip install -e tools/c7n_openstack
(custodian) $ pip install -e tools/c7n_qingcloud
(custodian) $ pip install -e tools/c7n_ucloud
(custodian) $ pip install -e tools/c7n_volc
(custodian) $ pip install -e tools/c7n_vsphere
(custodian) $ pip install -e tools/c7n_qiniu
(custodian) $ pip install -e tools/c7n_ksyun
……
3) 安裝 Prowler
#apt 源方式安裝 Prowler
sudo apt update
sudo apt install python3 python3-pip jq git zip
pip install detect-secrets==1.0.3
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
git clone https://github.com/prowler-cloud/prowler
4) 安裝 Trivy
$ sudo vim /etc/yum.repos.d/trivy.repo
[trivy]
name=Trivy repository
baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$releasever/$basearch/
gpgcheck=0
enabled=1
$ sudo yum -y update
$ sudo yum -y install trivy
鏡像打包(推薦)
源碼中包含 Dockerfile 檔案,建議将項目打包成鏡像運作,進入 docker 目錄,使用者可以替換自己的 Dockerfile 研發版本。
其他注意事項
内置示例資料以 flyway 的形式在 HummerRisk 啟動時自動插入到了 MySQL 資料庫中,在源碼運作的情況下可自動初始化擷取内置檢測規則等資料;
關于 HummerRisk
HummerRisk 是開源的雲原生安全平台,以非侵入的方式解決雲原生的安全和治理問題。核心能力包括混合雲的安全治理和K8S容器雲安全檢測。
GitHub 位址:https://github.com/HummerRisk/HummerRisk
Gitee 位址:https://gitee.com/hummercloud/HummerRisk