# 多机部署
## 概述
在[【通过命令行工具启动链】](../tutorial/通过命令行工具启动链.md)中,使用的`prepare.sh`脚本,生成的多节点的配置,默认使用本地回环地址(`127.0.0.1`)和自动生成的端口号,如果需要在生产环境不同的服务器上部署或使用固定的端口号,需要在使用`prepare.sh`生成配置文件和证书之后修改生成好的配置文件,再执行`build_release.sh`脚本打包。具体步骤如下。
## 操作步骤
### 执行`prepare.sh`脚本生成配置文件及证书
```bash
$ ./prepare.sh 4 1
begin check params...
begin generate certs, cnt: 4
input consensus type (0-SOLO,1-TBFT(default),3-HOTSTUFF,4-RAFT,5-DPOS):
input log level (DEBUG|INFO(default)|WARN|ERROR):
begin generate node1 config...
begin generate node2 config...
begin generate node3 config...
begin generate node4 config...
```
### 配置指定端口
> 配置文件路径:`chainmaker-go/build/config/nodeN/chainmaker.yml` (N为从1开始的递增值)
使用`prepare.sh`脚本会自动生成端口号,如果实际环境需要固定端口,可以通过修改下面的配置,将`{xxx}`修改为指定的端口,后续执行脚本时,就不会进行端口的修改。
```yaml
rpc:
port: {rpc_port}
net:
listen_addr: /ip4/0.0.0.0/tcp/{net_port}
monitor:
port: {monitor_port}
pprof:
port: {pprof_port}
```
### 配置指定IP
> 配置文件路径:`chainmaker-go/build/config/nodeN/chainmaker.yml` (N为从1开始的递增值)
使用prepare.sh脚本会自动将所有共识节点的地址都会添加至`net.seeds`中,需要将`127.0.0.1`修改为集群各个节点实际所在机器的IP地址,需要将`113XX`修改为集群各个节点实际监听端口,监听端口与上一步中`{net_port}`一致。
```yaml
net:
seeds:
- "/ip4/127.0.0.1/tcp/11301/p2p/QmQ3sHDwwcacnDdRzQpk7N3Bgeju4NPuTGkVYmrk99sQw8"
- "/ip4/127.0.0.1/tcp/11302/p2p/QmXvhGFjSA6XqifZvsiHRNuDo9LEPWhqq36BSyqZMdmtuq"
- "/ip4/127.0.0.1/tcp/11303/p2p/QmeDWYtVkSiR8DUq6NfrsVEYGzh8zMSUjro3VnbTagg3nX"
- "/ip4/127.0.0.1/tcp/11304/p2p/QmakPkAJYPQdMtmW88iuz8XtBcAfJbiB8U7E673q4ribCt"
```
### 生成节点安装包
```bash
$ ./build_release.sh
$ tree ../build/release/
../build/release/
├── chainmaker-v2.0.0-wx-org1.chainmaker.org-20210407153351-x86_64.tar.gz
├── chainmaker-v2.0.0-wx-org2.chainmaker.org-20210407153351-x86_64.tar.gz
├── chainmaker-v2.0.0-wx-org3.chainmaker.org-20210407153351-x86_64.tar.gz
├── chainmaker-v2.0.0-wx-org4.chainmaker.org-20210407153351-x86_64.tar.gz
└── crypto-config-20210407153351.tar.gz
```
后续上传各节点安装包,到指定的服务器上,部署解压后使用。
如果需要配置自拉起方式启动,请参考:[【自拉起服务】](../operation/自拉起服务.md)