Prechádzať zdrojové kódy

Se volvio a poner el readme para I+D

Gabriel Gosparo 6 rokov pred
rodič
commit
4fd8f98c0b
1 zmenil súbory, kde vykonal 269 pridanie a 0 odobranie
  1. 269 0
      tools/readme.md

+ 269 - 0
tools/readme.md

@@ -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.