-
Notifications
You must be signed in to change notification settings - Fork 21
/
install_ioticosgl.sh
executable file
·367 lines (270 loc) · 11.4 KB
/
install_ioticosgl.sh
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
#!/bin/bash
## --------------------------------------------------
## Gabriela Q. Pablo S. y Benjamín S. - IoTicos.org
## ---------------------------------------------------
## --------------------------------------------------
## ReymondRojasNúñez - IoTCostaRica -ISCORP2021
## Creditos: ioticos.org
## ---------------------------------------------------
## GRACIAS REYMOND!!!
rand-str()
{
# Return random alpha-numeric string of given LENGTH
#
# Usage: VALUE=$(rand-str $LENGTH)
# or: VALUE=$(rand-str)
local DEFAULT_LENGTH=64
local LENGTH=${1:-$DEFAULT_LENGTH}
LC_CTYPE=C tr -dc A-Za-z0-9 </dev/urandom | head -c $LENGTH
# -dc: delete complementary set == delete all except given set
}
clear
msg="
_____ _____ _ ___ __
\_ \___/__ (_) ___ ___ ___ / _ \ / /
/ /\/ _ \ / /\/ |/ __/ _ \/ __| / /_\// /
/\/ /_| (_) / / | | (_| (_) \__ \ / /_\\/ /___
\____/ \___/\/ |_|\___\___/|___/ \____/\____/
ioticoscr
"
tput setaf 128;
printf "$msg"
tput setaf 7;
printf "\n\n\nNecesitaremos algo de información para instalar este sistema\n\n"
printf "Verás entre paréntesis y en $(tput setaf 128)(este color)$(tput setaf 7) la opción por defecto que se selecciona presionando enter.\n"
printf "De lo contrario podrás ingresar manualmente la opción solicitada.\n"
printf "No te preocupes al final del cuestionario, verás un resumen antes de confirmar.\n\n\n"
read -p "Presiona enter para continuar..."
## ______________________________
## TIME ZONE
printf "\n\n⏳ Necesitamos configurar la zona horaria\n"
while [[ -z "$TZ" ]]
do
read -p " System Time Zone $(tput setaf 128)(UTC)$(tput setaf 7): " TZ
TZ=${TZ:-UTC}
echo " Selected Time Zone ► ${TZ} ✅"
done
## ______________________________
## MONGO
#username
printf "\n\n👤 Necesitamos crear un nombre de usuario para Mongo Db\n"
while [[ -z "$MONGO_USERNAME" ]]
do
read -p " Mongo User Name (admin): " MONGO_USERNAME
MONGO_USERNAME=${MONGO_USERNAME:-admin}
echo " Selected Mongo User Name ► ${MONGO_USERNAME} ✅"
done
#password
random_str=$(rand-str 20)
printf "\n\n🔐 Necesitamos crear una clave segura para Mongo Db\n"
while [[ -z "$MONGO_PASSWORD" ]]
do
read -p " Mongo Password $(tput setaf 128)(${random_str})$(tput setaf 7): " MONGO_PASSWORD
MONGO_PASSWORD=${MONGO_PASSWORD:-${random_str}}
echo " Selected Mongo Password ► ${MONGO_PASSWORD} ✅"
done
#port
printf "\n\n🔌 Selecciona un puerto para Mongo Db\n"
while [[ -z "$MONGO_PORT" ]]
do
read -p " Mongo Port $(tput setaf 128)(27017)$(tput setaf 7): " MONGO_PORT
MONGO_PORT=${MONGO_PORT:-27017}
echo " Selected Mongo Port ► ${MONGO_PORT} ✅"
done
## ______________________________
## EMQX
#Dashboard Password
random_str=$(rand-str 20)
printf "\n\n🔐 Necesitamos crear una clave para el Dashboard de EMQX \n"
while [[ -z "$EMQX_DEFAULT_USER_PASSWORD" ]]
do
read -p " EMQX Dashboard Password $(tput setaf 128)(${random_str})$(tput setaf 7): " EMQX_DEFAULT_USER_PASSWORD
EMQX_DEFAULT_USER_PASSWORD=${EMQX_DEFAULT_USER_PASSWORD:-${random_str}}
echo " Selected EMQX Dashboard Password ► ${EMQX_DEFAULT_USER_PASSWORD} ✅"
done
#EMQX API Password
random_str=$(rand-str 20)
printf "\n\n🔐 Necesitamos crear una clave para la API de EMQX \n"
while [[ -z "$EMQX_DEFAULT_APPLICATION_SECRET" ]]
do
read -p " EMQX API Password $(tput setaf 128)(${random_str})$(tput setaf 7): " EMQX_DEFAULT_APPLICATION_SECRET
EMQX_DEFAULT_APPLICATION_SECRET=${EMQX_DEFAULT_APPLICATION_SECRET:-${random_str}}
echo " Selected EMQX API Password ► ${EMQX_DEFAULT_APPLICATION_SECRET} ✅"
done
random_str=$(rand-str 20)
#MQTT SUPERUSER NAME
printf "\n\n👤 Necesitamos crear un superusuario para MQTT \n"
printf " Estas credenciales te permitirán conectarte con privilegios totales al broker mqtt. \n"
printf " Podrás publicar o suscribirte a cualquier tópico \n"
while [[ -z "$EMQX_NODE_SUPERUSER_USER" ]]
do
read -p " MQTT Superuser Name $(tput setaf 128)(${random_str})$(tput setaf 7): " EMQX_NODE_SUPERUSER_USER
EMQX_NODE_SUPERUSER_USER=${EMQX_NODE_SUPERUSER_USER:-${random_str}}
echo " Selected MQTT Superuser Name ► ${EMQX_NODE_SUPERUSER_USER} ✅"
done
#MQTT SUPERUSER PASSWORD
random_str=$(rand-str 20)
printf "\n\n🔐 Necesitamos crear la clave del superusuario MQTT \n"
while [[ -z "$EMQX_NODE_SUPERUSER_PASSWORD" ]]
do
read -p " MQTT Superuser Name $(tput setaf 128)(${random_str})$(tput setaf 7): " EMQX_NODE_SUPERUSER_PASSWORD
EMQX_NODE_SUPERUSER_PASSWORD=${EMQX_NODE_SUPERUSER_PASSWORD:-${random_str}}
echo " Selected MQTT Superuser Password ► ${EMQX_NODE_SUPERUSER_PASSWORD} ✅"
done
#EMQX API WEBHOOK TOKEN
random_str=$(rand-str 20)
printf "\n\n🔐 Necesitamos crear el token que enviará los requests desde EMQX a nuestros Webhooks \n"
while [[ -z "$EMQX_API_TOKEN" ]]
do
read -p " EMQX API WEBHOOK TOKEN $(tput setaf 128) (${random_str})$(tput setaf 7): " EMQX_API_TOKEN
EMQX_API_TOKEN=${EMQX_API_TOKEN:-${random_str}}
echo " Selected EMQX API WEB TOKEN ► ${EMQX_API_TOKEN} ✅"
done
## ______________________________
## FRONT
#DOMAIN
printf "\n\n🌐 Ingresa el dominio a donde se alojará este servicio. \n"
printf " Si todavía no tienes uno podrás ingresar la ip fija del VPS a donde lo estés instalando. \n"
printf " Luego podrás cambiarlo desde las variables de entorno. \n"
while [[ -z "$DOMAIN" ]]
do
read -p " (No http, No www | ex.-> mydomain.com) Dominio: " DOMAIN
echo " Selected Domain ► ${DOMAIN} ✅"
done
#IP
printf "\n\n🌐 Ingresa la ip pública del VPS. \n"
while [[ -z "$IP" ]]
do
read -p " IP: " IP
echo " Selected IP ► ${IP} ✅"
done
#SSL?
printf "\n\n🔐 El sistema está pensado para que un balanceador de cargas gestione los certificados SSL. \n"
printf " Si la plataforma estará bajo SSL utilizando balanceador de cargas o proporcionando certificados, selecciona 'Con SSL'. \n"
printf " Esto forzará la redirección SSL, además, el cliente web, se conectará al broker mqtt mediante websocket seguro. \n"
printf " Si de momento vas a acceder a la plataforma usando una ip, o un dominio sin ssl... selecciona 'Sin SSL'. \n\n"
PS3=' SSL?: '
options=("Con SSL" "Sin SSL")
select opt in "${options[@]}"
do
case $REPLY in
"1")
echo " SSL? ► ${character} ✅"
break
;;
"2")
echo " SSL? ► ${character} ✅"
break
;;
*) echo "invalid option $REPLY";;
esac
done
SSL=$REPLY
WSPREFIX=""
SSLREDIRECT=""
if [[ $SSL -eq 1 ]]
then
SSL="https://"
WSPREFIX="wss://"
MQTT_HOST=$DOMAIN
MQTT_PORT="8084"
SSLREDIRECT="true"
else
SSL="http://"
WSPREFIX="ws://"
MQTT_PORT="8083"
MQTT_HOST=$IP
SSLREDIRECT="false"
fi
msg="
__
/__\ ___ ___ _ _ _ __ ___ ___ _ __
/ \/// _ \/ __| | | | '_ \` _ \ / _ \ '_ \
/ _ \ __/\__ \ |_| | | | | | | __/ | | |
\/ \_/\___||___/\__,_|_| |_| |_|\___|_| |_|
"
tput setaf 128;
printf "$msg"
tput setaf 7;
printf "\n\n\n"
printf " 🟢 TIMEZONE: $(tput setaf 128)${TZ}$(tput setaf 7)\n"
printf " 🟢 MONGO USER: $(tput setaf 128)${MONGO_USERNAME}$(tput setaf 7)\n"
printf " 🟢 MONGO PASS: $(tput setaf 128)${MONGO_PASSWORD}$(tput setaf 7)\n"
printf " 🟢 MONGO PORT: $(tput setaf 128)${MONGO_PORT}$(tput setaf 7)\n"
printf " 🟢 EMQX API PASSWORD: $(tput setaf 128)${EMQX_DEFAULT_APPLICATION_SECRET}$(tput setaf 7)\n"
printf " 🟢 MQTT SUPERUSER: $(tput setaf 128)${EMQX_NODE_SUPERUSER_USER}$(tput setaf 7)\n"
printf " 🟢 MQTT SUPER PASS: $(tput setaf 128)${EMQX_NODE_SUPERUSER_PASSWORD}$(tput setaf 7)\n"
printf " 🟢 WEBHOOK WEB TOKEN: $(tput setaf 128)${EMQX_API_TOKEN}$(tput setaf 7)\n"
printf " 🟢 DOMAIN: $(tput setaf 128)${DOMAIN}$(tput setaf 7)\n"
printf " 🟢 IP: $(tput setaf 128)${IP}$(tput setaf 7)\n"
printf " 🟢 SSL?: $(tput setaf 128)${opt}$(tput setaf 7)\n"
printf "\n\n\n\n";
read -p "Presiona Enter para comenzar la instalación..."
sleep 2
sudo apt-get update
wget https://get.docker.com/
sudo mv index.html install_docker.sh
sudo chmod 777 install_docker.sh
sudo ./install_docker.sh
sudo rm install_docker.sh
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo git clone https://github.com/ioticos/ioticos_god_level_services.git
sudo mv ioticos_god_level_services services
cd services
## ______________________________
## INSALL INIT
filename='.env'
#SERVICES .ENV
sudo sh -c " echo 'environment=prod' >> $filename"
sudo sh -c " echo '' >> $filename"
sudo sh -c " echo '# TIMEZONE (all containers).' >> $filename"
sudo sh -c " echo 'TZ=${TZ}' >> $filename"
sudo sh -c " echo '' >> $filename"
sudo sh -c " echo '# M O N G O' >> $filename"
sudo sh -c " echo 'MONGO_USERNAME=${MONGO_USERNAME}' >> $filename"
sudo sh -c " echo 'MONGO_PASSWORD=${MONGO_PASSWORD}' >> $filename"
sudo sh -c " echo 'MONGO_EXT_PORT=${MONGO_PORT}' >> $filename"
sudo sh -c " echo '' >> $filename"
sudo sh -c " echo '# E M Q X' >> $filename"
sudo sh -c " echo 'EMQX_DEFAULT_USER_PASSWORD=${EMQX_DEFAULT_USER_PASSWORD}' >> $filename"
sudo sh -c " echo 'EMQX_DEFAULT_APPLICATION_SECRET=${EMQX_DEFAULT_APPLICATION_SECRET}' >> $filename"
sudo git clone https://github.com/ioticos/ioticos_god_level_app.git
sudo mv ioticos_god_level_app app
cd app
sudo sh -c "echo 'environment=prod' >> $filename"
sudo sh -c "echo '' >> $filename"
#A P I - N O D E
sudo sh -c "echo '#A P I - N O D E ' >> $filename"
sudo sh -c "echo 'API_PORT=3001' >> $filename"
sudo sh -c "echo 'WEBHOOKS_HOST=node' >> $filename"
sudo sh -c "echo 'MQTT_NOTIFICATION_HOST=${IP}' >> $filename"
sudo sh -c "echo '' >> $filename"
# M O N G O
sudo sh -c "echo '# M O N G O' >> $filename"
sudo sh -c "echo 'MONGO_USERNAME=${MONGO_USERNAME}' >> $filename"
sudo sh -c "echo 'MONGO_PASSWORD=${MONGO_PASSWORD}' >> $filename"
sudo sh -c "echo 'MONGO_HOST=mongo' >> $filename"
sudo sh -c "echo 'MONGO_PORT=${MONGO_PORT}' >> $filename"
sudo sh -c "echo 'MONGO_DATABASE=ioticos_god_level' >> $filename"
sudo sh -c "echo '' >> $filename"
# E M Q X
sudo sh -c " echo 'EMQX_DEFAULT_APPLICATION_SECRET=${EMQX_DEFAULT_APPLICATION_SECRET}' >> $filename"
sudo sh -c " echo 'EMQX_NODE_SUPERUSER_USER=${EMQX_NODE_SUPERUSER_USER}' >> $filename"
sudo sh -c " echo 'EMQX_NODE_SUPERUSER_PASSWORD=${EMQX_NODE_SUPERUSER_PASSWORD}' >> $filename"
sudo sh -c " echo 'EMQX_API_HOST=${IP}' >> $filename"
sudo sh -c " echo 'EMQX_API_TOKEN=${EMQX_API_TOKEN}' >> $filename"
sudo sh -c "echo 'EMQX_RESOURCES_DELAY=30000' >> $filename"
sudo sh -c "echo '' >> $filename"
# F R O N T
sudo sh -c "echo '# F R O N T' >> $filename"
sudo sh -c "echo 'APP_PORT=3000' >> $filename"
sudo sh -c "echo 'AXIOS_BASE_URL=${SSL}${DOMAIN}:3001/api' >> $filename"
sudo sh -c "echo 'MQTT_PORT=${MQTT_PORT}' >> $filename"
sudo sh -c "echo 'MQTT_HOST=${DOMAIN}' >> $filename"
sudo sh -c "echo 'MQTT_PREFIX=${WSPREFIX}' >> $filename"
sudo sh -c " echo 'SSLREDIRECT=${SSLREDIRECT}' >> $filename"
cd ..
sudo docker-compose -f docker_node_install.yml up
sudo docker-compose -f docker_nuxt_build.yml up
sudo docker-compose -f docker_compose_production.yml up -d