#Requerimientos * curl * git * python * pip * docker * docker-compose * php/composer #Instalación de requerimientos: ### curl apt-get update && apt-get install curl git python ### pip # descargo el archivo get-pip.py desde una url curl https://bootstrap.pypa.io/get-pip.py | python # actualizo pip pip install -U pip ### docker (Versión funcional: apt-get install docker-ce=17.10.0~ce-0~debian - Versión con errores: 17.11 ) # con sudo curl -fsSL get.docker.com | sudo sh sudo usermod -aG docker iksop # con root curl -fsSL get.docker.com | sh usermod -aG docker iksop ### docker-compose pip install docker-compose # Pasos: ####. Crear un directorio para la instalación, puede ser en cualquier lugar del sistema. Tener en cuenta que en este directorio se descargará código fuente. mkdir flowdat ####. Entrar la directorio. cd flowdat ####. Descargar el fuente de instalación. # en código se descarga en el directorio actual git clone git@bitbucket.org:ikflowdat/installer.git . ####. Entrar la directorio tools. cd tools ####. Construir el docker que se utilizará durante la instalación. docker build --build-arg DIR_INSTALL=$(pwd) -t dind . # --build-arg: es la forma de pasarle parámetros al docker. # -t: es el nombre que tendrá el contenedor. # .: indica que el fuente se descargará en el directorio actual. # para más información de los parámetros ejecutar "docker build --help ####. Instalamos con composer elementos adicionales. docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind composer install # --build-arg: es la forma de pasarle parámetros al docker. # -t: es el nombre que tendrá el contenedor. # para más información de los parámetros ejecutar "docker build --help" ####. Crear los archivos necesarios para la instalción. Dentro del directorio actual se crea un nuevo directorio con el nombre de la empresa. docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind make:install $(pwd)/$CLIENT --client=$CLIENT # docker run: ejecuta un comando sobre el contenedor. # -it: significa que voy a tener un tty interativo. # -v $(pwd):$(pwd): monta como un volumen el directorio actual, en el contenedor bajo el mismo directorio. # -v /var/run/docker.sock:/tmp/docker.sock: comparte el docker.sock entre los docker's. # dind: es el nombre que le pusimos anteriormente al contenedor. # make:install: es el comando que se ejecuta dentro del docker para crear los archivos. # galvez: nombre de la empresa que estoy instalando. # --domain=galvez: es el nombre del dominio que se utilizará. El dominio final quedaría base.galvez.flowdat.com, ftth.galvez.flowdat.com, etc. # para mas informacion ejecutar "docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind make:install --help" ####. Obtener los fuentes desde bitbucket docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind get:source $(pwd)/git.ini --timeout=120 # docker run: ejecuta un comando sobre el contenedor. # -it: significa que voy a tener un tty interativo. # -v $(pwd):$(pwd): monta como un volumen el directorio actual, en el contenedor bajo el mismo directorio. # -v /var/run/docker.sock:/tmp/docker.sock: comparte el docker.sock entre los docker's. # dind: es el nombre que le pusimos anteriormente al contenedor. # get:source: es el comando que se ejecuta dentro del docker para obtener los fuentes. # galvez/git.ini: es el nombre del archivo que posee los directorios a descargar. # para mas informacion ejecutar "docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind get:source --help" ####. Renombramos los archivos innecesarios para el nginx. docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind fix:nginx $(pwd) # docker run: ejecuta un comando sobre el contenedor. # -it: significa que voy a tener un tty interativo. # -v $(pwd):$(pwd): monta como un volumen el directorio actual, en el contenedor bajo el mismo directorio. # -v /var/run/docker.sock:/tmp/docker.sock: comparte el docker.sock entre los docker's. # dind: es el nombre que le pusimos anteriormente al contenedor. # fix:nginx: es el comando que se ejecuta dentro del docker para obtener los fuentes. # galvez: nombre de la empresa que estoy instalando. ####. Entramos al docker para correr ansible y terminar la configuración docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind bash # docker run: ejecuta un comando sobre el contenedor. # -it: significa que voy a tener un tty interativo. # -v $(pwd):$(pwd): monta como un volumen el directorio actual, en el contenedor bajo el mismo directorio. # -v /var/run/docker.sock:/tmp/docker.sock: comparte el docker.sock entre los docker's. # dind: es el nombre que le pusimos anteriormente al contenedor. # bash: significa que se ejecutará un bash. ####. Una vez dentro del docker entramos al directorio de instalación. cd galvez ####. Corremos ansible para finalizar la configuración e instalación eval $(cat mysql.host.env running.env) ansible-playbook -i inventory.ini -u root playbook.yml # eval $(cat mysql.host.env running.env): se le pasa al ansible-playbook las variables de entorno definidas en los archivos mysql.host.env y running.env # -i inventory.ini: se el especifica el inventory.ini # -u root: le digo que se ejecutarán las acciones como el usuario "root" # playbook.yml: es el nombre del playbook a ejecutar ### Los container se levantan por systemctl ### Ejecutar fuera del dind ln -sf $(pwd)/docker-compose.service /etc/systemd/system/docker-compose.service systemctl enable docker-compose.service ## Unistalls #### Docker # con sudo sudo apt-get remove docker docker-engine docker.io docker-ce # con root apt-get remove docker docker-engine docker.io docker-ce ## Kernel update # agrego los repositorios echo "deb http://ftp.us.debian.org/debian/ jessie-backports main" >> /etc/apt/sources.list echo "deb-src http://ftp.us.debian.org/debian/ jessie-backports main" >> /etc/apt/sources.list # actualizo la version del kernel apt-get update ; apt-get install -t jessie-backports linux-image-amd64