¿Cómo desplegar onesait Platform Community con Docker y docker-compose?
Pre-requisitos
Para levantar la versión Community en un entorno, deberemos tener en cuenta los siguientes pre-requisitos:
1- Activar el Hyper-V en Windows 10:
Para configurar el Docker como deseamos, necesitaremos ejecutarlo sin el uso de WSL2. Por ello, necesitaremos habilitar el Hyper-V.
Aquí la guía de como hacerlo:
https://docs.microsoft.com/es-es/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v
2- Tener instalado Docker en la máquina en la que se va a instalar, Docker Desktop:
https://docs.docker.com/install/
3- Ajustar los parámetros del Docker:
Para lanzar la plataforma desde Docker, debemos incrementar la memoria que le otorgamos a Docker.
Empezaremos por lanzar el Docker Desktop y dirigirnos a la pestaña de Settings.
Una vez en ella, de seleccionaremos la opción Use the WSL 2 based engine:
Ahora nos dirigimos a la pestaña de Resources y ajustamos los recursos de la siguiente forma:
Pinchamos en Apply & Restart y deja que Docker se reinicie.
Tras satisfacer estos requisitos, estamos listos para lanzar la plataforma.
Despliegue
Paso 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 github. Para ello es necesario clonar el repositorio en local:
> git clone https://github.com/onesaitplatform/onesait-cloud-platform-community-deploy.git > cd onesait-cloud-platform-community-deploy
Paso 2: Levantar los servicios de persistencia
Nos situamos en el directorio donde se encuentra el docker-compose.yml encargado de levantar los servicios de bases de datos:
cd onesait-cloud-platform-community-deploy/op_data
En este directorio veremos varios ficheros:
/.env
Nos aseguramos que las claves tienen los siguientes valores:
| clave | valor |
|---|---|
| REPOSITORY | registry.hub.docker.com |
| PERSISTENCE_TAG | mariadb |
| MODULE_TAG | 2.0.0-ce |
| MONGO_TAG | latest-noauth |
| QUASAR_TAG | 14 |
/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
IMPORTANTE:
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
/docker-compose.persistent.yml: 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, por defecto no tienen valor asignado. Como ejemplo podremos poner:
| clave | valor ejemplo |
|---|---|
| REALTIME_VOLUME | /Users/devopsuser/realtimedbdata |
| CONFIGDB_VOLUME | /Users/devopsuser/configdbdata |
Y desde el terminal ejecutaremos el comando:
> docker-compose -f docker-compose.persistent.yml up -d
Una vez levantadas las bases de datos podremos ver en que estado se encuentran con el siguiente comando:
> docker ps
Deberíamos ver una salida como esta, en la que vemos lanzados configdb, realtimedb y quasar:
Si queremos ver los logs de un contenedor de base de datos, ejecutaremos:
> docker logs <container_name> ó > docker logs -f <container_name> (-f equivale a un tail)
Paso 3: Poblar de datos las bases de datos
En este mismo directorio (onesait-cloud-platform-community-deploy/op_data) hay otro fichero docker-compose encargado de levantar el servicio de carga inicial de datos.
Como anteriormente hemos hecho, ejecutamos:
> docker-compose -f docker-compose.initdb.yml up
En este caso no incluímos el flag -d (detached mode) ya que el propio servicio se detiene una vez acabada su tarea.
Se debería lanzar en una segunda vez para poblar la realtimedb, cambiando en el fichero docker-compose.initdb.yml la variable LOADMONGODB=true.
> docker-compose -f docker-compose.initdb.yml up
Paso 4: Levantar los módulos de la plataforma
De la misma manera que hicimos con los servicios de persistencia, levantamos los distintos módulos de la plataforma con docker-compose, por orden de arranque, y en el directorio (onesait-cloud-platform-community-deploy/op-modules:
Path | Module | DBs up required | Modules up required |
|---|---|---|---|
| /control-panel | Platform's web console. | configdb, schedulerdb, realtimedb, quasar | |
| /webprojects | Platform web hosting | configdb, schedulerdb, realtimedb, quasar | controlpanel |
/keycloak (obligatoria desde 6.0.0-ce) | Authentication server | configdb, schedulerdb, realtimedb, quasar | controlpanel |
/keycloak-manager (obligatoria desde 6.0.0-ce) | Authentication server | configdb, schedulerdb, realtimedb, quasar | controlpanel, keycloak |
| /router | Routing module | configdb, schedulerdb, realtimedb, quasar | |
| /cacheserver | Cache server | configdb, schedulerdb, realtimedb, quasar | controlpanel |
| /iotbroker | Platform's IoT broker. | configdb, schedulerdb, realtimedb, quasar | controlpanel, router, cacheserver |
| /flowengine | Platform's Flow engine. | configdb, schedulerdb, realtimedb, quasar | controlpanel, router, cacheserver |
| /api-manager | API Manager Module. | configdb, schedulerdb, realtimedb, quasar | controlpanel, router, cacheserver, iotbroker |
| /oauth-server (deprecada después de 6.0.0-ce) | Authentication server | configdb, schedulerdb, realtimedb, quasar | controlpanel, router, cacheserver, |
| /notebooks | Notebooks module | configdb, schedulerdb, realtimedb, quasar | controlpanel, router, cacheserver, iotbroker |
| /dashboard-engine | Dashboard module | configdb, schedulerdb, realtimedb, quasar | controlpanel, router, cacheserver, iotbroker |
| /rules-engine | Rules engine module | configdb, schedulerdb, realtimedb, quasar | controlpanel, router, cacheserver |
| /dataflow | Dataflow module | configdb, schedulerdb, realtimedb, quasar | controlpanel, router, cacheserver, iotbroker |
| /devicesimulator | Device simulator module | configdb, schedulerdb, realtimedb, quasar | controlpanel, router, cacheserver, iotbroker |
| /digitaltwinbroker | Digital twin broker module | configdb, schedulerdb, realtimedb, quasar | controlpanel, router, cacheserver, iotbroker |
| /monitoringui | Monitoring UI module | configdb, schedulerdb, realtimedb, quasar | controlpanel, router, cacheserver, iotbroker |
Cada directorio contiene:
- fichero /.env con las siguientes variables de entorno:
| clave | valor | descripción |
|---|---|---|
| REPOSITORY | registry.hub.docker.com | registro que contiene la imagen del servicio |
| SERVERNAME | localhost | hostname de la máquina anfitriona |
| MODULE_TAG | 2.0.0-ce | Tag de la imagen del servicio |
- fichero docker-compose.yml, que contiene la descripción del servicio, mapeo de volúmenes, puertos, subredes, etc...
Para levantar cada uno de estos módulos es necesario, desde linea de comandos, posicionarse en el directorio del módulo y ejecutar el comando:
> docker-compose up -d
Paso 5: Levantar servicio de proxy inverso (NGINX)
Vamos a la carpeta onesait-cloud-platform-community-deploy/op-modules/nginx-proxy donde está el servicio de NGINX. Este contendor debe llevar mapeado un volumen con el fichero de configuración necesario para redireccionar las peticiones que lleguen al control panel.
Hay varios ficheros: nginx.conf dónde 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").
Por defecto, dentro del nginx.conf solamente está descomentada la línea del controlpanel, se descomentarán los include necesarios según los módulos levantados:
A continuación, se deben generar los certificados con el script generate-certificates.sh
sh generate-certificates.sh
Y modificar las siguientes variables en el script.
# Set IP and COMMONNAME export IP="172.22.11.203" export COMMONNAME="localhost" # Comment SO not used SEP="//" # WINDOWS #SEP="" # OTHERS
Al ejecutarlo se generará un directorio ./tls que se mapeará al contenedor.
Una vez editado, levantamos el servicio igual que hemos hecho anteriormente, desde el directorio /nginx-proxy ejecutamos:
> docker-compose up -d
Y podremos acceder al control panel poniendo en el navegador la url https://<hostname>/controlpanel
Puedes acceder con estas credenciales:
- administrator/Community2019!
- developer/Community2019!
- analytics/Community2019!
Ejemplo: Ejecutar otro módulo
Para mostrar un ejemplo completo, se lanzará el módulo dashboardengine:
Comandos para lanzar los contenedores necesarios (desde el directorio op_moules):
> # First launch controlpanel > cd control-panel > docker-compose up -d > cd .. > # First launch keycloak and keycloak-manager > cd keycloak > docker-compose up -d > cd .. > cd keycloak-manager > docker-compose up -d > cd .. > # First launch router and cacheservice > cd cacheserver > docker-compose up -d > cd .. > cd router > docker-compose up -d > cd .. > # First launch iotbroker > cd iotbroker > docker-compose up -d > cd .. > # First launch dashbardengine > cd dashboard-engine > docker-compose up -d > cd ..
Descomentar líneas en ./op_modules/nginx-proxy/nginx.conf para los módulos levantados (puedes copiarlo en tu local y reemplazar {SERVER_NAME})
Ahora se vuelve a levantar el módulo del proxy para recargar los cambios
# from /op_modules > cd nginx-proxy > docker-compose down > docker-compose up -d
Una vez hecho esto ya puedes acceder al módulo del dashboard desde el controlpanel!

