-
Notifications
You must be signed in to change notification settings - Fork 0
/
rc.local
120 lines (102 loc) · 2.91 KB
/
rc.local
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/bin/bash
instalation_path="/home/ubuntu/grist"
temp_docker_file="/tmp/docker-params"
# Check if gristParameters file exists and is readable
if [ ! -r $instalation_path/gristParameters ]; then
echo "Error: gristParameters file does not exist or is not readable."
exit 1
fi
# Read variables from gristParameters file and write them to /tmp/docker-params
set -a
source "$instalation_path/gristParameters"
grep -v '^#' $instalation_path/gristParameters | xargs -n1 > $temp_docker_file
set +a
# Get token for accessing AWS EC2 metadata
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") || {
echo "Error: Failed to get token."
exit 1
}
# Get instance id
INSTANCE_ID=$(curl -H "X-aws-ec2-metadata-token: ${TOKEN}" http://169.254.169.254/latest/meta-data/instance-id) || {
echo "Error: Failed to get instance id."
exit 1
}
# Get domain
DOMAIN=$(curl -H "X-aws-ec2-metadata-token: ${TOKEN}" http://169.254.169.254/latest/meta-data/public-hostname) || {
echo "Error: Failed to get domain."
exit 1
}
DEX_SCRIPT=""
# Check if ADMIN_EMAIL is set. If not, use instance name as email domain
if [ -z "$EMAIL" ]; then
# Set email to default, persited value
EMAIL="[email protected]"
echo "EMAIL=$EMAIL" >> $temp_docker_file
else
DEX_SCRIPT="-v $instalation_path/dex.yaml:/custom/dex.yaml"
fi
# Check if EMAIL is set. If it is, use instance name as passowrd
PASSWORD_OPTION=""
if [ -n "$EMAIL" ]; then
PASSWORD_OPTION="-e PASSWORD=${INSTANCE_ID}"
fi
# Check if TEAM_NAME is set. If not, throw error
if [ -z "$TEAM" ]; then
echo "Error: TEAM is not set."
exit 1
fi
# Check if STORAGE is set. If not, throw error
if [ -z "$STORAGE" ]; then
echo "STORAGE environment variable not set."
exit 1
fi
# Optional parameters:
# URL to the app. If it's not set, use public URL
if [ -z "$URL" ]
then
echo "URL is not set. Using public URL"
URL="http://${DOMAIN}"
echo "URL=$URL" >> $temp_docker_file
echo "URL set to $URL"
fi
# Check if URL is https. If it is, set HTTPS=auto
HTTPS_OPTION=""
if [[ $URL == https://* ]]; then
HTTPS_OPTION="-e HTTPS=auto"
else
echo "https is not set"
fi
DOCKER_CMD="docker run \
-p 80:80 \
-p 443:443 \
--env-file "$temp_docker_file" \
-e GRIST_SANDBOX_FLAVOR=gvisor \
${PASSWORD_OPTION} \
${HTTPS_OPTION} \
-v ${STORAGE}:/persist \
${DEX_SCRIPT} \
--name grist \
--restart on-failure \
--quiet \
-d \
--pull always \
gristlabs/grist-omnibus"
# Check if --dryrun flag is set
if [ "$1" == "--dryrun" ]; then
echo "Running script in dry run mode."
echo "docker params file:"
cat $temp_docker_file
echo "The Docker command would be:"
echo "$DOCKER_CMD"
exit 0
fi
# STOP AND REMOVE ANY DOCKER INSTANCES IF ANY IS UP
CONTAINER_IDS=$(sudo docker ps -a -q)
if [ -n "$CONTAINER_IDS" ]; then
sudo docker rm -f $CONTAINER_IDS
fi
# DOCKER START
eval $DOCKER_CMD || {
echo "Error: Failed to start Docker container."
exit 1
}