forked from cosmos/cosmos-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge PR cosmos#2271: docs: automated local/remote testnet instructions
- Loading branch information
Showing
6 changed files
with
215 additions
and
168 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,209 @@ | ||
# Networks | ||
|
||
There are a variety of ways to setup either local or remote networks with automation, detailed below. | ||
All the required files are found in the [networks directory](https://github.com/cosmos/cosmos-sdk/tree/develop/networks) and additionally the `local` or `remote` sub-directories. | ||
|
||
## Local Testnet | ||
|
||
From the [networks/local directory](https://github.com/cosmos/cosmos-sdk/tree/develop/networks/local): | ||
|
||
### Requirements | ||
|
||
- [Install gaia](https://cosmos.network/docs/getting-started/installation.html) | ||
- [Install docker](https://docs.docker.com/engine/installation/) | ||
- [Install docker-compose](https://docs.docker.com/compose/install/) | ||
|
||
### Build | ||
|
||
Build the `gaiad` binary and the `tendermint/gaiadnode` docker image. | ||
|
||
Note the binary will be mounted into the container so it can be updated without | ||
rebuilding the image. | ||
|
||
``` | ||
cd $GOPATH/src/github.com/cosmos/cosmos-sdk | ||
# Build the linux binary in ./build | ||
make build-linux | ||
# Build tendermint/gaiadnode image | ||
make build-docker-gaiadnode | ||
``` | ||
|
||
### Run a testnet | ||
|
||
To start a 4 node testnet run: | ||
|
||
``` | ||
make localnet-start | ||
``` | ||
|
||
This command creates a 4-node network using the gaiadnode image. | ||
The ports for each node are found in this table: | ||
|
||
| Node ID | P2P Port | RPC Port | | ||
| --------|-------|------| | ||
| `gaianode0` | `26656` | `26657` | | ||
| `gaianode1` | `26659` | `26660` | | ||
| `gaianode2` | `26661` | `26662` | | ||
| `gaianode3` | `26663` | `26664` | | ||
|
||
To update the binary, just rebuild it and restart the nodes: | ||
|
||
``` | ||
make build-linux localnet-stop localnet-start | ||
``` | ||
|
||
### Configuration | ||
|
||
The `make localnet-start` creates files for a 4-node testnet in `./build` by calling the `gaiad testnet` command. | ||
This outputs a handful of files in the `./build` directory: | ||
|
||
```tree -L 2 build/ | ||
build/ | ||
├── gaiacli | ||
├── gaiad | ||
├── gentxs | ||
│ ├── node0.json | ||
│ ├── node1.json | ||
│ ├── node2.json | ||
│ └── node3.json | ||
├── node0 | ||
│ ├── gaiacli | ||
│ │ ├── key_seed.json | ||
│ │ └── keys | ||
│ └── gaiad | ||
│ ├── ${LOG:-gaiad.log} | ||
│ ├── config | ||
│ └── data | ||
├── node1 | ||
│ ├── gaiacli | ||
│ │ └── key_seed.json | ||
│ └── gaiad | ||
│ ├── ${LOG:-gaiad.log} | ||
│ ├── config | ||
│ └── data | ||
├── node2 | ||
│ ├── gaiacli | ||
│ │ └── key_seed.json | ||
│ └── gaiad | ||
│ ├── ${LOG:-gaiad.log} | ||
│ ├── config | ||
│ └── data | ||
└── node3 | ||
├── gaiacli | ||
│ └── key_seed.json | ||
└── gaiad | ||
├── ${LOG:-gaiad.log} | ||
├── config | ||
└── data | ||
``` | ||
|
||
Each `./build/nodeN` directory is mounted to the `/gaiad` directory in each container. | ||
|
||
### Logging | ||
|
||
Logs are saved under each `./build/nodeN/gaiad/gaia.log`. Watch them stream in with, for example: | ||
|
||
``` | ||
tail -f build/node0/gaiad/gaia.log | ||
``` | ||
|
||
### Special binaries | ||
|
||
If you have multiple binaries with different names, you can specify which one to run with the BINARY environment variable. The path of the binary is relative to the attached volume. For example: | ||
|
||
``` | ||
# Run with custom binary | ||
BINARY=gaiafoo make localnet-start | ||
``` | ||
|
||
## Remote Testnet | ||
|
||
The following should be run from the [networks directory](https://github.com/cosmos/cosmos-sdk/tree/develop/networks). | ||
|
||
### Terraform & Ansible | ||
|
||
Automated deployments are done using [Terraform](https://www.terraform.io/) to create servers on AWS then | ||
[Ansible](http://www.ansible.com/) to create and manage testnets on those servers. | ||
|
||
### Prerequisites | ||
|
||
- Install [Terraform](https://www.terraform.io/downloads.html) and [Ansible](http://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html) on a Linux machine. | ||
- Create an [AWS API token](https://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html) with EC2 create capability. | ||
- Create SSH keys | ||
|
||
``` | ||
export AWS_ACCESS_KEY_ID="2345234jk2lh4234" | ||
export AWS_SECRET_ACCESS_KEY="234jhkg234h52kh4g5khg34" | ||
export TESTNET_NAME="remotenet" | ||
export CLUSTER_NAME= "remotenetvalidators" | ||
export SSH_PRIVATE_FILE="$HOME/.ssh/id_rsa" | ||
export SSH_PUBLIC_FILE="$HOME/.ssh/id_rsa.pub" | ||
``` | ||
|
||
These will be used by both `terraform` and `ansible`. | ||
|
||
### Create a remote network | ||
|
||
``` | ||
SERVERS=1 REGION_LIMIT=1 make validators-start | ||
``` | ||
|
||
The testnet name is what's going to be used in --chain-id, while the cluster name is the administrative tag in AWS for the servers. The code will create SERVERS amount of servers in each availability zone up to the number of REGION_LIMITs, starting at us-east-2. (us-east-1 is excluded.) The below BaSH script does the same, but sometimes it's more comfortable for input. | ||
|
||
``` | ||
./new-testnet.sh "$TESTNET_NAME" "$CLUSTER_NAME" 1 1 | ||
``` | ||
|
||
### Quickly see the /status endpoint | ||
|
||
``` | ||
make validators-status | ||
``` | ||
|
||
### Delete servers | ||
|
||
``` | ||
make validators-stop | ||
``` | ||
|
||
### Logging | ||
|
||
You can ship logs to Logz.io, an Elastic stack (Elastic search, Logstash and Kibana) service provider. You can set up your nodes to log there automatically. Create an account and get your API key from the notes on [this page](https://app.logz.io/#/dashboard/data-sources/Filebeat), then: | ||
|
||
``` | ||
yum install systemd-devel || echo "This will only work on RHEL-based systems." | ||
apt-get install libsystemd-dev || echo "This will only work on Debian-based systems." | ||
go get github.com/mheese/journalbeat | ||
ansible-playbook -i inventory/digital_ocean.py -l remotenet logzio.yml -e LOGZIO_TOKEN=ABCDEFGHIJKLMNOPQRSTUVWXYZ012345 | ||
``` | ||
|
||
### Monitoring | ||
|
||
You can install the DataDog agent with: | ||
|
||
``` | ||
make datadog-install | ||
``` | ||
|
||
### Single-node testnet | ||
|
||
To create a single node testnet: | ||
|
||
``` | ||
cd $GOPATH/src/github.com/cosmos/cosmos-sdk | ||
# Clear the build folder | ||
rm -rf ./build | ||
# Build binary | ||
make build-linux | ||
# Create configuration | ||
docker run -v `pwd`/build:/gaiad tendermint/gaiadnode testnet -o . --v 1 | ||
# Run the node | ||
docker run -v `pwd`/build:/gaiad tendermint/gaiadnode | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,65 +1,6 @@ | ||
# Terraform & Ansible | ||
# Networks | ||
|
||
Automated deployments are done using [Terraform](https://www.terraform.io/) to create servers on AWS then | ||
[Ansible](http://www.ansible.com/) to create and manage testnets on those servers. | ||
Here contains the files required for automated deployment of either local or remote testnets. | ||
|
||
## Prerequisites | ||
|
||
- Install [Terraform](https://www.terraform.io/downloads.html) and [Ansible](http://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html) on a Linux machine. | ||
- Create an [AWS API token](https://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html) with EC2 create capability. | ||
- Create SSH keys | ||
|
||
``` | ||
export AWS_ACCESS_KEY_ID="2345234jk2lh4234" | ||
export AWS_SECRET_ACCESS_KEY="234jhkg234h52kh4g5khg34" | ||
export TESTNET_NAME="remotenet" | ||
export CLUSTER_NAME= "remotenetvalidators" | ||
export SSH_PRIVATE_FILE="$HOME/.ssh/id_rsa" | ||
export SSH_PUBLIC_FILE="$HOME/.ssh/id_rsa.pub" | ||
``` | ||
|
||
These will be used by both `terraform` and `ansible`. | ||
|
||
## Create a remote network | ||
|
||
``` | ||
SERVERS=1 REGION_LIMIT=1 make validators-start | ||
``` | ||
|
||
The testnet name is what's going to be used in --chain-id, while the cluster name is the administrative tag in AWS for the servers. The code will create SERVERS amount of servers in each availability zone up to the number of REGION_LIMITs, starting at us-east-2. (us-east-1 is excluded.) The below BaSH script does the same, but sometimes it's more comfortable for input. | ||
|
||
``` | ||
./new-testnet.sh "$TESTNET_NAME" "$CLUSTER_NAME" 1 1 | ||
``` | ||
|
||
## Quickly see the /status endpoint | ||
|
||
``` | ||
make validators-status | ||
``` | ||
|
||
## Delete servers | ||
|
||
``` | ||
make validators-stop | ||
``` | ||
|
||
## Logging | ||
|
||
You can ship logs to Logz.io, an Elastic stack (Elastic search, Logstash and Kibana) service provider. You can set up your nodes to log there automatically. Create an account and get your API key from the notes on [this page](https://app.logz.io/#/dashboard/data-sources/Filebeat), then: | ||
|
||
``` | ||
yum install systemd-devel || echo "This will only work on RHEL-based systems." | ||
apt-get install libsystemd-dev || echo "This will only work on Debian-based systems." | ||
go get github.com/mheese/journalbeat | ||
ansible-playbook -i inventory/digital_ocean.py -l remotenet logzio.yml -e LOGZIO_TOKEN=ABCDEFGHIJKLMNOPQRSTUVWXYZ012345 | ||
``` | ||
|
||
## Monitoring | ||
|
||
You can install the DataDog agent with: | ||
|
||
``` | ||
make datadog-install | ||
``` | ||
Doing so is best accomplished using the `make` targets. For more information, see the | ||
[networks documentation](/docs/getting-started/networks.md) |
This file was deleted.
Oops, something went wrong.