6.2 KiB
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 and additionally the local
or remote
sub-directories.
Local Testnet
From the networks/local directory:
Requirements
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:
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
. You can also watch logs
directly via Docker, for example:
docker logs -f gaiadnode0
Keys & Accounts
To interact with gaiacli
and start querying state or creating txs, you use the
gaiacli
directory of any given node as your home
, for example:
gaiacli keys list --home ./build/node0/gaiacli
Now that accounts exists, you may create new accounts and send those accounts funds!
::: tip
Note: Each node's seed is located at ./build/nodeN/gaiacli/key_seed.json
.
:::
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.
Terraform & Ansible
Automated deployments are done using Terraform to create servers on AWS then Ansible to create and manage testnets on those servers.
Prerequisites
- Install Terraform and Ansible on a Linux machine.
- Create an AWS API token 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, 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