Skip to content

Commit 9586f3f

Browse files
Individual docker scripts (#1329)
* added initial versions of scripts to support generating docker scripts * updated container scripts * chore: Auto-format shell scripts with shfmt --------- Co-authored-by: Joshua S Brown <[email protected]>
1 parent f795118 commit 9586f3f

File tree

3 files changed

+518
-0
lines changed

3 files changed

+518
-0
lines changed

scripts/generate_datafed.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ else
5252
local_DATAFED_DATABASE_HOST=$(printenv DATAFED_DATABASE_HOST)
5353
fi
5454

55+
local_DATAFED_DATABASE_PORT=""
56+
if [[ -z "$DATAFED_DATABASE_PORT" ]]; then
57+
# Empty
58+
local_DATAFED_DATABASE_PORT="8529"
59+
else
60+
local_DATAFED_DATABASE_PORT=$(printenv DATAFED_DATABASE_PORT)
61+
fi
62+
5563
local_DATAFED_ZEROMQ_SESSION_SECRET=""
5664
if [ -z "${DATAFED_ZEROMQ_SESSION_SECRET}" ]; then
5765
local_DATAFED_ZEROMQ_SESSION_SECRET=""
@@ -238,6 +246,8 @@ export DATAFED_DATABASE_PASSWORD="$local_DATAFED_DATABASE_PASSWORD"
238246
# Host of the metadata database, can be a domain name
239247
# or an IP address.
240248
export DATAFED_DATABASE_HOST="$local_DATAFED_DATABASE_HOST"
249+
# i.e. 8529 - Arango port
250+
export DATAFED_DATABASE_PORT="$local_DATAFED_DATABASE_PORT"
241251
# The user account the datafed core application will run under
242252
export DATAFED_CORE_USER="$local_DATAFED_CORE_USER"
243253
Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
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

Comments
 (0)