diff --git a/nodes/deploy/deploy.bash b/nodes/deploy/deploy.bash new file mode 100755 index 00000000..560ab464 --- /dev/null +++ b/nodes/deploy/deploy.bash @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +# Deployment script + +# 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" +PYTHON_ENV_DIR="${PYTHON_ENV_DIR:-/home/ubuntu/moonstream-env}" +PYTHON="${PYTHON_ENV_DIR}/bin/python" +PIP="${PYTHON_ENV_DIR}/bin/pip" +SECRETS_DIR="${SECRETS_DIR:-/home/ubuntu/moonstream-secrets}" +PARAMETERS_ENV_PATH="${SECRETS_DIR}/app.env" +AWS_SSM_PARAMETER_PATH="${AWS_SSM_PARAMETER_PATH:-/moonstream/prod}" +SCRIPT_DIR="$(realpath $(dirname $0))" + +# Parameters scripts +PARAMETERS_SCRIPT="${SCRIPT_DIR}/parameters.py" +CHECKENV_PARAMETERS_SCRIPT="${SCRIPT_DIR}/parameters.bash" +CHECKENV_NODES_CONNECTIONS_SCRIPT="${SCRIPT_DIR}/nodes-connections.bash" + +# Service file +NODE_BALANCER_SERVICE_FILE="node-balancer.service" + +set -eu + +echo +echo +echo -e "${PREFIX_INFO} Building executable load balancer for nodes script with Go" +EXEC_DIR=$(pwd) +cd "${APP_NODES_DIR}/node_balancer" +HOME=/root /usr/local/go/bin/go build -o "${APP_NODES_DIR}/node_balancer/nodebalancer" "${APP_NODES_DIR}/node_balancer/main.go" +cd "${EXEC_DIR}" + +echo +echo +echo -e "${PREFIX_INFO} Retrieving deployment parameters" +mkdir -p "${SECRETS_DIR}" +AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}" "${PYTHON}" "${PARAMETERS_SCRIPT}" extract -p "${AWS_SSM_PARAMETER_PATH}" -o "${PARAMETERS_ENV_PATH}" + +echo +echo +echo -e "${PREFIX_INFO} Retrieving addition deployment parameters" +bash "${CHECKENV_PARAMETERS_SCRIPT}" -v -p "moonstream" -o "${PARAMETERS_ENV_PATH}" + +echo +echo +echo -e "${PREFIX_INFO} Updating nodes connection parameters" +bash "${CHECKENV_NODES_CONNECTIONS_SCRIPT}" -v -f "${PARAMETERS_ENV_PATH}" + +echo +echo +echo -e "${PREFIX_INFO} Replacing existing load balancer for nodes service definition with ${NODE_BALANCER_SERVICE_FILE}" +chmod 644 "${SCRIPT_DIR}/${NODE_BALANCER_SERVICE_FILE}" +cp "${SCRIPT_DIR}/${NODE_BALANCER_SERVICE_FILE}" "/etc/systemd/system/${NODE_BALANCER_SERVICE_FILE}" +systemctl daemon-reload +systemctl restart "${NODE_BALANCER_SERVICE_FILE}" diff --git a/nodes/deploy/node-balancer.service b/nodes/deploy/node-balancer.service new file mode 100644 index 00000000..9c2c0e27 --- /dev/null +++ b/nodes/deploy/node-balancer.service @@ -0,0 +1,18 @@ +[Unit] +Description=Load balancer for blockchain nodes +After=network.target +StartLimitIntervalSec=300 +StartLimitBurst=3 + +[Service] +User=ubuntu +Group=www-data +WorkingDirectory=/home/ubuntu/moonstream/nodes/node_balancer +EnvironmentFile=/home/ubuntu/moonstream-secrets/app.env +Restart=on-failure +RestartSec=15s +ExecStart=/home/ubuntu/moonstream/nodes/node_balancer/nodebalancer -host 0.0.0.0 -port 8544 -healthcheck +SyslogIdentifier=node-balancer + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/nodes/load_balancer/README.md b/nodes/node_balancer/README.md similarity index 100% rename from nodes/load_balancer/README.md rename to nodes/node_balancer/README.md diff --git a/nodes/load_balancer/cmd/balancer.go b/nodes/node_balancer/cmd/balancer.go similarity index 98% rename from nodes/load_balancer/cmd/balancer.go rename to nodes/node_balancer/cmd/balancer.go index 85d90cb2..976849c8 100644 --- a/nodes/load_balancer/cmd/balancer.go +++ b/nodes/node_balancer/cmd/balancer.go @@ -12,10 +12,10 @@ import ( "net/url" "sync/atomic" - configs "bugout.dev/app-node-balancer/configs" + configs "github.com/bugout-dev/moonstream/nodes/node_balancer/configs" ) -// Main variable of pool of blockchains which contains pool of nodes +// Main variable of pool of blockchains which contains pool of nodes // for each blockchain we work during session. var blockchainPool BlockchainPool diff --git a/nodes/load_balancer/cmd/data.go b/nodes/node_balancer/cmd/data.go similarity index 100% rename from nodes/load_balancer/cmd/data.go rename to nodes/node_balancer/cmd/data.go diff --git a/nodes/load_balancer/cmd/middleware.go b/nodes/node_balancer/cmd/middleware.go similarity index 100% rename from nodes/load_balancer/cmd/middleware.go rename to nodes/node_balancer/cmd/middleware.go diff --git a/nodes/load_balancer/cmd/routes.go b/nodes/node_balancer/cmd/routes.go similarity index 100% rename from nodes/load_balancer/cmd/routes.go rename to nodes/node_balancer/cmd/routes.go diff --git a/nodes/load_balancer/cmd/server.go b/nodes/node_balancer/cmd/server.go similarity index 94% rename from nodes/load_balancer/cmd/server.go rename to nodes/node_balancer/cmd/server.go index 7c6a2a12..6f638f62 100644 --- a/nodes/load_balancer/cmd/server.go +++ b/nodes/node_balancer/cmd/server.go @@ -13,8 +13,8 @@ import ( "net/url" "time" - configs "bugout.dev/app-node-balancer/configs" humbug "github.com/bugout-dev/humbug/go/pkg" + configs "github.com/bugout-dev/moonstream/nodes/node_balancer/configs" "github.com/google/uuid" ) @@ -94,12 +94,19 @@ func InitServer() { var listeningPort string var enableHealthCheck bool var enableDebug bool + var showVersion bool flag.StringVar(&listeningAddr, "host", "127.0.0.1", "Server listening address") flag.StringVar(&listeningPort, "port", "8544", "Server listening port") flag.BoolVar(&enableHealthCheck, "healthcheck", false, "To enable healthcheck ser healthcheck flag") flag.BoolVar(&enableDebug, "debug", false, "To enable debug mode with extended log set debug flag") + flag.BoolVar(&showVersion, "version", false, "Print version") flag.Parse() + if showVersion { + fmt.Printf("Node balancer version: v%s\n", configs.NODE_BALANCER_VERSION) + return + } + // Configure Humbug reporter to handle errors var err error sessionID := uuid.New().String() diff --git a/nodes/load_balancer/configs/settings.go b/nodes/node_balancer/configs/settings.go similarity index 86% rename from nodes/load_balancer/configs/settings.go rename to nodes/node_balancer/configs/settings.go index 0ce905df..09b239cc 100644 --- a/nodes/load_balancer/configs/settings.go +++ b/nodes/node_balancer/configs/settings.go @@ -38,6 +38,10 @@ var MOONSTREAM_NODES_SERVER_PORT = os.Getenv("MOONSTREAM_NODES_SERVER_PORT") // Return list of NodeConfig structures func (nc *NodeConfigList) InitNodeConfigList() { + if MOONSTREAM_NODES_SERVER_PORT == "" || MOONSTREAM_NODE_ETHEREUM_A_IPC_ADDR == "" || MOONSTREAM_NODE_ETHEREUM_B_IPC_ADDR == "" || MOONSTREAM_NODE_ETHEREUM_IPC_PORT == "" || MOONSTREAM_NODE_POLYGON_A_IPC_ADDR == "" || MOONSTREAM_NODE_POLYGON_B_IPC_ADDR == "" || MOONSTREAM_NODE_POLYGON_IPC_PORT == "" { + log.Fatal("Some of environment variables not set") + } + // Define available blockchain nodes blockchainConfigList := make([]BlockchainConfig, 0, 2) blockchainConfigList = append(blockchainConfigList, BlockchainConfig{ diff --git a/nodes/node_balancer/configs/version.go b/nodes/node_balancer/configs/version.go new file mode 100644 index 00000000..94bcab6c --- /dev/null +++ b/nodes/node_balancer/configs/version.go @@ -0,0 +1,3 @@ +package configs + +var NODE_BALANCER_VERSION = "0.0.1" diff --git a/nodes/load_balancer/go.mod b/nodes/node_balancer/go.mod similarity index 66% rename from nodes/load_balancer/go.mod rename to nodes/node_balancer/go.mod index 2b0891d4..ca93c68e 100644 --- a/nodes/load_balancer/go.mod +++ b/nodes/node_balancer/go.mod @@ -1,4 +1,4 @@ -module bugout.dev/app-node-balancer +module github.com/bugout-dev/moonstream/nodes/node_balancer go 1.17 diff --git a/nodes/load_balancer/go.sum b/nodes/node_balancer/go.sum similarity index 100% rename from nodes/load_balancer/go.sum rename to nodes/node_balancer/go.sum diff --git a/nodes/load_balancer/main.go b/nodes/node_balancer/main.go similarity index 50% rename from nodes/load_balancer/main.go rename to nodes/node_balancer/main.go index f001e922..bfe77464 100644 --- a/nodes/load_balancer/main.go +++ b/nodes/node_balancer/main.go @@ -1,7 +1,7 @@ package main import ( - "bugout.dev/app-node-balancer/cmd" + "github.com/bugout-dev/moonstream/nodes/node_balancer/cmd" ) func main() { diff --git a/nodes/node_balancer/nodebalancer b/nodes/node_balancer/nodebalancer new file mode 100755 index 00000000..b8e85038 Binary files /dev/null and b/nodes/node_balancer/nodebalancer differ diff --git a/nodes/load_balancer/sample.env b/nodes/node_balancer/sample.env similarity index 100% rename from nodes/load_balancer/sample.env rename to nodes/node_balancer/sample.env