installModules.sh 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. #!/usr/bin/env bash
  2. bitbucketid_rsa="-----BEGIN RSA PRIVATE KEY-----
  3. MIIEpAIBAAKCAQEAsCo4Xa/fLaryiZt6igRK1IPNJsKeDLWBN6CWrv3TQ2iMcwE1
  4. zhTTX115N+KngVN8p1v5VrSMHKpvyXQDZPG/FJnWm5ry75qSYTmEtY8nfRsGAbwT
  5. i4swY+4jqrH1RRjbuVMsXPGjFX34SZTTJEl8ouVAFy/7HR+ODUe2+enWVnaouhVs
  6. Xj+bW2u7/dV1kZctFa5g5iV3hqGH32dBME5ztg4Fh7fAxkRTiJl+NBI7/LIdv9dl
  7. qmtDAdNdRqaI1dBpy8sHyZhRfjPeVbhdKsjE5IBhDLlYzyxK5FC41us08VCdq+M1
  8. 1qVzIVM61PBosW5NfwlrRgLDPEXkazUdhJO6YwIDAQABAoIBAFEf4D0klH4PTwmX
  9. k+Ki/2LGH19OGEJ6Azt+tGV5diSArMz5LbHtXTl5bi0SL1ka/TiE3lnTYwKAamI3
  10. DqkZuojeHzohLOayI96qAjcp6WFvZGDAH7APNQWP0NT2hqB/RhAeATv7+sIW9JPN
  11. +T2oqcDKGa2T5uwOb/glolmMGaxOzNfAFAgnD7p7cnR0yijW5t3bc4q0sOFu/H3N
  12. jYsAqvMu6Nkpt9hjlu42x5Muwj9YeKwpZoE1sno62JeQFZo7nO7DrOrE7DOENoWV
  13. PMDxs8Hz0SRQlZcJn2I/W9wX8A8gCAWGhbAtUGQkS8gCaMp0dOcxoV3EttriQgtU
  14. X1oUwIECgYEA2Vge4E8E53BzLGTk8sozn1qteYn3cLGgJgC78MEzZN/G57DxVbC9
  15. ntlSlYaYLlaPlSlNzZyG0s3UhpPY7YgP9srpohfPyXvb0ycfsGYMOcRNjVwdi2ap
  16. dPiG+p9vLSG3raNoeTxDEtjFZz1EM1rQECx2N40JwIuzeM2g+kE0JjMCgYEAz38r
  17. NTs1wASG7Bc7geIDxb34PWM8Nnw/DN57ceJP+Miwq/hYAJg6eK57ar9n44Y3xf7a
  18. mHkkgBU1vzuIyYfC5jVut6XkbialLsJUHfCNi3fPDBR7sEy6soiN34GoGp2vnCVD
  19. pDf2aCSMeFGfgwe4imFHbqE0R87cnet+q+CjCxECgYA8EbfO5OgFEzYxwdzpIWtt
  20. EoG5gqEpu134wuEupCcRLSvrIyNAPK3btlK10tJClFfwsM65EhbNMmgXncspsx4+
  21. Zkx2KUCbfij+TeTbOwkL+i448ImV2pThKEMeB2yRu6zpR617PGWJUvIUG4G689Fn
  22. dvJhXhCg77t1mtdv8w93swKBgQCIxor0y9LigBlwBuBy/Uj/T/oSfRdz0vK8yOsW
  23. ZtfQZnoO4eUgfzgL1PgFpaYVlKOvIA938mLdCx4isFu6fIM8vHv/EptBALhh2jcY
  24. hTjIdnFExTvDOtDWXq0mZ5En+kmH5Ahyd3E1tOHjbep3tN8wWG99vUV5ECLc9h7J
  25. rYnMAQKBgQDQ/JiBT7ygfzAblxPnq5Dnr52C3CFTE57GNA8FIEx+On6FdtVDRM0g
  26. cNjoc2e+2MfbaJXFAuMvXDvzb2qxrHgf2TosxeuPTg79iYOfWMU8G62i/v0wPr1M
  27. 0Cj2hszJg4H0dMQPS0kDmO6mZmt6FB4E2gItmeBlTGfMwdJpaQC4rw==
  28. -----END RSA PRIVATE KEY-----"
  29. ROOT=$(id -u)
  30. if [ "$ROOT" != "0" ];
  31. then
  32. echo "Este comando debe ejecutarse como root."
  33. exit 0
  34. fi
  35. ###################################################################
  36. if [ "$1" = "-h" ] || [ "$1" = "--help" ];
  37. then
  38. echo "Comando para instalar flowdat."
  39. echo "Si no se pasan parametros se ejecuta el script completo preguntando los datos necesarios"
  40. echo "Parametros:"
  41. echo " --ansible Ejecuta la linea del ansible"
  42. exit 1
  43. fi
  44. ###################################################################
  45. fcGetYesNo() {
  46. while true;
  47. do
  48. read VALUEYESNO
  49. if [ "$VALUEYESNO" = "" ] || [ "$VALUEYESNO" = "y" ] || [ "$VALUEYESNO" = "Y" ] || [ "$VALUEYESNO" = "yes" ] || [ "$VALUEYESNO" = "YES" ];
  50. then
  51. VALUEYESNO=1
  52. return
  53. fi
  54. if [ "$VALUEYESNO" = "n" ] || [ "$VALUEYESNO" = "N" ] || [ "$VALUEYESNO" = "no" ] || [ "$VALUEYESNO" = "NO" ];
  55. then
  56. VALUEYESNO=0
  57. return
  58. fi
  59. done
  60. }
  61. fcCheckExecution () {
  62. if [ $? -eq 0 ];
  63. then
  64. return
  65. else
  66. echo "Algunos comandos no se ejecutaron correctamente."
  67. exit 0
  68. fi
  69. }
  70. ###################################################################
  71. DIRINSTALLDEFAULT="/opt/flowdat"
  72. GITDEFUALT="git@bitbucket.org:ikflowdat/installer.git ."
  73. COMMANDGITDEFAULT="git clone $GITDEFUALT"
  74. FILEANSIBLE="#!/bin/bash\ncd ..\neval \$(cat mysql.host.env running.env) ansible-playbook -i inventory.ini -u root playbook.yml"
  75. ###################################################################
  76. if [ "$1" != "--ansible" ];
  77. then
  78. echo "Ingrese el nombre del cliente para la instalacion sin espacios. Ej.: galvez"
  79. read CLIENTNAME
  80. DOMAINNAME="flowdat.net"
  81. echo ""
  82. echo ""
  83. echo ""
  84. echo "Las url seran base.$CLIENTNAME.$DOMAINNAME"
  85. echo "Si esto NO es correcto aborte la ejecucion con ctrl+c"
  86. echo ""
  87. echo ""
  88. echo ""
  89. ###################################################################
  90. echo "Instalar paquetes linux necesarios? (Y/n)"
  91. VALUEYESNO=1
  92. fcGetYesNo
  93. if [ "$VALUEYESNO" = "1" ];
  94. then
  95. ## no se utiliza un && porque pueden existir error del apt en la consulta de los repo
  96. apt-get update
  97. apt-get install curl git python
  98. curl https://bootstrap.pypa.io/get-pip.py | python
  99. pip install -U pip setuptools
  100. curl -fsSL get.docker.com | sh
  101. pip install docker-compose==1.22
  102. fcCheckExecution
  103. fi
  104. ###################################################################
  105. echo ""
  106. echo ""
  107. DIRINSTALL=$DIRINSTALLDEFAULT
  108. echo "Ingrese el directorio absoluto de instalacion: (default: $DIRINSTALLDEFAULT)"
  109. read DIRINSTALL
  110. if [ "$DIRINSTALL" = "" ];
  111. then
  112. DIRINSTALL=$DIRINSTALLDEFAULT
  113. fi
  114. mkdir -p $DIRINSTALL
  115. ###################################################################
  116. DOCKERMAKEINSTALL="docker run -it -v $DIRINSTALL:$DIRINSTALL -v /var/run/docker.sock:/tmp/docker.sock dind make:install $DIRINSTALL --client=$CLIENTNAME --domain=$DOMAINNAME"
  117. DOCKERGETSOURCE="docker run -it -v $DIRINSTALL:$DIRINSTALL -v /var/run/docker.sock:/tmp/docker.sock dind get:source $DIRINSTALL/git.ini --timeout=120"
  118. DOCKERFIXNGINX="docker run -it -v $DIRINSTALL:$DIRINSTALL -v /var/run/docker.sock:/tmp/docker.sock dind fix:nginx $DIRINSTALL"
  119. DOCKERSERVICE="ln -sf $DIRINSTALL/docker-compose.service /etc/systemd/system/docker-compose.service"
  120. ###################################################################
  121. echo ""
  122. echo ""
  123. echo "Ingresando al directorio $DIRINSTALL"
  124. cd $DIRINSTALL
  125. DIRTOOLS=$DIRINSTALL/tools
  126. BRANCH=""
  127. echo "Ingrese la rama a instalar. (default: master)"
  128. read BRANCH
  129. eval `ssh-agent`
  130. ssh-add - <<< "$bitbucketid_rsa"
  131. if [ "$BRANCH" = "" ];
  132. then
  133. eval $COMMANDGITDEFAULT
  134. else
  135. git clone -b $BRANCH $GITDEFUALT
  136. fi
  137. ###################################################################
  138. echo ""
  139. echo ""
  140. echo "Ingresando al directorio $DIRTOOLS"
  141. cd $DIRTOOLS
  142. echo "Construimos el dind?(Y/n)"
  143. VALUEYESNO=1
  144. fcGetYesNo
  145. if [ "$VALUEYESNO" = "1" ];
  146. then
  147. echo "Contruyendo el dind"
  148. docker build --build-arg DIR_INSTALL=$DIRTOOLS -t dind .
  149. else
  150. echo "NO SE CONSTRUYE EL DIND"
  151. fi
  152. ###################################################################
  153. echo ""
  154. echo ""
  155. echo "Desea instalar los paquetes adicionales?(Y/n)"
  156. VALUEYESNO=1
  157. fcGetYesNo
  158. if [ "$VALUEYESNO" = "1" ];
  159. then
  160. echo "Instalando paquetes adicionales en dind"
  161. docker run -it -v $DIRTOOLS:$DIRTOOLS -v /var/run/docker.sock:/tmp/docker.sock dind composer install
  162. else
  163. echo "NO SE INSTALAN LOS PAQUETES ADICIONALES"
  164. fi
  165. ###################################################################
  166. echo ""
  167. echo ""
  168. echo "Desea crear los archivos de instalacion."
  169. echo "Opciones:"
  170. echo " Ingrese 'n' para omitir este paso."
  171. echo " Presionar enter para ejecutar el comando por default: $DOCKERMAKEINSTALL"
  172. echo " Puede ingresar el comando que desee ejecutar."
  173. read COMMAND
  174. if [ "$COMMAND" = "" ];
  175. then
  176. eval $DOCKERMAKEINSTALL
  177. else
  178. if [ "$COMMAND" != "n" ] && [ "$COMMAND" != "N" ];
  179. then
  180. eval $COMMAND
  181. fi
  182. fi
  183. ###################################################################
  184. echo ""
  185. echo ""
  186. echo "Ingresando al directorio $DIRINSTALL"
  187. cd $DIRINSTALL
  188. echo "Desea obtener el codigo fuente."
  189. echo "Opciones:"
  190. echo " Ingrese 'n' para omitir este paso."
  191. echo " Presionar enter para ejecutar el comando por default: $DOCKERGETSOURCE"
  192. echo " Puede ingresar el comando que desee ejecutar."
  193. read COMMAND
  194. if [ "$COMMAND" = "" ];
  195. then
  196. eval $DOCKERGETSOURCE
  197. else
  198. if [ "$COMMAND" != "n" ] && [ "$COMMAND" != "N" ];
  199. then
  200. eval $COMMAND
  201. fi
  202. fi
  203. ###################################################################
  204. echo ""
  205. echo ""
  206. echo "Desea ejecutar el fix nginx?"
  207. echo "Opciones:"
  208. echo " Ingrese 'n' para omitir este paso."
  209. echo " Presionar enter para ejecutar el comando por default: $DOCKERFIXNGINX"
  210. echo " Puede ingresar el comando que desee ejecutar."
  211. read COMMAND
  212. if [ "$COMMAND" = "" ];
  213. then
  214. eval $DOCKERFIXNGINX
  215. else
  216. if [ "$COMMAND" != "n" ] && [ "$COMMAND" != "N" ];
  217. then
  218. eval $COMMAND
  219. fi
  220. fi
  221. ###################################################################
  222. echo ""
  223. echo ""
  224. echo "Desea registrar el servicio de docker?"
  225. echo "Opciones:"
  226. echo " Ingrese 'n' para omitir este paso."
  227. echo " Presionar enter para ejecutar el comando por default: $DOCKERSERVICE"
  228. echo " Puede ingresar el comando que desee ejecutar."
  229. read COMMAND
  230. if [ "$COMMAND" = "" ];
  231. then
  232. eval $DOCKERSERVICE
  233. else
  234. if [ "$COMMAND" != "n" ] && [ "$COMMAND" != "N" ];
  235. then
  236. eval $COMMAND
  237. fi
  238. fi
  239. ###################################################################
  240. echo ""
  241. echo ""
  242. echo "Desea dar de alta los dominios?(Y/n)"
  243. VALUEYESNO=1
  244. fcGetYesNo
  245. if [ "$VALUEYESNO" = "1" ];
  246. then
  247. echo "Instalando paquetes requeridos"
  248. pip install google google-cloud-dns
  249. echo "Ingresando al directorio letsencrypt"
  250. cd $DIRINSTALL/letsencrypt
  251. echo "Ingrese la ip publica del cliente para acceder al flowdat:"
  252. read IPPUBLIC
  253. echo "Registrando los dominios"
  254. python googledns.py --key=key.json --action=create --client=$CLIENTNAME --ip_address=$IPPUBLIC --domain=$DOMAINNAME
  255. else
  256. echo "SE ASUME QUE LOS DOMINIOS YA ESTAN DADOS DE ALTA"
  257. fi
  258. ###################################################################
  259. echo ""
  260. echo ""
  261. echo "Desea crear los certificados ssl?(Y/n)"
  262. VALUEYESNO=1
  263. fcGetYesNo
  264. if [ "$VALUEYESNO" = "1" ];
  265. then
  266. echo "Agregando el repositorio deb http://ftp.debian.org/debian stretch-backports main"
  267. echo "deb http://ftp.debian.org/debian stretch-backports main" >> /etc/apt/sources.list.d/certbot.debian.list
  268. echo "Actualizando paquetes"
  269. apt-get update && apt-get install certbot -t stretch-backports
  270. echo "#########################################################################################################"
  271. echo "En caso de error con certbot y python puede correr esta linea: python -m easy_install --upgrade pyOpenSSL"
  272. echo "#########################################################################################################"
  273. echo "Instalando paquetes requeridos"
  274. pip install certbot-dns-google
  275. echo "Ingresando al directorio letsencrypt"
  276. cd $DIRINSTALL/letsencrypt
  277. sed -i "s/DOMAIN_NAME_REPLACE/$CLIENTNAME.$DOMAINNAME/g" flowdat_deploy.sh
  278. echo "Generando certificados"
  279. certbot certonly --cert-name $CLIENTNAME.$DOMAINNAME --dns-google --dns-google-credentials $DIRINSTALL/letsencrypt/key.json --server https://acme-v02.api.letsencrypt.org/directory -d "*.$CLIENTNAME.$DOMAINNAME" -d "$CLIENTNAME.$DOMAINNAME" --deploy-hook=$DIRINSTALL/letsencrypt/flowdat_deploy.sh
  280. echo ""
  281. echo "Verificar que la siguiente línea aparezca entre las últimas a la salida del comando:"
  282. echo " EJECUCION MANUAL: Running deploy-hook command: /opt/flowdat/letsencrypt/flowdat_deploy.sh"
  283. echo "la cual indica que el hook se ejecutó. Eso significa que los certificados deberían haberse copiado a la carpeta de Nginx. Verificar con el navegador que el sitio web sea seguro."
  284. echo "Probar autorenovación:"
  285. echo " EJECUCION MANUAL: certbot renew --dry-run"
  286. else
  287. echo "SE ASUME QUE LOS DOMINIOS YA ESTAN DADOS DE ALTA"
  288. fi
  289. fi
  290. ###################################################################
  291. echo ""
  292. echo ""
  293. echo "Creando archivo de ejecucion ansible"
  294. echo "El archivo se creara con las siguientes instrucciones"
  295. echo $FILEANSIBLE
  296. echo ""
  297. echo "Desea modificar el archivo? Si se deja en blanco se toma el default. Sino ingrese las lineas para crear el archivo de ejecucion"
  298. read COMMAND
  299. if [ "$COMMAND" = "" ];
  300. then
  301. echo -e $FILEANSIBLE > $DIRINSTALL/ansible.run
  302. else
  303. echo -e $COMMAND > $DIRINSTALL/ansible.run
  304. fi
  305. docker run -it -v $DIRINSTALL:$DIRINSTALL -v /var/run/docker.sock:/tmp/docker.sock dind ansible
  306. exit 1