|
@@ -1,270 +1,4 @@
|
|
|
-# Requerimientos
|
|
|
- * curl
|
|
|
- * git
|
|
|
- * python
|
|
|
- * pip
|
|
|
- * docker
|
|
|
- * docker-compose
|
|
|
- * php/composer
|
|
|
-
|
|
|
-# Instalación de requerimientos
|
|
|
-### curl
|
|
|
- apt-get update && apt-get install curl git python
|
|
|
- DIR_INSTALL=$(pwd) -t dind
|
|
|
-### 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 setuptools
|
|
|
-
|
|
|
-### 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 /opt/flowdat
|
|
|
-
|
|
|
-#### Entrar la directorio.
|
|
|
- cd /opt/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 instalación. Dentro del directorio actual se crea un nuevo directorio con el nombre de la empresa.
|
|
|
-
|
|
|
-**ATENCIÓN**: El siguiente comando requiere que se establezcan los parámetros **client** y **domain**, los cuales determinan la URL a la que deberá accederse para ingresar al sistema. **Si se omiten estos valores la instalación no funcionará**. Por ejemplo, si el cliente es "galvez" y el dominio es "flowdat.net" entonces:
|
|
|
-####. Poner el nombre del cliente, de lo contrario no va a funcionar correctamente!!!
|
|
|
-####. Cambiar --client=$CLIENT por alguno de los ejemplos
|
|
|
-
|
|
|
- docker run -it -v /opt/flowdat:/opt/flowdat -v /var/run/docker.sock:/tmp/docker.sock dind make:install /opt/flowdat --client=galvez --domain=flowdat.net
|
|
|
- # 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.
|
|
|
-
|
|
|
- # --client=NOMBRE-CLIENTE: Nombre de la empresa que estoy instalando.
|
|
|
- # --domain=DOMINIO-INSTALACION: es el nombre del dominio que se utilizará. El dominio final quedaría
|
|
|
- # base.NOMBRE-CLIENTE.DOMINIO-INSTALACION, ftth.DOMINIO-INSTALACION.flowdat.com, etc.
|
|
|
- # --add-nginx-links: permite crear links nginx en los servicios de los módulos web de FD3, sirve para instalaciones en modo desarrollo. Si no se agrega, por defecto no los crea.
|
|
|
- # para mas informacion ejecutar "docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind make:install --help"
|
|
|
-
|
|
|
-Esto hará que el sistema base quede instalado en base.galvez.flowdat.net.
|
|
|
-
|
|
|
-#### Una vez dentro del docker entramos al directorio de instalación.
|
|
|
- cd /opt/flowdat
|
|
|
-
|
|
|
-#### 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.
|
|
|
- # $(pwd)/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.
|
|
|
- # $(pwd): 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 /opt/flowdat
|
|
|
-
|
|
|
-#### 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 containers 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
|
|
|
-
|
|
|
-
|
|
|
-## Uninstalls
|
|
|
-#### 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
|
|
|
-
|
|
|
-#### Obtener un certificado wildcard para HTTP + SSL
|
|
|
- https://ikflowdat.atlassian.net/wiki/spaces/DL/pages/9469968
|
|
|
-
|
|
|
-## Alta de Dominios en Google Cloud DNS
|
|
|
-
|
|
|
-** Importante **: Correr estos comandos fuera del entorno de Docker.
|
|
|
-
|
|
|
-** Nota **: Al momento de escribir este documento, Google Cloud DNS unicamente soporta al dominio flowdat.net.
|
|
|
-
|
|
|
-Para crear los registros DNS correspondientes para el subdominio del cliente, correr los siguientes comandos:
|
|
|
-
|
|
|
-Instalar los módulos python necesarios:
|
|
|
-```
|
|
|
-pip install google google-cloud-dns
|
|
|
-```
|
|
|
-
|
|
|
-Cambiarse al directorio de herramientas de LetsEncrypt:
|
|
|
-```
|
|
|
-cd /opt/flowdat/letsencrypt
|
|
|
-```
|
|
|
-
|
|
|
-Correr el script:
|
|
|
-```
|
|
|
-python googledns.py --key=key.json --action=create --client=<NOMBRE-CLIENTE> --ip_address=<IP-CLIENTE> --domain=flowdat.net
|
|
|
-```
|
|
|
-Reemplazar NOMBRE-CLIENTE con el nombre utilizado durante la instalación (ej. "galvez") y IP-CLIENTE con la dirección IP del servidor en el cual se instaló Flowdat. Para detalles de otras funciones del script correr el mismo sin parámetros.
|
|
|
-
|
|
|
-## Obtención de certificado SSL de LetsEncrypt
|
|
|
-** Importante **: Correr estos comandos fuera del entorno de Docker.
|
|
|
-
|
|
|
-
|
|
|
-Antes de continuar, instalar Certbot (https://certbot.eff.org/)
|
|
|
-
|
|
|
-Asegurarse de tener instalado el módulo Python de google-dns para Certbot:
|
|
|
-```
|
|
|
-pip install certbot-dns-google
|
|
|
-```
|
|
|
-
|
|
|
-Cambiar al directorio de herramientas de letsencrypt:
|
|
|
-```
|
|
|
-cd /opt/flowdat/letsencrypt
|
|
|
-```
|
|
|
-
|
|
|
-Alterar el script de renovación para que funcione con nuestro dominio:
|
|
|
-```
|
|
|
-sed -i 's/DOMAIN_NAME_REPLACE/NOMBRE_DOMINIO/g' flowdat_deploy.sh
|
|
|
-```
|
|
|
-**IMPORTANTE**: Reemplazar NOMBRE_DOMINIO con el dominio del cliente, ej: galvez.flowdat.net.
|
|
|
-
|
|
|
-Correr certbot para obtener el certificado por primera vez:
|
|
|
-```
|
|
|
-certbot certonly --cert-name NOMBRE_DOMINIO --dns-google --dns-google-credentials /opt/flowdat/letsencrypt/key.json --server https://acme-v02.api.letsencrypt.org/directory -d "*.NOMBRE_DOMINIO" -d "NOMBRE_DOMINIO" --deploy-hook=/opt/flowdat/letsencrypt/flowdat_deploy.sh
|
|
|
-```
|
|
|
-**IMPORTANTE**: Reemplazar NOMBRE_DOMINIO con el dominio del cliente, ej: galvez.flowdat.net.
|
|
|
-
|
|
|
-Verificar que la siguiente línea aparezca entre las últimas a la salida del comando:
|
|
|
-```
|
|
|
-Running deploy-hook command: /opt/flowdat/letsencrypt/flowdat_deploy.sh
|
|
|
-```
|
|
|
-
|
|
|
-...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.
|
|
|
-
|
|
|
-Probar autorenovación:
|
|
|
-```
|
|
|
-certbot renew --dry-run
|
|
|
-```
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-## Errors
|
|
|
-#### Mysql no arranca
|
|
|
- Este es un problema de permisos del directorio mysql. Realizar un chmod fuera del docker.
|
|
|
-
|
|
|
-#### Unknown database 'mysql'
|
|
|
- Por alguna razón no se creo la base de datos de mysql.
|
|
|
- Ingreso al docker de mysql
|
|
|
- docker-compose exec mysql bash
|
|
|
- Paro el servicio de mysql
|
|
|
- service mysql stop
|
|
|
- Ingreso al directorio mysql
|
|
|
- cd /opt/flowdat/mysql
|
|
|
- Borro todos los archivos del directorio mysql
|
|
|
- rm -Rf *
|
|
|
- Inicializo nuevamente la base de datos de forma insegura. Sin password para root
|
|
|
- mysqld --initialize-insecure
|
|
|
- Verifico que pueda acceder al mysql. Cuando pide el password lo dejamos en blando
|
|
|
- mysql -u root -p
|
|
|
- Sino podemos entrar, entonces hay que reiniciar el password
|
|
|
- apt update && apt install vi
|
|
|
- su mysql
|
|
|
-
|
|
|
- 235r2342gtfsw
|
|
|
- Cambiar el password de root, seguimos com el ejemplo
|
|
|
-
|
|
|
- Salgo del docker
|
|
|
- exit
|
|
|
- Ejecuto nuevamente el playbook (ansible)
|
|
|
-
|
|
|
-#### Pantalla en blanco al ingresar a base luego de una instalación nueva
|
|
|
-Por algún motivo Base no es capaz de alterar los permisos de la caché durante la instalación.
|
|
|
-Cambiar los permisos mediante:
|
|
|
-
|
|
|
-```
|
|
|
- cd /opt/flowdat/base
|
|
|
- chmod -R 777 var/cache/ var/logs/ var/sessions/
|
|
|
-```
|
|
|
-
|
|
|
-#### No aparece el logo de Flowdat en el login y en otras pantallas
|
|
|
-
|
|
|
-Por alguna razón los assets manejados por assetic no se copian durante la instalación.
|
|
|
-Ingresar al container Base:
|
|
|
-```
|
|
|
- cd /opt/flowdat/
|
|
|
- docker-compose exec base bash
|
|
|
-```
|
|
|
-Luego correr:
|
|
|
-```
|
|
|
- bin/console assetic:dump
|
|
|
-```
|
|
|
-
|
|
|
+Ésta guía se movió a https://ikflowdat.atlassian.net/wiki/spaces/FD3/pages/582811659/Instalar+Actualizar+Flowdat+3
|
|
|
|
|
|
# PROCEDIMIENTOS PARA GENERAR BRANCH'S Y TAG'S
|
|
|
## Branch y tag de módulos
|