¿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.
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.
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.
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:
Analizando el archivo de entornos «.env», hay que asegurarse de que las claves tienen los siguientes valores:
clave | valor |
MODULE_TAG | 2.0.0-ce |
MONGO_TAG | latest-noauth |
PERSISTENCE_TAG | mariadb |
QUASAR_TAG | 14 |
REPOSITORY | registry.hub.docker.com |
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:
clave | valor |
CONFIGDB_VOLUME | /Users/devopsuser/configdbdata |
REALTIME_VOLUME | /Users/devopsuser/realtimedbdata |
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».
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:
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:
clave | valor | descripción |
REPOSITORY | registry.hub.docker.com | registro con la imagen del servicio |
SERVERNAME | localhost | hostname de la máquina anfitriona |
MODULE_TAG | 2.0.0-ce | etiqueta 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.
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»
¿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.