Despliegue general de la plataforma

Para el despliegue de la plataforma, se requiere contar con la instalación de docker y docker-compose en la máquina virtual. Así mismo como parte de la configuración se debe crear una red de docker denominada nginx-proxy a la cual se conectaran todos los contenedores de las diferentes aplicaciones a desplegar. Finalmente, se pueden desplegar cada uno de los servicios que forman parte de la plataforma.

Instalación de Docker

Para la instalación de Docker y docker-compose se ha creado un script que realiza dicha tarea, el cual se muestra a continuación:

install-docker.sh
#!/bin/bash -e

# Avoids prompting to accept update
export DEBIAN_FRONTEND=noninteractive
echo '* libraries/restart-without-asking boolean true' | sudo debconf-set-selections
sudo apt-get clean
sudo apt-get update
sudo apt-get -o Dpkg::Options::=--force-confold -o Dpkg::Options::=--force-confdef upgrade -yq
sudo apt-get install -yq  apt-transport-https ca-certificates curl gnupg-agent software-properties-common

#Verify if docker exist, if not install it
if ! command -v docker &> /dev/null
then
	curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
	sudo apt-key fingerprint 0EBFCD88
	# the command $(lsb_release -cs) is not evaluated, version hardcoded
	sudo add-apt-repository 'deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable'
	sudo apt-get -y update
	sudo apt-get install -y docker-ce docker-ce-cli containerd.io
else
	echo "Docker is installed in your system... Skipping"
fi

#Verify if docker-compose exist, if not install it
if ! command -v docker-compose &> /dev/null
then
	#Same apply to docker compose, version hardcoded
	#sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
	sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose
	sudo chmod +x /usr/local/bin/docker-compose
	sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
else
	echo "Docker-compose is installed in your system... Skipping"
	exit
fi

Este script se puede ejecutar mediante:

sudo ./install-docker.sh

Creación de red nginx-proxy

Para la creación de la red de Docker, también se cuenta con un script:

create-network.sh
#!/bin/bash -x

#Create external network to communicate thingsboard with chirpstack
sudo docker network create nginx-proxy

Luego, este script puede ser ejecutado mediante:

sudo ./create-network.sh

Despliegue de todos los servicios

Finalmente, se cuenta con un script para el despliegue de cada uno de los servicios y aplicaciones contemplados para la plataforma:

deploy-all.sh
#!/bin/bash

BASEDIR=$PWD
echo "$BASEDIR directory"
#Check enviroment variables required
if [[ -z $DOMAIN_BASE ]]; then
	echo "Using default DOMAIN_BASE"
	DOMAIN_BASE=localhost
fi

if [[ -z $DOMAIN_EMAIL ]]; then
	echo "Using default DOMAIN_EMAIL"
	DOMAIN_EMAIL=mail@example.com
fi

export DOMAIN_BASE=$DOMAIN_BASE
export DOMAIN_EMAIL=$DOMAIN_EMAIL

#Nginx-proxy
echo "Nginx-proxy deployment..."
cd nginx-proxy
./deploy.sh

cd $BASEDIR
echo "$BASEDIR directory"
#Home-page
echo "Home-page deployment..."
cd home-page
./deploy.sh

cd $BASEDIR
echo "$BASEDIR directory"
#Thingsboard
echo "ThingsBoard deployment..."
cd thingsboard
./deploy.sh

cd $BASEDIR
echo "$BASEDIR directory"
#ChirpStack
echo "ChirpStack deployment..."
cd chirpstack-docker
./deploy.sh

cd $BASEDIR
echo "$BASEDIR directory"
#Prometheus
echo "Prometheus deployment..."
cd prometheus
./deploy.sh

cd $BASEDIR
echo "$BASEDIR directory"
#Grafana
echo "Grafana deployment..."
cd grafana
./deploy.sh

echo "Deployment has finished"

Este script requiere de dos variables de entorno que servirán para designar el dominio base y el correo electrónico de registro de dicho dominio para la generación de certificados mediante Let’s Encrypt.

Table 1. Variables de entorno para reverse-proxy y certificados SSL
Nombre Ejemplo

DOMAIN_BASE

localhost

DOMAIN_EMAIL

mail@example.com

Estas variables pueden ser declaradas de forma global o en linea con el script, de tal manera que, para desplegar los servicios, se invoque de la siguiente manera:

DOMAIN_BASE=<dominio.com> DOMAIN_EMAIL=<mail@dominio.com> ./deploy-all.sh

Una vez definido esta dirección y es reconocida mediante el registro correspondiente en la zona DNS del dominio, se puede acceder a los servicios de la plataforma en la siguientes direcciones: