Tutoriales

¿Cómo desplegar la Onesait Platform Community Edition con Docker y Docker Compose?

Aprovechando que hemos liberado la versión 2.0.0 de la Community Edition de nuestra Plataforma, queremos explicaros cómo desplegarla usando contenedores en Docker y usando Docker Compose.

Antes de nada, tenemos que cumplir ciertos requisitos previos para poder llevar esto a cabo.

Prerrequisitos

Para levantar la versión Community Edition (CE en adelante) en un entorno, deberemos tener en cuenta los siguiente prerrequisitos:

Tener Docker instalado

Aunque suene a algo demasiado evidente, es preciso tener instalado Docker en la máquina donde se quiere ejecutar la versión CE de la Onesait Platform.

Para instalar Docker, sólo hay que descargarlo desde la página oficial y seguir los pasos de instalación que se indiquen.

Tener Docker Compose instalado

Pues si, también es necesario que lo tengamos instalado de antemano en la máquina en donde realizar la instalación.

Como en el caso anterior, podéis descargarlo desde la página de Docker.

Aquí debes saber algo importante: una vez tengamos instalado Docker, tanto en entornos Windows como macOS será necesario aumentar la memoria asignada al servicio de Docker. Os recomendamos que, al menos, ampliéis la memoria a 8GB, e indiquéis al menos 2GB de swap.

Asignación de memoria en entorno Windows.
Asignación de memoria en entorno macOS.

Entorno Windows: tener la configuración del sistema de ficheros compartidos de docker adecuada

En el caso de Docker para Windows, éste utiliza una configuración de sistema de archivos compartidos, para lo cual hace falta establecer las credenciales de usuario (permisos sobre el sistema de ficheros). Esta configuración se puede cambiar en Settings > Reset Credentials.

Pantalla de configuración de credenciales de Docker.

Bueno, pues una vez que cumplamos con estos requisitos es posible llevar a cabo el despliegue de la Plataforma.

Despliegue

Nos metemos en harina. Realizaremos el despliegue llevando a cabo los siguientes pasos:

1.- Descargar los ficheros de Docker Compose para levantar los servicios de la Plataforma

Estos ficheros, en formato yml, se encuentran en el repositorio de la Plataforma en nuestro GitHub.

Front de la Onesait Platform CE en GitHub.

Para obtenerlos, es necesario clonar el repositorio en local y posicionarnos en la rama «master». Esto lo conseguiremos mediante las siguientes líneas de comando:

git clone https://github.com/onesaitplatform/onesait-cloud-platform-community-deploy.git
cd onesait-cloud-platform-community-deploy
git fetch origin master
git checkout master

2.- Levantar los servicios de persistencia

Habrá que situarse en el directorio donde se encuentra el archivo docker-compose.yml, que es el encargado de levantar los servicios de bases de datos. Esto se hará con esta línea de comando:

cd onesait-cloud-platform-community-deploy/op_data

Una vez en dicho directorio, deberíamos poder ver los siguientes archivos:

Contenido de la carpeta con los archivos *.yml

Analizando el archivo de entornos «.env», hay que asegurarse de que las claves tienen los siguientes valores:

clavevalor
MODULE_TAG2.0.0-ce
MONGO_TAGlatest-noauth
PERSISTENCE_TAGmariadb
QUASAR_TAG14
REPOSITORYregistry.hub.docker.com
Tabla de valores de configuración de entorno.

Respecto al archivo «docker-compose.yml», en el caso de que queramos levantar las bases de datos sin persistencia, ejecutaremos desde un terminal el siguiente comando en el mismo directorio donde se encuentra el fichero:

docker-compose up -d

Mucho ojo con esta última opción, ya que en el caso de levantar las bases de datos en modo efímero, al parar los servicios con docker-compose down, perderemos todos los datos.

En el caso de que queramos persistir las bases de datos, en el fichero «.env» pondremos los directorios de nuestra máquina donde queramos alojar los datos, ya que por defecto no tienen valor asignado. Como ejemplo se podría poner:

clavevalor
CONFIGDB_VOLUME/Users/devopsuser/configdbdata
REALTIME_VOLUME/Users/devopsuser/realtimedbdata
Tabla con una configuración de ejemplo de persistencia.

Seguidamente levantaremos el «docker-compose.persistent.yml» utilizando el siguiente comando en la consola:

docker-compose -f docker-compose.persistent.yml up -d

Una vez que se encuentren levantadas las bases de datos, podremos ver en que estado se encuentran utilizando siguiente comando:

docker ps

Seguidamente, deberíamos poder ver una salida como la que mostramos a continuación, en la que se comprueba que se encuentran lanzados «configdb», «realtimedb» y «quasar».

Ampliar la imagen para verlo mejor.

Por último, en caso de que nos interese ver los registros de un contenedor de la base de datos, sólo tendremos que ejecutar uno de los siguientes comandos:

docker logs <container_name>

docker logs -f <container_name> (-f equivale a un tail)

3.- Poblar de datos las bases de datos

En el mismo directorio en el que nos encontramos, «onesait-cloud-platform-community-deploy/op_data», hay otro fichero docker-compose encargado de levantar el servicio de carga inicial de datos.

En caso de configurar la Plataforma mediante el hostname de la máquina, se debe reeemplazar «localhost» en la variable «SERVER_NAME» del archivo docker-compose.yml por el hostname de la máquina.

Seguidamente y como ya se ha hecho previamente, se ejecutará el siguiente comando:

docker-compose -f docker-compose.initdb.yml up

Hecho esto debería de ejecutarse el ConfigInit de la Plataforma.

En este caso no se ha incluido la flag -d (detached mode) ya que el propio servicio se detiene una vez acabada su tarea.

Cuando termine, se debería lanzar en una segunda vez para poblar la realtimedb, cambiando en el fichero «docker-compose.initdb.yml» la variable «LOADMONGODB» a valor «true».

docker-compose -f docker-compose.initdb.yml up

4.- Levantar los módulos de la Plataforma

De la misma manera que hicimos con los servicios de persistencia, vamos a levantar los distintos módulos de la Plataforma con el docker-compose, por orden de arranque, y en el directorio «onesait-cloud-platform-community-deploy/op-modules».

Estos módulos son los siguientes:

Modules list

Cada uno de los directorios contiene dos archivos; el «.env» y el «docker-compose.yml».

Para el primer archivo, el «.env», habrá que comprobar que tiene los siguientes valores definidos:

clavevalordescripción
REPOSITORYregistry.hub.docker.com  registro con la imagen del servicio
SERVERNAMElocalhosthostname de la máquina anfitriona
MODULE_TAG2.0.0-ceetiqueta de la imagen del servicio

Respecto al segundo, el «docker-compose.yml» contiene la descripción del servicio, mapeo de volúmenes, puertos, subredes, etc.

Tal como dijimos antes, en caso de configurar la Plataforma mediante el hostname de la máquina, se debe reemplazar «localhost» en la variable «SERVER_NAME» (o «SERVERNAME» en el caso del «flowengine») del docker-compose.yml por el hostname de la máquina.

Para levantar cada uno de estos módulos, es necesario desde linea de comandos posicionarse en el directorio del módulo y ejecutar el siguiente comando:

docker-compose up -d

5.- Levantar servicio de proxy inverso (NGINX)

Para esto, iremos a la carpeta «onesait-cloud-platform-community-deploy/op-modules/nginx-proxy»,  donde se encuentra el servicio de NGINX. Este contenedor debe llevar mapeado un volumen con el fichero de configuración necesario para redireccionar las peticiones que lleguen al ControlPanel.

Aquí dentro encontraremos varios ficheros. Uno de ellos es el de nginx.conf, en donde se indican todos los módulos, y uno por cada módulo (controlpanel.conf, dashboardengine.conf, etc).

Se debe editar únicamente el fichero nginx.conf y sustituir la cadena «${SERVER_NAME}» por el hostname de la máquina anfitriona de Docker (se puede obtener desde linea de comando ejecutando el comando «hostname»).

Así, visto antes de indicar el nombre del servidor debería salir esto:

server {
    listen 443 ssl;
    # Replace ${SERVER_NAME} with name obtained from console command output: "hostname"
    server_name ${SERVER_NAME};

Tras establecer un nombre -digamos «user-pc», saldría de esta otra forma:

server {
        listen 443 ssl;
        # Replace ${SERVER_NAME} with name obtained from console command output: "hostname"
        server_name user-pc;

Por defecto, dentro del nginx.conf solamente está sin comentar la línea del controlpanel, por lo que se descomentarán los «include» necesarios según los módulos levantados.

Contenido del documento nginx.conf

Aquí quisiéramos recordar que nunca se deben descomentar aquellos «include» de módulos que no estén funcionando, porque el nginx se reiniciará constantemente al no encontrarlos.

Tras terminar con el nginx.conf, se deben generar los certificados con el script «generate-certificates.sh» que viene incluido. Esto lo haremos con el siguiente comando:

sh generate-certificates.sh

Es preciso modificar las siguientes variables del script:

# Set IP and COMMONNAME
export IP="172.22.11.203"
export COMMONNAME="localhost"
# Comment SO not used
SEP="//" # WINDOWS
#SEP="" # OTHERS

Cuando lo ejecutemos, se generará un directorio «tls» que se mapeará al contenedor.

Una vez editado el script, levantaremos el servicio igual que hemos hecho anteriormente, desde el directorio «nginx-proxy», y ejecutamos el siguiente comando:

docker-compose up -d

Hecho esto podremos acceder al ControlPanel poniendo en el navegador la siguiente URL: «https://<hostname>/controlpanel»

Front del ControPanel levantado.

¿Y cómo puedo acceder? Pues usando una de las siguientes credenciales:

  • administrator/Community2019!
  • developer/Community2019!
  • analytics/Community2019!

Bueno, no ha sido muy doloroso, ¿verdad? Esperamos que os haya parecido interesante. Si os surge cualquier duda, no dudéis en dejarnos un comentario.

Además, recordad que podéis acceder a todas nuestras guías de despliegues e instalación en nuestro Portal de Desarrollo.

✍🏻 Author(s)

Deja una respuesta