You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@hertzbeat.apache.org by sh...@apache.org on 2024/04/13 14:27:06 UTC

(hertzbeat) branch home_apache_info updated (d7f9093d8 -> 62e2de366)

This is an automated email from the ASF dual-hosted git repository.

shushengzhou pushed a change to branch home_apache_info
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git


    from d7f9093d8 update manager and collector logback config(#1704) (#1723)
     new c60136b4b feature: alert tests fix
     new ec01806f4 feature: fix AlertDefineServiceTest error
     new 62e2de366 feature: apache home info

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 home/docs/community/become_committer.md            |  84 +++
 home/docs/community/become_pmc_member.md           |  84 +++
 .../docs/community/code-style-and-quality-guide.md | 675 ++++++++++++++++++
 home/docs/community/document.md                    | 145 ++++
 home/docs/community/how-to-release.md              | 761 ++++++++++++++++++++
 home/docs/community/how-to-verify.md               | 231 +++++++
 home/docs/community/mailing_lists.md               |  60 ++
 home/docs/community/new_committer_process.md       | 245 +++++++
 home/docs/community/new_pmc_member_process.md      | 285 ++++++++
 home/docs/community/submit-code.md                 |  88 +++
 home/docusaurus.config.js                          |  84 +++
 .../en/docusaurus-plugin-content-docs/current.json |  12 +
 .../version-v1.3.x.json                            |   4 +
 home/i18n/en/docusaurus-theme-classic/footer.json  |   4 +
 home/i18n/en/docusaurus-theme-classic/navbar.json  |  80 +++
 .../docusaurus-plugin-content-docs/current.json    |  16 +
 .../current/community/become_committer.md          |  59 ++
 .../current/community/become_pmc_member.md         |  58 ++
 .../community/code-style-and-quality-guide.md      | 672 ++++++++++++++++++
 .../current/community/document.md                  | 145 ++++
 .../current/community/how-to-release.md            | 767 +++++++++++++++++++++
 .../current/community/how-to-verify.md             | 232 +++++++
 .../current/community/mailing_lists.md             |  60 ++
 .../current/community/new_committer_process.md     | 245 +++++++
 .../current/community/new_pmc_member_process.md    | 286 ++++++++
 .../current/community/submit-code.md               |  88 +++
 .../zh-cn/docusaurus-theme-classic/footer.json     |   4 +
 .../zh-cn/docusaurus-theme-classic/navbar.json     |  80 +++
 home/sidebars.json                                 |  34 +
 29 files changed, 5588 insertions(+)
 create mode 100644 home/docs/community/become_committer.md
 create mode 100644 home/docs/community/become_pmc_member.md
 create mode 100644 home/docs/community/code-style-and-quality-guide.md
 create mode 100644 home/docs/community/document.md
 create mode 100644 home/docs/community/how-to-release.md
 create mode 100644 home/docs/community/how-to-verify.md
 create mode 100644 home/docs/community/mailing_lists.md
 create mode 100644 home/docs/community/new_committer_process.md
 create mode 100644 home/docs/community/new_pmc_member_process.md
 create mode 100644 home/docs/community/submit-code.md
 create mode 100644 home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/become_committer.md
 create mode 100644 home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/become_pmc_member.md
 create mode 100644 home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/code-style-and-quality-guide.md
 create mode 100644 home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/document.md
 create mode 100644 home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/how-to-release.md
 create mode 100644 home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/how-to-verify.md
 create mode 100644 home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/mailing_lists.md
 create mode 100644 home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/new_committer_process.md
 create mode 100644 home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/new_pmc_member_process.md
 create mode 100644 home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/submit-code.md


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@hertzbeat.apache.org
For additional commands, e-mail: notifications-help@hertzbeat.apache.org


(hertzbeat) 01/03: feature: alert tests fix

Posted by sh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

shushengzhou pushed a commit to branch home_apache_info
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git

commit c60136b4b269e032e81ebc932fd66d87e319e60b
Author: a-little-fool <20...@qq.com>
AuthorDate: Sat Jan 20 12:13:47 2024 +0800

    feature: alert tests fix
---
 .../java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java b/alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java
index acbc20dc8..2d20c8326 100644
--- a/alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java
+++ b/alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java
@@ -167,7 +167,7 @@ class AlertDefineServiceTest {
 
     @Test
     void getAlertDefines() {
-        Specification<AlertDefine> specification = mock(Specification.class);
+        Specification<AlertDefine> sspecification = mock(Specification.class);
         when(alertDefineDao.findAll(specification, PageRequest.of(1, 1))).thenReturn(Page.empty());
         assertNotNull(alertDefineService.getAlertDefines(specification, PageRequest.of(1, 1)));
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@hertzbeat.apache.org
For additional commands, e-mail: notifications-help@hertzbeat.apache.org


(hertzbeat) 03/03: feature: apache home info

Posted by sh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

shushengzhou pushed a commit to branch home_apache_info
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git

commit 62e2de36600ec0a0f9876a681804a809b987b71a
Author: a-little-fool <20...@qq.com>
AuthorDate: Sat Apr 13 22:26:00 2024 +0800

    feature: apache home info
---
 home/docs/community/become_committer.md            |  84 +++
 home/docs/community/become_pmc_member.md           |  84 +++
 .../docs/community/code-style-and-quality-guide.md | 675 ++++++++++++++++++
 home/docs/community/document.md                    | 145 ++++
 home/docs/community/how-to-release.md              | 761 ++++++++++++++++++++
 home/docs/community/how-to-verify.md               | 231 +++++++
 home/docs/community/mailing_lists.md               |  60 ++
 home/docs/community/new_committer_process.md       | 245 +++++++
 home/docs/community/new_pmc_member_process.md      | 285 ++++++++
 home/docs/community/submit-code.md                 |  88 +++
 home/docusaurus.config.js                          |  84 +++
 .../en/docusaurus-plugin-content-docs/current.json |  12 +
 .../version-v1.3.x.json                            |   4 +
 home/i18n/en/docusaurus-theme-classic/footer.json  |   4 +
 home/i18n/en/docusaurus-theme-classic/navbar.json  |  80 +++
 .../docusaurus-plugin-content-docs/current.json    |  16 +
 .../current/community/become_committer.md          |  59 ++
 .../current/community/become_pmc_member.md         |  58 ++
 .../community/code-style-and-quality-guide.md      | 672 ++++++++++++++++++
 .../current/community/document.md                  | 145 ++++
 .../current/community/how-to-release.md            | 767 +++++++++++++++++++++
 .../current/community/how-to-verify.md             | 232 +++++++
 .../current/community/mailing_lists.md             |  60 ++
 .../current/community/new_committer_process.md     | 245 +++++++
 .../current/community/new_pmc_member_process.md    | 286 ++++++++
 .../current/community/submit-code.md               |  88 +++
 .../zh-cn/docusaurus-theme-classic/footer.json     |   4 +
 .../zh-cn/docusaurus-theme-classic/navbar.json     |  80 +++
 home/sidebars.json                                 |  34 +
 29 files changed, 5588 insertions(+)

diff --git a/home/docs/community/become_committer.md b/home/docs/community/become_committer.md
new file mode 100644
index 000000000..96ef0e407
--- /dev/null
+++ b/home/docs/community/become_committer.md
@@ -0,0 +1,84 @@
+---
+id: 'become_committer'
+title: 'Become A Committer'
+sidebar_position: 2
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+    
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+## Become A Committer of Apache HertzBeat
+
+Anyone being supportive of the community and working in any of the
+CoPDoC areas can become an Apache HertzBeat committer. The CoPDoC is an
+acronym from ASF to describe how we recognize your contributions not
+only by code.
+
+- **Community** - You can join us via our mailing list, issue
+  trackers, discussions page to interact with community members, and
+  share vision and knowledge
+- **Project** - a clear vision and consensus are needed
+- **Documentation** - without it, the stuff remains only in the minds
+  of the authors
+- **Code** - discussion goes nowhere without code
+
+Apache HertzBeat community strives to be meritocratic. Thus, once someone
+has contributed sufficiently to any area of CoPDoC they can be a
+candidate for committer-ship and at last voted in as a HertzBeat
+committer. Being an Apache HertzBeat committer does not necessarily mean
+you must commit code with your commit privilege to the codebase; it
+means you are committed to the HertzBeat project and are productively
+contributing to our community's success.
+
+## Committer requirements:
+
+There are no strict rules for becoming a committer or PPMC member.
+Candidates for new committers are typically people that are active
+contributors and community members. Anyway, if the rules can be
+clarified a little bit, it can somehow clear the doubts in the minds
+of contributors and make the community more transparent, reasonable,
+and fair.
+
+### Continuous contributions
+
+Committer candidates should have a decent amount of continuous
+engagements and contributions (fixing bugs, adding new features,
+writing documentation, maintaining issues boards, code review, or answering
+community questions) to HertzBeat either by contributing to the codebase
+of the main website or HertzBeat's GitHub repositories.
+
+- +3 months with light activity and engagement.
+- +2 months of medium activity and engagement.
+- +1 month with solid activity and engagement.
+
+### Quality of contributions
+- A solid general understanding of the project
+- Well tested, well-designed, following Apache HertzBeat coding
+  standards, and simple patches.
+- Well-organized and detailed user-oriented documentation.
+
+### Community involvement
+
+- Be active, courteous, and respectful on the dev mailing list and
+  help mentor newer contributors
+  and users.
+- Be active, courteous, and respectful on the issue tracker for
+  project maintenance
+- Be active, courteous, and respectful for pull requests reviewing
+- Be involved in the design road map discussions with a professional
+  and diplomatic approach even if there is a disagreement
+- Promoting the project by writing articles or holding events
\ No newline at end of file
diff --git a/home/docs/community/become_pmc_member.md b/home/docs/community/become_pmc_member.md
new file mode 100644
index 000000000..1f040ed9c
--- /dev/null
+++ b/home/docs/community/become_pmc_member.md
@@ -0,0 +1,84 @@
+---
+id: 'become_pmc_member'
+title: 'Become A PMC member'
+sidebar_position: 3
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+    
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+## Become A PMC member of Apache HertzBeat
+
+Anyone being supportive of the community and working in any of the
+CoPDoC areas can become an Apache HertzBeat PMC member. The CoPDoC is an
+acronym from ASF to describe how we recognize your contributions not
+only by code.
+
+- **Community** - You can join us via our mailing list, issue
+  trackers, discussions page to interact with community members, and
+  share vision and knowledge
+- **Project** - a clear vision and consensus are needed
+- **Documentation** - without it, the stuff remains only in the minds
+  of the authors
+- **Code** - discussion goes nowhere without code
+
+Apache HertzBeat community strives to be meritocratic. Thus, once someone
+has contributed sufficiently to any area of CoPDoC they can be a
+candidate for PMC membership and at last voted in as a HertzBeat
+PMC member. Being an Apache HertzBeat PMC member does not necessarily mean
+you must commit code with your commit privilege to the codebase; it
+means you are committed to the HertzBeat project and are productively
+contributing to our community's success.
+
+## PMC member requirements:
+
+There are no strict rules for becoming a committer or PPMC member.
+Candidates for new PMC member are typically people that are active
+contributors and community members. Anyway, if the rules can be
+clarified a little bit, it can somehow clear the doubts in the minds
+of contributors and make the community more transparent, reasonable,
+and fair.
+
+### Continuous contributions
+
+PMC member candidates should have a decent amount of continuous
+engagements and contributions (fixing bugs, adding new features,
+writing documentation, maintaining issues boards, code review, or answering
+community questions) to HertzBeat either by contributing to the codebase
+of the main website or HertzBeat's GitHub repositories.
+
+- +5 months with light activity and engagement.
+- +4 months of medium activity and engagement.
+- +3 month with solid activity and engagement.
+
+### Quality of contributions
+- A solid general understanding of the project
+- Well tested, well-designed, following Apache HertzBeat coding
+  standards, and simple patches.
+- Well-organized and detailed user-oriented documentation.
+
+### Community involvement
+
+- Be active, courteous, and respectful on the dev mailing list and
+  help mentor newer contributors
+  and users.
+- Be active, courteous, and respectful on the issue tracker for
+  project maintenance
+- Be active, courteous, and respectful for pull requests reviewing
+- Be involved in the design road map discussions with a professional
+  and diplomatic approach even if there is a disagreement
+- Promoting the project by writing articles or holding events
\ No newline at end of file
diff --git a/home/docs/community/code-style-and-quality-guide.md b/home/docs/community/code-style-and-quality-guide.md
new file mode 100644
index 000000000..32a55ba50
--- /dev/null
+++ b/home/docs/community/code-style-and-quality-guide.md
@@ -0,0 +1,675 @@
+---
+id: 'code_style_and_quality_guide'
+title: 'Code style and quality guide'
+sidebar_position: 3
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+
+## 1 Pull Requests & Changes Rule
+
+1. `ISSUE`/`PR`(pull request) driving and naming
+
+    - Ensure that `PR` corresponds to `ISSUE`.
+   > **Note**: `Hotfix` issue does not need to follow this rule, such as fixing spelling errors in `JavaDoc` or `document` files.
+
+    - Title naming format  
+      When naming `PR`, you can refer to the `[ISSUE-XXXX][Feature/Improve/Refactor/Bug/Cleanup] Title` of the pull request,
+      where `ISSUE-XXXX` should be replaced with the actual `ISSUE` number.
+        - The second part describes the type of `PR`, such as new features, improvement, refactor, etc.
+        - If all changes to `PR` are within a certain module or component, they can be indicated in the commit message.
+
+2. Description
+
+    - Please fill in the `PR` template to describe the contribution. So that the reviewer can understand the problem and solution from the description, rather than just from the code.
+    - Ensure that the description is sufficient to illustrate the problem addressed by the `PR`.
+    - Small changes do not require too much description.
+    - In an ideal scenario, the problem is described in `ISSUE`, and most of the description is copied from there.
+
+3. Try to break down changes into pure types of changes
+
+    - It's recommended that `PR` should be arranged changes such as `Cleanup`, `Refactor`, `Improve`, and `Feature` into separated `PRs`/`Commits`.
+    - In this way, the reviewers can independently view cleaning and refactoring, and ensure that these changes do not change behavior.
+    - Then, the reviewer can independently review the core changes and ensure that they are a clean and robust change.
+    - In extreme cases, if a rollback commit is required, it can provide the optimal granularity for version rollback selection.
+    - In addition, significant contributions should be split into a set of independent changes that can be reviewed independently.
+
+4. Commit message  
+   The commit of messages should follow a pattern similar to the `PR`: `[ISSUE-XXXX][Feature/Improve/Refactor/Cleanup] Title of the pull request`.
+
+    - `[ISSUE-xxxx1][Improve(ment)] Improve ...`
+    - `[ISSUE-xxxx2][Refactor] Refactor ...`
+    - `[ISSUE-xxxx3][Feature] Support ...`
+    - `[ISSUE-xxxx4][Bug] Fix  ...`
+    - `[ISSUE-xxxx5][Feature][subtask] Support ...`
+    - `[Hotfix][module_name] Fix xxx comments ...`
+
+> **Note**: Try to use git history instead of annotated code (not mandatory)
+
+## 2 Code Checkstyle
+
+- Backend code formatting Maven plugin: `spotless`
+  Just run `mvn spotless:apply` in the project repo root directory after installing the plugin.
+
+- Backend code specification Maven plugin: `checkstyle`
+  Just run `mvn checkstyle:checkstyle` after installing the plugin.
+
+- Frontend code formatting plugin `eslint`
+    - The original command is `npx eslint --cache --max-warnings 0 "{src,mock}/**/*.{vue,ts,tsx}" --fix`
+    - Encapsulated as `npm run lint:eslint`
+
+## 3 Programming Specification
+
+### 3.1 Naming Style
+
+1. Prioritize selecting nouns for variable naming, it's easier to distinguish between `variables` or `methods`.
+   ```java
+     Cache<String> publicKeyCache;
+   ```
+
+2. Pinyin abbreviations are prohibited for variables (excluding nouns such as place names), such as chengdu.
+
+3. It is recommended to end variable names with a `type`.  
+   For variables of type `Collection/List`, take `xxxx` (plural representing multiple elements) or end with `xxxList` (specific type).  
+   For variables of type `map`, describe the `key` and `value` clearly:
+   ```java
+     Map<Long, User> idUserMap;
+     Map<Long, String> userIdNameMap;
+   ```
+
+4. That can intuitively know the type and meaning of the variable through its name.  
+   Method names should start with a verb first as follows:
+   ```java
+     void computeVcores(Object parameter1);
+   ```
+   > Note: It is not necessary to strictly follow this rule in the `Builder` tool class.
+
+5. The methods name of basic `CRUD` of the database layer (non-service layer) should be uniformly standardized according to name `com.baomidou.mybatisplus.core.mapper.BaseMapper`:
+
+    - If performing a database query operation, the method name should start with `select`.
+
+      When querying a single record, you can use `selectXxx`, such as `selectApp`.
+
+      When querying multiple records, you can use `selectXxxs` to indicate a collection result, such as `selectApps`. If the entity ends with `s`, you can use `List`, such as `selectStatusList`.
+
+      If the result is paginated, you can use `selectPage`. If the result is a `Map`, it is recommended to follow the `Map` naming conventions, such as `selectIdUserMap`.
+
+      When the query includes specific conditions, you can use `selectXxxByXxx` naming, such as `listById` or `selectAppsByProjectId`.
+
+      > In cases of excessively long entity names, consider abbreviating judiciously. The principle is to be “clear and concise.” For example, `selectApplications` can be abbreviated to `selectApps`. However, if there is no suitable abbreviation, abbreviation is not recommended.
+      > For `Mapper` queries like `selectRecentK8sClusterIds`, you can also adopt the `selectList` naming convention.
+
+    - If perform a database <mark> update </mark> statement operation, the name of the method should be started with `update`
+    - If perform a database <mark> insert </mark> statement operation, the name of the method should be started with `insert`
+    - If perform a database <mark> delete </mark> statement operation, the name of the method should be started with `delete`
+
+6. The methods name of basic `CRUD` of the service layer should be named as `com.baomidou.mybatisplus.extension.service.IService`:
+
+    - If perform a database <mark> select </mark> operation to query multiple records, the name of the method should be started with a `list`, such as `listByIds`, `listByXxx`
+    - If perform a database <mark> select </mark> operation to query a single record, the name of the method should be started with get, such as `getByName` and `getOne`
+    - If perform a database <mark> update </mark> operation, the name of the method should be started with `update`
+    - If perform a database <mark> insert </mark> operation, the name of the method should be started with `save`
+    - If perform a database <mark> delete </mark> operation, the name of the method should be started with `remove`
+
+7. Naming of parameters
+
+    - It's best to maintain consistent parameter naming for parameters of the same type in the same interface.
+
+### 3.2 Constant Variables Definition
+
+1. Set the `serialVersionUID` of all classes to `1L`, following `Flink`'s `serialVersionUID`.
+
+    - Negative demo:
+      ```java
+        private static final long serialVersionUID = -8713837118340960775L;
+      ```
+
+    - Positive demo:
+      ```java
+       private static final long serialVersionUID = 1L;
+      ```
+
+2. Redundant strings should be extracted as constants  
+   >If a constant has been hardcoded twice or more times, please directly extract it as a constant and change the corresponding reference.
+   In generally, constants in `log` can be ignored to extract.
+
+    - Negative demo:
+
+      ```java
+      public static RestResponse success(Object data) {
+          RestResponse resp = new RestResponse();
+          resp.put("status", "success");
+          resp.put("code", ResponseCode.CODE_SUCCESS);
+          resp.put("data", data);
+          return resp;
+      }
+      
+      public static RestResponse error() {
+          RestResponse resp = new RestResponse();
+          resp.put("status", "error");
+          resp.put("code", ResponseCode.CODE_FAIL);
+          resp.put("data", null);
+          return resp;
+      }
+      ```
+
+    - Positive demo:
+
+      > Strings are extracted as constant references.
+
+      ```java
+        public static final String STATUS = "status";
+        public static final String CODE = "code";
+        public static final String DATA = "data";
+        
+        public static RestResponse success(Object data) {
+            RestResponse resp = new RestResponse();
+            resp.put(STATUS, "success");
+            resp.put(CODE, ResponseCode.CODE_SUCCESS);
+            resp.put(DATA, data);
+            return resp;
+        }
+        
+        public static RestResponse error() {
+            RestResponse resp = new RestResponse();
+            resp.put(STATUS, "error");
+            resp.put(CODE, ResponseCode.CODE_FAIL);
+            resp.put(DATA, null);
+            return resp;
+        }
+      ```
+
+3. Ensure code readability and intuitiveness
+
+  - The string in the `annotation` symbol doesn't need to be extracted as constant.
+
+  - The referenced `package` or `resource` name doesn't need to be extracted as constant.
+
+4. Variables that have not been reassigned must also be declared as <mark> final </mark> types.
+
+5. About the arrangement order of `constant/variable` lines  
+
+   Sort the variable lines in the class in the order of
+   1. `public static final V`, `static final V`,`protected static final V`, `private static final V`
+   2. `public static v`, `static v`,`protected static v`, `private static v`
+   3. `public v`, `v`, `protected v`, `private v`
+
+
+### 3.3 Methods Rule
+
+1. Sort the methods in the class in the order of `public`, `protected`, `private`
+
+   Static methods of a class can be placed after non-static methods and sorted according to consistent method visibility.
+
+2. When there are restrictions on the method, the parameters and returned values of the method need to be annotated with `@Nonnull` or `@Nullable` annotations and constraints.
+
+   For example, if the parameter cannot be null, it is best to add a `@Nonnull` annotation. If the returned value can be null, the `@Nullable` annotation should be added first.
+
+   <mark> Note: that the package name is <code>javax.validation.requirements </code> </mark>
+
+3. If there are too many lines of code in the method, please have a try on using multiple sub methods at appropriate points to segment the method body.
+
+   Generally speaking, it needs to adhere to the following principles:
+    - Convenient testing
+    - Good semantics
+    - Easy to read
+
+   In addition, it is also necessary to consider whether the splitting is reasonable in terms of components, logic, abstraction, and other aspects in the scenario.
+
+   > However, there is currently no clear definition of demo. During the evolution process, we will provide additional examples for developers to have a clearer reference and understanding.
+
+### 3.4 Collection Rule
+
+1. For `collection` returned values, unless there are special `concurrent` (such as thread safety), always return the `interface`, such as:
+
+    - returns <mark> List </mark> if use `ArrayList`
+    - returns <mark> Map </mark> if use `HashMap`
+    - returns <mark> Set </mark> if use `HashSet`
+
+2. If there are multiple threads, the following declaration or returned types can be used:
+
+  ```java
+    private CurrentHashMap map;
+    public CurrentHashMap funName();
+  ```
+
+3. Use `isEmpty()` instead of `length() == 0` or `size() == 0`
+
+    - Negative demo:
+
+      ```java
+      if (pathPart.length() == 0) {
+        return;
+      }
+      ```
+
+    - Positive demo:
+
+      ```java
+      if (pathPart.isEmpty()) {
+        return;
+      }
+      ```
+
+### 3.5 Concurrent Processing
+
+1. The `thread pool` needs to be managed, using a unified entry point to obtain the `thread pool`.
+
+   <mark> Note: During the evolution process, we will provide additional examples for developers to have a clearer reference and understanding. </mark>
+
+2. `Thread pool` needs to be resource constrained to prevent resource leakage caused by improper handling
+
+### 3.6 Control/Condition Statements
+
+1. Avoid unreasonable `condition/control` branches order leads to:
+
+    - Multiple code line `depths` of `n+1`
+    - Redundant lines
+
+Generally speaking, if a method's code line depth exceeds `2+ Tabs` due to continuous nested `if... else..`, it should be considered to try
+- `merging branches`,
+- `inverting branch conditions`
+- `extracting private methods`
+
+to reduce code line depth and improve readability like follows:
+- Union or merge the logic into the next level calling
+    - Negative demo:
+      ```java
+        if (isInsert) {
+          save(platform);
+        } else {
+           updateById(platform);
+        }
+       ```
+    - Positive demo:
+      ```java
+        saveOrUpdate(platform);
+      ```
+- Merge the conditions
+    - Negative demo:
+      ```java
+        if (expression1) {
+          if(expression2) {
+              ......
+          }
+        }
+   ```  
+  - Positive demo:  
+     ```java
+      if (expression1 && expression2) {
+        ......
+      }
+     ```
+- Reverse the condition
+    - Negative demo:
+
+        ```java
+          public void doSomething() {
+           // Ignored more deeper block lines
+           // .....
+           if (condition1) {
+              ...
+           } else {
+              ...
+           }
+          }
+        ```
+
+    - Positive demo:
+
+      ```java
+        public void doSomething() {
+         // Ignored more deeper block lines
+         // .....
+         if (!condition1) {
+            ...
+            return;
+         }
+         // ...
+        }
+      ```
+- Using a single variable or method to reduce the complex conditional expression
+    - Negative demo:
+       ```java
+         if (dbType.indexOf("sqlserver") >= 0 || dbType.indexOf("sql server") >= 0) {
+          ...
+         }
+       ```
+
+    - Positive demo:
+       ```java
+         if (containsSqlServer(dbType)) {
+           ....
+         }
+         //.....
+         // definition of the containsSqlServer
+       ```
+
+> Using `sonarlint` and `better highlights` to check code depth looks like good in the future.
+
+### 3.7 Code Comments Rule
+
+1. Method lacks comments:
+
+    - `When`: When can the method be called
+    - `How`: How to use this method and how to pass parameters, etc.
+    - `What`: What functions does this method achieve
+    - `Note`: What should developers pay attention to when calling this method
+
+2. Missing necessary class header description comments.
+
+   Add `What`, `Note`, etc. like mentioned in the `1`.
+
+3. The method declaration in the interface must be annotated.
+
+    - If the semantics of the implementation and the annotation content at the interface declaration are inconsistent, the specific implementation method also needs to be rewritten with annotations.
+
+    - If the semantics of the method implementation are consistent with the annotation content at the interface declaration, it is not recommended to write annotations to avoid duplicate annotations.
+
+4. The first word in the comment lines need to be capitalized, like `param` lines, `return` lines. 
+   If a special reference as a subject does not need to be capitalized, special symbols such as quotation marks need to be noted.
+
+### 3.8 Java Lambdas
+
+1. Prefer `non-capturing` lambdas (lambdas that do not contain references to the outer scope).
+   Capturing lambdas need to create a new object instance for every call. `Non-capturing` lambdas can use the same instance for each invocation.
+
+    - Negative demo:
+
+      ```java
+        map.computeIfAbsent(key, x -> key.toLowerCase())
+      ```
+
+    - Positive demo:
+
+      ```java
+       map.computeIfAbsent(key, k -> k.toLowerCase());
+      ```
+
+2. Consider method references instead of inline lambdas
+
+    - Negative demo:
+
+      ```java
+        map.computeIfAbsent(key, k-> Loader.load(k));
+      ```
+
+    - Positive demo:
+
+      ```java
+        map.computeIfAbsent(key, Loader::load);
+      ```
+
+### 3.9 Java Streams
+
+- Avoid Java Streams in any performance critical code.
+
+- The main motivation to use Java Streams would be to improve code readability. As such, they can be a good match in parts of the code that are not data-intensive, but deal with coordination.
+
+- Even in the latter case, try to limit the scope to a method, or a few private methods within an internal class.
+
+### 3.10 Pre-Conditions Checking
+
+1. Use a unified `Utils.requireXXX` to complete the validation of the prerequisite, and if possible, replace the `AlertXXException.throwIfXXX` by new pre-conditions checking.
+
+### 3.11 StringUtils
+
+1. Use `StringUtils.isBlank` instead of `StringUtils.isEmpty`
+
+   - Negative demo:
+   
+      ```java
+      if (StringUtils.isEmpty(name)) {
+     return;
+      }
+      ```
+   
+   - Positive demo:
+   
+     ```java
+     if (StringUtils.isBlank(name)) {
+     return;
+     }
+     ```
+
+2. Use `StringUtils.isNotBlank` instead of `StringUtils.isNotEmpty`
+
+   - Negative demo:
+   
+      ```java
+      if (StringUtils.isNotEmpty(name)) {
+        return;
+      }
+      ```
+   
+   - Positive demo:
+   
+     ```java
+     if (StringUtils.isNotBlank(name)) {
+       return;
+     }
+     ```
+
+3. Use `StringUtils.isAllBlank` instead of `StringUtils.isAllEmpty`
+
+   - Negative demo:
+   
+      ```java
+      if (StringUtils.isAllEmpty(name, age)) {
+        return;
+      }
+      ```
+   
+   - Positive demo:
+   
+     ```java
+     if (StringUtils.isAllBlank(name, age)) {
+       return;
+     }
+     ```
+
+### 3.12 `Enum` Class
+
+1. Enumeration value comparison
+
+   - Negative demo:
+   
+      ```java
+      if (status.equals(JobStatus.RUNNING)) {
+        return;
+      }
+      ```
+   
+   - Positive demo:
+   
+     ```java
+     if (status == JobStatus.RUNNING) {
+       return;
+     }
+     ```
+
+2. Enumeration classes do not need to implement Serializable
+
+   - Negative demo:
+   
+      ```java
+      public enum JobStatus implements Serializable {
+        ...
+      }
+      ```
+   
+   - Positive demo:
+   
+     ```java
+     public enum JobStatus {
+       ...
+     }
+     ```
+
+3. Use `Enum.name()` instead of `Enum.toString()`
+
+   - Negative demo:
+   
+      ```java
+      System.out.println(JobStatus.RUNNING.toString());
+      ```
+   
+   - Positive demo:
+   
+     ```java
+     System.out.println(JobStatus.RUNNING.name());
+     ```
+
+4. Enumeration class names uniformly use the Enum suffix
+
+   - Negative demo:
+   
+      ```java
+      public enum JobStatus {
+        ...
+      }
+      ```
+   
+   - Positive demo:
+   
+     ```java
+     public enum JobStatusEnum {
+       ...
+     }
+     ```
+
+### 3.13 `Deprecated` Annotation
+
+  - Negative demo:
+
+    ```java
+    @deprecated
+    public void process(String input) {
+      ...
+    }
+    ```
+
+  - Positive demo:
+
+    ```java
+    @Deprecated
+    public void process(String input) {
+      ...
+    }
+    ```
+
+## 4 Exception Processing
+
+This `hertzbeat-console-service` module is the core module for processing user requests.
+It's very necessary to strive to provide the best user experience.   
+So, we introduced the [AbstractApiException](https://github.com/apache/incubator-hertzbeat/blob/dev/hertzbeat-console/hertzbeat-console-service/src/main/java/org/apache/hertzbeat/console/base/exception/AbstractApiException.java)
+and its subclasses to get more friendly interaction effect. Non-`AbstractApiException` is treated as internal server errors correspondingly, which needn't notify the interaction details to users.   
+Based on the above premise, we need to pay attention to the handling of `AbstractApiException`.    
+For example, we should throw an exception by one of followed subclasses of `AbstractApiException` when processing logic with the user operation errors or missing data errors:
+
+- [ApiDetailException](https://github.com/apache/incubator-hertzbeat/blob/dev/hertzbeat-console/hertzbeat-console-service/src/main/java/org/apache/hertzbeat/console/base/exception/ApiDetailException.java)
+> An exception message that needs to be notified to front-end, is a detailed exception message, such as the stackTrace info, often accompanied by a large number of exception logs,
+> e.g: `Failed to start job`, need to display the exception(stackTrace info) to front-end.
+- [ApiAlertException](https://github.com/apache/incubator-hertzbeat/blob/dev/hertzbeat-console/hertzbeat-console-service/src/main/java/org/apache/hertzbeat/console/base/exception/ApiAlertException.java)
+> An exception message that needs to be notified to front-end, usually a simple, clear message, e.g:
+> 1. Username already exists
+> 2. No permission, please contact the administrator
+> 3. ...
+
+- [AlertException](https://github.com/apache/incubator-hertzbeat/blob/dev/hertzbeat-console/hertzbeat-console-service/src/main/java/org/apache/hertzbeat/console/base/exception/AlertException.java)
+> An exception message that needs to be notified to front-end when processing alert logic.
+- Or others exceptions used to get fine users interaction.
+
+In addition to handling the classification of exceptions, we'd better make the precise and concise exception message and try to ensure the follows in the exception:
+
+- Display the current status of the abnormal case.
+- Display the solutions to the abnormal case.
+- Or others information fit the pretty interaction.
+
+Please click [Issue-2325](https://github.com/apache/incubator-hertzbeat/issues/2325) for more details about the items if needed.
+
+## 5 Log
+
+1. Use `placeholders` for log output:
+
+    - Negative demo
+      ```java
+        log.info("Deploy cluster request " + deployRequest);
+      ```
+    - Positive demo
+      ```java
+        log.info("load plugin:{} to {}", file.getName(), appPlugins);
+      ```
+
+2. Pay attention to the selection of `log level` when printing logs
+
+   When printing the log content, if the actual parameters of the log placeholder are passed, it is necessary to avoid premature evaluation to avoid unnecessary evaluation caused by the log level.
+
+    - Negative demo:
+
+      Assuming the current log level is `INFO`:
+
+      ```java
+       // ignored declaration lines.
+       List<User> userList = getUsersByBatch(1000);
+       LOG.debug("All users: {}", getAllUserIds(userList));
+      ```
+
+    - Positive demo:
+
+      In this case, we should determine the log level in advance before making actual log calls as follows:
+
+      ```java
+       // ignored declaration lines.
+       List<User> userList = getUsersByBatch(1000);
+       if (LOG.isDebugEnabled()) {
+         LOG.debug("All ids of users: {}", getAllIDsOfUsers(userList));	
+       }
+       ```
+
+## 6 Testing
+
+1. For some of the `code/variables` used for `testing`, you can use `@VisableForTesting` annotation to indicate that
+
+2. It's recommended to use `JUnit5` to develop test case preparation
+
+3. Using `AssertJ` to develop assertions statements.
+
+4. About the implementation of tests.
+
+    - If the test case only tests an `independent` class or method that does not require external components such as hadoop,
+      remote flink session cluster, etc., it can be written directly using `JUnit5` & `Mockito`.
+
+    - If the test case needs a `real database`, environment or backend environment,
+      but doesn't need to interact with external components, it's recommended to inherit directly from `SpringUnitTestBase`.
+
+    - If the test case requires `a real database, environment` or `backend environment`,
+      but needs to `interact with external components` (`Remote Flink session cluster`, `Hadoop cluster`),
+      it's recommended to write the test case by directly inheriting `SpringIntegrationTestBase`.
+
+5. It's only recommended to use integration tests on critical test links to avoid making the `CI` overhead time too long and the resource load too heavy.
+
+
+## References
+- https://site.mockito.org/
+- https://flink.apache.org/zh/how-to-contribute/code-style-and-quality-preamble/
+- https://alibaba.github.io/p3c/
+- https://rules.sonarsource.com/java/
+- https://joel-costigliola.github.io/assertj/index.html
+- https://junit.org/junit5/
\ No newline at end of file
diff --git a/home/docs/community/document.md b/home/docs/community/document.md
new file mode 100644
index 000000000..039350c40
--- /dev/null
+++ b/home/docs/community/document.md
@@ -0,0 +1,145 @@
+---
+id: 'document'
+title: 'Documentation Notice'
+sidebar_position: 1
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+Good documentation is critical for any type of software. Any contribution that can improve the HertzBeat documentation is welcome.
+
+## Get the document project
+
+Documentation for the HertzBeat project is maintained in a separate [git repository](https://github.com/apache/incubator-hertzbeat-website).
+
+First you need to fork the document project into your own github repository, and then clone the document to your local computer.
+
+```shell
+git clone git@github.com:<your-github-user-name>/incubator-hertzbeat-website
+```
+
+## Preview and generate static files
+
+This website is compiled using node, using Docusaurus framework components
+
+1. Download and install nodejs (version>12.5.0)
+2. Clone the code to the local `git clone git@github.com:apache/incubator-hertzbeat-website.git`
+3. Run `npm install` to install the required dependent libraries.
+4. Run `npm run start` in the root directory, you can visit http://localhost:3000 to view the English mode preview of the site
+5. Run `npm run start-zh` in the root directory, you can visit http://localhost:3000 to view the Chinese mode preview of the site
+6. To generate static website resource files, run `npm run build`. The static resources of the build are in the build directory.
+
+## Directory structure
+
+```html
+|-- community
+|-- docs     // The next version of the document that will be released soon
+|-- download
+|-- faq      // Q&A
+|-- i18n
+|   `-- zh-CN  //Internationalized Chinese
+|       |-- code.json
+|       |-- docusaurus-plugin-content-docs
+|       |-- docusaurus-plugin-content-docs-community
+|       |-- docusaurus-plugin-content-docs-download
+|       |-- docusaurus-plugin-content-docs-faq
+|       `-- docusaurus-theme-classic
+|-- resource  // Original project files for architecture/timing diagram/flow chart, etc.
+|-- src
+|   |-- components
+|   |-- css
+|   |-- js
+|   |-- pages
+|   |   |-- home
+|   |   |-- index.jsx
+|   |   |-- team
+|   |   |-- user
+|   |   `-- versions
+|   |-- styles
+|-- static // Picture static resource
+|   |-- doc  // document picture
+|   |-- user // users picture
+|   |-- home // homepage picture
+|   |-- img  // common picture
+|-- docusaurus.config.js
+```
+
+## Specification
+
+### Directory naming convention
+
+Use all lowercase, separated by underscores. If there is a plural structure, use plural nomenclature, and do not use plural abbreviations
+
+Positive example: `scripts / styles / components / images / utils / layouts / demo_styles / demo-scripts / img / doc`
+
+Counter example: `script / style / demoStyles / imgs / docs`
+
+### Vue and the naming convention of static resource files
+
+All lowercase, separated by a dash
+
+Positive example: `render-dom.js / signup.css / index.html / company-logo.png`
+
+Counter example: `renderDom.js / UserManagement.html`
+
+### Resource Path
+
+Image resources are unified under `static/{module name}`
+
+css and other style files are placed in the `src/css` directory
+
+### Page content modification
+
+> Except for the homepage, team, user, Docs>All Version module page, all other pages can be directly jumped to the corresponding github resource modification page through the'Edit this page' button at the bottom
+
+### Home page modification
+
+Visit the page https://hertzbeat.apache.org/
+Located in `src/pages/home`
+
+```
+├─home
+│ languages.json // Home page Chinese and English configuration
+│ index.less     // homepage style
+```
+
+### Team page modification
+
+Visit the page https://hertzbeat.apache.org/team
+Located in `src/pages/team`
+
+```
+├─team
+│ languages.json
+│ index.js
+│ index.less
+```
+
+### User list page modification
+
+Visit the page https://hertzbeat.apache.org/user
+
+```
+Located in `src/pages/user`
+└─versions
+        data.json
+        images.json
+        index.js
+        index.less
+        languages.json
+```
diff --git a/home/docs/community/how-to-release.md b/home/docs/community/how-to-release.md
new file mode 100644
index 000000000..e49d9073b
--- /dev/null
+++ b/home/docs/community/how-to-release.md
@@ -0,0 +1,761 @@
+---
+id: 'how_to_release'
+title: How to Release
+sidebar_position: 4
+---
+
+This tutorial describes in detail how to release Apache HertzBeat, take the release of version 2.1.0 as an example.
+
+## 1. Environmental requirements
+
+This release process is operated in the Ubuntu OS, and the following tools are required:
+
+- JDK 1.8+
+- Apache Maven 3.x (this process uses 3.8.7)
+- GnuPG 2.x
+- Git
+- SVN (apache uses svn to host project releases)
+
+> Pay attention to setting environment variables `export GPG_TTY=$(tty)`
+
+## 2. Preparing for release
+
+> First summarize the account information to better understand the operation process, will be used many times later.
+- apache id: `muchunjin (APACHE LDAP UserName)`
+- apache passphrase: `APACHE LDAP Passphrase`
+- apache email: `muchunjin@apache.org`
+- gpg real name: `muchunjin (Any name can be used, here I set it to the same name as the apache id)`
+- gpg key passphrase: `The password set when creating the gpg key, you need to remember this password`
+
+### 2.1 Key generation
+
+```shell
+$ gpg --full-gen-key
+gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Please select what kind of key you want:
+(1) RSA and RSA (default)
+(2) DSA and Elgamal
+(3) DSA (sign only)
+(4) RSA (sign only)
+(14) Existing key from card
+Your selection? 1 # Please enter 1
+RSA keys may be between 1024 and 4096 bits long.
+What keysize do you want? (3072) 4096 # Please enter 4096 here
+Requested keysize is 4096 bits
+Please specify how long the key should be valid.
+0 = key does not expire
+<n> = key expires in n days
+<n>w = key expires in n weeks
+<n>m = key expires in n months
+<n>y = key expires in n years
+Key is valid for? (0) 0 # Please enter 0
+Key does not expire at all
+Is this correct? (y/N) y # Please enter y here
+
+GnuPG needs to construct a user ID to identify your key.
+
+Real name: muchunjin # Please enter 'gpg real name'
+Email address: muchunjin@apache.org # Please enter your apache email address here
+Comment: for apache HertzBeat release create at 20230501 # Please enter some comments here
+You selected this USER-ID:
+    "muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>"
+
+Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O # Please enter O here
+We need to generate a lot of random bytes. It is a good idea to perform
+some other action (type on the keyboard, move the mouse, utilize the
+disks) during the prime generation; this gives the random number
+generator a better chance to gain enough entropy.
+
+# At this time, a dialog box will pop up, asking you to enter the key for this gpg. 
+# you need to remember that it will be used in subsequent steps.
+┌─────────────────────────────────────────────────────┐
+│ Please enter this passphrase to                     │
+│ protect your new key                                │
+│                                                     │
+│ Passphrase: _______________________________________ │
+│                                                     │
+│     <OK>                    <Cancel>                │
+└─────────────────────────────────────────────────────┘
+
+# Here you need to re-enter the password in the previous step.
+┌─────────────────────────────────────────────────────┐
+│ Please re-enter this passphrase                     │
+│                                                     │
+│ Passphrase: _______________________________________ │
+│                                                     │
+│     <OK>                    <Cancel>                │
+└─────────────────────────────────────────────────────┘
+gpg: key ACFB69E705016886 marked as ultimately trusted
+gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/DC12398CCC33A5349EB9663DF9D970AB18C9EDF6.rev'
+public and secret key created and signed.
+
+pub   rsa4096 2023-05-01 [SC]
+      85778A4CE4DD04B7E07813ABACFB69E705016886
+uid                      muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>
+sub   rsa4096 2023-05-01 [E]
+```
+
+Keys can be viewed through the `gpg --list-signatures` command
+
+### 2.2 Upload the generated key to the public server
+
+```shell
+$ gpg --keyid-format SHORT --list-keys
+/root/.gnupg/pubring.kbx
+------------------------
+pub   rsa4096/05016886 2023-05-01 [SC]
+      85778A4CE4DD04B7E07813ABACFB69E705016886
+uid         [ultimate] muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>
+sub   rsa4096/0C5A4E1C 2023-05-01 [E]
+
+# Send public key to keyserver via key id
+$ gpg --keyserver keyserver.ubuntu.com --send-key 584EE68E
+# Among them, keyserver.ubuntu.com is the selected keyserver, it is recommended to use this, because the Apache Nexus verification uses this keyserver
+```
+
+#### 2.3 Check if the key is created successfully
+
+Verify whether it is synchronized to the public network, it will take about a minute to find out the answer, if not successful, you can upload and retry multiple times.
+
+```shell
+$ gpg --keyserver keyserver.ubuntu.com --recv-keys 05016886   # If the following content appears, it means success
+gpg: key ACFB69E705016886: "muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>" not changed
+gpg: Total number processed: 1
+gpg:              unchanged: 1
+```
+
+Or enter https://keyserver.ubuntu.com/ address in the browser, enter the name of the key and click 'Search key'
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/b8fe193e-c137-42b0-a833-90a6d975f335)
+
+If the query results are as follows, it means that the key is successfully created.
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/73ada3f2-2d2e-4b76-b25c-34a52db6a069)
+
+#### 2.4 Add the gpg public key to the KEYS file of the Apache SVN project warehouse
+
+- Apache HertzBeat Branch Dev https://dist.apache.org/repos/dist/dev/incubator/hertzbeat
+- Apache HertzBeat Branch Release https://dist.apache.org/repos/dist/release/incubator/hertzbeat/
+
+##### 2.4.1 Add public key to KEYS in dev branch
+
+```shell
+$ mkdir -p hertzbeat/dev
+$ cd hertzbeat_svn/dev
+
+$ svn co https://dist.apache.org/repos/dist/dev/incubator/hertzbeat
+$ cd hertzbeat_svn/dev/hertzbeat
+
+# Append the KEY you generated to the file KEYS, and check if it is added correctly
+$ (gpg --list-sigs muchunjin@apache.org && gpg --export --armor muchunjin@apache.org) >> KEYS 
+
+$ svn ci -m "add gpg key for muchunjin"
+```
+
+##### 2.4.2 Add public key to KEYS in release branch
+
+```shell
+$ mkdir -p hertzbeat_svn/release
+$ cd hertzbeat_svn/release
+
+$ svn co https://dist.apache.org/repos/dist/release/incubator/hertzbeat/
+$ cd hertzbeat_svn/release/hertzbeat
+
+# Append the KEY you generated to the file KEYS, and check if it is added correctly
+$ (gpg --list-sigs muchunjin@apache.org && gpg --export --armor muchunjin@apache.org) >> KEYS 
+
+$ svn ci -m "add gpg key for muchunjin"
+```
+
+#### 2.5 Configure apache maven address and user password settings
+
+- Generate master password
+```shell
+$ mvn --encrypt-master-password <apache password>
+{EM+4/TYVDXYHRbkwjjAS3mE1RhRJXJUSG8aIO5RSxuHU26rKCjuS2vG+/wMjz9te}
+```
+
+- Create the file ${user.home}/.m2/settings-security.xml and configure the password created in the previous step
+
+```shell
+<settingsSecurity>
+  <master>{EM+4/TYVDXYHRbkwjjAS3mE1RhRJXJUSG8aIO5RSxuHU26rKCjuS2vG+/wMjz9te}</master>
+</settingsSecurity>
+```
+
+- Generate the final encrypted password and add it to the ~/.m2/settings.xml file
+
+```shell
+$ mvn --encrypt-password <apache passphrase>
+{/ZLaH78TWboH5IRqNv9pgU4uamuqm9fCIbw0gRWT01c=}
+```
+
+> In the maven configuration file ~/.m2/settings.xml, add the following `server` item
+
+```
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+  
+  <localRepository>/path/to/local/repo</localRepository>
+  
+  <servers>
+    <server>
+        <id>apache.snapshots.https</id>
+        <!-- APACHE LDAP UserName --> 
+        <username>muchunjin</username>
+        <!-- APACHE LDAP password (Fill in the password you just created with the command `mvn --encrypt-password <apache passphrase>`) -->
+        <password>{/ZLaH78TWboH5IRqNv9pgU4uamuqm9fCIbw0gRWT01c=}</password>
+    </server>
+    <server>
+        <id>apache.releases.https</id>
+        <!-- APACHE LDAP UserName --> 
+        <username>muchunjin</username>
+        <!-- APACHE LDAP password (Fill in the password you just created with the command `mvn --encrypt-password <apache passphrase>`) -->
+        <password>{/ZLaH78TWboH5IRqNv9pgU4uamuqm9fCIbw0gRWT01c=}</password>
+    </server>
+  </servers>
+
+  <profiles>
+        <profile>
+          <id>apache-release</id>
+          <properties>
+            <gpg.keyname>05016886</gpg.keyname>
+            <!-- Use an agent: Prevents being asked for the password during the build -->
+            <gpg.useagent>true</gpg.useagent>
+            <gpg.passphrase>passphrase for your gpg key</gpg.passphrase>
+          </properties>
+        </profile>
+  </profiles>
+```
+
+## 3. Prepare material package & release Apache Nexus
+
+#### 3.1 Based on the dev branch, create a release-${release_version}-rcx branch, such as release-2.1.0-rc1, And create a tag named v2.1.0-rc1 based on the release-2.1.0-rc1 branch, and set this tag as pre-release.
+
+![图片](https://user-images.githubusercontent.com/19602424/236656362-1d346faa-6582-44eb-9722-8bb2de0eaa92.png)
+
+#### 3.2 clone release branch to local
+
+```shell
+git clone -b release-2.1.0-rc1 -c core.autocrlf=false git@github.com:apache/incubator-hertzbeat.git
+```
+
+#### 3.3 Publish the relevant JARs to Apache Nexus
+
+##### 3.3.1 Release scala 2.11 to the Apache Nexus repository
+
+```shell
+mvn clean install \
+-Pscala-2.11 \
+-DskipTests \
+-Dcheckstyle.skip=true \
+-Dmaven.javadoc.skip=true \
+-pl 'hertzbeat-common,hertzbeat-flink' \
+-pl '!hertzbeat-console/hertzbeat-console-service' \
+-amd
+```
+
+```shell
+mvn deploy \
+-Pscala-2.11,apache-release \
+-DskipTests \
+-Dmaven.javadoc.skip=true \
+-DretryFailedDeploymentCount=3
+```
+
+##### 3.3.2 Release scala 2.12 to the Apache Nexus repository
+
+```shell
+mvn clean install \
+-Pscala-2.12 \
+-DskipTests \
+-Dcheckstyle.skip=true \
+-Dmaven.javadoc.skip=true \
+-pl 'hertzbeat-common,hertzbeat-flink' \
+-pl '!hertzbeat-console/hertzbeat-console-service' \
+-amd
+```
+
+```shell
+mvn deploy \
+-Pscala-2.12,apache-release \
+-DskipTests \
+-Dmaven.javadoc.skip=true \
+-DretryFailedDeploymentCount=3
+```
+
+```shell
+mvn deploy \
+-Papache-release \
+-DskipTests \
+-Dmaven.javadoc.skip=true \
+-DretryFailedDeploymentCount=3
+```
+
+##### 3.3.3 Check for successful publishing to the Apache Nexus repository
+
+> Visit https://repository.apache.org/ and log in, if there are scala 2.11, scala 2.12, it means success.
+
+![图片](https://user-images.githubusercontent.com/19602424/236657233-08d142eb-5f81-427b-a04d-9ab3172199c1.png)
+
+#### 3.4 Compile the binary package
+
+> Scala 2.11 compilation and packaging
+
+```shell
+> ./build.sh # choose "mixed mode" and "scala 2.11"
+```
+
+> Scala 2.12 compilation and packaging
+
+```shell
+> ./build.sh # choose "mixed mode" and "scala 2.12"
+```
+
+> Package the project source code
+
+```shell
+git archive \
+--format=tar.gz \
+--output="dist/apache-hertzbeat-2.1.0-incubating-src.tar.gz" \
+--prefix=apache-hertzbeat-2.1.0-incubating-src/ \
+release-2.1.0-rc1
+```
+
+> The following 3 files will be generated
+
+```
+apache-hertzbeat-2.1.0-incubating-src.tar.gz
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz
+```
+
+#### 3.4 Sign binary and source packages
+
+```shell
+cd dist
+
+# sign
+for i in *.tar.gz; do echo $i; gpg --armor --output $i.asc --detach-sig $i ; done
+
+# SHA512
+for i in *.tar.gz; do echo $i; sha512sum $i > $i.sha512 ; done
+```
+
+> The final file list is as follows
+
+```
+apache-hertzbeat-2.1.0-incubating-src.tar.gz
+apache-hertzbeat-2.1.0-incubating-src.tar.gz.asc
+apache-hertzbeat-2.1.0-incubating-src.tar.gz.sha512
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz.asc
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz.sha512
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz.asc
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz.sha512
+```
+
+#### 3.5 Verify signature
+
+```shell
+$ cd dist
+
+# Verify signature
+$ for i in *.tar.gz; do echo $i; gpg --verify $i.asc $i ; done
+
+apache-hertzbeat-2.1.0-incubating-src.tar.gz
+gpg: Signature made Tue May  2 12:16:35 2023 CST
+gpg:                using RSA key 85778A4CE4DD04B7E07813ABACFB69E705016886
+gpg: Good signature from "muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>" [ultimate]
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz
+gpg: Signature made Tue May  2 12:16:36 2023 CST
+gpg:                using RSA key 85778A4CE4DD04B7E07813ABACFB69E705016886
+gpg: Good signature from "muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>" [ultimate]
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz
+gpg: Signature made Tue May  2 12:16:37 2023 CST
+gpg:                using RSA key 85778A4CE4DD04B7E07813ABACFB69E705016886
+gpg: BAD signature from "muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>" [ultimate]
+
+# Verify SHA512
+$ for i in *.tar.gz; do echo $i; sha512sum --check $i.sha512; done
+
+apache-hertzbeat-2.1.0-incubating-src.tar.gz
+apache-hertzbeat-2.1.0-incubating-src.tar.gz: OK
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz: OK
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz: OK
+```
+
+#### 3.6 Publish the dev directory of the Apache SVN warehouse of the material package
+
+```shell
+# Check out the dev directory of the Apache SVN warehouse to the hertzbeat_svn_dev directory under dist in the root directory of the Apache HertzBeat project
+svn co https://dist.apache.org/repos/dist/dev/incubator/hertzbeat dist/hertzbeat_svn_dev
+
+svn co --depth empty https://dist.apache.org/repos/dist/dev/incubator/hertzbeat
+```
+
+Create a version number directory and name it in the form of ${release_version}-${RC_version}. RC_version starts from 1, that is, the candidate version starts from RC1. During the release process, there is a problem that causes the vote to fail. If it needs to be corrected, it needs to iterate the RC version , the RC version number needs to be +1. For example: Vote for version 2.1.0-RC1. If the vote passes without any problems, the RC1 version material will be released as the final versi [...]
+
+```shell
+mkdir -p dist/hertzbeat_svn_dev/2.1.0-RC1
+cp -f dist/* dist/hertzbeat_svn_dev/2.1.0-RC1
+```
+
+Commit to SVN
+
+```shell
+cd dist/hertzbeat_svn_dev/
+
+# 1.check svn status
+svn status
+
+# 2. add to svn
+svn add 2.0.0-RC1
+
+svn status
+
+# 3. Submit to svn remote server
+svn commit -m "release for HertzBeat 2.1.0"
+```
+
+#### 3.7 Check Apache SVN Commit Results
+
+> Visit the address https://dist.apache.org/repos/dist/dev/incubator/hertzbeat/2.1.0-RC1/ in the browser
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/e4763537-af9f-4f2a-967d-912e6670b360)
+
+## 3. Enter the community voting stage
+
+#### 3.1 Send a Community Vote Email
+
+Send a voting email in the community requires at least three `+1` and no `-1`.
+
+> `Send to`: dev@hertzbeat.apache.org <br />
+> `Title`: [VOTE] Release Apache HertzBeat (Incubating) 2.1.0 rc1 <br />
+> `Body`: 
+
+```
+Hello HertzBeat Community:
+
+This is a call for vote to release Apache HertzBeat(Incubating) version release-2.1.0-RC1.
+
+Apache Streamark - Make stream processing easier! Easy-to-use streaming application development framework and operation platform.
+
+Release notes:
+https://hertzbeat.apache.org/download/release-note/2.1.0/
+
+The release candidates:
+https://dist.apache.org/repos/dist/dev/incubator/hertzbeat/2.1.0-RC1/
+
+Maven artifacts are available in a staging repository at:
+https://repository.apache.org/content/repositories/orgapachehertzbeat-1012/
+
+Git tag for the release:
+https://github.com/apache/incubator-hertzbeat/releases/tag/v2.1.0-rc1
+
+The artifacts signed with PGP key [05016886], corresponding to [muchunjin@apache.org], that can be found in keys file:
+https://downloads.apache.org/incubator/hertzbeat/KEYS
+
+The vote will be open for at least 72 hours or until the necessary number of votes are reached.
+
+Please vote accordingly:
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+*Valid check is a requirement for a vote. *Checklist for reference:
+
+[ ] Download HertzBeat are valid.
+[ ] Checksums and PGP signatures are valid.
+[ ] Source code distributions have correct names matching the current
+release.
+[ ] LICENSE and NOTICE files are correct for each HertzBeat repo.
+[ ] All files have license headers if necessary.
+[ ] No compiled archives bundled in source archive.
+[ ] Can compile from source.
+
+More detail checklist please refer:
+https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist
+
+Steps to validate the release,Please refer to:
+https://hertzbeat.apache.org/community/release/how-to-verify
+
+How to Build:
+
+1.cd incubator-hertzbeat
+2.sh ./build.sh
+
+Thanks!
+```
+
+After 72 hours, the voting results will be counted, and the voting result email will be sent, as follows.
+
+> `Send to`: dev@hertzbeat.apache.org <br />
+> `Title`: [RESULT][VOTE] Release Apache HertzBeat (Incubating) 2.1.0-rc1 <br />
+> `Body`:
+
+```
+Dear HertzBeat community,
+
+Thanks for your review and vote for "Release Apache HertzBeat (Incubating) 2.1.0-rc1"
+I'm happy to announce the vote has passed:
+
+
+4 binding +1, from:
+
+- Zhuoyu Chen
+- Huajie Wang
+- Linying Yu
+- Shaokang Lv
+
+1 non-binding +1, from:
+
+- Roc Marshal
+
+
+no 0 or -1 votes.
+
+Vote thread:
+https://lists.apache.org/thread/t01b2lbtqzyt7j4dsbdp5qjc3gngjsdq
+
+
+Thank you to everyone who helped us to verify and vote for this release. We will move to the ASF Incubator voting shortly.
+
+
+Best,
+ChunJin Mu
+```
+
+One item of the email content is `Vote thread`, and the link is obtained as follows: <br />
+Visit this address https://lists.apache.org/list.html?dev@hertzbeat.apache.org, and find the mail title and click to display the voting content
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/5755ed06-529f-4739-96a8-1ac13bbb21ea)
+
+Right-click the title and click Copy Link Address to get the link
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/1616da5b-7891-45cc-b956-a0ba5e7ce874)
+
+#### 3.2 Send Incubator Community voting mail
+
+Send a voting email in the incubator community requires at least three `+1` and no `-1`.
+
+> `Send to`: general@incubator.apache.org <br />
+> `cc`: dev@hertzbeat.apache.org、tison@apache.org、willem.jiang@gmail.com <br />
+> `Title`: [VOTE] Release Apache HertzBeat(Incubating) 2.1.0-rc1 <br />
+> `Body`:
+
+```
+Hello Incubator Community:
+
+This is a call for a vote to release Apache HertzBeat(Incubating) version 2.1.0-RC1.
+The Apache HertzBeat community has voted on and approved a proposal to release Apache HertzBeat(Incubating) version 2.1.0-RC1.
+We now kindly request the Incubator PMC members review and vote on this incubator release.
+Apache HertzBeat, Make stream processing easier! Easy-to-use streaming application development framework and operation platform.
+
+HertzBeat community vote thread:
+https://lists.apache.org/thread/t01b2lbtqzyt7j4dsbdp5qjc3gngjsdq
+
+Vote result thread:
+https://lists.apache.org/thread/t5z58mvrs1drgzfyc48c9lhmd8skswn7
+
+The release candidate:
+https://dist.apache.org/repos/dist/dev/incubator/hertzbeat/2.1.0-RC1/
+
+Git tag for the release:
+https://github.com/apache/incubator-hertzbeat/releases/tag/v2.1.0-rc1
+
+Maven artifacts are available in a staging repository at:
+https://repository.apache.org/content/repositories/orgapachehertzbeat-1012/
+
+The artifacts signed with PGP key [05016886], corresponding to [muchunjin@apache.org], that can be found in keys file:
+https://downloads.apache.org/incubator/hertzbeat/KEYS
+
+The vote will be open for at least 72 hours or until the necessary number of votes are reached.
+
+Please vote accordingly:
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+More detailed checklist please refer:
+• https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist
+
+Steps to validate the release, Please refer to:
+• https://www.apache.org/info/verification.html
+• https://hertzbeat.apache.org/community/release/how-to-verify
+
+
+How to Build:
+
+1) clone source code:
+> git clone -b v2.1.0-rc1 git@github.com:apache/incubator-hertzbeat.git
+
+2) build project:
+> cd incubator-hertzbeat && sh ./build.sh
+
+
+Thanks,
+
+On behalf of Apache HertzBeat(Incubating) community
+
+
+Best,
+ChunJin Mu
+```
+
+If there is no -1 after 72 hours, reply to the email as follows
+
+> `Send to`: general@incubator.apache.org <br />
+> `cc`: dev@hertzbeat.apache.org <br />
+> `Body`:
+
+```
+Thanks everyone for review and vote, 72H passed. I'll announce the vote result soon.
+
+Best,
+Chunjin Mu
+```
+
+Then the voting results will be counted, and the voting result email will be sent, as follows.
+
+> `Send to`: general@incubator.apache.org <br />
+> `cc`: dev@hertzbeat.apache.org、tison@apache.org、willem.jiang@gmail.com <br />
+> `Title`: [RESULT][VOTE] Release Apache HertzBeat(Incubating) 2.1.0-rc1 <br />
+> `Body`:
+
+```
+Hi all,
+
+Thanks for your review and vote for "Release Apache HertzBeat (Incubating) 2.1.0-rc1"
+I'm happy to announce the vote has passed:
+
+3 binding votes, no +0 or -1 votes.
+Thanks for reviewing and voting.
+
++3 (binding) +1, from:
+- tison
+- Gang Li
+- Willem Jiang
+
+no 0 or -1 votes.
+
+Vote thread:
+https://lists.apache.org/thread/k3cvcbzxqs6qy62d1o6r9pqpykcgvvhm
+
+
+Thanks everyone for your feedback and help with HertzBeat apache release. The HertzBeat team will take the steps to complete this release and will announce it soon.
+
+Best,
+ChunJin Mu
+```
+
+One item of the email content is `Vote thread`, and the link is obtained as follows: <br />
+Visit this address https://lists.apache.org/list.html?general@incubator.apache.org, and find the mail title and click to display the voting content
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/aea68925-7911-4413-8b2d-aea12685337f)
+Then right-click the title and click Copy Link Address to get the link.
+
+Wait a day to see if the tutor has any other comments, if not, send the following announcement email
+
+## 4. Complete the final publishing steps
+
+#### 4.1 Migrating source and binary packages
+
+```shell
+svn mv https://dist.apache.org/repos/dist/dev/incubator/hertzbeat/2.1.0-RC1 https://dist.apache.org/repos/dist/release/incubator/hertzbeat/2.1.0  -m "transfer packages for 2.1.0-RC1"
+```
+
+#### 4.2 Publish releases in the Apache Staging repository
+
+- Log in to http://repository.apache.org , log in with your Apache account
+- Click Staging repositories on the left
+- Select your most recently uploaded warehouse, the warehouse specified in the voting email
+- Click the Release button above, this process will perform a series of checks
+> It usually takes 24 hours for the warehouse to synchronize to other data sources
+
+#### 4.3 Add the new version download address to the official website
+
+Add the following to the src/pages/download/data.json file on the official website
+
+```
+{
+    "version": "2.1.0",
+    "date": "2023-05-11"
+}
+```
+
+The final file content is as follows
+
+```
+[
+    {
+    "version": "2.0.0",
+    "date": "2023-02-21"
+    },
+    {
+    "version": "2.1.0",
+    "date": "2023-05-11"
+    }
+]
+```
+
+Open the official website address https://hertzbeat.apache.org/download/ to see if there is a new version of the download
+> It should be noted that the download link may take effect after an hour, so please pay attention to it.
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/e7900fb2-7bfc-4fa1-bd40-9806e6a822ef)
+
+#### 4.4 Generate a release on github
+
+Create a tag named v2.1.0 based on the release-2.1.0-rc1 branch, and set this tag to latest release.
+
+Then enter Release Title and Describe
+- Release Title: 
+```
+v2.1.0-incubating
+```
+- Describe:
+```
+Release-2.1.0-incubating
+release note: https://hertzbeat.apache.org/download/release-note/2.1.0
+```
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/84723ff5-a295-471d-8265-1b8ef867c3d1)
+
+Then click the `Publish release` button.
+
+The rename the release-2.1.0-rc1 branch to release-2.1.0.
+
+#### 4.5 Send new version announcement email
+
+> `Send to`: general@incubator.apache.org <br />
+> `cc`: dev@hertzbeat.apache.org <br />
+> `Title`: [ANNOUNCE] Release Apache HertzBeat (Incubating) 2.1.0 <br />
+> `Body`:
+
+```
+Hi all,
+
+We are glad to announce the release of Apache HertzBeat(incubating) 2.1.0.
+Once again I would like to express my thanks to your help.
+
+Apache HertzBeat(https://hertzbeat.apache.org/) - Make stream processing easier! Easy-to-use streaming application development framework and operation platform.
+
+Download Links: https://hertzbeat.apache.org/download/
+Release Notes: https://hertzbeat.apache.org/download/release-note/2.1.0
+
+HertzBeat Resources:
+- Issue: https://github.com/apache/incubator-hertzbeat/issues
+- Mailing list: dev@hertzbeat.apache.org
+
+- Apache HertzBeat Team
+
+Best,
+ChunJin Mu
+```
+
+This version release is over.
diff --git a/home/docs/community/how-to-verify.md b/home/docs/community/how-to-verify.md
new file mode 100644
index 000000000..530faf252
--- /dev/null
+++ b/home/docs/community/how-to-verify.md
@@ -0,0 +1,231 @@
+---
+id: how_to_verify_release
+title: How to Verify Release
+sidebar_position: 4
+---
+
+# Verify the candidate version
+
+For detailed check list, please refer to the official [check list](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+## 1. Download the candidate version
+
+Download the candidate version to be released to the local environment Need to rely on gpg tool, if not, it is recommended to install `gpg2`.
+
+:::caution
+
+If the network is poor, downloading may be time-consuming. The download is completed normally in about 20 minutes, please wait patiently.
+
+:::
+
+```shell
+#If there is svn locally, you can clone to the local
+$ svn co https://dist.apache.org/repos/dist/dev/incubator/hertzbeat/${release_version}-${rc_version}/
+#or download the material file directly
+$ wget https://dist.apache.org/repos/dist/dev/incubator/hertzbeat/${release_version}-${rc_version}/xxx.xxx
+```
+
+## 2. Verify that the uploaded version is compliant
+
+Start the verification process, which includes but is not limited to the following content and forms.
+
+### 2.1 Check whether the release package is complete
+
+The package uploaded to dist must include the source code package, and the binary package is optional.
+
+1. Whether to include the source code package
+2. Whether to include the signature of the source code package
+3. Whether to include the sha512 of the source code package
+4. If the binary package is uploaded, also check the contents listed in (2)-(4)
+
+
+### 2.2 Check gpg signature
+
+First import the publisher's public key. Import KEYS from the svn repository to the local environment. (The person who releases the version does not need to import it again, the person who helps to do the verification needs to import it, and the user name is enough for the person who issued the version)
+
+#### 2.2.1 Import public key
+
+```shell
+$ curl  https://downloads.apache.org/incubator/hertzbeat/KEYS > KEYS # Download KEYS
+$ gpg --import KEYS # Import KEYS to local
+```
+#### 2.2.2 Trust the public key
+
+Trust the KEY used in this version:
+
+```shell
+$ gpg --edit-key xxxxxxxxxx #KEY user used in this version
+gpg (GnuPG) 2.2.21; Copyright (C) 2020 Free Software Foundation, Inc.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Secret key is available.
+gpg> trust #trust
+Please decide how far you trust this user to correctly verify other users' keys
+(by looking at passports, checking fingerprints from different sources, etc.)
+
+  1 = I don't know or won't say
+  2 = I do NOT trust
+  3 = I trust marginally
+  4 = I trust fully
+  5 = I trust ultimately
+  m = back to the main menu
+
+Your decision? 5 #choose 5
+Do you really want to set this key to ultimate trust? (y/N) y  #choose y
+                                                            
+gpg>
+         
+```
+
+#### 2.2.3 Check the gpg signature
+
+```shell
+$ for i in *.tar.gz; do echo $i; gpg --verify $i.asc $i; done
+```
+
+check result
+
+> If something like the following appears, it means the signature is correct. Keyword: **`Good signature`**
+
+```shell
+apache-hertzbeat-xxx-incubating-src.tar.gz
+gpg: Signature made XXXX
+gpg: using RSA key XXXXX
+gpg: Good signature from "xxx @apache.org>"
+```
+
+### 2.3 Check sha512 hash
+
+```shell
+$ for i in *.tar.gz; do echo $i; sha512sum --check  $i.sha512; done
+```
+
+### 2.4 Check the binary package
+
+unzip  `apache-hertzbeat_${scala.version}-${release.version}-incubating-bin.tar.gz`
+
+```shell
+# scala 2.11 
+tar -xzvf apache-hertzbeat_2.11-${release.version}-incubating-bin.tar.gz
+
+# scala 2.12 
+tar -xzvf apache-hertzbeat_2.12-${release.version}-incubating-bin.tar.gz
+```
+
+check as follows:
+
+- [ ] Check whether the source package contains unnecessary files, which makes the tar package too large
+- [ ] Folder contains the word `incubating`
+- [ ] There are `LICENSE` and `NOTICE` files
+- [ ] There is a `DISCLAIMER` or `DISCLAIMER-WIP` file
+- [ ] The year in the `NOTICE` file is correct
+- [ ] Only text files exist, not binary files
+- [ ] All files have ASF license at the beginning
+- [ ] Able to compile correctly
+- [ ] Check for extra files or folders, such as empty folders, etc.
+- [ ] .....
+
+
+
+### 2.5 Check the source package
+
+> If the binary/web-binary package is uploaded, check the binary package.
+
+Unzip `apache-hertzbeat-${release_version}-incubating-src.tar.gz`
+
+```shell
+cd apache-hertzbeat-${release_version}-incubating-src
+
+# execute build.sh
+./build.sh
+```
+
+***package mode, just select mixed mode ***
+
+>[HertzBeat] HertzBeat supports front-end and server-side mixed / detached packaging mode, Which mode do you need ?
+>
+>1. mixed mode
+>
+>2. detached mode
+>
+>  select 1
+
+>[HertzBeat] HertzBeat supports Scala 2.11 and 2.12. Which version do you need ?
+>
+>1. 2.11
+>2. 2.12
+>
+
+It takes about 8 minutes to compile once. After the compilation is completed, the ***dist*** directory will be generated under the project root path, and the final compiled project binary will be placed here, and the following checks will be made:
+
+and check as follows:
+- [ ] There are `LICENSE` and `NOTICE` files
+- [ ] There is a `DISCLAIMER` or `DISCLAIMER-WIP` file
+- [ ] The year in the `NOTICE` file is correct
+- [ ] All text files have ASF license at the beginning
+- [ ] Check the third-party dependent license:
+- [ ] Compatible with third-party dependent licenses
+- [ ] All third-party dependent licenses are named in the `LICENSE` file
+- [ ] If you are relying on the Apache license and there is a `NOTICE` file, then these `NOTICE` files also need to be added to the version of the `NOTICE` file
+- [ ] .....
+
+You can refer to this article: [ASF Third Party License Policy](https://apache.org/legal/resolved.html)
+
+
+## 3. Email reply
+
+If you initiate a posting vote, you can refer to this response example to reply to the email after verification
+<font color="red">
+When replying to the email, you must bring the information that you have checked by yourself. Simply replying to `+1 approve` is invalid.
+
+When PPMC votes in the dev@hertzbeat.apache.org hertzbeat community, Please bring the binding suffix to indicate that it has a binding vote for the vote in the hertzbeat community, and it is convenient to count the voting results.
+
+When IPMC votes in the general@incubator.apache.org incubator community. Please bring the binding suffix to indicate that the voting in the incubator community has a binding vote, which is convenient for counting the voting results.
+</font>
+
+:::caution
+
+If you have already voted on dev@hertzbeat.apache.org, you can take it directly to the incubator community when you reply to the vote, such as:
+
+```html
+//Incubator community voting, only IPMC members have binding binding,PPMC needs to be aware of binding changes
+Forward my +1 from dev@listhertzbeatnkis (non-binding)
+Copy my +1 from hertzbeat DEV ML (non-binding)
+````
+
+:::
+
+
+Non-PPMC/Non-IPMC member:
+
+```text
++1 (non-binding)
+I checked:
+     1. All download links are valid
+     2. Checksum and signature are OK
+     3. LICENSE and NOTICE are exist
+     4. Build successfully on macOS(Big Sur)
+     5. 
+````
+
+PPMC/IPMC member:
+
+```text
+//Incubator community voting, only IPMC members have binding binding
++1 (binding)
+I checked:
+     1. All download links are valid
+     2. Checksum and signature are OK
+     3. LICENSE and NOTICE are exist
+     4. Build successfully on macOS(Big Sur)
+     5. 
+````
+
+
+## 4. Precautions
+
+<font color="red">
+If you have maven tools installed, you can replace ./mvnw or mvnw.cmd with your own mvn command
+mvnw is short for Maven Wrapper. It can support running Maven projects without installing Maven and configuring environment variables. If it can't find it, it will download the corresponding Maven version according to the configuration file
+</font>
diff --git a/home/docs/community/mailing_lists.md b/home/docs/community/mailing_lists.md
new file mode 100644
index 000000000..b7749ce3d
--- /dev/null
+++ b/home/docs/community/mailing_lists.md
@@ -0,0 +1,60 @@
+---
+id: 'mailing_lists'
+title: 'Mailing Lists'
+sidebar_position: 1
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+The HertzBeat developer mailing list is the preferred means for all your questions when using HertzBeat, which pushes your doubts out to the entire community.
+This is the best way to keep up-to-date with the community.
+
+Before you post anything to the mailing lists, be sure that you already **subscribe** to them.
+The currently available lists are listed in the below table.
+
+## Usages
+
+### Developer List
+
+- Use this list for your HertzBeat questions
+- Used by HertzBeat contributors to discuss development of HertzBeat
+
+### Commits List
+
+- Notifications on changes to the HertzBeat codebase
+
+| List Name           | Address                      | Subscribe                                                  | Unsubscribe                                                    | Archive                                                                    |
+|---------------------|------------------------------|------------------------------------------------------------|----------------------------------------------------------------|----------------------------------------------------------------------------|
+| **Developer List**  | dev@hertzbeat.apache.org     | [subscribe](mailto:dev-subscribe@hertzbeat.apache.org)     | [unsubscribe](mailto:dev-unsubscribe@hertzbeat.apache.org)     | [archive](https://lists.apache.org/list.html?dev@hertzbeat.apache.org)     |
+| **Commits List**    | commits@hertzbeat.apache.org | [subscribe](mailto:commits-subscribe@hertzbeat.apache.org) | [unsubscribe](mailto:commits-unsubscribe@hertzbeat.apache.org) | [archive](https://lists.apache.org/list.html?commits@hertzbeat.apache.org) |
+
+## Steps for Subscription
+
+Sending a subscription email is also very simple. The steps are as follows:
+
+- 1、**Subscribe**: Click the **subscribe** button in the above table, and it redirects to your mail client. The subject and content are arbitrary.
+  After that, you will receive a confirmation email from dev-help@hertzbeat.apache.org (if not received, please confirm whether the email is automatically classified as SPAM, promotion email, subscription email, etc.).
+- 2、**Confirm**: Reply directly to the confirmation email, or click on the link in the email to reply quickly. The subject and content are arbitrary.
+- 3、**Welcome**: After completing the above steps, you will receive a welcome email with the subject WELCOME to dev@hertzbeat.apache.org, and you have successfully subscribed to the Apache HertzBeat mailing list.
+
+## Post Plain Text Mails
+
+When posting to the mailing lists, please use plain text emails.
+**Do not use HTML emails**.
+HTML emails are more likely to be targeted as spam mails and rejected.
+It may get malformed through different mail clients and not easily readable by others.
\ No newline at end of file
diff --git a/home/docs/community/new_committer_process.md b/home/docs/community/new_committer_process.md
new file mode 100644
index 000000000..ba6ccd80a
--- /dev/null
+++ b/home/docs/community/new_committer_process.md
@@ -0,0 +1,245 @@
+---
+id: 'new_committer_process'
+title: 'New Committer Process'
+sidebar_position: 4
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+This guideline is based on [apache newcommitter](https://community.apache.org/newcommitter.html#new-committer-process)
+
+## The process of new Committer
+
+- Call a vote in mailing `private@hertzbeat.apache.org`
+
+  see **Committer Vote Template**
+
+- Close the vote
+
+  see **Close Vote Template**
+
+- If the result is positive, invite the new committer
+
+  see **Committer Invite Template**
+
+- If accept, then: Accept the committer
+
+  see **Committer Accept Template**
+
+- Wait until we see that receipt of CLA is recorded
+
+- Request creation of the committer account
+
+  see **Committer Account Creation**
+
+    - Wait until root says it is done
+    - PMC Chair enables svn and other access
+    - Add committer to the appropriate groups in JIRA and CWiki
+
+- Notify the committer of completion
+
+  see **Committer Done Template**
+
+## Template
+
+Note that, there are three placeholder in template should be replaced before using
+
+- NEW_COMMITTER_NAME
+- NEW_COMMITTER_EMAIL
+- NEW_COMMITTER_APACHE_NAME
+
+### Committer Vote Template
+
+```text
+To: private@hertzbeat.apache.org
+Subject: [VOTE] New committer: ${NEW_COMMITTER_NAME}
+```
+
+```text
+Hi HertzBeat PPMC,
+
+This is a formal vote about inviting ${NEW_COMMITTER_NAME} as our new committer.
+
+${Work list}[1]
+
+[1] https://github.com/apache/hertzbeat/commits?author=${NEW_COMMITTER_NAME}
+```
+
+Note that, Voting ends one week from today, i.e.
+[midnight UTC on YYYY-MM-DD](https://www.timeanddate.com/counters/customcounter.html?year=YYYY&month=MM&day=DD)
+See voting [guidelines](https://community.apache.org/newcommitter.html)
+
+### Close Vote Template
+
+```text
+To: private@hertzbeat.apache.org
+Subject: [RESULT] [VOTE] New committer: ${NEW_COMMITTER_NAME}
+```
+
+```text
+Hi HertzBeat PPMC,
+
+The vote has now closed. The results are:
+
+Binding Votes:
+
++1 [TOTAL BINDING +1 VOTES]
+ 0 [TOTAL BINDING +0/-0 VOTES]
+-1 [TOTAL BINDING -1 VOTES]
+
+The vote is ***successful/not successful***
+```
+
+### Committer Invite Template
+
+```text
+To: ${NEW_COMMITTER_EMAIL}
+Cc: private@hertzbeat.apache.org
+Subject: Invitation to become HertzBeat committer: ${NEW_COMMITTER_NAME}
+```
+
+```text
+Hello ${NEW_COMMITTER_NAME},
+
+The HertzBeat Project Management Committee (PMC) 
+hereby offers you committer privileges to the project.
+These privileges are offered on the understanding that
+you'll use them reasonably and with common sense.
+We like to work on trust rather than unnecessary constraints. 
+
+Being a committer enables you to more easily make 
+changes without needing to go through the patch 
+submission process.
+
+Being a committer does not require you to 
+participate any more than you already do. It does 
+tend to make one even more committed.  You will 
+probably find that you spend more time here.
+
+Of course, you can decline and instead remain as a 
+contributor, participating as you do now.
+
+A. This personal invitation is a chance for you to 
+accept or decline in private.  Either way, please 
+let us know in reply to the private@hertzbeat.apache.org
+address only.
+
+B. If you accept, the next step is to register an iCLA:
+    1. Details of the iCLA and the forms are found 
+    through this link: https://www.apache.org/licenses/#clas
+
+    2. Instructions for its completion and return to 
+    the Secretary of the ASF are found at
+    https://www.apache.org/licenses/#submitting
+
+    3. When you transmit the completed iCLA, request 
+    to notify the Apache HertzBeat and choose a 
+    unique Apache ID. Look to see if your preferred 
+    ID is already taken at 
+    https://people.apache.org/committer-index.html
+    This will allow the Secretary to notify the PMC 
+    when your iCLA has been recorded.
+
+When recording of your iCLA is noted, you will 
+receive a follow-up message with the next steps for 
+establishing you as a committer.
+```
+
+### Committer Accept Template
+
+```text
+To: ${NEW_COMMITTER_EMAIL}
+Cc: private@hertzbeat.apache.org
+Subject: Re: invitation to become HertzBeat committer
+```
+
+```text
+Welcome. Here are the next steps in becoming a project committer. After that
+we will make an announcement to the dev@hertzbeat.apache.org list.
+
+You need to send a Contributor License Agreement to the ASF.
+Normally you would send an Individual CLA. If you also make
+contributions done in work time or using work resources,
+see the Corporate CLA. Ask us if you have any issues.
+https://www.apache.org/licenses/#clas.
+
+You need to choose a preferred ASF user name and alternatives.
+In order to ensure it is available you can view a list of taken IDs at
+https://people.apache.org/committer-index.html
+
+Please notify us when you have submitted the CLA and by what means 
+you did so. This will enable us to monitor its progress.
+
+We will arrange for your Apache user account when the CLA has 
+been recorded.
+
+After that is done, please make followup replies to the dev@hertzbeat.apache.org list.
+We generally discuss everything there and keep the
+private@hertzbeat.apache.org list for occasional matters which must be private.
+
+The developer section of the website describes roles within the ASF and provides other
+resources:
+  https://www.apache.org/foundation/how-it-works.html
+  https://www.apache.org/dev/
+
+The incubator also has some useful information for new committers
+in incubating projects:
+  https://incubator.apache.org/guides/committer.html
+  https://incubator.apache.org/guides/ppmc.html
+
+Just as before you became a committer, participation in any ASF community
+requires adherence to the ASF Code of Conduct:
+  https://www.apache.org/foundation/policies/conduct.html
+
+Yours,
+The Apache HertzBeat PPMC
+```
+
+### Committer Done Template
+
+```text
+To: private@hertzbeat.apache.org, ${NEW_COMMITTER_EMAIL}
+Subject: account request: ${NEW_COMMITTER_NAME}
+```
+
+```text
+${NEW_COMMITTER_NAME}, as you know, the ASF Infrastructure has set up your
+committer account with the username '${NEW_COMMITTER_APACHE_NAME}'.
+
+Please follow the instructions to set up your SSH,
+svn password, svn configuration, email forwarding, etc.
+https://www.apache.org/dev/#committers
+
+You have commit access to specific sections of the
+ASF repository, as follows:
+
+The general "committers" at:
+  https://svn.apache.org/repos/private/committers
+
+If you have any questions during this phase, then please
+see the following resources:
+
+Apache developer's pages: https://www.apache.org/dev/
+Incubator committer guide: https://incubator.apache.org/guides/committer.html
+
+Naturally, if you don't understand anything be sure to ask us on the dev@hertzbeat.apache.org mailing list. 
+Documentation is maintained by volunteers and hence can be out-of-date and incomplete - of course
+you can now help fix that.
+
+A PPMC member will announce your election to the dev list soon.
+```
\ No newline at end of file
diff --git a/home/docs/community/new_pmc_member_process.md b/home/docs/community/new_pmc_member_process.md
new file mode 100644
index 000000000..1b2dfe4f0
--- /dev/null
+++ b/home/docs/community/new_pmc_member_process.md
@@ -0,0 +1,285 @@
+---
+id: 'new_pmc_ember_process'
+title: 'New PMC Member Process'
+sidebar_position: 5
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+This guideline is based on [apache newcommitter](https://community.apache.org/newcommitter.html#new-committer-process)
+
+## The process of new PMC member
+
+- Call a vote in mailing `private@hertzbeat.apache.org`
+
+  see **PMC Member Vote Template**
+
+- Close the vote
+
+  see **Close Vote Template**
+
+- Board Approval of new PMC member
+
+  see **Board Approval of new PMC member**
+
+- If the result is positive, invite the new PMC member
+
+  see **PMC member Invite Template**
+
+- If accept, then: Accept the PMC member
+
+  see **PMC Member Accept Template**
+
+- Notify the PMC member of completion
+
+  see **PMC Member Done Template**
+
+- Announce the new PMC member
+
+  see **PMC Member Announce Template**
+
+## Template
+
+Note that, there are three placeholder in template should be replaced before using
+
+- NEW_PMC_NAME
+- NEW_PMC_EMAIL
+- NEW_PMC_APACHE_NAME
+
+### PMC Member Vote Template
+
+```text
+To: private@hertzbeat.apache.org
+Subject: [VOTE] New PMC member candidate: ${NEW_PMC_NAME}
+```
+
+```text
+Hi HertzBeat PPMC,
+
+This is a formal vote about inviting ${NEW_PMC_NAME} as our new PMC member.
+
+${Work list}[1]
+
+[1] https://github.com/apache/hertzbeat/commits?author=${NEW_PMC_NAME}
+```
+
+Note that, Voting ends one week from today, i.e. [midnight UTC on YYYY-MM-DD](https://www.timeanddate.com/counters/customcounter.html?year=YYYY&month=MM&day=DD)
+See voting [guidelines](https://community.apache.org/newcommitter.html)
+
+
+### Close Vote Template
+
+```text
+To: private@hertzbeat.apache.org
+Subject: [RESULT] [VOTE] New PMC member: ${NEW_PMC_NAME}
+```
+
+```text
+Hi HertzBeat PPMC,
+
+The vote has now closed. The results are:
+
+Binding Votes:
+
++1 [TOTAL BINDING +1 VOTES]
+ 0 [TOTAL BINDING +0/-0 VOTES]
+-1 [TOTAL BINDING -1 VOTES]
+
+The vote is ***successful/not successful***
+```
+
+### Board Approval of new PMC member Template
+
+```text
+To: board@apache.org
+Cc: private@<project>.apache.org
+Subject: [NOTICE] ${NEW_PMC_NAME} for HertzBeat PMC member
+```
+
+```text
+HertzBeat proposes to invite ${NEW_PMC_NAME} to join the PMC.
+
+The vote result is available here: https://lists.apache.org/...
+```
+
+See [newpmc](https://www.apache.org/dev/pmc.html#newpmc)
+
+### PMC Member Invite Template
+
+```text
+To: ${NEW_PMC_EMAIL}
+Cc: private@hertzbeat.apache.org
+Subject: Invitation to become HertzBeat PMC member: ${NEW_PMC_NAME}
+```
+
+```text
+Hello ${NEW_PMC_NAME},
+
+The HertzBeat Project Management Committee (PMC) 
+hereby offers you committer privileges to the project
+as well as membership in the PMC.
+These privileges are offered on the understanding that
+you'll use them reasonably and with common sense.
+We like to work on trust rather than unnecessary constraints. 
+
+Being a PMC member enables you to guide the direction of the project.
+
+Being a PMC member does not require you to 
+participate any more than you already do. It does 
+tend to make one even more committed.  You will 
+probably find that you spend more time here.
+
+Of course, you can decline and instead remain as a 
+contributor, participating as you do now.
+
+A. This personal invitation is a chance for you to 
+accept or decline in private.  Either way, please 
+let us know in reply to the private@hertzbeat.apache.org
+address only.
+
+B. If you accept, the next step is to register an iCLA:
+    1. Details of the iCLA and the forms are found 
+    through this link: https://www.apache.org/licenses/#clas
+
+    2. Instructions for its completion and return to 
+    the Secretary of the ASF are found at
+    https://www.apache.org/licenses/#submitting
+
+    3. When you transmit the completed iCLA, request 
+    to notify the Apache HertzBeat and choose a 
+    unique Apache ID. Look to see if your preferred 
+    ID is already taken at 
+    https://people.apache.org/committer-index.html
+    This will allow the Secretary to notify the PMC 
+    when your iCLA has been recorded.
+
+When recording of your iCLA is noted, you will 
+receive a follow-up message with the next steps for 
+establishing you as a PMC member.
+```
+
+### PMC Member Accept Template
+
+```text
+To: ${NEW_PMC_EMAIL}
+Cc: private@hertzbeat.apache.org
+Subject: Re: invitation to become HertzBeat PMC member
+```
+
+```text
+Welcome. Here are the next steps in becoming a project PMC. After that
+we will make an announcement to the dev@hertzbeat.apache.org list.
+
+You need to send a Contributor License Agreement to the ASF.
+Normally you would send an Individual CLA. If you also make
+contributions done in work time or using work resources,
+see the Corporate CLA. Ask us if you have any issues.
+https://www.apache.org/licenses/#clas.
+
+You need to choose a preferred ASF user name and alternatives.
+In order to ensure it is available you can view a list of taken IDs at
+https://people.apache.org/committer-index.html
+
+Please notify us when you have submitted the CLA and by what means 
+you did so. This will enable us to monitor its progress.
+
+We will arrange for your Apache user account when the CLA has 
+been recorded.
+
+After that is done, please make followup replies to the dev@hertzbeat.apache.org list.
+We generally discuss everything there and keep the
+private@hertzbeat.apache.org list for occasional matters which must be private.
+
+The developer section of the website describes roles within the ASF and provides other
+resources:
+  https://www.apache.org/foundation/how-it-works.html
+  https://www.apache.org/dev/
+
+The incubator also has some useful information for new PMC
+in incubating projects:
+  https://incubator.apache.org/guides/committer.html
+  https://incubator.apache.org/guides/ppmc.html
+
+Just as before you became a PMC member, participation in any ASF community
+requires adherence to the ASF Code of Conduct:
+  https://www.apache.org/foundation/policies/conduct.html
+
+Yours,
+The Apache HertzBeat PPMC
+```
+
+### PMC Member Done Template
+
+```text
+To: private@hertzbeat.apache.org, ${NEW_PMC_EMAIL}
+Subject: account request: ${NEW_PMC_NAME}
+```
+
+```text
+${NEW_PMC_EMAIL}, as you know, the ASF Infrastructure has set up your
+committer account with the username '${NEW_PMC_APACHE_NAME}'.
+
+Please follow the instructions to set up your SSH,
+svn password, svn configuration, email forwarding, etc.
+https://www.apache.org/dev/#committers
+
+You have commit access to specific sections of the
+ASF repository, as follows:
+
+The general "committers" at:
+  https://svn.apache.org/repos/private/committers
+
+If you have any questions during this phase, then please
+see the following resources:
+
+Apache developer's pages: https://www.apache.org/dev/
+Incubator committer guide: https://incubator.apache.org/guides/committer.html
+
+Naturally, if you don't understand anything be sure to ask us on the dev@hertzbeat.apache.org mailing list. 
+Documentation is maintained by volunteers and hence can be out-of-date and incomplete - of course
+you can now help fix that.
+
+A PPMC member will announce your election to the dev list soon.
+```
+
+### PMC Member Announce Template
+
+```text
+To: dev@hertzbeat.apache.org
+[ANNONCE] New PMC member: ${NEW_PMC_NAME}
+```
+
+```text
+Hi HertzBeat Community,
+
+The Podling Project Management Committee (PPMC) for Apache HertzBeat
+has invited ${NEW_PMC_NAME} to become our PMC member and
+we are pleased to announce that he has accepted.
+
+### add specific details here ###
+
+Please join me in congratulating ${NEW_PMC_NAME}!
+
+Being a committer enables easier contribution to the
+project since there is no need to go via the patch
+submission process. This should enable better productivity.
+A PPMC member helps manage and guide the direction of the project.
+
+Thanks,
+On behalf of the Apache HertzBeat (Incubating) PPMC
+```
\ No newline at end of file
diff --git a/home/docs/community/submit-code.md b/home/docs/community/submit-code.md
new file mode 100644
index 000000000..bcaa8a161
--- /dev/null
+++ b/home/docs/community/submit-code.md
@@ -0,0 +1,88 @@
+---
+id: 'submit_code'
+title: 'Submit Code'
+sidebar_position: 2
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+* First from the remote repository <https://github.com/apache/incubator-hertzbeat.git> fork a copy of the code into your own repository
+
+* There are currently three branches in the remote repository:
+    * **dev**   daily development branch
+      > Every day dev development branch, newly submitted code can pull request to this branch.
+
+    * **1.0.0-release** release version branch
+      > The release version branch, there will be 2.0...and other version branches in the future.
+
+* Clone your repository to your local
+
+```shell
+    git clone git@github.com:apache/incubator-hertzbeat.git
+```
+
+* Add remote repository address, named upstream
+
+```shell
+  git remote add upstream git@github.com:apache/incubator-hertzbeat.git
+```
+
+* View repository
+
+```shell
+  git remote -v
+```
+
+  > At this time, there will be two repositories: origin (your own repository) and upstream (remote repository)
+
+* Get/Update remote repository code
+
+    ```shell
+    git fetch upstream
+    ```
+
+* Synchronize remote repository code to local repository
+
+    ```shell
+    git checkout origin/dev
+    git merge --no-ff upstream/dev
+    ```
+
+* If remote branch has a new branch such as `dev-1.0`, you need to synchronize this branch to the local repository
+
+    ```shell
+    git checkout -b dev-1.0 upstream/dev-1.0
+    git push --set-upstream origin dev-1.0
+    ```
+
+* After modifying the code locally, submit it to your own repository:
+
+    ```shell
+    git commit -m 'commit content'
+    git push
+    ```
+
+* Submit changes to the remote repository
+
+* On the github page, click "New pull request".
+
+* Select the modified local branch and the branch you want to merge with the past, click "Create pull request".
+
+* Then the community Committers will do CodeReview, and then he will discuss some details (including design, implementation, performance, etc.) with you. When everyone on the team is satisfied with this modification, the commit will be merged into the dev branch
+
+* Finally, congratulations, you have become an official contributor to HertzBeat !
diff --git a/home/docusaurus.config.js b/home/docusaurus.config.js
index c02f3b04d..e13346c79 100644
--- a/home/docusaurus.config.js
+++ b/home/docusaurus.config.js
@@ -68,6 +68,90 @@ module.exports = {
           position: 'left',
           to: '/blog/',
         },
+        {
+          label: 'Community',
+          position: 'left',
+          items: [
+            {
+              label: 'Code of conduct',
+              to: 'https://www.apache.org/foundation/policies/conduct',
+            },
+            {
+              label: 'Join the mailing lists',
+              to: '/docs/community/mailing_lists',
+            },
+            {
+              label: 'Become A Committer',
+              to: '/docs/community/become_committer',
+            },
+            {
+              label: 'Become A PMC member',
+              href: '/docs/community/become_pmc_member',
+            },
+            {
+              label: 'New Committer Process',
+              to: '/docs/community/new_committer_process',
+            },
+            {
+              label: 'New PMC Member Process',
+              to: '/docs/community/new_pmc_ember_process',
+            },
+            {
+              label: 'Documentation Notice',
+              to: '/docs/community/document',
+            },
+            {
+              label: 'Submit Code',
+              to: '/docs/community/submit_code',
+            },
+            {
+              label: 'Code style and quality guide',
+              to: '/docs/community/code_style_and_quality_guide'
+            },
+            {
+              label: 'How to release',
+              to: '/docs/community/how_to_release'
+            },
+            {
+              label: 'How to Verify Release',
+              to: '/docs/community/how_to_verify_release'
+            }
+          ],
+        },
+        {
+          label: 'ASF',
+          position: 'left',
+          items: [
+            {
+              label: 'Foundation',
+              to: 'https://www.apache.org/',
+            },
+            {
+              label: 'License',
+              to: 'https://www.apache.org/licenses/',
+            },
+            {
+              label: 'Events',
+              to: 'https://eu.communityovercode.org/',
+            },
+            {
+              label: 'Security',
+              href: 'https://www.apache.org/security/',
+            },
+            {
+              label: 'Sponsorship',
+              to: 'https://www.apache.org/foundation/sponsorship.html',
+            },
+            {
+              label: 'Privacy',
+              to: 'https://privacy.apache.org/policies/privacy-policy-public.html',
+            },
+            {
+              label: 'Thanks',
+              to: 'https://www.apache.org/foundation/sponsors',
+            }
+          ],
+        },
         {
           label: 'Others',
           position: 'left',
diff --git a/home/i18n/en/docusaurus-plugin-content-docs/current.json b/home/i18n/en/docusaurus-plugin-content-docs/current.json
index 0180840a5..b56d4a85f 100644
--- a/home/i18n/en/docusaurus-plugin-content-docs/current.json
+++ b/home/i18n/en/docusaurus-plugin-content-docs/current.json
@@ -90,5 +90,17 @@
   "sidebar.docs.category.webserver": {
     "message": "WebServer Monitor",
     "description": "The label for category webserver in sidebar docs"
+  },
+  "sidebar.docs.category.contribution": {
+    "message": "Contribution Guide",
+    "description": "The label for category contribution in sidebar docs"
+  },
+  "sidebar.docs.category.submit": {
+    "message": "Submit Guide",
+    "description": "The label for category submit in sidebar docs"
+  },
+  "sidebar.docs.category.release": {
+    "message": "Release",
+    "description": "The label for category release in sidebar docs"
   }
 }
diff --git a/home/i18n/en/docusaurus-plugin-content-docs/version-v1.3.x.json b/home/i18n/en/docusaurus-plugin-content-docs/version-v1.3.x.json
index 74e2c29d0..bb29e9aeb 100644
--- a/home/i18n/en/docusaurus-plugin-content-docs/version-v1.3.x.json
+++ b/home/i18n/en/docusaurus-plugin-content-docs/version-v1.3.x.json
@@ -70,5 +70,9 @@
   "sidebar.docs.link.Install via HuaweiCloud": {
     "message": "Install via HuaweiCloud",
     "description": "The label for link Install via HuaweiCloud in sidebar docs, linking to https://marketplace.huaweicloud.com/contents/0477015c-ad63-4522-a308-816861769f0a#productid=OFFI863735781612109824"
+  },
+  "sidebar.docs.link.Cloud Service": {
+    "message": "Cloud Service",
+    "description": "The label for link Cloud Service in sidebar docs, linking to https://console.tancloud.cn"
   }
 }
diff --git a/home/i18n/en/docusaurus-theme-classic/footer.json b/home/i18n/en/docusaurus-theme-classic/footer.json
index 456b9d664..9460329ee 100644
--- a/home/i18n/en/docusaurus-theme-classic/footer.json
+++ b/home/i18n/en/docusaurus-theme-classic/footer.json
@@ -54,5 +54,9 @@
   "link.item.label.contact": {
     "message": "Contact",
     "description": "The label of footer link with label=contact linking to /docs/others/contact"
+  },
+  "copyright": {
+    "message": "Copyright © 2024 HertzBeat",
+    "description": "The footer copyright"
   }
 }
diff --git a/home/i18n/en/docusaurus-theme-classic/navbar.json b/home/i18n/en/docusaurus-theme-classic/navbar.json
index 350c028ed..c76e0b830 100644
--- a/home/i18n/en/docusaurus-theme-classic/navbar.json
+++ b/home/i18n/en/docusaurus-theme-classic/navbar.json
@@ -74,5 +74,85 @@
   "item.label.contributors": {
     "message": "Contributors",
     "description": "Navbar item with label contributors"
+  },
+  "item.label.Community": {
+    "message": "Community",
+    "description": "Navbar item with label Community"
+  },
+  "item.label.ASF": {
+    "message": "ASF",
+    "description": "Navbar item with label ASF"
+  },
+  "item.label.Code of conduct": {
+    "message": "Code of conduct",
+    "description": "Navbar item with label Code of conduct"
+  },
+  "item.label.Join the mailing lists": {
+    "message": "Join the mailing lists",
+    "description": "Navbar item with label Join the mailing lists"
+  },
+  "item.label.Become A Committer": {
+    "message": "Become A Committer",
+    "description": "Navbar item with label Become A Committer"
+  },
+  "item.label.Become A PMC member": {
+    "message": "Become A PMC member",
+    "description": "Navbar item with label Become A PMC member"
+  },
+  "item.label.New Committer Process": {
+    "message": "New Committer Process",
+    "description": "Navbar item with label New Committer Process"
+  },
+  "item.label.New PMC Member Process": {
+    "message": "New PMC Member Process",
+    "description": "Navbar item with label New PMC Member Process"
+  },
+  "item.label.Documentation Notice": {
+    "message": "Documentation Notice",
+    "description": "Navbar item with label Documentation Notice"
+  },
+  "item.label.Submit Code": {
+    "message": "Submit Code",
+    "description": "Navbar item with label Submit Code"
+  },
+  "item.label.Code style and quality guide": {
+    "message": "Code style and quality guide",
+    "description": "Navbar item with label Code style and quality guide"
+  },
+  "item.label.How to release": {
+    "message": "How to release",
+    "description": "Navbar item with label How to release"
+  },
+  "item.label.How to Verify Release": {
+    "message": "How to Verify Release",
+    "description": "Navbar item with label How to Verify Release"
+  },
+  "item.label.foundation": {
+    "message": "foundation",
+    "description": "Navbar item with label foundation"
+  },
+  "item.label.license": {
+    "message": "license",
+    "description": "Navbar item with label license"
+  },
+  "item.label.events": {
+    "message": "events",
+    "description": "Navbar item with label events"
+  },
+  "item.label.security": {
+    "message": "security",
+    "description": "Navbar item with label security"
+  },
+  "item.label.sponsorship": {
+    "message": "sponsorship",
+    "description": "Navbar item with label sponsorship"
+  },
+  "item.label.privacy": {
+    "message": "privacy",
+    "description": "Navbar item with label privacy"
+  },
+  "item.label.Thanks": {
+    "message": "Thanks",
+    "description": "Navbar item with label Thanks"
   }
 }
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current.json b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current.json
index 46776a9a7..d813e2c44 100644
--- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current.json
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current.json
@@ -94,5 +94,21 @@
   "sidebar.docs.category.webserver": {
     "message": "Web服务器",
     "description": "The label for category webserver in sidebar docs"
+  },
+  "sidebar.docs.category.Community": {
+    "message": "社区",
+    "description": "The label for category Community in sidebar docs"
+  },
+  "sidebar.docs.category.contribution": {
+    "message": "贡献指导",
+    "description": "The label for category contribution in sidebar docs"
+  },
+  "sidebar.docs.category.submit": {
+    "message": "提交指导",
+    "description": "The label for category submit in sidebar docs"
+  },
+  "sidebar.docs.category.release": {
+    "message": "发布",
+    "description": "The label for category release in sidebar docs"
   }
 }
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/become_committer.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/become_committer.md
new file mode 100644
index 000000000..82ae7595a
--- /dev/null
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/become_committer.md
@@ -0,0 +1,59 @@
+---
+id: 'become_committer'
+title: '成为Committer'
+sidebar_position: 2
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+    
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+
+## 成为 Apache HertzBeat™ 的 Committer
+
+任何支持社区并在 CoPDoC 领域中工作的人都可以成为 Apache HertzBeat 的Committer。CoPDoC 是 ASF 的缩写,用来描述我们如何不仅仅通过代码来认识到您的贡献。
+
+- **Community** - 你可以通过我们的邮件列表、问题追踪器、讨论页面与社区成员互动,并分享愿景和知识。
+- **Project** - 需要明确的愿景和共识。
+- **Documentation** - 没有它,内容只会停留在作者的头脑中。
+- **Code** - 没有代码,讨论就毫无意义。
+
+Apache HertzBeat 社区努力追求基于功绩的原则。因此,一旦有人在 CoPDoC 的任何领域有了足够的贡献,他们就可以成为 Committer 的候选人,最终被投票选为 HertzBeat 的 Committer。成为 Apache HertzBeat 的 Committer 并不一定意味着你必须使用你的提交权限向代码库提交代码;它意味着你致力于 HertzBeat 项目并为我们社区的成功做出了积极的贡献。
+
+## Committer 的要求:
+
+没有成为 Committer 或 PPMC 成员的严格规则。新的 Committer 的候选人通常是积极的贡献者和社区成员。但是,如果能稍微明确一些规则,就可以在一定程度上消除贡献者的疑虑,使社区更加透明、合理和公平。
+
+### 持续的贡献
+
+Committer 的候选人应该持续参与并为 HertzBeat 做出大量的贡献(例如修复漏洞、添加新功能、编写文档、维护问题板、代码审查或回答社区问题),无论是向主网站的代码库还是 HertzBeat 的 GitHub 仓库贡献。
+
+- +3 个月的轻度活动和参与。
+- +2 个月的中度活动和参与。
+- +1 个月的高度活动和参与。
+
+### 贡献的质量
+- 对项目有深入的理解。
+- 经过充分测试、良好设计、遵循 Apache HertzBeat 的编码标准,及简单的修复补丁。
+- 井井有条的面向用户的详细文档。
+
+### 社区参与
+
+- 在开发邮件列表上保持积极、礼貌与尊重,并帮助指导新的贡献者和用户。
+- 在项目维护的问题跟踪器上积极、有礼貌与尊重。
+- 对于拉取请求审查保持积极、有礼貌与尊重。
+- 即使存在分歧,也要以专业和外交的态度参与技术路线图的讨论。
+- 通过撰写文章或举办活动来推广项目。
\ No newline at end of file
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/become_pmc_member.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/become_pmc_member.md
new file mode 100644
index 000000000..dd838548b
--- /dev/null
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/become_pmc_member.md
@@ -0,0 +1,58 @@
+---
+id: 'become_pmc_member'
+title: '成为PMC member'
+sidebar_position: 3
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+    
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+## 成为 Apache HertzBeat™ 的 PMC 成员
+
+任何支持社区并在 CoPDoC 领域中工作的人都可以成为 Apache HertzBeat 的PMC 成员。CoPDoC 是 ASF 的缩写,用来描述我们如何不仅仅通过代码来认识到您的贡献。
+
+- **Community** - 您可以通过我们的邮件列表、问题追踪器、讨论页面与社区成员互动,并分享愿景和知识。
+- **Project** - 需要明确的愿景和共识。
+- **Documentation** - 没有它,内容只会停留在作者的头脑中。
+- **Code** - 没有代码,讨论就毫无意义。
+
+Apache HertzBeat 社区努力追求基于功绩的原则。因此,一旦有人在 CoPDoC 的任何领域有了足够的贡献,他们就可以成为 PMC 成员资格的候选人,最终被投票选为 HertzBeat 的 PMC 成员。成为 Apache HertzBeat 的 PMC 成员并不一定意味着您必须使用您的提交权限向代码库提交代码;它意味着您致力于 HertzBeat 项目并为我们社区的成功做出了积极的贡献。
+
+## PMC 成员的要求:
+
+没有成为 Committer 或 PPMC 成员的严格规则。新的 PMC 成员的候选人通常是积极的贡献者和社区成员。但是,如果能稍微明确一些规则,就可以在一定程度上消除贡献者的疑虑,使社区更加透明、合理和公平。
+
+### 持续的贡献
+
+PMC 成员的候选人应该持续参与并为 HertzBeat 做出大量的贡献(例如修复漏洞、添加新功能、编写文档、维护问题板、代码审查或回答社区问题),无论是向主网站的代码库还是 HertzBeat 的 GitHub 仓库贡献。
+
+- +5 个月的轻度活动和参与。
+- +4 个月的中度活动和参与。
+- +3 个月的高度活动和参与。
+
+### 贡献的质量
+- 对项目有深入的理解。
+- 经过充分测试、良好设计、遵循 Apache HertzBeat 的编码标准,及简单的修复补丁。
+- 井井有条的面向用户的详细文档。
+
+### 社区参与
+
+- 在开发邮件列表上保持积极、礼貌与尊重,并帮助指导新的贡献者和用户。
+- 在项目维护的问题跟踪器上积极、有礼貌与尊重。
+- 对于拉取请求审查保持积极、有礼貌与尊重。
+- 即使存在分歧,也要以专业和外交的态度参与技术路线图的讨论。
+- 通过撰写文章或举办活动来推广项目。
\ No newline at end of file
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/code-style-and-quality-guide.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/code-style-and-quality-guide.md
new file mode 100644
index 000000000..edf0bd295
--- /dev/null
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/code-style-and-quality-guide.md
@@ -0,0 +1,672 @@
+---
+id: 'code_style_and_quality_guide'
+title: '代码风格和质量指南'
+sidebar_position: 3
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+
+## 1 拉取请求与变更规则
+
+1. `ISSUE`/`PR`(拉取请求) 的引导和命名
+
+    - 确保 `PR` 与 `ISSUE` 相对应。
+   > **注意**:`Hotfix` 问题不需要遵循此规则,例如修复 `JavaDoc` 或 `document` 文件中的拼写错误。
+
+    - 标题命名格式  
+      当命名 `PR` 时,可以参考拉取请求的 `[ISSUE-XXXX][Feature/Improve/Refactor/Bug/Cleanup] Title`,
+      其中 `ISSUE-XXXX` 应替换为实际的 `ISSUE` 编号。
+        - 第二部分描述了 `PR` 的类型,例如新功能、改进、重构等。
+        - 如果所有对 `PR` 的更改都在某个模块或组件内,则可以在提交消息中指示。
+
+2. 描述
+
+    - 请填写 `PR` 模板以描述贡献。这样,审阅者可以从描述中,而不仅仅是从代码中,了解问题和解决方案。
+    - 确保描述足以说明 `PR` 所解决的问题。
+    - 小的更改不需要过多的描述。
+    - 在理想情况下,问题描述在 `ISSUE` 中,大部分描述都是从那里复制的。
+
+3. 尝试将更改分解为纯类型的更改
+
+    - 建议 `PR` 应将诸如 `Cleanup`、`Refactor`、`Improve` 和 `Feature` 之类的更改排列到分隔的 `PRs`/`Commits` 中。
+    - 这样,审阅者可以独立查看清理和重构,并确保这些更改不会更改行为。
+    - 然后,审阅者可以独立审查核心更改,并确保它们是干净和健壮的更改。
+    - 在极端情况下,如果需要回滚提交,它可以为版本回滚选择提供最佳的粒度。
+    - 此外,重大贡献应分解为一组可以独立审查的独立更改。
+
+4. 提交消息  
+   消息的提交应遵循与 `PR` 类似的模式:`[ISSUE-XXXX][Feature/Improve/Refactor/Cleanup] 拉取请求的标题`。
+
+    - `[ISSUE-xxxx1][Improve(ment)] 改进 ...`
+    - `[ISSUE-xxxx2][Refactor] 重构 ...`
+    - `[ISSUE-xxxx3][Feature] 支持 ...`
+    - `[ISSUE-xxxx4][Bug] 修复  ...`
+    - `[ISSUE-xxxx5][Feature][subtask] 支持 ...`
+    - `[Hotfix][module_name] 修复 xxx 注释 ...`
+
+> **注意**:尝试使用 git 历史记录而不是带注释的代码(不是强制的)
+
+## 2 代码检查样式
+
+- 后端代码格式化 Maven 插件:`spotless`
+  在安装插件后,只需在项目仓库根目录中运行 `mvn spotless:apply`。
+
+- 后端代码规范 Maven 插件:`checkstyle`
+  在安装插件后,只需运行 `mvn checkstyle:checkstyle`。
+
+- 前端代码格式化插件 `eslint`
+    - 原始命令是 `npx eslint --cache --max-warnings 0 "{src,mock}/**/*.{vue,ts,tsx}" --fix`
+    - 封装为 `npm run lint:eslint`
+
+## 3 编程规范
+
+### 3.1 命名风格
+
+1. 优先为变量命名选择名词,这样更容易区分`变量`或`方法`。
+   ```java
+     Cache<String> publicKeyCache;
+   ```
+
+2. 变量的拼音缩写是禁止的(排除地名等名词),例如chengdu。
+
+3. 推荐的变量名以 `类型` 结尾。
+   对于 `Collection/List` 类型的变量,取 `xxxx` (复数表示多个元素)或以 `xxxList` (特定类型)结束。
+   对于 `map` 类型的变量,清晰地描述 `key` 和 `value`:
+   ```java
+     Map<Long, User> idUserMap;
+     Map<Long, String> userIdNameMap;
+   ```
+
+4. 通过其名称直观地知道变量的类型和含义。
+   方法名称应首先以动词开始,如下所示:
+   ```java
+     void computeVcores(Object parameter1);
+   ```
+   > 注意:在 `Builder` 工具类中不必严格遵循这项规则。
+
+5. 数据库层(非服务层)的基本 `CRUD` 的方法名称应根据 `com.baomidou.mybatisplus.core.mapper.BaseMapper` 的名称统一标准化:
+
+   - 如果执行数据库查询操作,方法的名称应以 `select` 开头。
+
+     当查询单条记录时可以使用`selectXxx`,例如`selectApp`
+   
+     当查询多条记录时可以使用`selectXxxs`表示集合结果,例如`selectApps`,如果实体以`s`结尾,可以使用`List`如`selectStatusList`;
+
+     如果是分页结果,则可以使用`selectPage`;如果是`Map`结果,建议参考`Map`命名规则如`selectIdUserMap`
+   
+     当查询包含具体条件时可以使用`selectXxxByXxx`命名,例如`listById`、`selectAppsByProjectId`
+     
+     > 如遇到太长的实体可以酌情缩写,原则是“见名知意”且做到不啰嗦,例如`selectApplications`缩写为`selectApps`,但如果没有合适的缩写,不建议缩写
+     > 如果是`Mapper`查询`selectRecentK8sClusterIds`,则也可以采取`selectList`命名
+
+    - 如果执行数据库的 <mark> 更新 </mark> 语句操作,方法的名称应以 `update` 开头。
+    - 如果执行数据库的 <mark> 插入 </mark> 语句操作,方法的名称应以 `insert` 开头。
+    - 如果执行数据库的 <mark> 删除 </mark> 语句操作,方法的名称应以 `delete` 开头。
+
+6. 服务层的基本 `CRUD` 方法命名应参考 `com.baomidou.mybatisplus.extension.service.IService`:
+
+    - 如果执行数据库的 <mark> 选择 </mark> 操作来查询多个记录,方法的名称应以 `list` 开头,例如 `listByIds`、`listByXxx`。
+    - 如果执行数据库的 <mark> 选择 </mark> 操作查询单个记录,方法的名称应以 `get` 开头,例如 `getByName` 和 `getOne`。
+    - 如果执行数据库的 <mark> 更新 </mark> 操作,方法的名称应以 `update` 开头。
+    - 如果执行数据库的 <mark> 插入 </mark> 操作,方法的名称应以 `save` 开头。
+    - 如果执行数据库的 <mark> 删除 </mark> 操作,方法的名称应以 `remove` 开头。
+
+7. 参数的命名
+
+    - 最好保持同一接口中相同类型的参数的命名一致。
+
+### 3.2 常量变量定义
+
+1. 将所有类的 `serialVersionUID` 设置为 `1L`,遵循 `Flink` 的 `serialVersionUID`。
+
+    - 负面示例:
+      ```java
+        private static final long serialVersionUID = -8713837118340960775L;
+      ```
+
+    - 正面示例:
+      ```java
+       private static final long serialVersionUID = 1L;
+      ```
+
+2. 多余的字符串应提取为常量
+   >如果一个常量被硬编码两次或多次,请直接提取它为常量并更改相应的引用。
+   通常,`log` 中的常量可以忽略提取。
+
+    - 负面示例:
+
+      ```java
+      public static RestResponse success(Object data) {
+          RestResponse resp = new RestResponse();
+          resp.put("status", "success");
+          resp.put("code", ResponseCode.CODE_SUCCESS);
+          resp.put("data", data);
+          return resp;
+      }
+      
+      public static RestResponse error() {
+          RestResponse resp = new RestResponse();
+          resp.put("status", "error");
+          resp.put("code", ResponseCode.CODE_FAIL);
+          resp.put("data", null);
+          return resp;
+      }
+      ```
+
+    - 正面示例:
+
+      > 字符串提取为常量引用。
+
+      ```java
+        public static final String STATUS = "status";
+        public static final String CODE = "code";
+        public static final String DATA = "data";
+        
+        public static RestResponse success(Object data) {
+            RestResponse resp = new RestResponse();
+            resp.put(STATUS, "success");
+            resp.put(CODE, ResponseCode.CODE_SUCCESS);
+            resp.put(DATA, data);
+            return resp;
+        }
+        
+        public static RestResponse error() {
+            RestResponse resp = new RestResponse();
+            resp.put(STATUS, "error");
+            resp.put(CODE, ResponseCode.CODE_FAIL);
+            resp.put(DATA, null);
+            return resp;
+        }
+      ```
+
+3. 确保代码的可读性和直观性
+
+- `annotation` 符号中的字符串不需要提取为常量。
+
+- 被引用的 `package` 或 `resource` 名称不需要提取为常量。
+
+4. 未被重新分配的变量也必须声明为 <mark> final </mark> 类型。
+
+5. 关于 `constant/variable` 行的排序顺序
+
+   按以下顺序对类中的变量行进行排序:
+    1. `public static final V`, `static final V`,`protected static final V`, `private static final V`
+    2. `public static v`, `static v`,`protected static v`, `private static v`
+    3. `public v`, `v`, `protected v`, `private v`
+
+### 3.3 方法规则
+
+1. 按照 `public`、`protected`、`private` 的顺序对类中的方法进行排序。
+
+   类的静态方法可以放在非静态方法之后,并根据一致的方法可见性进行排序。
+
+2. 当方法有限制时,方法的参数和返回值需要用 `@Nonnull` 或 `@Nullable` 注释和约束进行注释。
+
+   例如,如果参数不能为 null,最好添加一个 `@Nonnull` 注释。如果返回值可以为 null,则应首先添加 `@Nullable` 注释。
+
+   <mark> 注意:包名为 <code>javax.validation.requirements </code> </mark>
+
+3. 如果方法中的代码行数太多,请尝试在适当的点上使用多个子方法来分段方法体。
+
+   一般来说,需要坚持以下原则:
+    - 便于测试
+    - 有好的语义
+    - 易于阅读
+
+   此外,还需要考虑在组件、逻辑、抽象和场景等方面的切割是否合理。
+
+   > 然而,目前还没有明确的演示定义。在演变过程中,我们将为开发者提供更多的示例,以便他们有更清晰的参考和理解。
+
+
+### 3.4 集合规则
+
+1. 对于返回的 `collection` 值,除非有特殊的 `concurrent` (如线程安全),总是返回 `interface`,例如:
+
+    - 如果使用 `ArrayList`,则返回 <mark> List </mark>
+    - 如果使用 `HashMap`,则返回 <mark> Map </mark>
+    - 如果使用 `HashSet`,则返回 <mark> Set </mark>
+
+2. 如果存在多线程,可以使用以下声明或返回类型:
+
+  ```java
+    private CurrentHashMap map;
+    public CurrentHashMap funName();
+  ```
+
+3. 使用 `isEmpty()` 而不是 `length() == 0` 或者 `size() == 0`
+
+   - 负面示例:
+
+     ```java
+     if (pathPart.length() == 0) {
+       return;
+     }
+     ```
+
+   - 正面示例:
+
+     ```java
+     if (pathPart.isEmpty()) {
+       return;
+     }
+     ```
+
+### 3.5 并发处理
+
+1. 需要管理 `线程池`,使用统一的入口点获取 `线程池`。
+
+   <mark> 注意:在演变过程中,我们将为开发者提供更多的示例,以便他们有更清晰的参考和理解。 </mark>
+
+2. `线程池` 需要进行资源约束,以防止因处理不当导致的资源泄露。
+
+### 3.6 控制/条件语句
+
+1. 避免因不合理的 `条件/控制` 分支顺序导致:
+
+    - 多个代码行的 `深度` 为 `n+1`
+    - 多余的行
+
+一般来说,如果一个方法的代码行深度由于连续嵌套的 `if... else..` 超过了 `2+ Tabs`,那么应该考虑试图
+- `合并分支`,
+- `反转分支条件`
+- `提取私有方法`
+
+以减少代码行深度并提高可读性,例如:
+- 联合或将逻辑合并到下一级调用中
+    - 负面示例:
+      ```java
+        if (isInsert) {
+          save(platform);
+        } else {
+           updateById(platform);
+        }
+       ```
+    - 正面示例:
+      ```java
+        saveOrUpdate(platform);
+      ```
+- 合并条件
+    - 负面示例:
+      ```java
+        if (expression1) {
+          if(expression2) {
+              ......
+          }
+        }
+   ```  
+  - 正面示例:  
+     ```java
+      if (expression1 && expression2) {
+        ......
+      }
+     ```
+- 反转条件
+    - 负面示例:
+
+        ```java
+          public void doSomething() {
+           // 忽略更深的代码块行
+           // .....
+           if (condition1) {
+              ...
+           } else {
+              ...
+           }
+          }
+        ```
+
+    - 正面示例:
+
+      ```java
+        public void doSomething() {
+         // 忽略更深的代码块行
+         // .....
+         if (!condition1) {
+            ...
+            return;
+         }
+         // ...
+        }
+      ```
+- 使用单一变量或方法减少复杂的条件表达式
+    - 负面示例:
+       ```java
+         if (dbType.indexOf("sqlserver") >= 0 || dbType.indexOf("sql server") >= 0) {
+          ...
+         }
+       ```
+
+    - 正面示例:
+       ```java
+         if (containsSqlServer(dbType)) {
+           ....
+         }
+         //.....
+         // containsSqlServer的定义
+       ```
+
+> 在未来,使用 `sonarlint` 和 `better highlights` 检查代码深度看起来是个不错的选择。
+
+### 3.7 代码注释规则
+
+1. 方法缺少注释:
+
+    - `When`:该方法何时可以被调用
+    - `How`:如何使用此方法以及如何传递参数等
+    - `What`:此方法实现了哪些功能
+    - `Note`:在调用此方法时开发人员应注意什么
+
+2. 缺少必要的类头部描述注释。
+
+   添加 `What`,`Note` 等,如上述 `1` 中提到的。
+
+3. 在接口中的方法声明必须被注释。
+
+    - 如果实现的语义和接口声明的注释内容不一致,则具体的实现方法也需要用注释重写。
+
+    - 如果方法实现的语义与接口声明的注释内容一致,则建议不写注释以避免重复的注释。
+
+4. 在注释行中的第一个词需要大写,如 `param` 行,`return` 行。
+   如果特殊引用作为主题不需要大写,需要注意特殊符号,例如引号。
+
+### 3.8 Java Lambda 表达式
+
+1. 更倾向于使用 `non-capturing` lambda(不包含对外部范围的引用的lambda)。
+   Capturing lambda 在每次调用时都需要创建一个新的对象实例。`Non-capturing` lambda 可以为每次调用使用相同的实例。
+
+    - 负面示例:
+
+      ```java
+        map.computeIfAbsent(key, x -> key.toLowerCase())
+      ```
+
+    - 正面示例:
+
+      ```java
+       map.computeIfAbsent(key, k -> k.toLowerCase());
+      ```
+
+2. 考虑使用方法引用而不是内联lambda
+
+    - 负面示例:
+
+      ```java
+        map.computeIfAbsent(key, k-> Loader.load(k));
+      ```
+
+    - 正面示例:
+
+      ```java
+        map.computeIfAbsent(key, Loader::load);
+      ```
+
+### 3.9 Java Streams
+
+- 在任何对性能敏感的代码中避免使用 Java Streams。
+
+- 使用 Java Streams 的主要动机是为了提高代码的可读性。因此,它们可以在代码的某些部分中很好地匹配,这些部分不是数据密集型的,而是处理协调。
+
+- 即使在后一种情况下,也试图限制范围到一个方法,或者一个内部类中的几个私有方法。
+
+### 3.10 前置条件检查
+
+1. 使用统一的 `Utils.requireXXX` 来完成前提的验证,如果可能的话,用新的前置条件检查替换 `AlertXXException.throwIfXXX`。
+
+### 3.11 StringUtils
+
+1. 使用 `StringUtils.isBlank` 而不是 `StringUtils.isEmpty`
+
+    - 负面示例:
+
+       ```java
+       if (StringUtils.isEmpty(name)) {
+      return;
+       }
+       ```
+
+    - 正面示例:
+
+      ```java
+      if (StringUtils.isBlank(name)) {
+      return;
+      }
+      ```
+
+2. 使用 `StringUtils.isNotBlank` 而不是 `StringUtils.isNotEmpty`
+
+    - 负面示例:
+
+       ```java
+       if (StringUtils.isNotEmpty(name)) {
+         return;
+       }
+       ```
+
+    - 正面示例:
+
+      ```java
+      if (StringUtils.isNotBlank(name)) {
+        return;
+      }
+      ```
+
+3. 使用 `StringUtils.isAllBlank` 而不是 `StringUtils.isAllEmpty`
+
+    - 负面示例:
+
+       ```java
+       if (StringUtils.isAllEmpty(name, age)) {
+         return;
+       }
+       ```
+
+    - 正面示例:
+
+      ```java
+      if (StringUtils.isAllBlank(name, age)) {
+        return;
+      }
+      ```
+
+### 3.12 `Enum` 类
+
+1. 枚举值比较
+
+    - 负面示例:
+
+       ```java
+       if (status.equals(JobStatus.RUNNING)) {
+         return;
+       }
+       ```
+
+    - 正面示例:
+
+      ```java
+      if (status == JobStatus.RUNNING) {
+        return;
+      }
+      ```
+
+2. 枚举类不需要实现 Serializable
+
+    - 负面示例:
+
+       ```java
+       public enum JobStatus implements Serializable {
+         ...
+       }
+       ```
+
+    - 正面示例:
+
+      ```java
+      public enum JobStatus {
+        ...
+      }
+      ```
+
+3. 使用 `Enum.name()` 而不是 `Enum.toString()`
+
+    - 负面示例:
+
+       ```java
+       System.out.println(JobStatus.RUNNING.toString());
+       ```
+
+    - 正面示例:
+
+      ```java
+      System.out.println(JobStatus.RUNNING.name());
+      ```
+
+4. 枚举类名称统一使用 Enum 后缀
+
+    - 负面示例:
+
+       ```java
+       public enum JobStatus {
+         ...
+       }
+       ```
+
+    - 正面示例:
+
+      ```java
+      public enum JobStatusEnum {
+        ...
+      }
+      ```
+
+### 3.13 `Deprecated` 注解
+
+  - 负面示例:
+
+    ```java
+    @deprecated
+    public void process(String input) {
+      ...
+    }
+    ```
+
+  - 正面示例:
+
+    ```java
+    @Deprecated
+    public void process(String input) {
+      ...
+    }
+    ```
+
+## 4 异常处理
+
+`hertzbeat-console-service` 模块是处理用户请求的核心模块。
+我们努力提供最好的用户体验是非常必要的。   
+因此,我们引入了 [AbstractApiException](https://github.com/apache/incubator-hertzbeat/blob/dev/hertzbeat-console/hertzbeat-console-service/src/main/java/org/apache/hertzbeat/console/base/exception/AbstractApiException.java)
+及其子类以获得更友好的交互效果。非 `AbstractApiException` 被视为内部服务器错误,不需要通知用户交互细节。  
+基于上述前提,我们需要注意处理 `AbstractApiException`。  
+例如,在处理与用户操作错误或缺少数据错误的逻辑时,我们应该通过以下 `AbstractApiException` 的子类之一抛出异常:
+
+- [ApiDetailException](https://github.com/apache/incubator-hertzbeat/blob/dev/hertzbeat-console/hertzbeat-console-service/src/main/java/org/apache/hertzbeat/console/base/exception/ApiDetailException.java)
+> 需要通知前端的异常消息,是一个详细的异常消息,例如 stackTrace 信息,通常伴随着大量的异常日志,
+> 例如:`Failed to start job`,需要在前端显示异常(stackTrace 信息)。
+- [ApiAlertException](https://github.com/apache/incubator-hertzbeat/blob/dev/hertzbeat-console/hertzbeat-console-service/src/main/java/org/apache/hertzbeat/console/base/exception/ApiAlertException.java)
+> 需要通知前端的异常消息,通常是一个简单、清晰的消息,例如:
+> 1. 用户名已存在
+> 2. 没有权限,请联系管理员
+> 3. ...
+
+- [AlertException](https://github.com/apache/incubator-hertzbeat/blob/dev/hertzbeat-console/hertzbeat-console-service/src/main/java/org/apache/hertzbeat/console/base/exception/AlertException.java)
+> 在处理警报逻辑时需要通知前端的异常消息。
+- 或者其他用于获得良好用户交互的异常。
+
+除了处理异常的分类,我们最好使异常消息准确而简洁,并试图确保异常中遵循以下几点:
+
+- 显示异常情况的当前状态。
+- 显示异常情况的解决方案。
+- 或其他适合的交互信息。
+
+如果需要,请点击 [Issue-2325](https://github.com/apache/incubator-hertzbeat/issues/2325) 以获取更多关于该项的详细信息。
+
+## 5 日志
+
+1. 使用 `占位符` 进行日志输出:
+
+    - 负面示例
+      ```java
+        log.info("Deploy cluster request " + deployRequest);
+      ```
+    - 正面示例
+      ```java
+        log.info("load plugin:{} to {}", file.getName(), appPlugins);
+      ```
+
+2. 打印日志时,注意选择 `日志级别`
+
+   当打印日志内容时,如果传递了日志占位符的实际参数,必须避免过早评估,以避免由日志级别导致的不必要评估。
+
+    - 负面示例:
+
+      假设当前日志级别为 `INFO`:
+
+      ```java
+       // 忽略声明行。
+       List<User> userList = getUsersByBatch(1000);
+       LOG.debug("All users: {}", getAllUserIds(userList));
+      ```
+
+    - 正面示例:
+
+      在这种情况下,我们应该在进行实际的日志调用之前提前确定日志级别,如下所示:
+
+      ```java
+       // 忽略声明行。
+       List<User> userList = getUsersByBatch(1000);
+       if (LOG.isDebugEnabled()) {
+         LOG.debug("All ids of users: {}", getAllIDsOfUsers(userList));	
+       }
+       ```
+
+## 6 测试
+
+1. 对于用于 `测试` 的一些 `代码/变量`,您可以使用 `@VisableForTesting` 注解来指示。
+
+2. 建议使用 `JUnit5` 进行测试用例的准备。
+
+3. 使用 `AssertJ` 进行断言语句的开发。
+
+4. 关于测试的实现。
+
+    - 如果测试用例只测试一个不需要如 hadoop、远程 flink 会话集群等外部组件的 `独立` 类或方法,可以直接使用 `JUnit5` 和 `Mockito` 进行编写。
+
+    - 如果测试用例需要一个 `真实的数据库`、环境或后端环境,
+      但不需要与外部组件进行交互,建议直接继承 `SpringUnitTestBase`。
+
+    - 如果测试用例需要 `真实的数据库、环境` 或 `后端环境`,
+      但需要与外部组件 (`远程 Flink 会话集群`、`Hadoop 集群`) 进行交互,建议通过直接继承 `SpringIntegrationTestBase` 来编写测试用例。
+
+5. 只建议在关键测试环节上使用集成测试,以避免使 `CI` 的开销时间过长和资源负荷过重。
+
+## 参考资料
+- https://site.mockito.org/
+- https://flink.apache.org/zh/how-to-contribute/code-style-and-quality-preamble/
+- https://alibaba.github.io/p3c/
+- https://rules.sonarsource.com/java/
+- https://joel-costigliola.github.io/assertj/index.html
+- https://junit.org/junit5/
\ No newline at end of file
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/document.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/document.md
new file mode 100644
index 000000000..703339994
--- /dev/null
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/document.md
@@ -0,0 +1,145 @@
+---
+id: 'document'
+title: '文档说明'
+sidebar_position: 1
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+对于任何类型的软件来说,良好的文档都是至关重要的。任何能够改进 HertzBeat 文档的贡献都是受欢迎的。
+
+## 获取文档项目
+
+HertzBeat 项目的文档在一个单独的 [git 仓库](https://github.com/apache/incubator-hertzbeat-website) 中维护。
+
+首先,您需要将文档项目 fork 到您自己的 github 仓库,然后将文`clone`到您的本地计算机。
+
+```shell
+git clone git@github.com:<your-github-user-name>/incubator-hertzbeat-website
+```
+
+## 预览和生成静态文件
+
+此网站使用 node 进行编译,使用 Docusaurus 框架组件。
+
+1. 下载并安装 nodejs (版本>12.5.0)
+2. 将代码克隆到本地 `git clone git@github.com:apache/incubator-hertzbeat-website.git`
+3. 运行 `npm install` 来安装所需的依赖库。
+4. 在根目录中运行 `npm run start`,您可以访问 http://localhost:3000 查看站点的英文模式预览
+5. 在根目录中运行 `npm run start-zh`,您可以访问 http://localhost:3000 查看站点的中文模式预览
+6. 若要生成静态网站资源文件,请运行 `npm run build`。构建的静态资源位于 build 目录中。
+
+## 目录结构
+
+```html
+|-- community
+|-- docs     // 即将发布的下一个版本的文档
+|-- download
+|-- faq      // 常见问题与回答
+|-- i18n
+|   `-- zh-CN  // 中文国际化
+|       |-- code.json
+|       |-- docusaurus-plugin-content-docs
+|       |-- docusaurus-plugin-content-docs-community
+|       |-- docusaurus-plugin-content-docs-download
+|       |-- docusaurus-plugin-content-docs-faq
+|       `-- docusaurus-theme-classic
+|-- resource  // 架构/时序图/流程图等项目源文件
+|-- src
+|   |-- components
+|   |-- css
+|   |-- js
+|   |-- pages
+|   |   |-- home
+|   |   |-- index.jsx
+|   |   |-- team
+|   |   |-- user
+|   |   `-- versions
+|   |-- styles
+|-- static // 图片静态资源
+|   |-- doc  // 文档图片
+|   |-- user // 用户图片
+|   |-- home // 主页图片
+|   |-- img  // 通用图片
+|-- docusaurus.config.js
+```
+
+## 规范
+
+### 目录命名规范
+
+全部小写,由下划线分隔。如果有复数结构,使用复数命名,并且不使用复数缩写。
+
+正例:`scripts / styles / components / images / utils / layouts / demo_styles / demo-scripts / img / doc`
+
+反例:`script / style / demoStyles / imgs / docs`
+
+### Vue 和静态资源文件的命名规范
+
+全部小写,由破折号分隔。
+
+正例:`render-dom.js / signup.css / index.html / company-logo.png`
+
+反例:`renderDom.js / UserManagement.html`
+
+### 资源路径
+
+图片资源统一放在 `static/{模块名称}` 下
+
+css 和其他样式文件放在 `src/css` 目录中。
+
+### 页面内容修改
+
+> 除了主页、团队、用户、Docs>所有版本模块页面外,其他所有页面都可以通过底部的'编辑此页面'按钮直接跳转到相应的 github 资源修改页面。
+
+### 主页修改
+
+访问页面 https://hertzbeat.apache.org/
+位于 `src/pages/home`
+
+```
+├─home
+│ languages.json // 主页中英文配置
+│ index.less     // 主页样式
+```
+
+### 团队页面修改
+
+访问页面 https://hertzbeat.apache.org/team
+位于 `src/pages/team`
+
+```
+├─team
+│ languages.json
+│ index.js
+│ index.less
+```
+
+### 用户列表页面修改
+
+访问页面 https://hertzbeat.apache.org/user
+
+```
+位于 `src/pages/user`
+└─versions
+        data.json
+        images.json
+        index.js
+        index.less
+        languages.json
+```
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/how-to-release.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/how-to-release.md
new file mode 100644
index 000000000..0c3e83a6f
--- /dev/null
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/how-to-release.md
@@ -0,0 +1,767 @@
+---
+id: 'how_to_release'
+title: 如何进行版本发布
+sidebar_position: 4
+---
+
+本教程详细描述了如何发布Apache HertzBeat,并以2.1.0版本的发布为例。
+
+## 1. 环境要求
+
+此发布过程在Ubuntu OS中进行操作,并需要以下环境:
+
+- JDK 1.8+
+- Apache Maven 3.x (此处使用 3.8.7)
+- GnuPG 2.x
+- Git
+- SVN (Apache使用svn来托管项目发布)
+
+> 注意需要设置环境变量 `export GPG_TTY=$(tty)`
+
+## 2. 准备发布
+
+> 首先整理帐户信息以更好地了解操作过程,稍后会多次使用。
+- apache id: `muchunjin (APACHE LDAP 用户名)`
+- apache passphrase: `APACHE LDAP 密钥`
+- apache email: `muchunjin@apache.org`
+- gpg real name: `muchunjin (任何名称均可用, 在这里我将其设置为与apache id相同的名称)`
+- gpg key passphrase: `创建gpg密钥时设置的密码,你需要记住此密码`
+
+### 2.1 生成密钥
+
+```shell
+$ gpg --full-gen-key
+gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Please select what kind of key you want:
+(1) RSA and RSA (default)
+(2) DSA and Elgamal
+(3) DSA (sign only)
+(4) RSA (sign only)
+(14) Existing key from card
+Your selection? 1 # Please enter 1
+RSA keys may be between 1024 and 4096 bits long.
+What keysize do you want? (3072) 4096 # Please enter 4096 here
+Requested keysize is 4096 bits
+Please specify how long the key should be valid.
+0 = key does not expire
+<n> = key expires in n days
+<n>w = key expires in n weeks
+<n>m = key expires in n months
+<n>y = key expires in n years
+Key is valid for? (0) 0 # Please enter 0
+Key does not expire at all
+Is this correct? (y/N) y # Please enter y here
+
+GnuPG needs to construct a user ID to identify your key.
+
+Real name: muchunjin # Please enter 'gpg real name'
+Email address: muchunjin@apache.org # Please enter your apache email address here
+Comment: for apache HertzBeat release create at 20230501 # Please enter some comments here
+You selected this USER-ID:
+    "muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>"
+
+Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O # Please enter O here
+We need to generate a lot of random bytes. It is a good idea to perform
+some other action (type on the keyboard, move the mouse, utilize the
+disks) during the prime generation; this gives the random number
+generator a better chance to gain enough entropy.
+
+# At this time, a dialog box will pop up, asking you to enter the key for this gpg. 
+# you need to remember that it will be used in subsequent steps.
+┌─────────────────────────────────────────────────────┐
+│ Please enter this passphrase to                     │
+│ protect your new key                                │
+│                                                     │
+│ Passphrase: _______________________________________ │
+│                                                     │
+│     <OK>                    <Cancel>                │
+└─────────────────────────────────────────────────────┘
+
+# Here you need to re-enter the password in the previous step.
+┌─────────────────────────────────────────────────────┐
+│ Please re-enter this passphrase                     │
+│                                                     │
+│ Passphrase: _______________________________________ │
+│                                                     │
+│     <OK>                    <Cancel>                │
+└─────────────────────────────────────────────────────┘
+gpg: key ACFB69E705016886 marked as ultimately trusted
+gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/DC12398CCC33A5349EB9663DF9D970AB18C9EDF6.rev'
+public and secret key created and signed.
+
+pub   rsa4096 2023-05-01 [SC]
+      85778A4CE4DD04B7E07813ABACFB69E705016886
+uid                      muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>
+sub   rsa4096 2023-05-01 [E]
+```
+
+密钥可以通过`gpg --list-signatures`命令查看
+
+### 2.2 将生成的密钥上传到公共服务器
+
+```shell
+$ gpg --keyid-format SHORT --list-keys
+/root/.gnupg/pubring.kbx
+------------------------
+pub   rsa4096/05016886 2023-05-01 [SC]
+      85778A4CE4DD04B7E07813ABACFB69E705016886
+uid         [ultimate] muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>
+sub   rsa4096/0C5A4E1C 2023-05-01 [E]
+
+# Send public key to keyserver via key id
+$ gpg --keyserver keyserver.ubuntu.com --send-key 584EE68E
+# Among them, keyserver.ubuntu.com is the selected keyserver, it is recommended to use this, because the Apache Nexus verification uses this keyserver
+```
+
+#### 2.3 检查密钥是否创建成功
+
+验证是否已经同步到公共网络,需要一分钟左右才能知道答案,如果不成功,您可以多次上传并重试。
+
+```shell
+$ gpg --keyserver keyserver.ubuntu.com --recv-keys 05016886   # If the following content appears, it means success
+gpg: key ACFB69E705016886: "muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>" not changed
+gpg: Total number processed: 1
+gpg:              unchanged: 1
+```
+
+或者进入 https://keyserver.ubuntu.com/ 网址,输入密钥的名称,然后点击'Search key'
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/b8fe193e-c137-42b0-a833-90a6d975f335)
+
+如果查询结果如下,表示密钥创建成功。
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/73ada3f2-2d2e-4b76-b25c-34a52db6a069)
+
+#### 2.4 将 gpg 公钥添加到 Apache SVN 项目仓库的 KEYS 文件中
+
+- Apache HertzBeat Dev分支 https://dist.apache.org/repos/dist/dev/incubator/hertzbeat
+- Apache HertzBeat Release分支 https://dist.apache.org/repos/dist/release/incubator/hertzbeat/
+
+##### 2.4.1 将公钥添加到dev分支的KEYS
+
+```shell
+$ mkdir -p hertzbeat_svn/dev
+$ cd hertzbeat_svn/dev
+
+$ svn co https://dist.apache.org/repos/dist/dev/incubator/hertzbeat
+$ cd hertzbeat_svn/dev/hertzbeat
+
+# 将生成的KEY追加到KEYS文件中,检查是否添加正确
+$ (gpg --list-sigs muchunjin@apache.org && gpg --export --armor muchunjin@apache.org) >> KEYS 
+
+$ svn ci -m "add gpg key for muchunjin"
+```
+
+##### 2.4.2 将公钥添加到release分支的KEYS
+
+```shell
+$ mkdir -p hertzbeat_svn/release
+$ cd hertzbeat_svn/release
+
+$ svn co https://dist.apache.org/repos/dist/release/incubator/hertzbeat/
+$ cd hertzbeat_svn/release/hertzbeat
+
+# 将生成的KEY追加到KEYS文件中,检查是否添加正确
+$ (gpg --list-sigs muchunjin@apache.org && gpg --export --armor muchunjin@apache.org) >> KEYS 
+
+$ svn ci -m "add gpg key for muchunjin"
+```
+
+#### 2.5 配置 apache maven 路径和用户密码设置
+
+- 生成主密码
+```shell
+$ mvn --encrypt-master-password <apache password>
+{EM+4/TYVDXYHRbkwjjAS3mE1RhRJXJUSG8aIO5RSxuHU26rKCjuS2vG+/wMjz9te}
+```
+
+- 创建文件 ${user.home}/.m2/settings-security.xml 并配置上一步创建的密码
+
+```shell
+<settingsSecurity>
+  <master>{EM+4/TYVDXYHRbkwjjAS3mE1RhRJXJUSG8aIO5RSxuHU26rKCjuS2vG+/wMjz9te}</master>
+</settingsSecurity>
+```
+
+- 生成最终的加密密码并将其添加到 ~/.m2/settings.xml 文件
+
+```shell
+$ mvn --encrypt-password <apache passphrase>
+{/ZLaH78TWboH5IRqNv9pgU4uamuqm9fCIbw0gRWT01c=}
+```
+
+> 在maven配置文件~/.m2/settings.xml中,添加以下服务端项
+
+```
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+  
+  <localRepository>/path/to/local/repo</localRepository>
+  
+  <servers>
+    <server>
+        <id>apache.snapshots.https</id>
+        <!-- APACHE LDAP UserName --> 
+        <username>muchunjin</username>
+        <!-- APACHE LDAP password (填写刚刚使用命令 `mvn --encrypt-password <apache passphrase>` 创建的密码) -->
+        <password>{/ZLaH78TWboH5IRqNv9pgU4uamuqm9fCIbw0gRWT01c=}</password>
+    </server>
+    <server>
+        <id>apache.releases.https</id>
+        <!-- APACHE LDAP UserName --> 
+        <username>muchunjin</username>
+        <!-- APACHE LDAP password (填写刚刚使用命令 `mvn --encrypt-password <apache passphrase>` 创建的密码) -->
+        <password>{/ZLaH78TWboH5IRqNv9pgU4uamuqm9fCIbw0gRWT01c=}</password>
+    </server>
+  </servers>
+
+  <profiles>
+        <profile>
+          <id>apache-release</id>
+          <properties>
+            <gpg.keyname>05016886</gpg.keyname>
+            <!-- Use an agent: Prevents being asked for the password during the build -->
+            <gpg.useagent>true</gpg.useagent>
+            <gpg.passphrase>passphrase for your gpg key</gpg.passphrase>
+          </properties>
+        </profile>
+  </profiles>
+```
+
+## 3. 准备物料 & 发布到Apache Nexus
+
+#### 3.1 基于dev分支,创建一个名为release-${release_version}-rcx的分支,例如release-2.1.0-rc1。并基于release-2.1.0-rc1分支创建一个名为v2.1.0-rc1的标签,并将此标签设置为预发布。
+
+![图片](https://user-images.githubusercontent.com/19602424/236656362-1d346faa-6582-44eb-9722-8bb2de0eaa92.png)
+
+#### 3.2 克隆发布分支到本地
+
+```shell
+git clone -b release-2.1.0-rc1 -c core.autocrlf=false git@github.com:apache/incubator-hertzbeat.git
+```
+
+#### 3.3 发布相关JAR到Apache Nexus
+
+##### 3.3.1 发布scala 2.11到Apache Nexus仓库 
+
+```shell
+mvn clean install \
+-Pscala-2.11 \
+-DskipTests \
+-Dcheckstyle.skip=true \
+-Dmaven.javadoc.skip=true \
+-pl 'hertzbeat-common,hertzbeat-flink' \
+-pl '!hertzbeat-console/hertzbeat-console-service' \
+-amd
+```
+
+```shell
+mvn deploy \
+-Pscala-2.11,apache-release \
+-DskipTests \
+-Dmaven.javadoc.skip=true \
+-DretryFailedDeploymentCount=3
+```
+
+##### 3.3.2 发布scala 2.12到Apache Nexus仓库
+
+```shell
+mvn clean install \
+-Pscala-2.12 \
+-DskipTests \
+-Dcheckstyle.skip=true \
+-Dmaven.javadoc.skip=true \
+-pl 'hertzbeat-common,hertzbeat-flink' \
+-pl '!hertzbeat-console/hertzbeat-console-service' \
+-amd
+```
+
+```shell
+mvn deploy \
+-Pscala-2.12,apache-release \
+-DskipTests \
+-Dmaven.javadoc.skip=true \
+-DretryFailedDeploymentCount=3
+```
+
+```shell
+mvn deploy \
+-Papache-release \
+-DskipTests \
+-Dmaven.javadoc.skip=true \
+-DretryFailedDeploymentCount=3
+```
+
+##### 3.3.3 检查是否成功发布到Apache Nexus仓库
+
+> 访问 https://repository.apache.org/ 并登录,如果有scala 2.11、scala 2.12,说明发布成功。
+
+![图片](https://user-images.githubusercontent.com/19602424/236657233-08d142eb-5f81-427b-a04d-9ab3172199c1.png)
+
+#### 3.4 编译二进制包
+
+> Scala 2.11 编译打包
+
+```shell
+> ./build.sh # 选择 "mixed mode" 和 "scala 2.11"
+```
+
+> Scala 2.12 编译打包
+
+```shell
+> ./build.sh # 选择 "mixed mode" 和 "scala 2.12"
+```
+
+> 打包项目源码
+
+```shell
+git archive \
+--format=tar.gz \
+--output="dist/apache-hertzbeat-2.1.0-incubating-src.tar.gz" \
+--prefix=apache-hertzbeat-2.1.0-incubating-src/ \
+release-2.1.0-rc1
+```
+
+> 会生成以下3个文件
+
+```
+apache-hertzbeat-2.1.0-incubating-src.tar.gz
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz
+```
+
+#### 3.4 对二进制和源码包进行签名
+
+```shell
+cd dist
+
+# sign
+for i in *.tar.gz; do echo $i; gpg --armor --output $i.asc --detach-sig $i ; done
+
+# SHA512
+for i in *.tar.gz; do echo $i; sha512sum $i > $i.sha512 ; done
+```
+
+> 最终文件列表如下
+
+```
+apache-hertzbeat-2.1.0-incubating-src.tar.gz
+apache-hertzbeat-2.1.0-incubating-src.tar.gz.asc
+apache-hertzbeat-2.1.0-incubating-src.tar.gz.sha512
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz.asc
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz.sha512
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz.asc
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz.sha512
+```
+
+#### 3.5 验证签名
+
+```shell
+$ cd dist
+
+# 验证签名
+$ for i in *.tar.gz; do echo $i; gpg --verify $i.asc $i ; done
+
+apache-hertzbeat-2.1.0-incubating-src.tar.gz
+gpg: Signature made Tue May  2 12:16:35 2023 CST
+gpg:                using RSA key 85778A4CE4DD04B7E07813ABACFB69E705016886
+gpg: Good signature from "muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>" [ultimate]
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz
+gpg: Signature made Tue May  2 12:16:36 2023 CST
+gpg:                using RSA key 85778A4CE4DD04B7E07813ABACFB69E705016886
+gpg: Good signature from "muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>" [ultimate]
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz
+gpg: Signature made Tue May  2 12:16:37 2023 CST
+gpg:                using RSA key 85778A4CE4DD04B7E07813ABACFB69E705016886
+gpg: BAD signature from "muchunjin (for apache HertzBeat release create at 20230501) <mu...@apache.org>" [ultimate]
+
+# 验证 SHA512
+$ for i in *.tar.gz; do echo $i; sha512sum --check $i.sha512; done
+
+apache-hertzbeat-2.1.0-incubating-src.tar.gz
+apache-hertzbeat-2.1.0-incubating-src.tar.gz: OK
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz
+apache-hertzbeat_2.11-2.1.0-incubating-bin.tar.gz: OK
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz
+apache-hertzbeat_2.12-2.1.0-incubating-bin.tar.gz: OK
+```
+
+#### 3.6 发布Apache SVN仓库中dev目录的物料包
+
+```shell
+# 检出Apache SVN仓库中的dev目录到Apache HertzBeat™项目根目录下的dist/hertzbeat_svn_dev目录下
+svn co https://dist.apache.org/repos/dist/dev/incubator/hertzbeat dist/hertzbeat_svn_dev
+
+svn co --depth empty https://dist.apache.org/repos/dist/dev/incubator/hertzbeat
+```
+
+创建一个版本号目录,并以${release_version}-${RC_version}的形式命名。RC_version从1开始,即候选版本从RC1开始。在发布过程中,如果出现导致投票失败的问题,需要进行修正,那么RC版本需要迭代,RC版本号需要+1。例如:为版本2.1.0-RC1投票。如果投票顺利通过,那么RC1版本的资料将作为最终版本的资料发布。如果出现问题(当hertzbeat/incubator社区进行投票时,投票者会严格检查各种发布要求和合规问题)并需要纠正,那么修正后重新启动投票,下一次的候选版本为2.1.0-RC2。
+
+```shell
+mkdir -p dist/hertzbeat_svn_dev/2.1.0-RC1
+cp -f dist/* dist/hertzbeat_svn_dev/2.1.0-RC1
+```
+
+提交到SVN
+
+```shell
+cd dist/hertzbeat_svn_dev/
+
+# 1. 检查svn状态
+svn status
+
+# 2. 添加到svn
+svn add 2.0.0-RC1
+
+svn status
+
+# 3. 提交到svn远端服务器
+svn commit -m "release for HertzBeat 2.1.0"
+```
+
+#### 3.7 检查Apache SVN提交结果
+
+> 在浏览器中访问 https://dist.apache.org/repos/dist/dev/incubator/hertzbeat/2.1.0-RC1/
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/e4763537-af9f-4f2a-967d-912e6670b360)
+
+## 3. 进入社区投票阶段
+
+#### 3.1 发送社区投票邮件
+
+发送社区投票邮件需要至少三个`+1`,且无`-1`。
+
+> `Send to`: dev@hertzbeat.apache.org <br />
+> `Title`: [VOTE] Release Apache HertzBeat (Incubating) 2.1.0 rc1 <br />
+> `Body`: 
+
+```
+Hello HertzBeat Community:
+
+This is a call for vote to release Apache HertzBeat(Incubating) version release-2.1.0-RC1.
+
+Apache Streamark - Make stream processing easier! Easy-to-use streaming application development framework and operation platform.
+
+Release notes:
+https://hertzbeat.apache.org/download/release-note/2.1.0/
+
+The release candidates:
+https://dist.apache.org/repos/dist/dev/incubator/hertzbeat/2.1.0-RC1/
+
+Maven artifacts are available in a staging repository at:
+https://repository.apache.org/content/repositories/orgapachehertzbeat-1012/
+
+Git tag for the release:
+https://github.com/apache/incubator-hertzbeat/releases/tag/v2.1.0-rc1
+
+The artifacts signed with PGP key [05016886], corresponding to [muchunjin@apache.org], that can be found in keys file:
+https://downloads.apache.org/incubator/hertzbeat/KEYS
+
+The vote will be open for at least 72 hours or until the necessary number of votes are reached.
+
+Please vote accordingly:
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+*Valid check is a requirement for a vote. *Checklist for reference:
+
+[ ] Download HertzBeat are valid.
+[ ] Checksums and PGP signatures are valid.
+[ ] Source code distributions have correct names matching the current
+release.
+[ ] LICENSE and NOTICE files are correct for each HertzBeat repo.
+[ ] All files have license headers if necessary.
+[ ] No compiled archives bundled in source archive.
+[ ] Can compile from source.
+
+More detail checklist please refer:
+https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist
+
+Steps to validate the release,Please refer to:
+https://hertzbeat.apache.org/community/release/how-to-verify
+
+How to Build:
+
+1.cd incubator-hertzbeat
+2.sh ./build.sh
+
+Thanks!
+```
+
+在72小时后,将统计投票结果,并发送投票结果邮件,如下所示。
+
+> `Send to`: dev@hertzbeat.apache.org <br />
+> `Title`: [RESULT][VOTE] Release Apache HertzBeat (Incubating) 2.1.0-rc1 <br />
+> `Body`:
+
+```
+Dear HertzBeat community,
+
+Thanks for your review and vote for "Release Apache HertzBeat (Incubating) 2.1.0-rc1"
+I'm happy to announce the vote has passed:
+
+
+4 binding +1, from:
+
+- Zhuoyu Chen
+- Huajie Wang
+- Linying Yu
+- Shaokang Lv
+
+1 non-binding +1, from:
+
+- Roc Marshal
+
+
+no 0 or -1 votes.
+
+Vote thread:
+https://lists.apache.org/thread/t01b2lbtqzyt7j4dsbdp5qjc3gngjsdq
+
+
+Thank you to everyone who helped us to verify and vote for this release. We will move to the ASF Incubator voting shortly.
+
+
+Best,
+ChunJin Mu
+```
+
+邮件内容中的一项是`Vote thread`,链接获取方式如下:<br />
+访问此地址 https://lists.apache.org/list.html?dev@hertzbeat.apache.org , 找到邮件标题并点击显示投票内容
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/5755ed06-529f-4739-96a8-1ac13bbb21ea)
+
+右键点击标题,点击复制链接地址获取链接
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/1616da5b-7891-45cc-b956-a0ba5e7ce874)
+
+#### 3.2 发送孵化社区投票邮件
+
+发送孵化社区投票邮件需要至少三个`+1`,且无`-1`。
+
+> `Send to`: general@incubator.apache.org <br />
+> `cc`: dev@hertzbeat.apache.org、tison@apache.org、willem.jiang@gmail.com <br />
+> `Title`: [VOTE] Release Apache HertzBeat(Incubating) 2.1.0-rc1 <br />
+> `Body`:
+
+```
+Hello Incubator Community:
+
+This is a call for a vote to release Apache HertzBeat(Incubating) version 2.1.0-RC1.
+The Apache HertzBeat community has voted on and approved a proposal to release Apache HertzBeat(Incubating) version 2.1.0-RC1.
+We now kindly request the Incubator PMC members review and vote on this incubator release.
+Apache HertzBeat, Make stream processing easier! Easy-to-use streaming application development framework and operation platform.
+
+HertzBeat community vote thread:
+https://lists.apache.org/thread/t01b2lbtqzyt7j4dsbdp5qjc3gngjsdq
+
+Vote result thread:
+https://lists.apache.org/thread/t5z58mvrs1drgzfyc48c9lhmd8skswn7
+
+The release candidate:
+https://dist.apache.org/repos/dist/dev/incubator/hertzbeat/2.1.0-RC1/
+
+Git tag for the release:
+https://github.com/apache/incubator-hertzbeat/releases/tag/v2.1.0-rc1
+
+Maven artifacts are available in a staging repository at:
+https://repository.apache.org/content/repositories/orgapachehertzbeat-1012/
+
+The artifacts signed with PGP key [05016886], corresponding to [muchunjin@apache.org], that can be found in keys file:
+https://downloads.apache.org/incubator/hertzbeat/KEYS
+
+The vote will be open for at least 72 hours or until the necessary number of votes are reached.
+
+Please vote accordingly:
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+More detailed checklist please refer:
+• https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist
+
+Steps to validate the release, Please refer to:
+• https://www.apache.org/info/verification.html
+• https://hertzbeat.apache.org/community/release/how-to-verify
+
+
+How to Build:
+
+1) clone source code:
+> git clone -b v2.1.0-rc1 git@github.com:apache/incubator-hertzbeat.git
+
+2) build project:
+> cd incubator-hertzbeat && sh ./build.sh
+
+
+Thanks,
+
+On behalf of Apache HertzBeat(Incubating) community
+
+
+Best,
+ChunJin Mu
+```
+
+如果72小时后没有-1,回复邮件如下
+
+> `Send to`: general@incubator.apache.org <br />
+> `cc`: dev@hertzbeat.apache.org <br />
+> `Body`:
+
+```
+Thanks everyone for review and vote, 72H passed. I'll announce the vote result soon.
+
+Best,
+Chunjin Mu
+```
+
+然后将统计投票结果,并发送投票结果邮件,如下所示。
+
+> `Send to`: general@incubator.apache.org <br />
+> `cc`: dev@hertzbeat.apache.org、tison@apache.org、willem.jiang@gmail.com <br />
+> `Title`: [RESULT][VOTE] Release Apache HertzBeat(Incubating) 2.1.0-rc1 <br />
+> `Body`:
+
+```
+Hi all,
+
+Thanks for your review and vote for "Release Apache HertzBeat (Incubating) 2.1.0-rc1"
+I'm happy to announce the vote has passed:
+
+3 binding votes, no +0 or -1 votes.
+Thanks for reviewing and voting.
+
++3 (binding) +1, from:
+- tison
+- Gang Li
+- Willem Jiang
+
+no 0 or -1 votes.
+
+Vote thread:
+https://lists.apache.org/thread/k3cvcbzxqs6qy62d1o6r9pqpykcgvvhm
+
+
+Thanks everyone for your feedback and help with HertzBeat apache release. The HertzBeat team will take the steps to complete this release and will announce it soon.
+
+Best,
+ChunJin Mu
+```
+
+邮件内容中的一项是`Vote thread`,链接获取方式如下:<br />
+访问此地址 https://lists.apache.org/list.html?general@incubator.apache.org , 找到邮件标题并点击显示投票内容
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/aea68925-7911-4413-8b2d-aea12685337f)
+
+右键点击标题,点击复制链接地址获取链接
+
+等待一天,查看看导师是否有其他意见,如果没有,发送以下公告邮件
+
+## 4. 完成最终发布步骤
+
+#### 4.1 迁移源代码和二进制包
+
+```shell
+svn mv https://dist.apache.org/repos/dist/dev/incubator/hertzbeat/2.1.0-RC1 https://dist.apache.org/repos/dist/release/incubator/hertzbeat/2.1.0  -m "transfer packages for 2.1.0-RC1"
+```
+
+#### 4.2 发布版本到Apache Staging仓库
+
+- 登录 http://repository.apache.org ,使用你的Apache账号登录
+- 点击左侧的 Staging repositories
+- 选择你最近上传的仓库,投票邮件中指定的仓库
+- 点击上方的Release按钮,这个过程会进行一系列的检查
+> 仓库同步到其他数据源通常需要24小时左右
+
+#### 4.3 添加新版本下载地址到官网
+
+添加以下内容到官网的src/pages/download/data.json文件中
+
+```
+{
+    "version": "2.1.0",
+    "date": "2023-05-11"
+}
+```
+
+最终文件内容如下
+
+```
+[
+    {
+    "version": "2.0.0",
+    "date": "2023-02-21"
+    },
+    {
+    "version": "2.1.0",
+    "date": "2023-05-11"
+    }
+]
+```
+
+打开官网地址 https://hertzbeat.apache.org/download/ 查看是否有新版本的下载
+
+> 需要注意的是,下载链接可能需要一个小时后才会生效,请注意。
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/e7900fb2-7bfc-4fa1-bd40-9806e6a822ef)
+
+#### 4.4 在github上生成release
+
+基于release-2.1.0-rc1分支创建一个名为v2.1.0的标签,并将此标签设置为latest release。
+
+然后输入发版标题和描述
+
+- 发版标题: 
+```
+v2.1.0-incubating
+```
+- 描述:
+```
+Release-2.1.0-incubating
+release note: https://hertzbeat.apache.org/download/release-note/2.1.0
+```
+
+![图片](https://github.com/apache/incubator-hertzbeat/assets/19602424/84723ff5-a295-471d-8265-1b8ef867c3d1)
+
+然后点击`Publish release`按钮。
+
+然后将release-2.1.0-rc1分支重命名为release-2.1.0。
+
+#### 4.5 发送新版本公告邮件
+
+> `Send to`: general@incubator.apache.org <br />
+> `cc`: dev@hertzbeat.apache.org <br />
+> `Title`: [ANNOUNCE] Release Apache HertzBeat (Incubating) 2.1.0 <br />
+> `Body`:
+
+```
+Hi all,
+
+We are glad to announce the release of Apache HertzBeat(incubating) 2.1.0.
+Once again I would like to express my thanks to your help.
+
+Apache HertzBeat(https://hertzbeat.apache.org/) - Make stream processing easier! Easy-to-use streaming application development framework and operation platform.
+
+Download Links: https://hertzbeat.apache.org/download/
+Release Notes: https://hertzbeat.apache.org/download/release-note/2.1.0
+
+HertzBeat Resources:
+- Issue: https://github.com/apache/incubator-hertzbeat/issues
+- Mailing list: dev@hertzbeat.apache.org
+
+- Apache HertzBeat Team
+
+Best,
+ChunJin Mu
+```
+
+该版本的发布顺利结束。
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/how-to-verify.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/how-to-verify.md
new file mode 100644
index 000000000..0f53a9443
--- /dev/null
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/how-to-verify.md
@@ -0,0 +1,232 @@
+---
+id: how_to_verify_release
+title: 版本物料的验证
+sidebar_position: 4
+---
+# 验证候选版本
+
+详细检查列表请参考官方的[check list](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+## 1. 下载候选版本到本地
+
+
+>需要依赖gpg工具,如果没有,建议安装gpg2
+
+```shell
+#如果本地有svn,可以clone到本地 
+svn co https://dist.apache.org/repos/dist/dev/incubator/hertzbeat/${release_version}-${rc_version}/
+#或者 直接下载物料文件
+wget https://dist.apache.org/repos/dist/dev/incubator/hertzbeat/${release_version}-${rc_version}/xxx.xxx
+
+```
+
+
+## 2. 验证上传的版本是否合规
+
+> 开始验证环节,验证包含但不局限于以下内容和形式
+
+
+
+### 2.1 查看发布包是否完整
+
+> 上传到dist的包必须包含源码包,二进制包可选
+
+1. 是否包含源码包
+2. 是否包含源码包的签名
+3. 是否包含源码包的sha512
+4. 如果上传了二进制包,则同样检查(2)-(4)所列的内容
+
+
+
+### 2.2 检查gpg签名
+
+首先导入发布人公钥。从svn仓库导入KEYS到本地环境。(发布版本的人不需要再导入,帮助做验证的人需要导入,用户名填发版人的即可)
+
+#### 2.2.1 导入公钥
+
+```shell
+$ curl  https://downloads.apache.org/incubator/hertzbeat/KEYS > KEYS # 下载KEYS
+$ gpg --import KEYS # 导入KEYS到本地
+```
+#### 2.2.2 信任公钥
+
+> 信任此次版本所使用的KEY
+
+```shell
+$ gpg --edit-key xxxxxxxxxx #此次版本所使用的KEY用户
+gpg (GnuPG) 2.2.21; Copyright (C) 2020 Free Software Foundation, Inc.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Secret key is available.
+gpg> trust #信任
+Please decide how far you trust this user to correctly verify other users' keys
+(by looking at passports, checking fingerprints from different sources, etc.)
+
+  1 = I don't know or won't say
+  2 = I do NOT trust
+  3 = I trust marginally
+  4 = I trust fully
+  5 = I trust ultimately
+  m = back to the main menu
+
+Your decision? 5 #选择5
+Do you really want to set this key to ultimate trust? (y/N) y #选择y
+                                                            
+gpg> 
+     
+```
+#### 2.2.3 检查签名
+
+```shell
+for i in *.tar.gz; do echo $i; gpg --verify $i.asc $i ; done
+```
+
+检查结果
+> 出现类似以下内容则说明签名正确,关键字:**`Good signature`**
+
+```shell
+apache-hertzbeat-xxx-incubating-src.tar.gz
+gpg: Signature made XXXX
+gpg:                using RSA key XXXXX
+gpg: Good signature from "xxx @apache.org>"
+```
+
+### 2.3 检查sha512哈希
+
+> 本地计算sha512哈希后,验证是否与dist上的一致,如果上传二进制包,则同样需要检查二进制包的sha512哈希
+
+
+```shell
+for i in *.tar.gz; do echo $i; sha512sum --check  $i.sha512; done
+```
+
+### 2.4 检查二进制包
+
+解压缩  `apache-hertzbeat_${scala.version}-${release.version}-incubating-bin.tar.gz`
+
+```shell
+# scala 2.11 二进制发行包
+tar -xzvf apache-hertzbeat_2.11-${release.version}-incubating-bin.tar.gz
+
+# scala 2.12 二进制发行包
+tar -xzvf apache-hertzbeat_2.12-${release.version}-incubating-bin.tar.gz
+```
+
+进行如下检查:
+
+- [ ] 文件夹包含单词`incubating`
+- [ ] 存在`LICENSE`和`NOTICE`文件
+- [ ] 存在`DISCLAIMER`或`DISCLAIMER-WIP`文件
+- [ ] `NOTICE`文件中的年份正确
+- [ ] 所有文本文件开头都有ASF许可证
+- [ ] 检查第三方依赖许可证:
+- [ ] 第三方依赖的许可证兼容
+- [ ] 所有第三方依赖的许可证都在`LICENSE`文件中声名
+- [ ] 如果依赖的是Apache许可证并且存在`NOTICE`文件,那么这些`NOTICE`文件也需要加入到版本的`NOTICE`文件中
+- [ ] .....
+
+详细的检查项,可以参考此文章:[ASF第三方许可证策](
+
+### 2.5. 源码编译验证
+
+解压缩 `apache-hertzbeat-${release_version}-incubating-src.tar.gz`
+
+```shell
+cd apache-hertzbeat-${release_version}-incubating-src
+
+# 执行编译脚本, 选择
+./build.sh
+```
+
+进行如下检查:
+
+***选择编译模式, 这里只能选择1***
+
+>[HertzBeat] HertzBeat supports front-end and server-side mixed / detached packaging mode, Which mode do you need ?
+>
+>1. mixed mode
+>
+>2. detached mode
+>
+>  选 1
+
+***选择 scala 版本, 第一次编译 scala 2.11版本选择 1, 第二次编译 scala 2.12版本选择 2***
+
+>[HertzBeat] HertzBeat supports Scala 2.11 and 2.12. Which version do you need ?
+>
+>1. 2.11
+>2. 2.12
+>
+
+一次编译大概8分钟左右,编译完成之后会在项目根路径下生成 ***dist*** 目录,会将最终的编译的项目二进制放在这里,  做如下检查:
+
+- [ ] 检查源码包是否包含由于包含不必要文件,致使tar包过于庞大
+- [ ] 文件夹包含单词`incubating`
+- [ ] 存在`LICENSE`和`NOTICE`文件
+- [ ] 存在`DISCLAIMER`或`DISCLAIMER-WIP`文件
+- [ ] `NOTICE`文件中的年份正确
+- [ ] 只存在文本文件,不存在二进制文件
+- [ ] 所有文件的开头都有ASF许可证
+- [ ] 能够正确编译
+- [ ] 检查是否有多余文件或文件夹,例如空文件夹等
+- [ ] .....
+
+https://apache.org/legal/resolved.html)
+
+
+
+## 3. 邮件回复
+
+如果发起了发布投票,验证后,可以参照此回复示例进行邮件回复
+
+<font color="red">
+回复的邮件一定要带上自己检查了那些项信息,仅仅回复`+1 approve`,是无效的。
+
+PPMC在dev@hertzbeat.apache.org HertzBeat 的社区投票时,请带上 binding后缀,表示对 HertzBeat 社区中的投票具有约束性投票,方便统计投票结果。
+
+IPMC在general@incubator.apache.org incubator社区投票,请带上 binding后缀,表示对incubator社区中的投票具有约束性投票,方便统计投票结果。
+
+</font>
+
+:::caution 注意
+如果在dev@hertzbeat.apache.org已经投过票,在incubator社区进行投票回复时,可以直接带过去,<font color="red">需要注意约束性</font>  如:
+
+```html
+//incubator社区 投票时,只有IPMC成员才具有约束性 binding,PPMC需要注意约束性的变化
+Forward my +1 from dev@hertzbeat (non-binding)
+Copy my +1 from hertzbeat DEV ML (non-binding)
+```
+:::
+
+
+
+非PPMC/IPMC成员
+```html
++1 (non-binding)
+I  checked:
+    1. All download links are valid
+    2. Checksum and signature are OK
+    3. LICENSE and NOTICE are exist
+    4. Build successfully on macOS(Big Sur) 
+    5. ....
+```
+
+PPMC/IPMC成员
+```html
+//incubator社区 投票时,只有IPMC成员才具有约束性 binding
++1 (binding)
+I  checked:
+    1. All download links are valid
+    2. Checksum and signature are OK
+    3. LICENSE and NOTICE are exist
+    4. Build successfully on macOS(Big Sur) 
+    5. ....
+```
+
+
+## 4. 注意事项
+<font color="red">
+如果你有安装maven工具,你可以使用自己的mvn命令替换 ./mvnw或者mvnw.cmd
+mvnw是Maven Wrapper的缩写。它可以支持运行 Maven 项目,而无需安装 Maven 并配置环境变量。如果找不到它,它会根据配置文件,下载对应的 Maven 版本
+</font>
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/mailing_lists.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/mailing_lists.md
new file mode 100644
index 000000000..efcfb3850
--- /dev/null
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/mailing_lists.md
@@ -0,0 +1,60 @@
+---
+id: 'mailing_lists'
+title: '邮件列表'
+sidebar_position: 1
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+HertzBeat 开发者邮件列表是您在使用 HertzBeat 时提出所有问题的首选方式,它能将您的问题推向整个社区。
+这是与社区保持同步的最佳方式。
+
+在您向邮件列表发送任何内容之前,请确保您已经**订阅**了它们。
+当前可用的列表在下表中列出。
+
+## 用途
+
+### 开发者列表
+
+- 使用此列表提出您对 HertzBeat 的问题
+- 由 HertzBeat 贡献者用来讨论 HertzBeat 的开发
+
+### 提交列表
+
+- 关于 HertzBeat 代码库的更改的通知
+
+| 列表名称           | 地址                      | 订阅                                                   | 退订                                                     | 归档                                                                     |
+|---------------------|------------------------------|-------------------------------------------------------------|-----------------------------------------------------------------|-----------------------------------------------------------------------------|
+| **开发者列表**  | dev@hertzbeat.apache.org    | [订阅](mailto:dev-subscribe@hertzbeat.apache.org)     | [退订](mailto:dev-unsubscribe@hertzbeat.apache.org)     | [归档](https://lists.apache.org/list.html?dev@hertzbeat.apache.org)     |
+| **提交列表**    | commits@hertzbeat.apache.org | [订阅](mailto:commits-subscribe@hertzbeat.apache.org) | [退订](mailto:commits-unsubscribe@hertzbeat.apache.org) | [归档](https://lists.apache.org/list.html?commits@hertzbeat.apache.org) |
+
+## 订阅步骤
+
+发送订阅邮件也很简单。步骤如下:
+
+- 1、**订阅**:点击上表中的 **订阅** 按钮,它将重定向到您的邮件客户端。主题和内容是任意的。
+  之后,您会从 dev-help@hertzbeat.apache.org 收到确认邮件(如果没有收到,请确认电子邮件是否被自动分类为垃圾邮件、推广邮件、订阅邮件等)。
+- 2、**确认**:直接回复确认邮件,或点击邮件中的链接快速回复。主题和内容是任意的。
+- 3、**欢迎**:在完成上述步骤后,您会收到一个主题为 WELCOME to dev@hertzbeat.apache.org 的欢迎邮件,您已成功订阅 Apache HertzBeat 邮件列表。
+
+## 发送纯文本邮件
+
+在发送邮件列表时,请使用纯文本邮件。
+**不要使用 HTML 邮件**。
+HTML 邮件更有可能被视为垃圾邮件并被拒绝。
+通过不同的邮件客户端,它可能会出现格式错误,并且其他人不容易阅读。
\ No newline at end of file
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/new_committer_process.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/new_committer_process.md
new file mode 100644
index 000000000..d8c596ef7
--- /dev/null
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/new_committer_process.md
@@ -0,0 +1,245 @@
+---
+id: 'new_committer_process'
+title: '提名新Committer流程'
+sidebar_position: 4
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+此指南基于 [apache newcommitter](https://community.apache.org/newcommitter.html#new-committer-process)
+
+## 提名新Committer的流程
+
+- 在邮件`private@hertzbeat.apache.org`中发起投票
+
+  参见 **Committer投票模板**
+
+- 关闭投票
+
+  参见 **关闭投票模板**
+
+- 如果结果是赞成,邀请新的Committer
+
+  参见 **Committer邀请模板**
+
+- 如果同意,那么:接受Committer
+
+  参见 **Committer接受模板**
+
+- 等待我们看到CLA的接收记录
+
+- 请求创建Committer账户
+
+  参见 **Committer账户创建模板**
+
+  - 等待root告诉我们已经完成
+  - PMC主席开启svn和其他访问权限
+  - 在JIRA和CWiki中将Committer添加到适当的组中
+
+- 通知Committer完成
+
+  参见 **Committer完成模板**
+
+## 模板
+
+请注意,模板中有三个占位符在使用之前应该替换:
+
+- NEW_COMMITTER_NAME
+- NEW_COMMITTER_EMAIL
+- NEW_COMMITTER_APACHE_NAME
+
+### Committer投票模板
+
+```text
+To: private@hertzbeat.apache.org
+Subject: [VOTE] New committer: ${NEW_COMMITTER_NAME}
+```
+
+```text
+Hi HertzBeat PPMC,
+
+This is a formal vote about inviting ${NEW_COMMITTER_NAME} as our new committer.
+
+${Work list}[1]
+
+[1] https://github.com/apache/incubator-hertzbeat/commits?author=${NEW_COMMITTER_NAME}
+```
+
+注意,投票将在今天一周后结束,即
+[midnight UTC on YYYY-MM-DD](https://www.timeanddate.com/counters/customcounter.html?year=YYYY&month=MM&day=DD)
+参考投票[指南](https://community.apache.org/newcommitter.html)
+
+### 关闭投票模板
+
+```text
+To: private@hertzbeat.apache.org
+Subject: [RESULT] [VOTE] New committer: ${NEW_COMMITTER_NAME}
+```
+
+```text
+Hi HertzBeat PPMC,
+
+The vote has now closed. The results are:
+
+Binding Votes:
+
++1 [TOTAL BINDING +1 VOTES]
+ 0 [TOTAL BINDING +0/-0 VOTES]
+-1 [TOTAL BINDING -1 VOTES]
+
+The vote is ***successful/not successful***
+```
+
+### Committer邀请模板
+
+```text
+To: ${NEW_COMMITTER_EMAIL}
+Cc: private@hertzbeat.apache.org
+Subject: Invitation to become HertzBeat committer: ${NEW_COMMITTER_NAME}
+```
+
+```text
+Hello ${NEW_COMMITTER_NAME},
+
+The HertzBeat Project Management Committee (PMC) 
+hereby offers you committer privileges to the project.
+These privileges are offered on the understanding that
+you'll use them reasonably and with common sense.
+We like to work on trust rather than unnecessary constraints. 
+
+Being a committer enables you to more easily make 
+changes without needing to go through the patch 
+submission process.
+
+Being a committer does not require you to 
+participate any more than you already do. It does 
+tend to make one even more committed.  You will 
+probably find that you spend more time here.
+
+Of course, you can decline and instead remain as a 
+contributor, participating as you do now.
+
+A. This personal invitation is a chance for you to 
+accept or decline in private.  Either way, please 
+let us know in reply to the private@hertzbeat.apache.org
+address only.
+
+B. If you accept, the next step is to register an iCLA:
+    1. Details of the iCLA and the forms are found 
+    through this link: https://www.apache.org/licenses/#clas
+
+    2. Instructions for its completion and return to 
+    the Secretary of the ASF are found at
+    https://www.apache.org/licenses/#submitting
+
+    3. When you transmit the completed iCLA, request 
+    to notify the Apache HertzBeat and choose a 
+    unique Apache ID. Look to see if your preferred 
+    ID is already taken at 
+    https://people.apache.org/committer-index.html
+    This will allow the Secretary to notify the PMC 
+    when your iCLA has been recorded.
+
+When recording of your iCLA is noted, you will 
+receive a follow-up message with the next steps for 
+establishing you as a committer.
+```
+
+### Committer接受模板
+
+```text
+To: ${NEW_COMMITTER_EMAIL}
+Cc: private@hertzbeat.apache.org
+Subject: Re: invitation to become HertzBeat committer
+```
+
+```text
+Welcome. Here are the next steps in becoming a project committer. After that
+we will make an announcement to the dev@hertzbeat.apache.org list.
+
+You need to send a Contributor License Agreement to the ASF.
+Normally you would send an Individual CLA. If you also make
+contributions done in work time or using work resources,
+see the Corporate CLA. Ask us if you have any issues.
+https://www.apache.org/licenses/#clas.
+
+You need to choose a preferred ASF user name and alternatives.
+In order to ensure it is available you can view a list of taken IDs at
+https://people.apache.org/committer-index.html
+
+Please notify us when you have submitted the CLA and by what means 
+you did so. This will enable us to monitor its progress.
+
+We will arrange for your Apache user account when the CLA has 
+been recorded.
+
+After that is done, please make followup replies to the dev@hertzbeat.apache.org list.
+We generally discuss everything there and keep the
+private@hertzbeat.apache.org list for occasional matters which must be private.
+
+The developer section of the website describes roles within the ASF and provides other
+resources:
+  https://www.apache.org/foundation/how-it-works.html
+  https://www.apache.org/dev/
+
+The incubator also has some useful information for new committers
+in incubating projects:
+  https://incubator.apache.org/guides/committer.html
+  https://incubator.apache.org/guides/ppmc.html
+
+Just as before you became a committer, participation in any ASF community
+requires adherence to the ASF Code of Conduct:
+  https://www.apache.org/foundation/policies/conduct.html
+
+Yours,
+The Apache HertzBeat PPMC
+```
+
+### Committer完成模板
+
+```text
+To: private@hertzbeat.apache.org, ${NEW_COMMITTER_EMAIL}
+Subject: account request: ${NEW_COMMITTER_NAME}
+```
+
+```text
+${NEW_COMMITTER_NAME}, as you know, the ASF Infrastructure has set up your
+committer account with the username '${NEW_COMMITTER_APACHE_NAME}'.
+
+Please follow the instructions to set up your SSH,
+svn password, svn configuration, email forwarding, etc.
+https://www.apache.org/dev/#committers
+
+You have commit access to specific sections of the
+ASF repository, as follows:
+
+The general "committers" at:
+  https://svn.apache.org/repos/private/committers
+
+If you have any questions during this phase, then please
+see the following resources:
+
+Apache developer's pages: https://www.apache.org/dev/
+Incubator committer guide: https://incubator.apache.org/guides/committer.html
+
+Naturally, if you don't understand anything be sure to ask us on the dev@hertzbeat.apache.org mailing list. 
+Documentation is maintained by volunteers and hence can be out-of-date and incomplete - of course
+you can now help fix that.
+
+A PPMC member will announce your election to the dev list soon.
+```
\ No newline at end of file
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/new_pmc_member_process.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/new_pmc_member_process.md
new file mode 100644
index 000000000..8a6f9c834
--- /dev/null
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/new_pmc_member_process.md
@@ -0,0 +1,286 @@
+---
+id: 'new_pmc_ember_process'
+title: '提名新PMC成员流程'
+sidebar_position: 5
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+这个指南是基于 [apache newcommitter](https://community.apache.org/newcommitter.html#new-committer-process) 的。
+
+## 新PMC成员的流程
+
+- 在邮件`private@hertzbeat.apache.org`中进行投票
+
+  参见 **PMC成员投票模板**
+
+- 关闭投票
+
+  参见 **关闭投票模板**
+
+- 董事会批准新的PMC成员
+
+  参见 **董事会批准新PMC成员**
+
+- 如果结果是赞成,邀请新的PMC成员
+
+  参见 **PMC成员邀请模板**
+
+- 如果同意,那么:接受PMC成员
+
+  参见 **PMC成员接受模板**
+
+- 通知PMC成员完成
+
+  参见 **PMC成员完成模板**
+
+- 宣布新的PMC成员
+
+  参见 **PMC成员公告模板**
+
+## 模板
+
+注意,在使用模板之前,有三个占位符需要被替换
+
+- NEW_PMC_NAME
+- NEW_PMC_EMAIL
+- NEW_PMC_APACHE_NAME
+
+### PMC成员投票模板
+
+```text
+To: private@hertzbeat.apache.org
+Subject: [VOTE] New PMC member candidate: ${NEW_PMC_NAME}
+```
+
+```text
+Hi HertzBeat PPMC,
+
+This is a formal vote about inviting ${NEW_PMC_NAME} as our new PMC member.
+
+${Work list}[1]
+
+[1] https://github.com/apache/incubator-hertzbeat/commits?author=${NEW_PMC_NAME}
+```
+
+注意,投票将在今天一周后结束,即
+[midnight UTC on YYYY-MM-DD](https://www.timeanddate.com/counters/customcounter.html?year=YYYY&month=MM&day=DD)
+参考投票[指南](https://community.apache.org/newcommitter.html)
+
+
+### Close Vote Template
+
+```text
+To: private@hertzbeat.apache.org
+Subject: [RESULT] [VOTE] New PMC member: ${NEW_PMC_NAME}
+```
+
+```text
+Hi HertzBeat PPMC,
+
+The vote has now closed. The results are:
+
+Binding Votes:
+
++1 [TOTAL BINDING +1 VOTES]
+ 0 [TOTAL BINDING +0/-0 VOTES]
+-1 [TOTAL BINDING -1 VOTES]
+
+The vote is ***successful/not successful***
+```
+
+### Board Approval of new PMC member Template
+
+```text
+To: board@apache.org
+Cc: private@<project>.apache.org
+Subject: [NOTICE] ${NEW_PMC_NAME} for HertzBeat PMC member
+```
+
+```text
+HertzBeat proposes to invite ${NEW_PMC_NAME} to join the PMC.
+
+The vote result is available here: https://lists.apache.org/...
+```
+
+参考 [newpmc](https://www.apache.org/dev/pmc.html#newpmc)
+
+### PMC成员邀请模板
+
+```text
+To: ${NEW_PMC_EMAIL}
+Cc: private@hertzbeat.apache.org
+Subject: Invitation to become HertzBeat PMC member: ${NEW_PMC_NAME}
+```
+
+```text
+Hello ${NEW_PMC_NAME},
+
+The HertzBeat Project Management Committee (PMC) 
+hereby offers you committer privileges to the project
+as well as membership in the PMC.
+These privileges are offered on the understanding that
+you'll use them reasonably and with common sense.
+We like to work on trust rather than unnecessary constraints. 
+
+Being a PMC member enables you to guide the direction of the project.
+
+Being a PMC member does not require you to 
+participate any more than you already do. It does 
+tend to make one even more committed.  You will 
+probably find that you spend more time here.
+
+Of course, you can decline and instead remain as a 
+contributor, participating as you do now.
+
+A. This personal invitation is a chance for you to 
+accept or decline in private.  Either way, please 
+let us know in reply to the private@hertzbeat.apache.org
+address only.
+
+B. If you accept, the next step is to register an iCLA:
+    1. Details of the iCLA and the forms are found 
+    through this link: https://www.apache.org/licenses/#clas
+
+    2. Instructions for its completion and return to 
+    the Secretary of the ASF are found at
+    https://www.apache.org/licenses/#submitting
+
+    3. When you transmit the completed iCLA, request 
+    to notify the Apache HertzBeat and choose a 
+    unique Apache ID. Look to see if your preferred 
+    ID is already taken at 
+    https://people.apache.org/committer-index.html
+    This will allow the Secretary to notify the PMC 
+    when your iCLA has been recorded.
+
+When recording of your iCLA is noted, you will 
+receive a follow-up message with the next steps for 
+establishing you as a PMC member.
+```
+
+### PMC成员接受模板
+
+```text
+To: ${NEW_PMC_EMAIL}
+Cc: private@hertzbeatv.apache.org
+Subject: Re: invitation to become HertzBeat PMC member
+```
+
+```text
+Welcome. Here are the next steps in becoming a project PMC. After that
+we will make an announcement to the dev@hertzbeat.apache.org list.
+
+You need to send a Contributor License Agreement to the ASF.
+Normally you would send an Individual CLA. If you also make
+contributions done in work time or using work resources,
+see the Corporate CLA. Ask us if you have any issues.
+https://www.apache.org/licenses/#clas.
+
+You need to choose a preferred ASF user name and alternatives.
+In order to ensure it is available you can view a list of taken IDs at
+https://people.apache.org/committer-index.html
+
+Please notify us when you have submitted the CLA and by what means 
+you did so. This will enable us to monitor its progress.
+
+We will arrange for your Apache user account when the CLA has 
+been recorded.
+
+After that is done, please make followup replies to the dev@hertzbeat.apache.org list.
+We generally discuss everything there and keep the
+private@hertzbeat.apache.org list for occasional matters which must be private.
+
+The developer section of the website describes roles within the ASF and provides other
+resources:
+  https://www.apache.org/foundation/how-it-works.html
+  https://www.apache.org/dev/
+
+The incubator also has some useful information for new PMC
+in incubating projects:
+  https://incubator.apache.org/guides/committer.html
+  https://incubator.apache.org/guides/ppmc.html
+
+Just as before you became a PMC member, participation in any ASF community
+requires adherence to the ASF Code of Conduct:
+  https://www.apache.org/foundation/policies/conduct.html
+
+Yours,
+The Apache HertzBeat PPMC
+```
+
+### PMC成员完成模板
+
+```text
+To: private@hertzbeat.apache.org, ${NEW_PMC_EMAIL}
+Subject: account request: ${NEW_PMC_NAME}
+```
+
+```text
+${NEW_PMC_EMAIL}, as you know, the ASF Infrastructure has set up your
+committer account with the username '${NEW_PMC_APACHE_NAME}'.
+
+Please follow the instructions to set up your SSH,
+svn password, svn configuration, email forwarding, etc.
+https://www.apache.org/dev/#committers
+
+You have commit access to specific sections of the
+ASF repository, as follows:
+
+The general "committers" at:
+  https://svn.apache.org/repos/private/committers
+
+If you have any questions during this phase, then please
+see the following resources:
+
+Apache developer's pages: https://www.apache.org/dev/
+Incubator committer guide: https://incubator.apache.org/guides/committer.html
+
+Naturally, if you don't understand anything be sure to ask us on the dev@hertzbeat.apache.org mailing list. 
+Documentation is maintained by volunteers and hence can be out-of-date and incomplete - of course
+you can now help fix that.
+
+A PPMC member will announce your election to the dev list soon.
+```
+
+### PMC成员通知模板
+
+```text
+To: dev@hertzbeat.apache.org
+[ANNONCE] New PMC member: ${NEW_PMC_NAME}
+```
+
+```text
+Hi HertzBeat Community,
+
+The Podling Project Management Committee (PPMC) for Apache HertzBeat
+has invited ${NEW_PMC_NAME} to become our PMC member and
+we are pleased to announce that he has accepted.
+
+### add specific details here ###
+
+Please join me in congratulating ${NEW_PMC_NAME}!
+
+Being a committer enables easier contribution to the
+project since there is no need to go via the patch
+submission process. This should enable better productivity.
+A PPMC member helps manage and guide the direction of the project.
+
+Thanks,
+On behalf of the Apache HertzBeat (Incubating) PPMC
+```
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/submit-code.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/submit-code.md
new file mode 100644
index 000000000..581e87b50
--- /dev/null
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/submit-code.md
@@ -0,0 +1,88 @@
+---
+id: 'submit_code'
+title: '提交代码'
+sidebar_position: 2
+---
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       https://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+* 首先从远程仓库 <https://github.com/apache/incubator-hertzbeat.git> 将代码的一份副本 fork 到您自己的仓库
+
+* 远程仓库目前有三个分支:
+  * **dev** 每日开发分支
+    > 每天的 dev 开发分支,新提交的代码可以向这个分支发起 pull request。
+
+  * **1.0.0-release** 发布版本分支
+    > 发布版本的分支,未来还会有 2.0... 等其他版本分支。
+
+* 将您的仓库clone到您的本地设备
+
+    ```shell
+    git clone git@github.com:apache/incubator-hertzbeat.git
+    ```
+
+* 添加远程仓库地址,命名为 upstream
+
+    ```shell
+    git remote add upstream git@github.com:apache/incubator-hertzbeat.git
+    ```
+
+* 查看仓库
+
+    ```shell
+    git remote -v
+    ```
+
+  > 此时会有两个仓库:origin(您自己的仓库)和 upstream(远程仓库)
+
+* 获取/更新远程仓库代码
+
+    ```shell
+    git fetch upstream
+    ```
+
+* 将远程仓库代码同步到本地仓库
+
+    ```shell
+    git checkout origin/dev
+    git merge --no-ff upstream/dev
+    ```
+
+* 如果远程分支有新的分支,如 `dev-1.0`,您需要将这个分支同步到本地仓库
+
+    ```shell
+    git checkout -b dev-1.0 upstream/dev-1.0
+    git push --set-upstream origin dev-1.0
+    ```
+
+* 在本地修改代码后,提交到自己的仓库:
+
+    ```shell
+    git commit -m '提交内容'
+    git push
+    ```
+
+* 将更改提交到远程仓库
+
+* 在github页面,点击“New pull request”。
+
+* 选择修改过的本地分支和过去要合并的分支,点击“Create pull request”。
+
+* 然后社区的 Committers 将进行 CodeReview,并与您讨论一些细节(包括设计、实现、性能等)。当团队的每个成员都对此修改感到满意时,提交将被合并到 dev 分支。
+
+* 最后,恭喜您,您已经成为 HertzBeat 的官方贡献者!
diff --git a/home/i18n/zh-cn/docusaurus-theme-classic/footer.json b/home/i18n/zh-cn/docusaurus-theme-classic/footer.json
index b606e67bf..314d0dcbe 100644
--- a/home/i18n/zh-cn/docusaurus-theme-classic/footer.json
+++ b/home/i18n/zh-cn/docusaurus-theme-classic/footer.json
@@ -54,5 +54,9 @@
   "link.item.label.contact": {
     "message": "联系交流",
     "description": "The label of footer link with label=contact linking to /docs/others/contact"
+  },
+  "copyright": {
+    "message": "Copyright © 2024 HertzBeat",
+    "description": "The footer copyright"
   }
 }
diff --git a/home/i18n/zh-cn/docusaurus-theme-classic/navbar.json b/home/i18n/zh-cn/docusaurus-theme-classic/navbar.json
index 93f797cfa..09ce40ea1 100644
--- a/home/i18n/zh-cn/docusaurus-theme-classic/navbar.json
+++ b/home/i18n/zh-cn/docusaurus-theme-classic/navbar.json
@@ -74,5 +74,85 @@
   "item.label.contributors": {
     "message": "开发者们",
     "description": "Navbar item with label contributors"
+  },
+  "item.label.Community": {
+    "message": "Community",
+    "description": "Navbar item with label Community"
+  },
+  "item.label.ASF": {
+    "message": "ASF",
+    "description": "Navbar item with label ASF"
+  },
+  "item.label.Code of conduct": {
+    "message": "Code of conduct",
+    "description": "Navbar item with label Code of conduct"
+  },
+  "item.label.Join the mailing lists": {
+    "message": "Join the mailing lists",
+    "description": "Navbar item with label Join the mailing lists"
+  },
+  "item.label.Become A Committer": {
+    "message": "Become A Committer",
+    "description": "Navbar item with label Become A Committer"
+  },
+  "item.label.Become A PMC member": {
+    "message": "Become A PMC member",
+    "description": "Navbar item with label Become A PMC member"
+  },
+  "item.label.New Committer Process": {
+    "message": "New Committer Process",
+    "description": "Navbar item with label New Committer Process"
+  },
+  "item.label.New PMC Member Process": {
+    "message": "New PMC Member Process",
+    "description": "Navbar item with label New PMC Member Process"
+  },
+  "item.label.Documentation Notice": {
+    "message": "Documentation Notice",
+    "description": "Navbar item with label Documentation Notice"
+  },
+  "item.label.Submit Code": {
+    "message": "Submit Code",
+    "description": "Navbar item with label Submit Code"
+  },
+  "item.label.Code style and quality guide": {
+    "message": "Code style and quality guide",
+    "description": "Navbar item with label Code style and quality guide"
+  },
+  "item.label.How to release": {
+    "message": "How to release",
+    "description": "Navbar item with label How to release"
+  },
+  "item.label.How to Verify Release": {
+    "message": "How to Verify Release",
+    "description": "Navbar item with label How to Verify Release"
+  },
+  "item.label.Foundation": {
+    "message": "Foundation",
+    "description": "Navbar item with label Foundation"
+  },
+  "item.label.License": {
+    "message": "License",
+    "description": "Navbar item with label License"
+  },
+  "item.label.Events": {
+    "message": "Events",
+    "description": "Navbar item with label Events"
+  },
+  "item.label.Security": {
+    "message": "Security",
+    "description": "Navbar item with label Security"
+  },
+  "item.label.Sponsorship": {
+    "message": "Sponsorship",
+    "description": "Navbar item with label Sponsorship"
+  },
+  "item.label.Privacy": {
+    "message": "Privacy",
+    "description": "Navbar item with label Privacy"
+  },
+  "item.label.Thanks": {
+    "message": "Thanks",
+    "description": "Navbar item with label Thanks"
   }
 }
diff --git a/home/sidebars.json b/home/sidebars.json
index 506a10f4e..c6327f886 100644
--- a/home/sidebars.json
+++ b/home/sidebars.json
@@ -85,6 +85,40 @@
       "type": "doc",
       "id": "template"
     },
+    {
+      "type": "category",
+      "label": "Community",
+      "items": [
+        {
+          "type": "category",
+          "label": "contribution",
+          "items": [
+            "community/mailing_lists",
+            "community/become_committer",
+            "community/become_pmc_member",
+            "community/new_committer_process",
+            "community/new_pmc_ember_process"
+          ]
+        },
+        {
+          "type": "category",
+          "label": "submit",
+          "items": [
+            "community/document",
+            "community/submit_code",
+            "community/code_style_and_quality_guide"
+          ]
+        },
+        {
+          "type": "category",
+          "label": "release",
+          "items": [
+            "community/how_to_release",
+            "community/how_to_verify_release"
+          ]
+        }
+      ]
+    },
     {
       "type": "category",
       "label": "help",


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@hertzbeat.apache.org
For additional commands, e-mail: notifications-help@hertzbeat.apache.org


(hertzbeat) 02/03: feature: fix AlertDefineServiceTest error

Posted by sh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

shushengzhou pushed a commit to branch home_apache_info
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git

commit ec01806f40f94898a38c91ca6339972f422ea0b1
Author: a-little-fool <20...@qq.com>
AuthorDate: Sat Jan 20 12:17:44 2024 +0800

    feature: fix AlertDefineServiceTest error
---
 .../java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java b/alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java
index 2d20c8326..acbc20dc8 100644
--- a/alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java
+++ b/alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java
@@ -167,7 +167,7 @@ class AlertDefineServiceTest {
 
     @Test
     void getAlertDefines() {
-        Specification<AlertDefine> sspecification = mock(Specification.class);
+        Specification<AlertDefine> specification = mock(Specification.class);
         when(alertDefineDao.findAll(specification, PageRequest.of(1, 1))).thenReturn(Page.empty());
         assertNotNull(alertDefineService.getAlertDefines(specification, PageRequest.of(1, 1)));
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@hertzbeat.apache.org
For additional commands, e-mail: notifications-help@hertzbeat.apache.org