Jean Sumara 29a483a80c Updated the version from mongo to 3.6 5 năm trước cách đây
..
keys e11741e5a6 ssh keys updated 6 năm trước cách đây
letsencrypt 68d7c2ea76 Fixed and implemented the path of hooks in letsencrypt 5 năm trước cách đây
mysql 80cfe81ed3 correcciones 7 năm trước cách đây
src 29a483a80c Updated the version from mongo to 3.6 5 năm trước cách đây
Dockerfile 7b7bc1ab82 New installer 6 năm trước cách đây
cmd.php 635b9e8310 test gitlab-ci 6 năm trước cách đây
composer acd94bcad0 Agregado de keys 6 năm trước cách đây
composer-update.sh 52b3327d42 Bugs 6 năm trước cách đây
composer.json 493e8ade02 Arreglo error de keys 6 năm trước cách đây
composer.lock 5a5ae02b82 Composer update 6 năm trước cách đây
composer.phar bb32b58a95 Reformateo de tools/src/DockerInventory-GetSource-MergeHostFile-Release 7 năm trước cách đây
composer.sh 5a77897c80 FD3-712 update dockerfile tools 6 năm trước cách đây
docker-compose.service c5c1be9d28 base#9 docker-compose.service file updated. Related to https://gitlab.com/interlink-sa/flowdat3/modules/base/issues/9 and https://gitlab.com/interlink-sa/flowdat3/documentation/issues/1 6 năm trước cách đây
execute.sh 0916401c5f fix clone gitlab repositories 6 năm trước cách đây
get_kea_files.sh 348bba927b Fix bugs 6 năm trước cách đây
get_supervisord_files.sh 348bba927b Fix bugs 6 năm trước cách đây
hosts 9d1a2fd40e The command make:installImages generates the /etc/hosts file for docker containers. Related to https://gitlab.com/interlink-sa/flowdat3/documentation/issues/2 6 năm trước cách đây
modules.gitlab.ini 76531a7e9a removed genieacs 5 năm trước cách đây
modules.ini 76531a7e9a removed genieacs 5 năm trước cách đây
mysql_scripts.sql 1d9bba3e5d Arreglos FD3-463 7 năm trước cách đây
playbook.yml 3db6407703 check if directory exists 6 năm trước cách đây
playbookSupport.yml 348bba927b Fix bugs 6 năm trước cách đây
playbookUpdateSupport.yml 348bba927b Fix bugs 6 năm trước cách đây
readme.md d522dd4dd2 readme.md edited online with Bitbucket 6 năm trước cách đây
repositories.ini 4bd891668b test gitlab-ci.yml 6 năm trước cách đây

readme.md

É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. Si se instala otra versión se rompe.

pip install docker-compose==1.22

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

Correr el comando de instalación del Docker dentro del Docker

pip install docker-compose==1.20

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

Documentación adicional acerca de Certificados Wildcard

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.
Cuando me conecto al servidor, debo conectarme con un ssh -A ... para pasarle mis credenciales actuales.
Primero debemos estar situados en el directorio /opt/flowdat/tools.
Ahora debemos modificar los archivos "composer.json" de cada módulo y ajustarlo a la versión deseada.
Este proceso ejecuta el composer update, por lo tanto se debe tener en cuenta que se debe ejecutar en alguna máquina que posea los dockers de los módulos creados.
Si no poseo instalado php (es mejor ejecutarlo de esta forma por el tema de permisos):
    Nos situamos en el directorio
        cd /opt/flowdat
    Ejecuto el dind pasando mis credenciales actuales al docker. Tomar como precaución, que debo tener cargada la de bitbucket de escritura
        docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind bash
    Cargar la key para escribir en bitbucket. Sino posee una, se puede cargar de la siguiente forma.
        eval $(ssh-agent); ssh-add /opt/flowdat/keys/gogs.drone.id_rsa
    Ejecuto la sentencia para cambiar el composer y actualizar el fuente
        php cmd.php composer:require ../modules.ini ik/* vX.Y.Z --composer_update=true --pull=master
    Una vez finalizado la generación de los composer json/lock, debemos hacer un commit de los cambios y para esto ejecutamos la sentencia
        php cmd.php make:tag:modules ../modules.ini vX.Y.Z

Si poseo instalado php:
    Para esto debemos ejecutar la siguiente sentencia
        php cmd.php composer:require ../modules.ini ik/* vX.Y.Z --composer_update=true --pull=master
    Una vez finalizado la generación de los composer json/lock, debemos hacer un commit de los cambios y para esto ejecutamos la sentencia
        php cmd.php make:tag:vendors ../modules.ini vX.Y.Z