|
@@ -1,5 +1,274 @@
|
|
|
+
|
|
|
Ésta guía se movió a https://ikflowdat.atlassian.net/wiki/spaces/FD3/pages/582811659/Instalar+Actualizar+Flowdat+3
|
|
|
|
|
|
+# 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
|
|
|
+```
|
|
|
+
|
|
|
+
|
|
|
# PROCEDIMIENTOS PARA GENERAR BRANCH'S Y TAG'S
|
|
|
## Branch y tag de módulos
|
|
|
##### OBSERVACIONES: debemos tener funcionando los dockers para que se puedan ejecutar los composer update.
|