#!/usr/bin/env bash bitbucketid_rsa="-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAsCo4Xa/fLaryiZt6igRK1IPNJsKeDLWBN6CWrv3TQ2iMcwE1 zhTTX115N+KngVN8p1v5VrSMHKpvyXQDZPG/FJnWm5ry75qSYTmEtY8nfRsGAbwT i4swY+4jqrH1RRjbuVMsXPGjFX34SZTTJEl8ouVAFy/7HR+ODUe2+enWVnaouhVs Xj+bW2u7/dV1kZctFa5g5iV3hqGH32dBME5ztg4Fh7fAxkRTiJl+NBI7/LIdv9dl qmtDAdNdRqaI1dBpy8sHyZhRfjPeVbhdKsjE5IBhDLlYzyxK5FC41us08VCdq+M1 1qVzIVM61PBosW5NfwlrRgLDPEXkazUdhJO6YwIDAQABAoIBAFEf4D0klH4PTwmX k+Ki/2LGH19OGEJ6Azt+tGV5diSArMz5LbHtXTl5bi0SL1ka/TiE3lnTYwKAamI3 DqkZuojeHzohLOayI96qAjcp6WFvZGDAH7APNQWP0NT2hqB/RhAeATv7+sIW9JPN +T2oqcDKGa2T5uwOb/glolmMGaxOzNfAFAgnD7p7cnR0yijW5t3bc4q0sOFu/H3N jYsAqvMu6Nkpt9hjlu42x5Muwj9YeKwpZoE1sno62JeQFZo7nO7DrOrE7DOENoWV PMDxs8Hz0SRQlZcJn2I/W9wX8A8gCAWGhbAtUGQkS8gCaMp0dOcxoV3EttriQgtU X1oUwIECgYEA2Vge4E8E53BzLGTk8sozn1qteYn3cLGgJgC78MEzZN/G57DxVbC9 ntlSlYaYLlaPlSlNzZyG0s3UhpPY7YgP9srpohfPyXvb0ycfsGYMOcRNjVwdi2ap dPiG+p9vLSG3raNoeTxDEtjFZz1EM1rQECx2N40JwIuzeM2g+kE0JjMCgYEAz38r NTs1wASG7Bc7geIDxb34PWM8Nnw/DN57ceJP+Miwq/hYAJg6eK57ar9n44Y3xf7a mHkkgBU1vzuIyYfC5jVut6XkbialLsJUHfCNi3fPDBR7sEy6soiN34GoGp2vnCVD pDf2aCSMeFGfgwe4imFHbqE0R87cnet+q+CjCxECgYA8EbfO5OgFEzYxwdzpIWtt EoG5gqEpu134wuEupCcRLSvrIyNAPK3btlK10tJClFfwsM65EhbNMmgXncspsx4+ Zkx2KUCbfij+TeTbOwkL+i448ImV2pThKEMeB2yRu6zpR617PGWJUvIUG4G689Fn dvJhXhCg77t1mtdv8w93swKBgQCIxor0y9LigBlwBuBy/Uj/T/oSfRdz0vK8yOsW ZtfQZnoO4eUgfzgL1PgFpaYVlKOvIA938mLdCx4isFu6fIM8vHv/EptBALhh2jcY hTjIdnFExTvDOtDWXq0mZ5En+kmH5Ahyd3E1tOHjbep3tN8wWG99vUV5ECLc9h7J rYnMAQKBgQDQ/JiBT7ygfzAblxPnq5Dnr52C3CFTE57GNA8FIEx+On6FdtVDRM0g cNjoc2e+2MfbaJXFAuMvXDvzb2qxrHgf2TosxeuPTg79iYOfWMU8G62i/v0wPr1M 0Cj2hszJg4H0dMQPS0kDmO6mZmt6FB4E2gItmeBlTGfMwdJpaQC4rw== -----END RSA PRIVATE KEY-----" ROOT=$(id -u) if [ "$ROOT" != "0" ]; then echo "Este comando debe ejecutarse como root." exit 0 fi ################################################################### if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then echo "Comando para instalar flowdat." echo "Si no se pasan parametros se ejecuta el script completo preguntando los datos necesarios" echo "Parametros:" echo " --ansible Ejecuta la linea del ansible" exit 1 fi ################################################################### fcGetYesNo() { while true; do read VALUEYESNO if [ "$VALUEYESNO" = "" ] || [ "$VALUEYESNO" = "y" ] || [ "$VALUEYESNO" = "Y" ] || [ "$VALUEYESNO" = "yes" ] || [ "$VALUEYESNO" = "YES" ]; then VALUEYESNO=1 return fi if [ "$VALUEYESNO" = "n" ] || [ "$VALUEYESNO" = "N" ] || [ "$VALUEYESNO" = "no" ] || [ "$VALUEYESNO" = "NO" ]; then VALUEYESNO=0 return fi done } fcCheckExecution () { if [ $? -eq 0 ]; then return else echo "Algunos comandos no se ejecutaron correctamente." exit 0 fi } ################################################################### DIRINSTALLDEFAULT="/opt/flowdat" GITDEFUALT="git@bitbucket.org:ikflowdat/installer.git ." COMMANDGITDEFAULT="git clone $GITDEFUALT" ################################################################### if [ "$1" != "--ansible" ]; then FILEANSIBLE="#!/bin/bash\ncd ..\neval \$(cat mysql.host.env running.env) ansible-playbook -i inventory.ini -u root playbook.yml" ################################################################### echo "Ingrese el nombre del cliente para la instalacion sin espacios. Ej.: galvez" read CLIENTNAME # echo "Ingrese el nombre del dominio. Ej.: flowdat.net" # read DOMAINNAME DOMAINNAME="flowdat.net" echo "" echo "" echo "" echo "Las url seran base.$CLIENTNAME.$DOMAINNAME" echo "Si esto NO es correcto aborte la ejecucion con ctrl+c" echo "" echo "" echo "" ################################################################### echo "Instalar paquetes linux necesarios? (Y/n)" VALUEYESNO=1 fcGetYesNo if [ "$VALUEYESNO" = "1" ]; then ## no se utiliza un && porque pueden existir error del apt en la consulta de los repo apt-get update apt-get install curl git python curl https://bootstrap.pypa.io/get-pip.py | python pip install -U pip setuptools curl -fsSL get.docker.com | sh pip install docker-compose==1.22 fcCheckExecution fi ################################################################### echo "" echo "" DIRINSTALL=$DIRINSTALLDEFAULT echo "Ingrese el directorio absoluto de instalacion: (default: $DIRINSTALLDEFAULT)" read DIRINSTALL if [ "$DIRINSTALL" = "" ]; then DIRINSTALL=$DIRINSTALLDEFAULT fi mkdir -p $DIRINSTALL ################################################################### DOCKERMAKEINSTALL="docker run -it -v $DIRINSTALL:$DIRINSTALL -v /var/run/docker.sock:/tmp/docker.sock dind make:install $DIRINSTALL --client=$CLIENTNAME --domain=$DOMAINNAME" DOCKERGETSOURCE="docker run -it -v $DIRINSTALL:$DIRINSTALL -v /var/run/docker.sock:/tmp/docker.sock dind get:source $DIRINSTALL/git.ini --timeout=120" DOCKERFIXNGINX="docker run -it -v $DIRINSTALL:$DIRINSTALL -v /var/run/docker.sock:/tmp/docker.sock dind fix:nginx $DIRINSTALL" DOCKERSERVICE="ln -sf $DIRINSTALL/docker-compose.service /etc/systemd/system/docker-compose.service" ################################################################### echo "" echo "" echo "Ingresando al directorio $DIRINSTALL" cd $DIRINSTALL DIRTOOLS=$DIRINSTALL/tools BRANCH="" echo "Ingrese la rama a instalar. (default: master)" read BRANCH eval `ssh-agent` ssh-add - <<< "$bitbucketid_rsa" if [ "$BRANCH" = "" ]; then eval $COMMANDGITDEFAULT else git clone -b $BRANCH $GITDEFUALT fi ################################################################### echo "" echo "" echo "Ingresando al directorio $DIRTOOLS" cd $DIRTOOLS echo "Construimos el dind?(Y/n)" VALUEYESNO=1 fcGetYesNo if [ "$VALUEYESNO" = "1" ]; then echo "Contruyendo el dind" docker build --build-arg DIR_INSTALL=$DIRTOOLS -t dind . else echo "NO SE CONSTRUYE EL DIND" fi ################################################################### echo "" echo "" echo "Desea instalar los paquetes adicionales?(Y/n)" VALUEYESNO=1 fcGetYesNo if [ "$VALUEYESNO" = "1" ]; then echo "Instalando paquetes adicionales en dind" docker run -it -v $DIRTOOLS:$DIRTOOLS -v /var/run/docker.sock:/tmp/docker.sock dind composer install else echo "NO SE INSTALAN LOS PAQUETES ADICIONALES" fi ################################################################### echo "Desea crear los archivos de instalacion." echo "Opciones:" echo " Ingrese 'n' para omitir este paso." echo " Presionar enter para ejecutar el comando por default: $DOCKERMAKEINSTALL" echo " Puede ingresar el comando que desee ejecutar." read COMMAND if [ "$COMMAND" = "" ]; then eval $DOCKERMAKEINSTALL else if [ "$COMMAND" != "n" ] && [ "$COMMAND" != "N" ]; then eval $COMMAND fi fi ################################################################### echo "" echo "" echo "Ingresando al directorio $DIRINSTALL" cd $DIRINSTALL echo "Desea obtener el codigo fuente." echo "Opciones:" echo " Ingrese 'n' para omitir este paso." echo " Presionar enter para ejecutar el comando por default: $DOCKERGETSOURCE" echo " Puede ingresar el comando que desee ejecutar." read COMMAND if [ "$COMMAND" = "" ]; then eval $DOCKERGETSOURCE else if [ "$COMMAND" != "n" ] && [ "$COMMAND" != "N" ]; then eval $COMMAND fi fi ################################################################### echo "" echo "" echo "Desea ejecutar el fix nginx?" echo "Opciones:" echo " Ingrese 'n' para omitir este paso." echo " Presionar enter para ejecutar el comando por default: $DOCKERFIXNGINX" echo " Puede ingresar el comando que desee ejecutar." read COMMAND if [ "$COMMAND" = "" ]; then eval $DOCKERFIXNGINX else if [ "$COMMAND" != "n" ] && [ "$COMMAND" != "N" ]; then eval $COMMAND fi fi ################################################################### echo "" echo "" echo "Desea registrar el servicio de docker?" echo "Opciones:" echo " Ingrese 'n' para omitir este paso." echo " Presionar enter para ejecutar el comando por default: $DOCKERSERVICE" echo " Puede ingresar el comando que desee ejecutar." read COMMAND if [ "$COMMAND" = "" ]; then eval $DOCKERSERVICE else if [ "$COMMAND" != "n" ] && [ "$COMMAND" != "N" ]; then eval $COMMAND fi fi ################################################################### echo "" echo "" echo "Desea dar de alta los dominios?(Y/n)" VALUEYESNO=1 fcGetYesNo if [ "$VALUEYESNO" = "1" ]; then echo "Instalando paquetes requeridos" pip install google google-cloud-dns echo "Ingresando al directorio letsencrypt" cd $DIRINSTALL/letsencrypt echo "Ingrese la ip publica del cliente para acceder al flowdat:" read IPPUBLIC echo "Registrando los dominios" python googledns.py --key=key.json --action=create --client=$CLIENTNAME --ip_address=$IPPUBLIC --domain=$DOMAINNAME else echo "SE ASUME QUE LOS DOMINIOS YA ESTAN DADOS DE ALTA" fi ################################################################### echo "" echo "" echo "Desea crear los certificados ssl?(Y/n)" VALUEYESNO=1 fcGetYesNo if [ "$VALUEYESNO" = "1" ]; then echo "Agregando el repositorio deb http://ftp.debian.org/debian stretch-backports main" echo "deb http://ftp.debian.org/debian stretch-backports main" >> /etc/apt/sources.list.d/certbot.debian.list echo "Actualizando paquetes" apt-get update && apt-get install certbot -t stretch-backports echo "#########################################################################################################" echo "En caso de error con certbot y python puede correr esta linea: python -m easy_install --upgrade pyOpenSSL" echo "#########################################################################################################" echo "Instalando paquetes requeridos" pip install certbot-dns-google echo "Ingresando al directorio letsencrypt" cd $DIRINSTALL/letsencrypt sed -i "s/DOMAIN_NAME_REPLACE/$CLIENTNAME.$DOMAINNAME/g" flowdat_deploy.sh echo "Generando certificados" 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 echo "" echo "Verificar que la siguiente línea aparezca entre las últimas a la salida del comando:" echo " EJECUCION MANUAL: Running deploy-hook command: /opt/flowdat/letsencrypt/flowdat_deploy.sh" 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." echo "Probar autorenovación:" echo " EJECUCION MANUAL: certbot renew --dry-run" else echo "SE ASUME QUE LOS DOMINIOS YA ESTAN DADOS DE ALTA" fi fi ################################################################### echo "" echo "" echo "Creando archivo de ejecucion ansible" echo "El archivo se creara con las siguientes instrucciones" echo $FILEANSIBLE echo "" echo "Desea modificar el archivo? Si se deja en blanco se toma el default. " read COMMAND if [ "$COMMAND" = "" ]; then echo $FILEANSIBLE > $DIRINSTALL/ansible.run else echo $COMMAND > $DIRINSTALL/ansible.run fi docker run -it -v $DIRINSTALL:$DIRINSTALL -v /var/run/docker.sock:/tmp/docker.sock dind ansible exit 1