# 鍚姩鏀寔鏃х増鏈珼ocker_VM鐨勯摼

## 閫氳繃绠$悊鍙板惎鍔ㄥ惎鐢―ocker铏氭嫙鏈虹殑閾�

<a id='3.1.1'></a>

### 鐧诲綍
<img loading="lazy" src="../images/ManagementLogin.png" style="zoom:50%;" />

- 绉佹湁鍖栭儴缃叉湰骞冲彴鏃朵細鐢熸垚鐨勫搴旂殑admin璐﹀彿锛岄粯璁ゅ瘑鐮佷负a123456

<a id='3.1.2'></a>

#### 鏂板缁勭粐璇佷功
<img loading="lazy" src="../images/ManagementAddOrgCert.png" style="zoom:50%;" />

- 濉啓缁勭粐ID鍜岀粍缁囧悕绉�
- 缁勭粐鍜屽拰缁勭粐鍚嶇О涓嶈兘閲嶅
- 鏀寔鐢宠鍥藉瘑鍜岄潪鍥藉瘑涓ょ璇佷功銆�


#### 鏂板鑺傜偣璇佷功
<img loading="lazy" src="../images/ManagementAddNodeCert.png" style="zoom:50%;" />

- 鐩墠鑺傜偣璇佷功瑙掕壊鍒嗕负鍏辫瘑鑺傜偣鍜屽悓姝ヨ妭鐐逛袱绉嶃€�
- 閫氳繃濉啓鑺傜偣鍚嶇О銆佺粍缁囦俊鎭紝鑺傜偣瑙掕壊锛岀敵璇疯妭鐐硅瘉涔︺€�
- 鏀寔鐢宠鍥藉瘑鍜岄潪鍥藉瘑涓ょ璇佷功銆�


#### 鏂板鐢ㄦ埛璇佷功
<img loading="lazy" src="../images/ManagementAddUserCert.png" style="zoom:50%;" />

- 鐩墠鐢ㄦ埛璇佷功瑙掕壊鍒嗕负admin銆乧lient鍜宭ight涓夌銆�
- 閫氳繃濉啓鐢ㄦ埛鍚嶇О銆佺粍缁囦俊鎭紝鐢ㄦ埛瑙掕壊鐢宠鐢ㄦ埛璇佷功銆�
- 鏀寔鐢宠鍥藉瘑鍜岄潪鍥藉瘑涓ょ璇佷功銆�
- 鍚堢害閮ㄧ讲闇€瑕佸搴旂殑绠$悊鍛樿瘉涔︼紝鎵€浠ラ渶瑕佺敵璇峰搴旂殑绠$悊鍛樼敤鎴�

#### 鏂板缓鍖哄潡閾�
<img loading="lazy" src="../images/ManagementAddChain2.png" style="zoom:50%;" />
<img loading="lazy" src="../images/ManagementAddChain3.png" style="zoom:50%;" />


- 閫夋嫨璇佷功妯″紡
- 閾鹃厤缃枃浠跺弬鏁拌瀹�
  - 姝ゅ鐢ㄤ簬鏂板閾鹃厤缃枃浠讹紝鐩墠鏀寔鑷畾涔夐摼鐨刬d銆佸悕绉般€佸尯鍧楁渶澶у閲忥紝鍑哄潡闂撮殧銆佷氦鏄撹繃鏈熸椂闀匡紝浠ュ強鍏辫瘑閰嶇疆銆�
  - 鐩墠鏀寔閰嶇疆TBFT銆丷AFT銆丼OLO銆丮AXBFT鍏辫瘑銆�
  - 鐢宠閾鹃厤缃枃浠跺墠锛岃鍏堢‘淇濓紝鎵€闇€鐨勭粍缁囧拰鑺傜偣璇佷功宸茬粡鐢宠/瀵煎叆鏈鐞嗗钩鍙般€�
  - 姝ゅ闇€瑕佸嬀閫塂ocker_VM
  - 鏀寔鍗曟満閮ㄧ讲鍜屽鏈洪儴缃诧紝璇锋纭~鍐欐墍瑕佷箣鍚庤閮ㄧ讲鍖哄潡閾捐妭鐐圭殑鏈哄櫒鎵€鍦ㄧ殑ip锛屽苟纭繚绔彛涓嶅啿绐併€�

#### 涓嬭浇閮ㄧ讲閾�
<img loading="lazy" src="../images/ManagementDownloadChain2.png" style="zoom:50%;" />

- 濡傚浘鎵€绀洪渶瑕佸厛涓嬭浇瀹夎Docker_VM鐨勭幆澧冧緷璧栵紝鐒跺悗鍐嶉儴缃插尯鍧楅摼銆�
- 閮ㄧ讲鍖哄潡閾�
  - 涓嬭浇閾鹃厤缃互zip鍖呬负鍑嗭紝zip鍖呭寘鍚搴旂殑閾鹃厤缃枃浠跺拰閮ㄧ讲鑴氭湰
  - 灏嗕笅杞界殑鍖呯Щ鍔ㄧ殑闇€瑕侀儴缃茬殑鏈哄櫒涓婂幓锛堝彲浠ヤ娇鐢╯cp杩涜绉诲姩锛�
  - 鎵ц`unzip`瑙e帇鎴恅release`鍖咃紝杩涘叆`release`鍖呮墽琛宍start.sh`杩涜鍚姩

#### 蹇€熻闃呴摼
<img loading="lazy" src="../images/ManagementSubscribe.png" style="zoom:50%;" />

- 閾鹃儴缃叉垚鍔熶箣鍚庡湪绠$悊鍙拌繘琛屽揩閫熻闃�

#### 閮ㄧ讲/璋冪敤鍚堢害楠岃瘉閾炬槸鍚︽甯�
璁㈤槄鎴愬姛鍚庯紝鍙繘琛岄儴缃�/璋冪敤绀轰緥鍚堢害锛屼互妫€鏌ラ摼鍔熻兘鏄惁姝e父銆傞儴缃插悎绾︾殑浣跨敤鏁欑▼鍙瑙侊細[閮ㄧ讲绀轰緥鍚堢害](./閮ㄧ讲绀轰緥鍚堢害.md)銆�



## 閫氳繃鍛戒护琛屽惎鍔ㄥ惎鐢―ocker铏氭嫙鏈虹殑閾�

### 鐜渚濊禆

**鎿嶄綔绯荤粺**

DockerVM瀹炵幇渚濊禆浜巆group锛岀洰鍓嶄粎鏀寔鍦↙inux绯荤粺涓嬮儴缃插拰杩愯DockerVM銆�

**杞欢渚濊禆**

docker锛�7zip

渚濊禆杞欢涓嬭浇锛�

- docker锛氳鍙傜湅[https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
- 7zip锛氳鍙傜湅[7zip瀹樼綉](https://sparanoid.com/lab/7z/)

鎷夊彇瀹樻柟Docker铏氭嫙鏈烘櫙璞★細

```shell
docker pull chainmakerofficial/chainmaker-vm-engine:v2.3.0.1
```

### 鐢熸垚璇佷功骞跺垵濮嬪寲閰嶇疆

**鍚敤DockerVM**

鍦╟hainmaker涓惎鐢―ocker VM鏈変袱绉嶆柟寮忋€�

**鏂瑰紡涓€:**

 [閫氳繃鍛戒护琛屽伐鍏峰惎鍔ㄩ摼](../recovery/閫氳繃鍛戒护琛屽伐鍏峰惎鍔ㄩ摼.md)锛屽湪鎵ц`prepare.sh`銆乣prepare_pk.sh`銆乣prepare_pwk.sh`鏃讹紝`enable docker vm` 閫夋嫨 YES

```shell
enable docker vm (YES|NO(default))
```

- 杩涘叆chainmaker-go/scripts鐩綍锛屾墽琛宲repare.sh鑴氭湰鐢熸垚鍗曢摼4鑺傜偣闆嗙兢閰嶇疆锛屽瓨浜庤矾寰刢hainmaker-go/build涓�

- prepare_pk.sh鑴氭湰鏀寔鐢熸垚4/7/10/13/16鑺傜偣鍏閽ュ拰閰嶇疆

```shell
# 杩涘叆鑴氭湰鐩綍
$ cd ../scripts
# 鏌ョ湅鑴氭湰甯姪
$ ./prepare.sh -h
Usage:
    prepare.sh node_cnt(1/4/7/10/13/16) chain_cnt(1-4) p2p_port(default:11301) rpc_port(default:12301) vm_go_runtime_port(default:32351) vm_go_engine_port(default:22351)
    eg1: prepare.sh 4 1
    eg2: prepare.sh 4 1 11301 12301
    eg2: prepare.sh 4 1 11301 12301 32351 22351

# 鐢熸垚鍗曢摼4鑺傜偣闆嗙兢鐨勮瘉涔﹀拰閰嶇疆
./prepare.sh 4 1
begin check params...
begin generate certs, cnt: 4
input consensus type (0-SOLO,1-TBFT(default),3-MAXBFT,4-RAFT):
input log level (DEBUG|INFO(default)|WARN|ERROR):
enable vm go (YES|NO(default))YES
vm go transport protocol (uds|tcp(default))
input vm go log level (DEBUG|INFO(default)|WARN|ERROR):
config node total 4
begin generate node1 config...
begin node1 chain1 cert config...
begin node1 trust config...
begin generate node2 config...
begin node2 chain1 cert config...
begin node2 trust config...
begin generate node3 config...
begin node3 chain1 cert config...
begin node3 trust config...
begin generate node4 config...
begin node4 chain1 cert config...
begin node4 trust config...

# 鏌ョ湅鐢熸垚濂界殑鑺傜偣璇佷功鍜岄厤缃�
$ tree -L 3 ../build/
../build/
鈹溾攢鈹€ backup
鈹偮犅� 鈹溾攢鈹€ backup_certs
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220816164215
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220816193731
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220816193745
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220817195010
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220819164151
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220822204421
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220823193308
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ crypto-config_20220823193419
鈹偮犅� 鈹溾攢鈹€ backup_config
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ config_20220823193425
鈹偮犅� 鈹斺攢鈹€ backup_release
鈹偮犅�     鈹溾攢鈹€ release_20220808210208
鈹偮犅�     鈹溾攢鈹€ release_20220809203122
鈹偮犅�     鈹溾攢鈹€ release_20220816193816
鈹偮犅�     鈹溾攢鈹€ release_20220817195117
鈹偮犅�     鈹斺攢鈹€ release_20220819164434
鈹溾攢鈹€ config
鈹偮犅� 鈹溾攢鈹€ node1
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ certs
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ chainconfig
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ chainmaker.yml
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ log.yml
鈹偮犅� 鈹溾攢鈹€ node2
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ certs
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ chainconfig
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ chainmaker.yml
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ log.yml
鈹偮犅� 鈹溾攢鈹€ node3
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ certs
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ chainconfig
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ chainmaker.yml
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ log.yml
鈹偮犅� 鈹斺攢鈹€ node4
鈹偮犅�     鈹溾攢鈹€ certs
鈹偮犅�     鈹溾攢鈹€ chainconfig
鈹偮犅�     鈹溾攢鈹€ chainmaker.yml
鈹偮犅�     鈹斺攢鈹€ log.yml
鈹溾攢鈹€ crypto-config
鈹偮犅� 鈹溾攢鈹€ wx-org1.chainmaker.org
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ ca
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ node
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ user
鈹偮犅� 鈹溾攢鈹€ wx-org2.chainmaker.org
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ ca
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ node
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ user
鈹偮犅� 鈹溾攢鈹€ wx-org3.chainmaker.org
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ ca
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ node
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ user
鈹偮犅� 鈹斺攢鈹€ wx-org4.chainmaker.org
鈹偮犅�     鈹溾攢鈹€ ca
鈹偮犅�     鈹溾攢鈹€ node
鈹偮犅�     鈹斺攢鈹€ user
鈹溾攢鈹€ crypto_config.yml
鈹溾攢鈹€ pkcs11_keys.yml
鈹斺攢鈹€ release
    鈹溾攢鈹€ chainmaker-v2.3.0-wx-org1.chainmaker.org
    鈹偮犅� 鈹溾攢鈹€ bin
    鈹偮犅� 鈹溾攢鈹€ config
    鈹偮犅� 鈹溾攢鈹€ data
    鈹偮犅� 鈹溾攢鈹€ lib
    鈹偮犅� 鈹斺攢鈹€ log
    鈹溾攢鈹€ chainmaker-v2.3.0-wx-org1.chainmaker.org-20220819164205-x86_64.tar.gz
    鈹溾攢鈹€ chainmaker-v2.3.0-wx-org2.chainmaker.org
    鈹偮犅� 鈹溾攢鈹€ bin
    鈹偮犅� 鈹溾攢鈹€ config
    鈹偮犅� 鈹溾攢鈹€ lib
    鈹偮犅� 鈹斺攢鈹€ log
    鈹溾攢鈹€ chainmaker-v2.3.0-wx-org2.chainmaker.org-20220819164205-x86_64.tar.gz
    鈹溾攢鈹€ chainmaker-v2.3.0-wx-org3.chainmaker.org
    鈹偮犅� 鈹溾攢鈹€ bin
    鈹偮犅� 鈹溾攢鈹€ config
    鈹偮犅� 鈹溾攢鈹€ lib
    鈹偮犅� 鈹斺攢鈹€ log
    鈹溾攢鈹€ chainmaker-v2.3.0-wx-org3.chainmaker.org-20220819164205-x86_64.tar.gz
    鈹溾攢鈹€ chainmaker-v2.3.0-wx-org4.chainmaker.org
    鈹偮犅� 鈹溾攢鈹€ bin
    鈹偮犅� 鈹溾攢鈹€ config
    鈹偮犅� 鈹溾攢鈹€ lib
    鈹偮犅� 鈹斺攢鈹€ log
    鈹溾攢鈹€ chainmaker-v2.3.0-wx-org4.chainmaker.org-20220819164205-x86_64.tar.gz
    鈹斺攢鈹€ crypto-config-20220819164205.tar.gz
```



**鏂瑰紡浜�**

 淇敼鑺傜偣閰嶇疆鐩綍涓嬬殑`chainmaker.yml`鏂囦欢锛坄enable`璁剧疆涓篳true`锛�:

```yaml
vm:
  go:
    # 鏄惁鍚敤鏂扮増Golang瀹瑰櫒
    enable: true
```

### DockerVM閰嶇疆

**閰嶇疆淇℃伅璇存槑**

chainmaker.yml 鏂囦欢鐩稿叧閰嶇疆濡備笅锛�

```yaml
vm:
  go:
    # 鏄惁鍚敤鏂扮増Golang瀹瑰櫒
    enable: true
    # 鏁版嵁鎸傝浇璺緞, 鍖呮嫭鍚堢害銆乻ock鏂囦欢锛坲ds锛�
    data_mount_path: ../data/wx-org1.chainmaker.org/go
    # 鏃ュ織鎸傝浇璺緞
    log_mount_path: ../log/wx-org1.chainmaker.org/go
    # chainmaker鍜屽悎绾﹀紩鎿庝箣闂寸殑閫氫俊鍗忚锛堝彲閫塼cp/uds锛�
    protocol: tcp
    # 濡傛灉闇€瑕佽嚜瀹氫箟楂樼骇閰嶇疆锛岃灏唙m.yml鏂囦欢鏀惧叆dockervm_config_path涓紝浼樺厛绾э細chainmaker.yml > vm.yml > 榛樿閰嶇疆
    # dockervm_config_path: /config_path/vm.yml
    # 鏄惁鍦ㄦ帶鍒跺彴鎵撳嵃鏃ュ織
    log_in_console: false
    # docker鍚堢害寮曟搸鐨勬棩蹇楃骇鍒�
    log_level: DEBUG

    # 涓嬮潰涓や釜server鐨勬渶澶ф秷鎭彂閫佸ぇ灏�, 榛樿100MB
    max_send_msg_size: 100
    # 涓嬮潰涓や釜server鐨勬渶澶ф秷鎭帴鏀跺ぇ灏�, 榛樿100MB
    max_recv_msg_size: 100
    # 涓嬮潰涓や釜server鐨勬渶澶ц繛鎺ヨ秴鏃舵椂闂�, 榛樿10s
    dial_timeout: 10

    # 鍚堢害寮曟搸鏈€澶氬惎鐢ㄧ殑鍘熷鍚堢害杩涚▼鏁帮紝榛樿涓�20锛堣法鍚堢害璋冪敤浼氶澶栨媺璧锋柊鐨勮繘绋嬶級
    max_concurrency: 20

    # 杩愯鏃舵湇鍔″櫒閰嶇疆 (涓庡悎绾﹀疄渚嬭繘绋嬩氦浜掞紝杩涜淇℃伅浜ゆ崲)
    runtime_server:
      # 绔彛鍙凤紝榛樿涓� 32351
      port: 32351

    # 鍚堢害寮曟搸鏈嶅姟鍣ㄩ厤缃� (涓巆hainmaker浜や簰锛岃繘琛屼氦鏄撹姹傘€佸悎绾﹁姹傜瓑浜や簰)
    contract_engine:
      # 鍚堢害寮曟搸鏈嶅姟鍣╥p, 榛樿涓� 127.0.0.1
      host: 127.0.0.1
      # 绔彛鍙凤紝榛樿涓� 22351
      port: 22351
      # 涓庡悎绾﹀紩鎿庢湇鍔″櫒鐨勬渶澶ц繛鎺ユ暟
      max_connection: 5
```

<span id="migration-docker_vm-configuration"></span>

鈿狅笍娉ㄦ剰锛氭棫鐗堟湰鐨勫悎绾︿笉鏀寔鍦ㄦ柊鐗圖ockerVM涓繍琛岋紝涓轰簡鍏煎鍘嗗彶鍚堢害锛屾垜浠敮鎸佸悓鏃惰繍琛屼袱涓狣ockerVM锛屾棫鐨凞ockerVM鐢ㄤ簬鎵ц鑰佺増鏈殑鍚堢害锛屾墍浠ュ湪*chainmaker.yml*涓湁涓ゅ鍏充簬DockerVM鐨勯厤缃」`vm:go`銆乣vm:docker_go`鍒嗗埆瀵规柊銆佹棫DockerVM杩涜閰嶇疆銆�

鏂版棫鐗堟湰鍚嶇О瀵圭収濡備笅琛細

|                            | 鏂扮増鏈�                                         | 鏃х増鏈�                                            |
| -------------------------- | ---------------------------------------------- | ------------------------------------------------- |
| 瀹樻柟闀滃儚鍚嶇О               | chainmakerofficial/chainmaker-vm-engine:v2.3.0.1 | chainmakerofficial/chainmaker-vm-docker-go:v2.3.0.1 |
| chainmaker.yml涓搴旈厤缃」 | vm:go                                          | vm:docker_go                                      |
| 鍚堢害鐗堟湰                   | v2.3.0                                         | v2.2.1鍙婃洿浣庣増鏈�                                  |

濡傛灉闇€瑕佸惎鍔�**鏃у悎绾﹀紩鎿庡鍣�**锛岄渶瑕佸皢涔嬪墠鐨勯厤缃縼绉诲埌`vm:docker_go`锛�

```yaml
# Contract Virtual Machine(VM) configs
vm:
  # Docker go virtual machine configuration
  docker_go:
    # Enable docker go virtual machine
    enable_dockervm: true
    # Mount point in chainmaker
    dockervm_mount_path: ../data/wx-org1.chainmaker.org/docker-go
    # Specify log file path
    dockervm_log_path: ../log/wx-org1.chainmaker.org/docker-go
    # Whether to print log at terminal
    log_in_console: true
    # Log level
    log_level: DEBUG
    # Unix domain socket open, used for chainmaker and docker manager communication
    uds_open: true
    # docker vm contract service host, default 127.0.0.1
    docker_vm_host: 127.0.0.1
    # docker vm contract service port, default 22351
    docker_vm_port: 22451
    # Grpc max send message size, Default size is 4, Unit: MB
    max_send_msg_size: 20
    # Grpc max receive message size, Default size is 4, Unit: MB
    max_recv_msg_size: 20
    # max number of connection created to connect docker vm service
    max_connection: 5
```

鍚敤鏃х増DockerVM鏃讹紝閰嶇疆杩佺Щ瀵圭収濡備笅鍥撅細

<img loading="lazy" src="../images/DockerVM_Update_Config.png" style="width:1024px;" />

**閫氳繃閰嶇疆搴熷純鏃у悎绾︾殑瀹夎鎴栧崌绾э紝鍙娇鐢ㄦ柊鍚堢害**

濡傛灉甯屾湜搴熷純鏃у悎绾︾殑瀹夎鎴栧崌绾э紝鍙娇鐢ㄦ柊鍚堢害锛岃娣诲姞鎴栦慨鏀逛笅闈㈢殑閰嶇疆锛�

```yaml
# Contract Virtual Machine(VM) configs
vm:
  # Docker go virtual machine configuration
  docker_go:
    # Grpc max receive message size, Default size is 4, Unit: MB
    disable_install: true
    # max number of connection created to connect docker vm service
    disable_upgrade: true
```

**楂樼骇閰嶇疆**

濡傛灉甯屾湜浣跨敤鍚堢害寮曟搸楂樼骇閰嶇疆锛岄渶瑕侀厤缃甡vm:go`涓媊dockervm_config_path`涓厤缃枃浠讹紝閰嶇疆鏂囦欢妯℃澘濡備笅锛�

```yaml
########### RPC ###########
rpc:
  chain_rpc_protocol: 1 # chain rpc protocol, 0 for unix domain socket, 1 for tcp(default)
  chain_host: 127.0.0.1 # chain tcp host
  chain_rpc_port: 22351 # chain rpc port, valid when protocol is tcp
  sandbox_rpc_port: 32351 # sandbox rpc port, valid when protocol is tcp
  max_send_msg_size: 100 # max send msg size(MiB)
  max_recv_msg_size: 100 # max recv msg size(MiB)
  server_min_interval: 60s # server min interval
  connection_timeout: 5s # connection timeout time
  server_keep_alive_time: 60s # idle duration before server ping
  server_keep_alive_timeout: 20s # ping timeout

########### Process ###########
process:
  # max original process num,
  # max_call_contract_process_num = max_original_process_num * max_contract_depth (defined in protocol)
  # max_total_process_num = max_call_contract_process_num + max_original_process_num
  max_original_process_num: 20
  exec_tx_timeout: 8s # process timeout while busy
  waiting_tx_time: 200ms # process timeout while tx completed (busy -> idle)
  release_rate: 30 # percentage of idle processes released periodically in total processes (0-100)
  release_period: 10m # period of idle processes released periodically in total processes

########### Log ###########
log:
  contract_engine:
    level: "info"
    console: true
  sandbox:
    level: "info"
    console: true

########### Pprof ###########
pprof:
  contract_engine:
    enable: false
    port: 21215
  sandbox:
    enable: false
    port: 21522

########### Contract ###########
contract:
  max_file_size: 20480 # contract size(MiB)
```

**鈿狅笍娉ㄦ剰锛�**

鍦ㄥ鍣ㄥ惎鍔ㄨ剼鏈腑锛宍max_concurrency`锛堟渶澶у惎鐢ㄧ殑杩涚▼鏁伴噺锛夐粯璁や负`20`锛堣法鍚堢害璋冪敤浼氶澶栨媺璧锋柊鐨勮繘绋嬶級銆�

濡傛灉鏄湪鐢熶骇鐜涓嬶紝寤鸿鏍规嵁cpu鏍告暟閰嶇疆杩欎笁涓弬鏁般€�

|                 | 8C CPU | 16C CPU | 32C CPU |
| --------------- | ------ | ------- | ------- |
| max_concurrency | 20     | 100     | 1500    |

濡傛灉鏈夎緝澶氳法鍚堢害璋冪敤浜ゆ槗锛岃鏍规嵁璺ㄥ悎绾﹁皟鐢ㄧ殑娣卞害鎸夋瘮渚嬪噺灏慲max_concurrency`鐨勫€硷紝渚嬪32鏍哥郴缁熶笅锛屽鏋滄湁杈冨涓ゅ眰璺ㄥ悎绾﹁皟鐢紝鍒檂max_concurrency`鍊煎缓璁涓篳750锛�1500/2锛塦銆�

濡傛灉浣跨敤鑴氭湰鍚姩锛岃鎸夐渶淇敼鑴氭湰閲岀殑鍙傛暟閰嶇疆銆�

### 缂栬瘧鍜屽畨瑁呭寘鍒朵綔

- 鐢熸垚璇佷功锛坧repare.sh鑴氭湰锛夊悗鎵цbuild_release.sh鑴氭湰锛屽皢缂栬瘧chainmaker-go妯″潡锛屽苟鎵撳寘鐢熸垚瀹夎锛屽瓨浜庤矾寰刢hainmaker-go/build/release涓�

```shell
$ ./build_release.sh
$ tree ../build/release/
../build/release/
鈹溾攢鈹€ chainmaker-v2.3.0-wx-org1.chainmaker.org-20220823193812-x86_64.tar.gz
鈹溾攢鈹€ chainmaker-v2.3.0-wx-org2.chainmaker.org-20220823193812-x86_64.tar.gz
鈹溾攢鈹€ chainmaker-v2.3.0-wx-org3.chainmaker.org-20220823193812-x86_64.tar.gz
鈹溾攢鈹€ chainmaker-v2.3.0-wx-org4.chainmaker.org-20220823193812-x86_64.tar.gz
鈹斺攢鈹€ crypto-config-20220823193812.tar.gz
```



### 鍚屾椂鍚姩閾惧拰DockerVM

**鍚姩**

- 鎵цcluster_quick_start.sh鑴氭湰锛屼細瑙e帇鍚勪釜瀹夎鍖咃紝璋冪敤bin鐩綍涓殑start.sh鑴氭湰锛屽惎鍔╟hainmaker鑺傜偣锛屽苟鎷夎捣鑺傜偣闇€瑕佺殑DockerVM瀹瑰櫒

```shell
$ ./cluster_quick_start.sh normal
```

**鏌ョ湅鑺傜偣鏄惁瀛樺湪**

- 鏌ョ湅杩涚▼

```shell
$ ps -ef|grep chainmaker | grep -v grep
2058348       1  4 19:40 pts/5    00:00:00 ./chainmaker start -c ../config/wx-org1.chainmaker.org/chainmaker.yml
2059604       1  3 19:40 pts/5    00:00:00 ./chainmaker start -c ../config/wx-org2.chainmaker.org/chainmaker.yml
2060801       1  4 19:40 pts/5    00:00:00 ./chainmaker start -c ../config/wx-org3.chainmaker.org/chainmaker.yml
2062057       1  5 19:40 pts/5    00:00:00 ./chainmaker start -c ../config/wx-org4.chainmaker.org/chainmaker.yml
```

- 鏌ョ湅绔彛

```shell
$ netstat -lptn | grep 1230
tcp6       0      0 :::12301                :::*                    LISTEN      2058348/./chainmake
tcp6       0      0 :::12302                :::*                    LISTEN      2059604/./chainmake
tcp6       0      0 :::12303                :::*                    LISTEN      2060801/./chainmake
tcp6       0      0 :::12304                :::*                    LISTEN      2062057/./chainmake
```

- 鏌ョ湅DockerVM瀹瑰櫒

```shell
$ docker ps | grep "chainmakerofficial/chainmaker-vm-engine:v2.3.0.1"
0955ccdb6ebc   chainmakerofficial/chainmaker-vm-engine:v2.3.0.1   "/bin/startvm"           4 minutes ago   Up 4 minutes                                                               VM-GO-wx-org4.chainmaker.org
b48bbb69e204   chainmakerofficial/chainmaker-vm-engine:v2.3.0.1   "/bin/startvm"           4 minutes ago   Up 4 minutes                                                               VM-GO-wx-org3.chainmaker.org
727adbb76c58   chainmakerofficial/chainmaker-vm-engine:v2.3.0.1   "/bin/startvm"           4 minutes ago   Up 4 minutes                                                               VM-GO-wx-org2.chainmaker.org
2c944fb3a1d9   chainmakerofficial/chainmaker-vm-engine:v2.3.0.1   "/bin/startvm"           4 minutes ago   Up 4 minutes                                                               VM-GO-wx-org1.chainmaker.org
```

- 鏌ョ湅鏃ュ織

```shell
$ cat ../build/release/*/bin/panic.log
$ cat ../build/release/*/log/system.log
$ cat ../build/release/*/log/system.log |grep "ERROR\|put block\|all necessary"
```



### 鐙珛閮ㄧ讲DockerVM铏氭嫙鏈�

**棣栧厛鍘籤./build/release`璺緞涓嬭В鍘嬪悇涓妭鐐硅瘉涔﹀強閰嶇疆鐨刯ar鍖�:**

```shell
tar -zxvf chainmaker-v2.3.0-wx-org4.chainmaker.org-20220824115035-x86_64.tar.gz
```

**鍚姩鑺傜偣1闇€瑕佺殑DockerVM**

- 浣跨敤*docker-vm-standalone-start.sh*鑴氭湰鍚姩DockerVM

```shell
$ ./docker-vm-standalone-start.sh
input path to cache contract files(must be absolute path, default:'./docker-go'): /home/data/wx-org1.chainmaker.org/go
contracts path does not exist, create it or not(y|n): y
input log path(must be absolute path, default:'./log'): /home/log/wx-org1.chainmaker.org/go
log path does not exist, create it or not(y|n): y
input log level(DEBUG|INFO(default)|WARN|ERROR): DEBUG
input expose port(default 22351): 22351
input runtime port(default 32351): 32351
input container name(default 'chainmaker-docker-vm'): VM-GO-wx-org1.chainmaker.org
# 涓嶄娇鐢ㄩ厤缃枃浠跺惎鍔―ockerVM锛屽拷鐣ヨ椤�
input vm config file path(use default config(default)):
docker-vm config is nil, use default config
start docker vm container
```

- 浣跨敤Docker鍛戒护鍚姩

```shell
$ docker run -itd \
--net=host \
-v "/home/data/wx-org1.chainmaker.org/go":/mount \
-v "/home/log/wx-org1.chainmaker.org/go":/log \
-e CHAIN_RPC_PROTOCOL="1" \
-e CHAIN_RPC_PORT="22351" \
-e SANDBOX_RPC_PORT="32351" \
-e MAX_SEND_MSG_SIZE="100" \
-e MAX_RECV_MSG_SIZE="100" \
-e MAX_CONN_TIMEOUT="10" \
-e MAX_ORIGINAL_PROCESS_NUM="20" \
-e DOCKERVM_CONTRACT_ENGINE_LOG_LEVEL="DEBUG" \
-e DOCKERVM_SANDBOX_LOG_LEVEL="DEBUG" \
-e DOCKERVM_LOG_IN_CONSOLE="false" \
--name VM-GO-wx-org1.chainmaker.org \
--privileged chainmakerofficial/chainmaker-vm-engine:v2.3.0.1 \
> /dev/null
```

**鐒跺悗鍚姩鑺傜偣1**

```shell
$ ./start.sh -f alone
```

**鏌ョ湅鑺傜偣鍜屽鍣ㄦ槸鍚﹀凡缁忓缓绔嬮摼鎺�**

```shell
$ cat /home/log/wx-org1.chainmaker.org/go/go.log |grep "Chain RPC Service"
```

鎸夌収涓婅堪姝ラ渚濇鍚姩鍓╀綑鑺傜偣銆�

### 浣跨敤楂樼骇閰嶇疆鐙珛閮ㄧ讲DockerVM

**楂樼骇閰嶇疆**

濡傛灉甯屾湜浣跨敤鍚堢害寮曟搸楂樼骇閰嶇疆锛岄渶瑕侀厤缃甡vm:go`涓媊dockervm_config_path`楂樼骇閰嶇疆鏂囦欢璺緞锛岃繖閲屾垜浠妸鑺傜偣1鐨凞ockerVM楂樼骇閰嶇疆鏂囦欢*vm.yml*鏀剧疆鍦╜/home/config_path/wx-org1.chainmaker.org`锛屽湪*chainmaker.yml*涓搴旂殑閰嶇疆濡備笅锛�

```yaml
# Contract Virtual Machine(VM) configs
vm:
  # Golang runtime in docker container
  go:
    ...
    # If use a customized VM configuration file, supplement it; else, do not configure
    # Priority: chainmaker.yml > vm.yml > default settings
    dockervm_config_path: /home/config_path/wx-org1.chainmaker.org/vm.yml
   	...
```

閰嶇疆鏂囦欢妯℃澘濡備笅锛�

```yaml
########### RPC ###########
rpc:
  chain_rpc_protocol: 1 # chain rpc protocol, 0 for unix domain socket, 1 for tcp(default)
  chain_host: 127.0.0.1 # chain tcp host
  chain_rpc_port: 22351 # chain rpc port, valid when protocol is tcp
  sandbox_rpc_port: 32351 # sandbox rpc port, valid when protocol is tcp
  max_send_msg_size: 100 # max send msg size(MiB)
  max_recv_msg_size: 100 # max recv msg size(MiB)
  server_min_interval: 60s # server min interval
  connection_timeout: 5s # connection timeout time
  server_keep_alive_time: 60s # idle duration before server ping
  server_keep_alive_timeout: 20s # ping timeout

########### Process ###########
process:
  # max original process num,
  # max_call_contract_process_num = max_original_process_num * max_contract_depth (defined in protocol)
  # max_total_process_num = max_call_contract_process_num + max_original_process_num
  max_original_process_num: 20
  exec_tx_timeout: 8s # process timeout while busy
  waiting_tx_time: 200ms # process timeout while tx completed (busy -> idle)
  release_rate: 30 # percentage of idle processes released periodically in total processes (0-100)
  release_period: 10m # period of idle processes released periodically in total processes

########### Log ###########
log:
  contract_engine:
    level: "info"
    console: true
  sandbox:
    level: "info"
    console: true

########### Pprof ###########
pprof:
  contract_engine:
    enable: false
    port: 21215
  sandbox:
    enable: false
    port: 21522

########### Contract ###########
contract:
  max_file_size: 20480 # contract size(MiB)
```

**浣跨敤楂樼骇閰嶇疆鍚姩鑺傜偣闇€瑕佺殑DockerVM**

- 浣跨敤*docker-vm-standalone-start.sh*鑴氭湰鍚姩DockerVM

```shell
$ ./docker-vm-standalone-start.sh
input path to cache contract files(must be absolute path, default:'./docker-go'): /home/data/wx-org1.chainmaker.org/go
contracts path does not exist, create it or not(y|n): y
input log path(must be absolute path, default:'./log'): /home/log/wx-org1.chainmaker.org/go
log path does not exist, create it or not(y|n): y
## 浣跨敤閰嶇疆鏂囦欢锛屽拷鐣ヨ椤�
input log level(DEBUG|INFO(default)|WARN|ERROR):
## 浣跨敤閰嶇疆鏂囦欢锛屽拷鐣ヨ椤�
input expose port(default 22351):
## 浣跨敤閰嶇疆鏂囦欢锛屽拷鐣ヨ椤�
input runtime port(default 32351):
input container name(default 'chainmaker-docker-vm'): VM-GO-wx-org1.chainmaker.org
input vm config file path(use default config(default)): /home/config_path/wx-org1.chainmaker.org/vm.yml
start docker vm container
```

- 浣跨敤Docker鍛戒护鍚姩DockerVM

```shell
$ docker run -itd \
--net=host \
-v "/home/data/wx-org1.chainmaker.org/go":/mount \
-v "/home/log/wx-org1.chainmaker.org/go":/log \
--name VM-GO-wx-org1.chainmaker.org \
--privileged chainmakerofficial/chainmaker-vm-engine:v2.3.0.1 \
> /dev/null
```

**鍚姩鑺傜偣**

```shell
$ ./start.sh -f alone
```

**鏌ョ湅鑺傜偣鏄惁鍜孌ockerVM宸茬粡寤虹珛杩炴帴**

```shell
$ cat /home/log/wx-org1.chainmaker.org/go/go.log |grep "Chain RPC Service"
```

鎸夌収涓婅堪姝ラ渚濇鍚姩鍓╀綑鑺傜偣銆�

### 鏈湴閮ㄧ讲鐨勫仠姝�

濡傛灉鏄€氳繃`./cluster_quick_start.sh`鍚屾椂鍚姩鐨勮妭鐐瑰拰铏氭嫙鏈猴紝鍙互閫氳繃瀵瑰簲鐨剆top鑴氭湰鍚屾椂鍋滄閾惧拰DockerVM瀹瑰櫒锛�

```shell
$ ./cluster_quick_stop.sh
```

濡傛灉鍚屾椂闇€瑕佹竻闄ゆ墍鏈夐摼鏁版嵁鍙互浣跨敤锛�

```shell
$ ./cluster_quick_stop.sh clean
```
鐢变簬DockerVM鍐呬娇鐢ㄥ鍣ㄥ唴鐨剅oot鐢ㄦ埛鍚姩铏氭嫙鏈烘湇鍔★紝鍥犳鏃ュ織鍜岀紦瀛樻枃浠朵篃灞炰簬root鐢ㄦ埛锛坲id=0锛夈€傚鏋滀互闈瀝oot鐢ㄦ埛鍚姩鐨勭▼搴忥紝娓呴櫎鏁版嵁鏃跺彲鑳戒細鎶ラ敊鎻愮ず缂哄皯鏂囦欢璁块棶鐨勬潈闄愶紝闇€瑕佷互root鏉冮檺鍒犻櫎鏁版嵁锛屾垨鑰呬娇鐢╗userns-remap](https://docs.docker.com/engine/security/userns-remap/)鐨勫姛鑳藉皢瀹瑰櫒閲岀敤鎴锋槧灏勬垚鏅€氱敤鎴枫€�


### 鐙珛閮ㄧ讲鐨勫仠姝�

**棣栧厛鍏抽棴閾捐妭鐐�**

```shell
$ ./stop.sh alone
```

**鐒跺悗鍏抽棴璇ヨ妭鐐瑰搴旂殑铏氭嫙鏈�**

```shell
$ docker stop VM-GO-wx-org1.chainmaker.org
```

## 鍚堢害鐨勫畨瑁呬笌璋冪敤

鍚堢害鐨勫畨瑁呬笌璋冪敤璇峰弬鑰冿細[浣跨敤Golang杩涜鏅鸿兘鍚堢害寮€鍙慮(./浣跨敤Golang杩涜鏅鸿兘鍚堢害寮€鍙�.md)