|
|
- # Stack
-
- This is a stripped down version of https://github.com/segmentio/stack
- plus some shell scripts.
-
- It is responsible for the following:
-
- - spin up a cluster of nodes
- - copy config files for a tendermint testnet to each node
- - copy linux binaries for tendermint and the app to each node
- - start tendermint on every node
-
- # How it Works
-
- To use, a user must only provide a directory containing two files: `bins` and `run.sh`.
-
- The `bins` file is a list of binaries, for instance:
-
- ```
- $GOPATH/bin/tendermint
- $GOPATH/bin/dummy
- ```
-
- and the `run.sh` specifies how those binaries ought to be started:
-
- ```
- #! /bin/bash
-
- if [[ "$SEEDS" != "" ]]; then
- SEEDS_FLAG="--seeds=$SEEDS"
- fi
-
- ./dummy --persist .tendermint/data/dummy_data >> app.log 2>&1 &
- ./tendermint node --log_level=info $SEEDS_FLAG >> tendermint.log 2>&1 &
- ```
-
- This let's you specify exactly which versions of Tendermint and the application are to be used,
- and how they ought to be started.
-
- Note that these binaries *MUST* be compiled for Linux.
- If you are not on Linux, you can compile binaries for linux using `go build` with the `GOOS` variable:
-
- ```
- GOOS=linux go build -o $GOPATH/bin/tendermint-linux $GOPATH/src/github.com/tendermint/tendermint/cmd/tendermint
- ```
-
- This cross-compilation must be done for each binary you want to copy over.
-
- If you want to use an application that requires more than just a few binaries, you may need to do more manual work,
- for instance using `terraforce` to set up the development environment on every machine.
-
- # Dependencies
-
- We use `terraform` for spinning up the machines,
- and a custom rolled tool, `terraforce`,
- for running commands on many machines in parallel.
- You can download terraform here: https://www.terraform.io/downloads.html
- To download terraforce, run `go get github.com/ebuchman/terraforce`
-
- We use `tendermint` itself to generate files for a testnet.
- You can install `tendermint` with
-
- ```
- cd $GOPATH/src/github.com/tendermint/tendermint
- glide install
- go install ./cmd/tendermint
- ```
-
- You also need to set the `DIGITALOCEAN_TOKEN` environment variables so that terraform can
- spin up nodes on digital ocean.
-
- This stack is currently some terraform and a bunch of shell scripts,
- so its helpful to work out of a directory containing everything.
- Either change directory to `$GOPATH/src/github.com/tendermint/tendermint/test/net`
- or make a copy of that directory and change to it. All commands are expected to be executed from there.
-
- For terraform to work, you must first run `terraform get`
-
- # Create
-
- To create a cluster with 4 nodes, run
-
- ```
- terraform apply
- ```
-
- To use a different number of nodes, change the `desired_capacity` parameter in the `main.tf`.
-
- Note that terraform keeps track of the current state of your infrastructure,
- so if you change the `desired_capacity` and run `terraform apply` again, it will add or remove nodes as necessary.
-
- If you think that's amazing, so do we.
-
- To get some info about the cluster, run `terraform output`.
-
- See the [terraform docs](https://www.terraform.io/docs/index.html) for more details.
-
- To tear down the cluster, run `terraform destroy`.
-
- # Initialize
-
- Now that we have a cluster up and running, let's generate the necessary files for a Tendermint node and copy them over.
- A Tendermint node needs, at the least, a `priv_validator.json` and a `genesis.json`.
- To generate files for the nodes, run
-
- ```
- tendermint testnet 4 mytestnet
- ```
-
- This will create the directory `mytestnet`, containing one directory for each of the 4 nodes.
- Each node directory contains a unique `priv_validator.json` and a `genesis.json`,
- where the `genesis.json` contains the public keys of all `priv_validator.json` files.
-
- If you want to add more files to each node for your particular app, you'll have to add them to each of the node directories.
-
- Now we can copy everything over to the cluster.
- If you are on Linux, run
-
- ```
- bash scripts/init.sh 4 mytestnet examples/in-proc
- ```
-
- Otherwise (if you are not on Linux), make sure you ran
-
- ```
- GOOS=linux go build -o $GOPATH/bin/tendermint-linux $GOPATH/src/github.com/tendermint/tendermint/cmd/tendermint
- ```
-
- and now run
-
- ```
- bash scripts/init.sh 4 mytestnet examples/in-proc-linux
- ```
-
- # Start
-
- Finally, to start Tendermint on all the nodes, run
-
- ```
- bash scripts/start.sh 4
- ```
-
- # Check
-
- Query the status of all your nodes:
-
- ```
- bash scripts/query.sh 4 status
- ```
|