diff --git a/nodes/deploy/evmos/deploy.bash b/nodes/deploy/evmos/deploy.bash new file mode 100755 index 00000000..89a2a0f0 --- /dev/null +++ b/nodes/deploy/evmos/deploy.bash @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +# Deployment script - intended to run on Moonstream Evmos node server + +# Colors +C_RESET='\033[0m' +C_RED='\033[1;31m' +C_GREEN='\033[1;32m' +C_YELLOW='\033[1;33m' + +# Logs +PREFIX_INFO="${C_GREEN}[INFO]${C_RESET} [$(date +%d-%m\ %T)]" +PREFIX_WARN="${C_YELLOW}[WARN]${C_RESET} [$(date +%d-%m\ %T)]" +PREFIX_CRIT="${C_RED}[CRIT]${C_RESET} [$(date +%d-%m\ %T)]" + +# Main +AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION:-us-east-1}" +APP_DIR="${APP_DIR:-/home/ubuntu/moonstream}" +APP_NODES_DIR="${APP_DIR}/nodes" +SECRETS_DIR="${SECRETS_DIR:-/home/ubuntu/moonstream-secrets}" +PARAMETERS_ENV_PATH="${SECRETS_DIR}/app.env" +SCRIPT_DIR="$(realpath $(dirname $0))" + +# Node status server service file +NODE_STATUS_SERVER_SERVICE_FILE="node-status.service" + +# Evmos service file +EVMOS_NETHERMIND_SERVICE_FILE="evmos.service" + +set -eu + +echo +echo +echo -e "${PREFIX_INFO} Building executable server of node status server" +EXEC_DIR=$(pwd) +cd "${APP_NODES_DIR}/server" +HOME=/root /usr/local/go/bin/go build -o "${APP_NODES_DIR}/server/nodestatus" "${APP_NODES_DIR}/server/main.go" +cd "${EXEC_DIR}" + +echo +echo +echo -e "${PREFIX_INFO} Create secrets directory" +mkdir -p "${SECRETS_DIR}" + +echo +echo +echo -e "${PREFIX_INFO} Install checkenv" +HOME=/root /usr/local/go/bin/go install github.com/bugout-dev/checkenv@latest + +echo +echo +echo -e "${PREFIX_INFO} Retrieving deployment parameters" +AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}" /root/go/bin/checkenv show aws_ssm+Product:moonstream,Node:true > "${PARAMETERS_ENV_PATH}" + +echo +echo +echo -e "${PREFIX_INFO} Add instance local IP to parameters" +AWS_LOCAL_IPV4="$(ec2metadata --local-ipv4)" +echo "AWS_LOCAL_IPV4=$AWS_LOCAL_IPV4" >> "${PARAMETERS_ENV_PATH}" + +echo +echo +echo -e "${PREFIX_INFO} Replacing existing node status server definition with ${NODE_STATUS_SERVER_SERVICE_FILE}" +chmod 644 "${SCRIPT_DIR}/${NODE_STATUS_SERVER_SERVICE_FILE}" +cp "${SCRIPT_DIR}/${NODE_STATUS_SERVER_SERVICE_FILE}" "/etc/systemd/system/${NODE_STATUS_SERVER_SERVICE_FILE}" +systemctl daemon-reload +systemctl restart "${NODE_STATUS_SERVER_SERVICE_FILE}" + +echo +echo +echo -e "${PREFIX_INFO} Replacing existing Evmos service definition with ${EVMOS_NETHERMIND_SERVICE_FILE}" +chmod 644 "${SCRIPT_DIR}/${EVMOS_NETHERMIND_SERVICE_FILE}" +cp "${SCRIPT_DIR}/${EVMOS_NETHERMIND_SERVICE_FILE}" "/etc/systemd/system/${EVMOS_NETHERMIND_SERVICE_FILE}" +systemctl daemon-reload +systemctl disable "${EVMOS_NETHERMIND_SERVICE_FILE}" +echo -e "${PREFIX_WARN} Evmos service updated, but not restarted!" diff --git a/nodes/deploy/evmos/evmos.service b/nodes/deploy/evmos/evmos.service new file mode 100644 index 00000000..308f9963 --- /dev/null +++ b/nodes/deploy/evmos/evmos.service @@ -0,0 +1,26 @@ +[Unit] +Description=Evmos node client +StartLimitIntervalSec=500 +StartLimitBurst=5 +After=network.target + +[Service] +Restart=on-failure +RestartSec=5s +EnvironmentFile=/home/ubuntu/moonstream-secrets/app.env +ExecStart=/home/ubuntu/go/bin/evmosd start \ + --home /mnt/disks/nodes/evmos \ + --json-rpc.enable true \ + --json-rpc.api "eth,web3,net" \ + --json-rpc.address "127.0.0.1:8545" \ + --json-rpc.ws-address "127.0.0.1:8546" \ + --grpc-web.address "127.0.0.1:9091" \ + --grpc.address "127.0.0.1:9090" +Type=simple +User=ubuntu +ExecStop=/bin/kill -s SIGINT -$MAINPID +TimeoutStopSec=180 +SyslogIdentifier=evmos + +[Install] +WantedBy=multi-user.target diff --git a/nodes/deploy/evmos/node-status.service b/nodes/deploy/evmos/node-status.service new file mode 100644 index 00000000..c05839ed --- /dev/null +++ b/nodes/deploy/evmos/node-status.service @@ -0,0 +1,17 @@ +[Unit] +Description=Moonstream node status server +After=network.target + +[Service] +User=ubuntu +Group=www-data +WorkingDirectory=/home/ubuntu/moonstream/nodes/server +EnvironmentFile=/home/ubuntu/moonstream-secrets/app.env +ExecStart=/home/ubuntu/moonstream/nodes/server/nodestatus \ + -blockchain evmos \ + -host "${AWS_LOCAL_IPV4}" \ + -port "${MOONSTREAM_NODES_SERVER_PORT}" +SyslogIdentifier=node-status + +[Install] +WantedBy=multi-user.target diff --git a/nodes/server/cmd/routes.go b/nodes/server/cmd/routes.go index 6a46655b..033e75e7 100644 --- a/nodes/server/cmd/routes.go +++ b/nodes/server/cmd/routes.go @@ -32,7 +32,7 @@ func (es *extendedServer) pingGethRoute(w http.ResponseWriter, req *http.Request http.Error(w, http.StatusText(500), http.StatusInternalServerError) return } - if es.blockchain != "ethereum" && es.blockchain != "polygon" && es.blockchain != "xdai" { + if es.blockchain != "ethereum" && es.blockchain != "polygon" && es.blockchain != "xdai" && es.blockchain != "evmos" { log.Printf("Unaccepted blockchain type: %s", es.blockchain) http.Error(w, http.StatusText(400), http.StatusBadRequest) return diff --git a/nodes/server/cmd/server.go b/nodes/server/cmd/server.go index da4a3303..c79a33cd 100644 --- a/nodes/server/cmd/server.go +++ b/nodes/server/cmd/server.go @@ -17,7 +17,7 @@ func InitServer() { var blockchain string flag.StringVar(&listeningAddr, "host", "127.0.0.1", "Server listening address") flag.StringVar(&listeningPort, "port", "8080", "Server listening port") - flag.StringVar(&blockchain, "blockchain", "", "Blockchain to work with (ethereum/polygon/xdai)") + flag.StringVar(&blockchain, "blockchain", "", "Blockchain to work with (ethereum/polygon/xdai/evmos)") flag.Parse() es := extendedServer{blockchain: blockchain}