|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# Cannot run with -u because we check for unbound variables |
| 4 | +# and the script will exit prematurely if '-u' is set |
| 5 | +set -ef -o pipefail |
| 6 | + |
| 7 | +SCRIPT=$(realpath "$0") |
| 8 | +FILE_NAME=$(basename "${SCRIPT}") |
| 9 | +SOURCE=$(dirname "$SCRIPT") |
| 10 | +PROJECT_ROOT=$(realpath "${SOURCE}/..") |
| 11 | +source "${PROJECT_ROOT}/config/datafed.sh" |
| 12 | + |
| 13 | +VERSION="1.0.0" |
| 14 | +echo "$FILE_NAME $VERSION" |
| 15 | + |
| 16 | +Help() { |
| 17 | + echo "$(basename $0) Will set up the docker container scripts for the metadata server" |
| 18 | + echo |
| 19 | + echo "Syntax: $(basename $0) [-h|t|b]" |
| 20 | + echo "options:" |
| 21 | + echo "-h, --help Print this help message." |
| 22 | + echo "-t, --docker-tag The tag on Savannah that the currently released containers are under" |
| 23 | + echo "-b, --backup-directory The backup directory that will be mounted into the database container at /backups" |
| 24 | + echo |
| 25 | +} |
| 26 | + |
| 27 | +local_DOCKER_TAG="" |
| 28 | +local_BACKUP_DIRECTORY="" |
| 29 | + |
| 30 | +if [ -z "${DATAFED_DOCKER_TAG}" ]; then |
| 31 | + local_DOCKER_TAG="" |
| 32 | +else |
| 33 | + local_DOCKER_TAG=$(printenv DATAFED_DOCKER_TAG) |
| 34 | +fi |
| 35 | + |
| 36 | +VALID_ARGS=$(getopt -o ht:b: --long 'help',docker-tag:,backup-directory: -- "$@") |
| 37 | +if [[ $? -ne 0 ]]; then |
| 38 | + exit 1 |
| 39 | +fi |
| 40 | +eval set -- "$VALID_ARGS" |
| 41 | +while [ : ]; do |
| 42 | + case "$1" in |
| 43 | + -h | --help) |
| 44 | + Help |
| 45 | + exit 0 |
| 46 | + ;; |
| 47 | + -t | --docker-tag) |
| 48 | + local_DOCKER_TAG=$2 |
| 49 | + shift 2 |
| 50 | + ;; |
| 51 | + -b | --backup-directory) |
| 52 | + local_BACKUP_DIRECTORY=$2 |
| 53 | + shift 2 |
| 54 | + ;; |
| 55 | + --) |
| 56 | + shift |
| 57 | + break |
| 58 | + ;; |
| 59 | + \?) # incorrect option |
| 60 | + echo "Error: Invalid option" |
| 61 | + exit |
| 62 | + ;; |
| 63 | + esac |
| 64 | +done |
| 65 | + |
| 66 | +ERROR_DETECTED=0 |
| 67 | + |
| 68 | +if [ -z "$local_DOCKER_TAG" ]; then |
| 69 | + echo "Error DOCKER_TAG is not defined, this is a required argument" |
| 70 | + echo " This variable can be set using the command line option -t, --docker-tag" |
| 71 | + echo " or with the environment variable DATAFED_DOCKER_TAG." |
| 72 | + ERROR_DETECTED=1 |
| 73 | +fi |
| 74 | + |
| 75 | +if [ -z "$local_BACKUP_DIRECTORY" ]; then |
| 76 | + echo "Error BACKUP_DIRECTORY is not defined, this is a required argument" |
| 77 | + echo " This variable can be set using the command line option -b, --backup-directory" |
| 78 | + ERROR_DETECTED=1 |
| 79 | +fi |
| 80 | + |
| 81 | +if [ "$ERROR_DETECTED" == "1" ]; then |
| 82 | + exit 1 |
| 83 | +fi |
| 84 | + |
| 85 | +CREATE_DATAFED_NETWORK_SCRIPT="$DATAFED_INSTALL_PATH/scripts/create_datafed_network.sh" |
| 86 | +RUN_ARANGO_SCRIPT="$DATAFED_INSTALL_PATH/scripts/run_arango_container.sh" |
| 87 | +STOP_ARANGO_SCRIPT="$DATAFED_INSTALL_PATH/scripts/stop_arango_container.sh" |
| 88 | +REMOVE_ARANGO_SCRIPT="$DATAFED_INSTALL_PATH/scripts/remove_arango_container.sh" |
| 89 | +RUN_CORE_SCRIPT="$DATAFED_INSTALL_PATH/scripts/run_core_container.sh" |
| 90 | +STOP_CORE_SCRIPT="$DATAFED_INSTALL_PATH/scripts/stop_core_container.sh" |
| 91 | +REMOVE_CORE_SCRIPT="$DATAFED_INSTALL_PATH/scripts/remove_core_container.sh" |
| 92 | +RUN_WEB_SCRIPT="$DATAFED_INSTALL_PATH/scripts/run_web_container.sh" |
| 93 | +STOP_WEB_SCRIPT="$DATAFED_INSTALL_PATH/scripts/stop_web_container.sh" |
| 94 | +REMOVE_WEB_SCRIPT="$DATAFED_INSTALL_PATH/scripts/remove_web_container.sh" |
| 95 | +RUN_NGINX_SCRIPT="$DATAFED_INSTALL_PATH/scripts/run_nginx_container.sh" |
| 96 | +STOP_NGINX_SCRIPT="$DATAFED_INSTALL_PATH/scripts/stop_nginx_container.sh" |
| 97 | +REMOVE_NGINX_SCRIPT="$DATAFED_INSTALL_PATH/scripts/remove_nginx_container.sh" |
| 98 | + |
| 99 | +local_DOCKER_TAG_WEB_SAFE=$(echo $local_DOCKER_TAG | sed 's/\./_/g') |
| 100 | + |
| 101 | +cat <<EOF >"$CREATE_DATAFED_NETWORK_SCRIPT" |
| 102 | +#!/bin/bash |
| 103 | +
|
| 104 | +docker network create datafed-network |
| 105 | +EOF |
| 106 | + |
| 107 | +cat <<EOF >"$RUN_ARANGO_SCRIPT" |
| 108 | +#!/bin/bash |
| 109 | +
|
| 110 | +CONFIG_FILE_PATH="\$DATAFED_INSTALL_PATH/config/datafed.sh" |
| 111 | +source "\${CONFIG_FILE_PATH}" |
| 112 | +
|
| 113 | +docker run -d \\ |
| 114 | + --restart=always \\ |
| 115 | + --name arangodb \\ |
| 116 | + --log-driver=json-file \\ |
| 117 | + --log-opt max-size=10m \\ |
| 118 | + --log-opt max-file=3 \\ |
| 119 | + -e ARANGO_ROOT_PASSWORD="\$DATAFED_DATABASE_PASSWORD" \\ |
| 120 | + -e LANG="en_US" \\ |
| 121 | + --network datafed-network \\ |
| 122 | + -p 8529:8529 \\ |
| 123 | + -v arangodb_data:/var/lib/arangodb3:Z \\ |
| 124 | + -v "$local_BACKUP_DIRECTORY:/backups" \\ |
| 125 | + -t "arangodb/enterprise:3.12" |
| 126 | +EOF |
| 127 | + |
| 128 | +cat <<EOF >"$STOP_ARANGO_SCRIPT" |
| 129 | +#!/bin/bash |
| 130 | +
|
| 131 | +docker container stop arangodb |
| 132 | +EOF |
| 133 | + |
| 134 | +cat <<EOF >"$REMOVE_ARANGO_SCRIPT" |
| 135 | +#!/bin/bash |
| 136 | +
|
| 137 | +docker container stop arangodb |
| 138 | +docker container rm arangodb |
| 139 | +EOF |
| 140 | + |
| 141 | +cat <<EOF >"$RUN_CORE_SCRIPT" |
| 142 | +#!/bin/bash |
| 143 | +
|
| 144 | +CONFIG_FILE_PATH="\$DATAFED_INSTALL_PATH/config/datafed.sh" |
| 145 | +source "\${CONFIG_FILE_PATH}" |
| 146 | +
|
| 147 | +USER_ID=\$(id -u) |
| 148 | +
|
| 149 | +docker run -d \\ |
| 150 | + --restart=always \\ |
| 151 | + --name datafed-core-$local_DOCKER_TAG \\ |
| 152 | + --log-driver=json-file \\ |
| 153 | + --log-opt max-size=10m \\ |
| 154 | + --log-opt max-file=3 \\ |
| 155 | + -e DATAFED_GLOBUS_APP_SECRET="\$DATAFED_GLOBUS_APP_SECRET" \\ |
| 156 | + -e DATAFED_GLOBUS_APP_ID="\$DATAFED_GLOBUS_APP_ID" \\ |
| 157 | + -e DATAFED_ZEROMQ_SESSION_SECRET="\$DATAFED_ZEROMQ_SESSION_SECRET" \\ |
| 158 | + -e DATAFED_ZEROMQ_SYSTEM_SECRET="\$DATAFED_ZEROMQ_SYSTEM_SECRET" \\ |
| 159 | + -e DATAFED_DOMAIN="\$DATAFED_DOMAIN" \\ |
| 160 | + -e DATAFED_DATABASE_PASSWORD="\$DATAFED_DATABASE_PASSWORD" \\ |
| 161 | + -e DATAFED_DATABASE_IP_ADDRESS_PORT="http://\$DATAFED_DATABASE_HOST:\$DATAFED_DATABASE_PORT" \\ |
| 162 | + -e DATAFED_DEFAULT_LOG_PATH="/datafed/logs" \\ |
| 163 | + -e DATAFED_CORE_ADDRESS_PORT_INTERNAL="\$DATAFED_CORE_ADDRESS_PORT_INTERNAL" \\ |
| 164 | + -e DATAFED_CORE_CLIENT_THREADS="24" \\ |
| 165 | + -e DATAFED_CORE_TASK_THREADS="24" \\ |
| 166 | + -e UID="\$USER_ID" \\ |
| 167 | + --network datafed-network \\ |
| 168 | + -p 7513:7513 \\ |
| 169 | + -p 7512:7512 \\ |
| 170 | + -v "\$DATAFED_INSTALL_PATH/logs:/datafed/logs" \\ |
| 171 | + -v "\$DATAFED_INSTALL_PATH/keys/datafed-core-key.pub:/opt/datafed/keys/datafed-core-key.pub" \\ |
| 172 | + -v "\$DATAFED_INSTALL_PATH/keys/datafed-core-key.priv:/opt/datafed/keys/datafed-core-key.priv" \\ |
| 173 | + -t "datafed/core:$local_DOCKER_TAG" |
| 174 | +EOF |
| 175 | + |
| 176 | +cat <<EOF >"$STOP_CORE_SCRIPT" |
| 177 | +#!/bin/bash |
| 178 | +
|
| 179 | +docker container stop datafed-core-$local_DOCKER_TAG |
| 180 | +EOF |
| 181 | + |
| 182 | +cat <<EOF >"$REMOVE_CORE_SCRIPT" |
| 183 | +#!/bin/bash |
| 184 | +
|
| 185 | +docker container stop datafed-core-$local_DOCKER_TAG |
| 186 | +docker container rm datafed-core-$local_DOCKER_TAG |
| 187 | +EOF |
| 188 | + |
| 189 | +cat <<EOF >"$RUN_WEB_SCRIPT" |
| 190 | +#!/bin/bash |
| 191 | +
|
| 192 | +CONFIG_FILE_PATH="\$DATAFED_INSTALL_PATH/config/datafed.sh" |
| 193 | +source "\$CONFIG_FILE_PATH" |
| 194 | +
|
| 195 | +USER_ID=\$(id -u) |
| 196 | +
|
| 197 | +docker run -d \\ |
| 198 | + --restart=always \\ |
| 199 | + --name datafed-web-$local_DOCKER_TAG_WEB_SAFE \\ |
| 200 | + --log-driver=json-file \\ |
| 201 | + --log-opt max-size=10m \\ |
| 202 | + --log-opt max-file=3 \\ |
| 203 | + -e DATAFED_GLOBUS_APP_SECRET="\$DATAFED_GLOBUS_APP_SECRET" \\ |
| 204 | + -e DATAFED_GLOBUS_APP_ID="\$DATAFED_GLOBUS_APP_ID" \\ |
| 205 | + -e DATAFED_ZEROMQ_SESSION_SECRET="\$DATAFED_ZEROMQ_SESSION_SECRET" \\ |
| 206 | + -e DATAFED_ZEROMQ_SYSTEM_SECRET="\$DATAFED_ZEROMQ_SYSTEM_SECRET" \\ |
| 207 | + -e DATAFED_DOMAIN="\$DATAFED_DOMAIN" \\ |
| 208 | + -e DATAFED_WEB_CERT_PATH="\$DATAFED_WEB_CERT_PATH" \\ |
| 209 | + -e DATAFED_WEB_KEY_PATH="\$DATAFED_WEB_KEY_PATH" \\ |
| 210 | + -e DATAFED_DEFAULT_LOG_PATH="/datafed/logs" \\ |
| 211 | + -e DATAFED_CORE_ADDRESS_PORT_INTERNAL="\$DATAFED_CORE_ADDRESS_PORT_INTERNAL" \\ |
| 212 | + -e DATAFED_GOOGLE_ANALYTICS_TAG="\$DATAFED_GOOGLE_ANALYTICS_TAG" \\ |
| 213 | + -e UID="\$USER_ID" \\ |
| 214 | + --network datafed-network \\ |
| 215 | + -v "\$DATAFED_INSTALL_PATH/logs:/datafed/logs" \\ |
| 216 | + -v "\$DATAFED_INSTALL_PATH/keys/datafed-core-key.pub:/opt/datafed/keys/datafed-core-key.pub" \\ |
| 217 | + -v "\$DATAFED_WEB_CERT_PATH:\$DATAFED_WEB_CERT_PATH" \\ |
| 218 | + -v "\$DATAFED_WEB_KEY_PATH:\$DATAFED_WEB_KEY_PATH" \\ |
| 219 | + -t "datafed/web:$local_DOCKER_TAG" |
| 220 | +EOF |
| 221 | + |
| 222 | +cat <<EOF >"$STOP_WEB_SCRIPT" |
| 223 | +#!/bin/bash |
| 224 | +
|
| 225 | +docker container stop datafed-web-$local_DOCKER_TAG_WEB_SAFE |
| 226 | +EOF |
| 227 | + |
| 228 | +cat <<EOF >"$REMOVE_WEB_SCRIPT" |
| 229 | +#!/bin/bash |
| 230 | +
|
| 231 | +docker container stop datafed-web-$local_DOCKER_TAG_WEB_SAFE |
| 232 | +docker container rm datafed-web-$local_DOCKER_TAG_WEB_SAFE |
| 233 | +EOF |
| 234 | + |
| 235 | +cat <<EOF >"$RUN_NGINX_SCRIPT" |
| 236 | +#!/bin/bash |
| 237 | +
|
| 238 | +CONFIG_FILE_PATH="\$DATAFED_INSTALL_PATH/config/datafed.sh" |
| 239 | +source "\$CONFIG_FILE_PATH" |
| 240 | +
|
| 241 | +docker run -d \\ |
| 242 | + --restart=always \\ |
| 243 | + --name datafed-nginx \\ |
| 244 | + --network datafed-network \\ |
| 245 | + --log-driver=json-file \\ |
| 246 | + --log-opt max-size=10m \\ |
| 247 | + --log-opt max-file=3 \\ |
| 248 | + -p 443:443 \\ |
| 249 | + -p 80:80 \\ |
| 250 | + -v "\$DATAFED_INSTALL_PATH/nginx/nginx.conf:/etc/nginx/conf.d/default.conf" \\ |
| 251 | + -v "\$DATAFED_INSTALL_PATH/nginx/sites-enabled:/etc/nginx/sites-enabled" \\ |
| 252 | + -v "\$DATAFED_INSTALL_PATH/nginx/www:/www" \\ |
| 253 | + -v "\$DATAFED_INSTALL_PATH/keys/datafed.ornl.gov.crt:/etc/nginx/certs/datafed.ornl.gov.crt" \\ |
| 254 | + -v "\$DATAFED_INSTALL_PATH/keys/datafed.ornl.gov.key:/etc/nginx/certs/datafed.ornl.gov.key" \\ |
| 255 | + nginx:latest |
| 256 | +EOF |
| 257 | + |
| 258 | +cat <<EOF >"$STOP_NGINX_SCRIPT" |
| 259 | +#!/bin/bash |
| 260 | +
|
| 261 | +docker container stop datafed-nginx |
| 262 | +EOF |
| 263 | + |
| 264 | +cat <<EOF >"$REMOVE_NGINX_SCRIPT" |
| 265 | +#!/bin/bash |
| 266 | +
|
| 267 | +docker container stop datafed-nginx |
| 268 | +docker container rm datafed-nginx |
| 269 | +EOF |
| 270 | + |
| 271 | +chmod +x "$CREATE_DATAFED_NETWORK_SCRIPT" |
| 272 | + |
| 273 | +chmod +x "$RUN_ARANGO_SCRIPT" |
| 274 | +chmod +x "$STOP_ARANGO_SCRIPT" |
| 275 | +chmod +x "$REMOVE_ARANGO_SCRIPT" |
| 276 | + |
| 277 | +chmod +x "$RUN_CORE_SCRIPT" |
| 278 | +chmod +x "$STOP_CORE_SCRIPT" |
| 279 | +chmod +x "$REMOVE_CORE_SCRIPT" |
| 280 | + |
| 281 | +chmod +x "$RUN_WEB_SCRIPT" |
| 282 | +chmod +x "$STOP_WEB_SCRIPT" |
| 283 | +chmod +x "$REMOVE_WEB_SCRIPT" |
| 284 | + |
| 285 | +chmod +x "$RUN_NGINX_SCRIPT" |
| 286 | +chmod +x "$STOP_NGINX_SCRIPT" |
| 287 | +chmod +x "$REMOVE_NGINX_SCRIPT" |
0 commit comments