|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# Configuration environment variables: |
| 4 | +# STARTER_MODE: (single|cluster|activefailover), default single |
| 5 | +# DOCKER_IMAGE: ArangoDB docker image, default docker.io/arangodb/arangodb:latest |
| 6 | +# STARTER_DOCKER_IMAGE: ArangoDB Starter docker image, default docker.io/arangodb/arangodb-starter:latest |
| 7 | +# SSL: (true|false), default false |
| 8 | +# ARANGO_LICENSE_KEY: only required for ArangoDB Enterprise |
| 9 | + |
| 10 | +# EXAMPLE: |
| 11 | +# STARTER_MODE=cluster SSL=true ./start_db.sh |
| 12 | + |
| 13 | +STARTER_MODE=${STARTER_MODE:=single} |
| 14 | +DOCKER_IMAGE=${DOCKER_IMAGE:=docker.io/arangodb/arangodb:latest} |
| 15 | +STARTER_DOCKER_IMAGE=${STARTER_DOCKER_IMAGE:=docker.io/arangodb/arangodb-starter:latest} |
| 16 | +SSL=${SSL:=false} |
| 17 | +COMPRESSION=${COMPRESSION:=false} |
| 18 | + |
| 19 | +GW=172.28.0.1 |
| 20 | +docker network create arangodb --subnet 172.28.0.0/16 |
| 21 | + |
| 22 | +# exit when any command fails |
| 23 | +set -e |
| 24 | + |
| 25 | +docker pull $STARTER_DOCKER_IMAGE |
| 26 | +docker pull $DOCKER_IMAGE |
| 27 | + |
| 28 | +LOCATION=$(pwd)/$(dirname "$0") |
| 29 | +AUTHORIZATION_HEADER=$(cat "$LOCATION"/jwtHeader) |
| 30 | + |
| 31 | +STARTER_ARGS= |
| 32 | +SCHEME=http |
| 33 | +ARANGOSH_SCHEME=http+tcp |
| 34 | +COORDINATORS=("$GW:8529" "$GW:8539" "$GW:8549") |
| 35 | + |
| 36 | +if [ "$STARTER_MODE" == "single" ]; then |
| 37 | + COORDINATORS=("$GW:8529") |
| 38 | +fi |
| 39 | + |
| 40 | +if [ "$SSL" == "true" ]; then |
| 41 | + STARTER_ARGS="$STARTER_ARGS --ssl.keyfile=/data/server.pem" |
| 42 | + SCHEME=https |
| 43 | + ARANGOSH_SCHEME=http+ssl |
| 44 | +fi |
| 45 | + |
| 46 | +if [ "$COMPRESSION" == "true" ]; then |
| 47 | + STARTER_ARGS="${STARTER_ARGS} --all.http.compress-response-threshold=1" |
| 48 | +fi |
| 49 | + |
| 50 | +# data volume |
| 51 | +docker create -v /data --name arangodb-data alpine:3 /bin/true |
| 52 | +docker cp "$LOCATION"/jwtSecret arangodb-data:/data |
| 53 | +docker cp "$LOCATION"/server.pem arangodb-data:/data |
| 54 | + |
| 55 | +docker run -d \ |
| 56 | + --name=adb \ |
| 57 | + -p 8528:8528 \ |
| 58 | + --volumes-from arangodb-data \ |
| 59 | + -v /var/run/docker.sock:/var/run/docker.sock \ |
| 60 | + -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" \ |
| 61 | + $STARTER_DOCKER_IMAGE \ |
| 62 | + $STARTER_ARGS \ |
| 63 | + --docker.net-mode=default \ |
| 64 | + --docker.container=adb \ |
| 65 | + --auth.jwt-secret=/data/jwtSecret \ |
| 66 | + --starter.address="${GW}" \ |
| 67 | + --docker.image="${DOCKER_IMAGE}" \ |
| 68 | + --starter.local --starter.mode=${STARTER_MODE} --all.log.level=debug --all.log.output=+ --log.verbose \ |
| 69 | + --all.server.descriptors-minimum=1024 --all.javascript.allow-admin-execute=true |
| 70 | + |
| 71 | + |
| 72 | +wait_server() { |
| 73 | + # shellcheck disable=SC2091 |
| 74 | + until $(curl --output /dev/null --insecure --fail --silent --head -i -H "$AUTHORIZATION_HEADER" "$SCHEME://$1/_api/version"); do |
| 75 | + printf '.' |
| 76 | + sleep 1 |
| 77 | + done |
| 78 | +} |
| 79 | + |
| 80 | +echo "Waiting..." |
| 81 | + |
| 82 | +for a in ${COORDINATORS[*]} ; do |
| 83 | + wait_server "$a" |
| 84 | +done |
| 85 | + |
| 86 | +set +e |
| 87 | +for a in ${COORDINATORS[*]} ; do |
| 88 | + echo "" |
| 89 | + echo "Setting username and password..." |
| 90 | + docker run --rm ${DOCKER_IMAGE} arangosh --server.endpoint="$ARANGOSH_SCHEME://$a" --server.authentication=false --javascript.execute-string='require("org/arangodb/users").update("root", "test")' |
| 91 | +done |
| 92 | +set -e |
| 93 | + |
| 94 | +for a in ${COORDINATORS[*]} ; do |
| 95 | + echo "" |
| 96 | + echo "Requesting endpoint version..." |
| 97 | + curl -u root:test --insecure --fail "$SCHEME://$a/_api/version" |
| 98 | +done |
| 99 | + |
| 100 | +echo "" |
| 101 | +echo "" |
| 102 | +echo "Done, your deployment is reachable at: " |
| 103 | +for a in ${COORDINATORS[*]} ; do |
| 104 | + echo "$SCHEME://$a" |
| 105 | + echo "" |
| 106 | +done |
| 107 | + |
| 108 | +if [ "$STARTER_MODE" == "activefailover" ]; then |
| 109 | + LEADER=$("$LOCATION"/find_active_endpoint.sh) |
| 110 | + echo "Leader: $SCHEME://$LEADER" |
| 111 | + echo "" |
| 112 | +fi |
| 113 | + |
0 commit comments