From 207a11c24d592cd1c89f00c0615ed1ac8ad9d633 Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Tue, 10 Apr 2018 16:28:06 +0530 Subject: [PATCH 01/65] version updates --- node-red/Dockerfile | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/node-red/Dockerfile b/node-red/Dockerfile index 92d241e..9c7bf92 100644 --- a/node-red/Dockerfile +++ b/node-red/Dockerfile @@ -3,22 +3,21 @@ # # build the node red image using the offical node red distribution -FROM nodered/node-red:latest +# passing arguments to build specific image +ARG node_red_version +FROM nodered/node-red:${node_red_version} # To avoid SSL certification issue ENV NODE_TLS_REJECT_UNAUTHORIZED=0 -# add the influxDB connector -RUN npm install node-red-contrib-influxdb +# Install required modules +ARG node_red_install_modules +RUN npm install ${node_red_install_modules} +RUN npm audit fix # add The Things Network connector -RUN npm install node-red-contrib-ttn - -# add any other things that need to be added -ARG NODERED_INSTALL_PLUGINS -RUN /bin/bash -c 'for iPkg in "$@" ; do echo "npm install $iPkg" ; npm install "$iPkg" || { echo "couldnt install: $iPkg" ; exit 1 ; } ; done' -- ${NODERED_INSTALL_PLUGINS} - -RUN npm audit fix +ARG node_red_contrib_ttn_version +RUN npm install node-red-contrib-ttn@${node_red_contrib_ttn_version} # copy the settings file USER node-red From a9e223ef033456e2f623b8782b834391b7f0700e Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Tue, 10 Apr 2018 16:31:54 +0530 Subject: [PATCH 02/65] Install old version of influxdb --- influxdb-backup/Dockerfile | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/influxdb-backup/Dockerfile b/influxdb-backup/Dockerfile index 5c97bf2..4fd7dc4 100644 --- a/influxdb-backup/Dockerfile +++ b/influxdb-backup/Dockerfile @@ -5,10 +5,17 @@ # Build the extra-instance using phusion base image FROM phusion/baseimage +# Change workdir +RUN mkdir -p /opt/influxdb-backup +WORKDIR "/opt/influxdb-backup" + +# passing arguments to install influxdb specific version +ARG version + # Install influxdb database -RUN curl -sL https://repos.influxdata.com/influxdb.key | apt-key add - -RUN echo "deb https://repos.influxdata.com/ubuntu xenial stable" > /etc/apt/sources.list.d/influxdb.list -RUN apt-get update && apt-get install -y influxdb +RUN apt-get update && apt-get install -y wget +RUN wget https://dl.influxdata.com/influxdb/releases/influxdb_${version}_amd64.deb +RUN dpkg -i influxdb_${version}_amd64.deb # To backup influxdb to S3 Bucket, some packages need to be installed as follows: RUN apt-get update && apt-get install -y python-pip @@ -20,13 +27,10 @@ ENV INFLUX_HOST=influxdb # Amazon S3 bucket's backup working Directory RUN mkdir -p /var/lib/amazon-bucket -# Change workdir -RUN mkdir -p /opt/influxdb-backup -WORKDIR "/opt/influxdb-backup" - # Backup script COPY showdb.sh /bin/showdb.sh COPY backup.sh /bin/backup.sh +RUN chmod +x /bin/showdb.sh RUN chmod +x /bin/backup.sh # Backup directory From 4214647ba1cce84251143639053c7c2517011b83 Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Tue, 10 Apr 2018 16:32:56 +0530 Subject: [PATCH 03/65] latest changes --- influxdb-backup/README.md | 150 ++++++++++++++++++++------------------ 1 file changed, 80 insertions(+), 70 deletions(-) diff --git a/influxdb-backup/README.md b/influxdb-backup/README.md index a898053..bd44121 100644 --- a/influxdb-backup/README.md +++ b/influxdb-backup/README.md @@ -1,47 +1,46 @@ # BUILD SETUP -```sh +```console -cmurugan@iotserver:~/iot/docker-ttn-dashboard$ docker-compose up -d +cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose up -d Creating network "dockerttndashboard_default" with the default driver +Creating dockerttndashboard_postfix_1 ... Creating dockerttndashboard_influxdb_1 ... +Creating dockerttndashboard_influxdb_1 Creating dockerttndashboard_influxdb_1 ... done -Creating dockerttndashboard_influxdb-backup_1 ... +Creating dockerttndashboard_postfix_1 ... done +Creating dockerttndashboard_influxdb-backup_1 Creating dockerttndashboard_node-red_1 ... Creating dockerttndashboard_grafana_1 ... Creating dockerttndashboard_grafana_1 -Creating dockerttndashboard_node-red_1 -Creating dockerttndashboard_grafana_1 ... done +Creating dockerttndashboard_node-red_1 ... done Creating dockerttndashboard_apache_1 ... Creating dockerttndashboard_apache_1 ... done ``` -## status of docker container and databases +### status of docker container and databases -```sh +```console -cmurugan@iotserver:~/iot/docker-ttn-dashboard$ docker-compose ps +cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------------------ -dockerttndashboard_apache_1 /bin/bash /root/setup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp -dockerttndashboard_apache_run_1 /bin/bash Up +dockerttndashboard_apache_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp dockerttndashboard_grafana_1 /run.sh Up 3000/tcp -dockerttndashboard_influxdb-backup_1 /entrypoint.sh influxd Up 8086/tcp +dockerttndashboard_influxdb-backup_1 /sbin/my_init Up dockerttndashboard_influxdb_1 /entrypoint.sh influxd Up 8086/tcp dockerttndashboard_node-red_1 npm start -- --userDir /da ... Up 1880/tcp -cmurugan@iotserver:~/iot/docker-ttn-dashboard$ +dockerttndashboard_postfix_1 /sbin/my_init Up 0.0.0.0:25->25/tcp - -cmurugan@iotserver:~/iot/docker-ttn-dashboard$ docker-compose exec influxdb influx -Connected to http://localhost:8086 version 1.2.4 -InfluxDB shell version: 1.2.4 +cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose exec influxdb influx +Connected to http://localhost:8086 version 1.4.0 +InfluxDB shell version: 1.4.0 > show databases name: databases name ---- _internal - > create database testdb > show databases name: databases @@ -49,7 +48,6 @@ name ---- _internal testdb - > use testdb Using database testdb > INSERT cpu,host=serverA,region=us_west value=0.64 @@ -57,117 +55,129 @@ Using database testdb name: cpu time host region value ---- ---- ------ ----- -1508942563099443156 serverA us_west 0.64 +1523353042145216096 serverA us_west 0.64 +> exit ``` -# BACKUP DATABASE THROUGH SHELL SCRIPT USING EXTRA INFLUXDB INSTANCE +## BACKUP DATABASE -`( Database name should be there in as environment variable separated by ":" ) ` +### Backup can be taken through shell script by using extra instance (influxdb-backup) and synced with Amazon S3 cloud -```sh -cmurugan@iotserver:~/iot/docker-ttn-dashboard$ docker exec -it dockerttndashboard_influxdb-backup_1 bash +```console -root@4e5dbfd20c5c:/opt/influxdb-backup# backup.sh +cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker exec -it dockerttndashboard_influxdb-backup_1 bash + +root@56a388b52486:/opt/influxdb-backup# backup.sh Backup Influx metadata -2017/10/25 14:48:59 backing up metastore to /var/lib/influxdb-backup/meta.00 -2017/10/25 14:48:59 backup complete +2018/04/10 09:50:52 backing up metastore to /var/lib/influxdb-backup/meta.03 +2018/04/10 09:50:52 backup complete Creating backup for _internal -2017/10/25 14:48:59 backing up db=_internal since 0001-01-01 00:00:00 +0000 UTC -2017/10/25 14:48:59 backing up metastore to /var/lib/influxdb-backup/meta.01 -2017/10/25 14:48:59 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01 00:00:00 +0000 UTC -2017/10/25 14:49:00 backup complete +2018/04/10 09:50:52 backing up db=_internal since 0001-01-01 00:00:00 +0000 UTC +2018/04/10 09:50:52 backing up metastore to /var/lib/influxdb-backup/meta.04 +2018/04/10 09:50:52 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01 00:00:00 +0000 UTC +2018/04/10 09:50:52 backing up db=_internal rp=monitor shard=2 to /var/lib/influxdb-backup/_internal.monitor.00002.00 since 0001-01-01 00:00:00 +0000 UTC +2018/04/10 09:50:52 backup complete Creating backup for testdb -2017/10/25 14:49:00 backing up db=testdb since 0001-01-01 00:00:00 +0000 UTC -2017/10/25 14:49:00 backing up metastore to /var/lib/influxdb-backup/meta.02 -2017/10/25 14:49:00 backing up db=testdb rp=autogen shard=2 to /var/lib/influxdb-backup/testdb.autogen.00002.00 since 0001-01-01 00:00:00 +0000 UTC -2017/10/25 14:49:00 backup complete +2018/04/10 09:50:52 backing up db=testdb since 0001-01-01 00:00:00 +0000 UTC +2018/04/10 09:50:52 backing up metastore to /var/lib/influxdb-backup/meta.05 +2018/04/10 09:50:52 backing up db=testdb rp=autogen shard=3 to /var/lib/influxdb-backup/testdb.autogen.00003.00 since 0001-01-01 00:00:00 +0000 UTC +2018/04/10 09:50:52 backup complete +tar: Removing leading `/' from member names +tar: Removing leading `/' from member names +upload: ../../var/lib/amazon-bucket/data_directory_backup_2018-04-10.tar.gz to s3://mcci-influxdb-test/data_directory_backup_2018-04-10.tar.gz +upload: ../../var/lib/amazon-bucket/metdata_db_backup_2018-04-10.tar.gz to s3://mcci-influxdb-test/metdata_db_backup_2018-04-10.tar.gz ``` -## Backup has been taken in the below folder +### Backup has been taken in the below folder + +```console -```sh +root@56a388b52486:/opt/influxdb-backup# cd /var/lib/influxdb-backup/ -root@4e5dbfd20c5c:/opt/influxdb-backup# cd /var/lib/influxdb-backup/ -root@4e5dbfd20c5c:/var/lib/influxdb-backup# ls -al -total 136 -drwxrwxr-x 2 1000 1000 4096 Oct 25 14:49 . -drwxr-xr-x 14 root root 4096 Oct 25 14:08 .. --rw-r--r-- 1 root root 110592 Oct 25 14:49 _internal.monitor.00001.00 --rw-r--r-- 1 root root 204 Oct 25 14:48 meta.00 --rw-r--r-- 1 root root 204 Oct 25 14:48 meta.01 --rw-r--r-- 1 root root 204 Oct 25 14:49 meta.02 --rw-r--r-- 1 root root 2048 Oct 25 14:49 testdb.autogen.00002.00 +root@56a388b52486:/var/lib/influxdb-backup# ls -al +total 456 +drwxr-xr-x 2 root root 4096 Apr 10 09:50 . +drwxr-xr-x 35 root root 4096 Apr 10 09:50 .. +-rw-r--r-- 1 root root 174592 Apr 10 09:50 _internal.monitor.00001.00 +-rw-r--r-- 1 root root 250368 Apr 10 09:50 _internal.monitor.00002.00 +-rw-r--r-- 1 root root 131 Apr 9 10:07 meta.00 +-rw-r--r-- 1 root root 234 Apr 10 09:38 meta.01 +-rw-r--r-- 1 root root 234 Apr 10 09:44 meta.02 +-rw-r--r-- 1 root root 234 Apr 10 09:50 meta.03 +-rw-r--r-- 1 root root 234 Apr 10 09:50 meta.04 +-rw-r--r-- 1 root root 234 Apr 10 09:50 meta.05 +-rw-r--r-- 1 root root 2048 Apr 10 09:50 testdb.autogen.00003.00 ``` -## Drop the "testdb" database for checking purpose -```sh +## RESTORE DATABASE + +### Drop the "testdb" database for checking purpose -cmurugan@iotserver:~/iot/docker-ttn-dashboard$ docker-compose exec influxdb influx -Connected to http://localhost:8086 version 1.2.4 -InfluxDB shell version: 1.2.4 +```console + +cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose exec influxdb influx +Connected to http://localhost:8086 version 1.4.0 +InfluxDB shell version: 1.4.0 > show databases name: databases name ---- _internal testdb - > drop database testdb > show databases name: databases name ---- _internal +> exit ``` -## RESTORE DROPPED DATABASE - `(Stop the influxdb database in order to restore dropped "testdb" database)` -```sh +```console -cmurugan@iotserver:~/iot/docker-ttn-dashboard$ docker-compose stop influxdb +cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose stop influxdb Stopping dockerttndashboard_influxdb_1 ... done -cmurugan@iotserver:~/iot/docker-ttn-dashboard$ docker exec -it dockerttndashboard_influxdb-backup_1 bash - -root@4e5dbfd20c5c:/opt/influxdb-backup# influxd restore -metadir /var/lib/influxdb/meta /var/lib/influxdb-backup -Using metastore snapshot: /var/lib/influxdb-backup/meta.02 -root@4e5dbfd20c5c:/opt/influxdb-backup# influxd restore -database testdb -datadir /var/lib/influxdb/data /var/lib/influxdb-backup +cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker exec -it dockerttndashboard_influxdb-backup_1 bash +root@56a388b52486:/opt/influxdb-backup# influxd restore -metadir /var/lib/influxdb/meta /var/lib/influxdb-backup +Using metastore snapshot: /var/lib/influxdb-backup/meta.05 +root@56a388b52486:/opt/influxdb-backup# influxd restore -database testdb -datadir /var/lib/influxdb/data /var/lib/influxdb-backup Restoring from backup /var/lib/influxdb-backup/testdb.* -unpacking /var/lib/influxdb/data/testdb/autogen/2/000000001-000000001.tsm +unpacking /var/lib/influxdb/data/testdb/autogen/3/000000001-000000001.tsm ``` -## Start the influxdb database and check for whether database has been restored +### Start the influxdb database and check for whether database has been restored -```sh +```console -cmurugan@iotserver:~/iot/docker-ttn-dashboard$ docker-compose start influxdb +cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose start influxdb Starting influxdb ... done -cmurugan@iotserver:~/iot/docker-ttn-dashboard$ docker-compose exec influxdb influx -Connected to http://localhost:8086 version 1.2.4 -InfluxDB shell version: 1.2.4 +cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose exec influxdb influx +Connected to http://localhost:8086 version 1.4.0 +InfluxDB shell version: 1.4.0 > show databases name: databases name ---- _internal testdb - > use testdb Using database testdb > SELECT * FROM cpu name: cpu time host region value ---- ---- ------ ----- -1508942563099443156 serverA us_west 0.64 +1523353042145216096 serverA us_west 0.64 +> exit ``` From 682ddd718679399102b9ae1be056309a3d7da4fa Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Tue, 10 Apr 2018 16:34:18 +0530 Subject: [PATCH 04/65] version updates --- docker-compose.yml | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 35ede6c..8d79ea2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -156,10 +156,19 @@ services: node-red: restart: unless-stopped +<<<<<<< HEAD +======= + build: + context: ./node-red + dockerfile: Dockerfile + args: + node_red_version: "${TTN_DASHBOARD_NODE_RED_VERSION:-'0.16.2'}" + node_red_contrib_version: "${TTN_DASHBOARD_NODE_RED_CONTRIB_VERSION:-'2.0.1'}" +>>>>>>> 4b9b2ba... version updates user: "root" volumes: - "${TTN_DASHBOARD_DATA}node-red:/data" - # nodered opens ports on influxdb so it needs to be able to talk to it. + # nodered opens ports on influxdb and postfix so it needs to be able to talk to it. links: - influxdb - postfix @@ -172,17 +181,30 @@ services: influxdb: restart: unless-stopped - image: influxdb:latest + image: "influxdb:${TTN_DASHBOARD_INFLUXDB_VERSION:-'1.4.0'}" volumes: - "${TTN_DASHBOARD_DATA}influxdb:/var/lib/influxdb" environment: INFLUXDB_DB: "${TTN_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME:-demo}" INFLUXDB_INIT_PWD: "${TTN_DASHBOARD_INFLUXDB_ADMIN_PASSWORD:-!notset}" +<<<<<<< HEAD +======= + PRE_CREATE_DB: "${TTN_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME:-demo}" + # Enabling remote backup for extra instance( influxdb-backup ) +>>>>>>> 4b9b2ba... version updates INFLUXDB_BIND_ADDRESS: "influxdb:8088" influxdb-backup: restart: unless-stopped +<<<<<<< HEAD build: influxdb-backup +======= + build: + context: ./influxdb-backup + dockerfile: Dockerfile + args: + version: "${TTN_DASHBOARD_INFLUXDB_VERSION:-'1.4.0'}" +>>>>>>> 4b9b2ba... version updates volumes: # Dircectory for database backup inside "./data" - "${TTN_DASHBOARD_DATA}influx-backup:/var/lib/influxdb-backup" @@ -194,6 +216,7 @@ services: AWS_ACCESS_KEY_ID: "${TTN_DASHBOARD_AWS_ACCESS_KEY_ID:-.}" AWS_SECRET_ACCESS_KEY: "${TTN_DASHBOARD_AWS_SECRET_ACCESS_KEY:-.}" AWS_DEFAULT_REGION: "${TTN_DASHBOARD_AWS_DEFAULT_REGION:-.}" + # grafana opens ports on influxdb, so it needs to be able to talk to it. links: - influxdb @@ -211,8 +234,12 @@ services: grafana: restart: unless-stopped +<<<<<<< HEAD image: grafana/grafana:latest user: "root" +======= + image: grafana/grafana:${TTN_DASHBOARD_GRAFANA_VERSION:-latest} +>>>>>>> 4b9b2ba... version updates volumes: - "${TTN_DASHBOARD_DATA}grafana:/var/lib/grafana" environment: From 72d80fc4ae692d198115e934961fbb6cf1a6b385 Mon Sep 17 00:00:00 2001 From: cmurugan Date: Tue, 16 Oct 2018 00:05:31 +0530 Subject: [PATCH 05/65] default_Version_changes --- docker-compose.yml | 144 ++++++++++++++++++++++----------------------- 1 file changed, 69 insertions(+), 75 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 8d79ea2..fd09bae 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -35,8 +35,8 @@ # comm <(sed -n -e 's/#.*$//' -e 's/[^$]*${\([^-:}]*\)[-:}][^$]*/\1/p' docker-compose.yml | LC_ALL=C sort -u) <(sed -n -e '/^# TTN_[A-Z_0-9]*$/s/^# //p' docker-compose.yml | LC_ALL=C sort -u ) # #+++ -# TTN_DASHBOARD_APACHE_FQDN -# The fully-qualified domain name to be served by Apache. +# TTN_DASHBOARD_NGINX_FQDN +# The fully-qualified domain name to be served by NGINX. # # TTN_DASHBOARD_AWS_ACCESS_KEY_ID # The access key for AWS for backups. @@ -106,9 +106,6 @@ # TTN_DASHBOARD_MAIL_RELAY_IP # the mail relay machine, assuming that the real mailer is upstream from us. # -# TTN_DASHBOARD_NODERED_INSTALL_PLUGINS -# A list of additional modules to be intalled. -# # TTN_DASHBOARD_PORT_HTTP # The port to listen to for HTTP. Primarily for test purposes. Defaults to # 80. @@ -121,31 +118,30 @@ # The timezone to use. Defaults to GMT. #--- -# Also see apache/setup.sh, which uses some additional test variables when +# Also see nginx/setup.sh, which uses some additional test variables when # debugging. # version: '3.7' services: - # the apache server connects us to the outside world - apache: + # the nginx server connects us to the outside world + nginx: environment: CERTBOT_DOMAINS: "${TTN_DASHBOARD_CERTBOT_FQDN:-.}" CERTBOT_EMAIL: "${TTN_DASHBOARD_CERTBOT_EMAIL:-.}" - APACHE_FQDN: "${TTN_DASHBOARD_APACHE_FQDN:-.}" + NGINX_FQDN: "${TTN_DASHBOARD_NGINX_FQDN:-.}" restart: unless-stopped - build: apache + build: nginx ports: - "${TTN_DASHBOARD_PORT_HTTP:-80}:80" - "${TTN_DASHBOARD_PORT_HTTPS:-443}:443" volumes: - - "${TTN_DASHBOARD_DATA}docker-apache2/htdocs:/usr/local/apache2/htdocs" - - "${TTN_DASHBOARD_DATA}docker-apache2/letsencrypt:/etc/letsencrypt" - - "${TTN_DASHBOARD_DATA}docker-apache2/authdata:/etc/apache2/authdata" + - "${TTN_DASHBOARD_DATA}docker-nginx/htdocs:/usr/local/nginx/htdocs" + - "${TTN_DASHBOARD_DATA}docker-nginx/letsencrypt:/etc/letsencrypt" + - "${TTN_DASHBOARD_DATA}docker-nginx/authdata:/etc/nginx/authdata" - # - # apache proxies for all of the below, so it needs to have links to them. - # Examine apache/proxy-*.conf to see how the links are set up. Also bear + # nginx proxies for all of the below, so it needs to have links to them. + # Examine nginx/proxy-*.conf to see how the links are set up. Also bear # in mind that the individual servers (e.g. grafana) may need to be # informed about the nature of the redirections. # @@ -153,111 +149,109 @@ services: - grafana - node-red - influxdb + - mqtts node-red: restart: unless-stopped -<<<<<<< HEAD -======= build: context: ./node-red dockerfile: Dockerfile args: - node_red_version: "${TTN_DASHBOARD_NODE_RED_VERSION:-'0.16.2'}" - node_red_contrib_version: "${TTN_DASHBOARD_NODE_RED_CONTRIB_VERSION:-'2.0.1'}" ->>>>>>> 4b9b2ba... version updates + node_red_version: "${TTN_DASHBOARD_NODE_RED_VERSION:-latest}" + node_red_contrib_ttn_version: "${TTN_DASHBOARD_NODE_RED_CONTRIB_TTN_VERSION:-latest}" + node_red_install_modules: "${TTN_DASHBOARD_NODE_RED_INSTALL_MODULES:-}" user: "root" volumes: - "${TTN_DASHBOARD_DATA}node-red:/data" + environment: + TZ: "${TTN_DASHBOARD_TIMEZONE:-GMT}" # nodered opens ports on influxdb and postfix so it needs to be able to talk to it. links: - influxdb - postfix - environment: - TZ: "${TTN_DASHBOARD_TIMEZONE:-GMT}" - build: - context: ./node-red - args: - NODERED_INSTALL_PLUGINS: "${TTN_DASHBOARD_NODERED_INSTALL_PLUGINS:-}" - - influxdb: + + mqtts: restart: unless-stopped - image: "influxdb:${TTN_DASHBOARD_INFLUXDB_VERSION:-'1.4.0'}" + build: + context: ./mqtts + dockerfile: Dockerfile + args: + ssl_cert: "${TTN_DASHBOARD_NGINX_FQDN:-.}" + ports: + - "${TTN_DASHBOARD_PORT_MQTT:-1883}:1883" + - "8883:8883" + - "8083:8083" volumes: - - "${TTN_DASHBOARD_DATA}influxdb:/var/lib/influxdb" - environment: - INFLUXDB_DB: "${TTN_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME:-demo}" - INFLUXDB_INIT_PWD: "${TTN_DASHBOARD_INFLUXDB_ADMIN_PASSWORD:-!notset}" -<<<<<<< HEAD -======= - PRE_CREATE_DB: "${TTN_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME:-demo}" - # Enabling remote backup for extra instance( influxdb-backup ) ->>>>>>> 4b9b2ba... version updates - INFLUXDB_BIND_ADDRESS: "influxdb:8088" + - "${TTN_DASHBOARD_DATA}docker-nginx/letsencrypt:/etc/letsencrypt" + - "${TTN_DASHBOARD_DATA}mqtt/credentials:/etc/mosquitto/credentials" + hostname: "${TTN_DASHBOARD_MQTT_HOST_NAME:-mqtt}" - influxdb-backup: + influxdb: restart: unless-stopped -<<<<<<< HEAD - build: influxdb-backup -======= build: - context: ./influxdb-backup + context: ./influxdb dockerfile: Dockerfile - args: - version: "${TTN_DASHBOARD_INFLUXDB_VERSION:-'1.4.0'}" ->>>>>>> 4b9b2ba... version updates + args: + distrib_id: "${TTN_DASHBOARD_OS_distrib_id:-ubuntu}" + distrib_codename: "${TTN_DASHBOARD_OS_distrib_id:-xenial}" + hostname: "${TTN_DASHBOARD_INFLUXDB_MAIL_HOST_NAME:-.}" + relay_ip: "${TTN_DASHBOARD_MAIL_RELAY_IP:-.}" + domain: "${TTN_DASHBOARD_MAIL_DOMAIN:-.}" + hostname: "${TTN_DASHBOARD_INFLUXDB_MAIL_HOST_NAME:-.}" + ports: + - "${TTN_DASHBOARD_PORT_INFLUXDB:-8086}:8086" volumes: - # Dircectory for database backup inside "./data" - - "${TTN_DASHBOARD_DATA}influx-backup:/var/lib/influxdb-backup" - # Connecting influxdb data directory to extra instances - "${TTN_DASHBOARD_DATA}influxdb:/var/lib/influxdb" + # Dircectory for influxdb metadata and database backup inside "./data" + - "${TTN_DASHBOARD_DATA}influx-backup:/var/lib/influxdb-backup" + - "${TTN_DASHBOARD_DATA}influxdb-S3-bucket:/var/lib/influxdb-S3-bucket" environment: - INFLUX_HOST: influxdb + INFLUXDB_INIT_PWD: "${TTN_DASHBOARD_INFLUXDB_ADMIN_PASSWORD:-!notset}" + PRE_CREATE_DB: "${TTN_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME:-demo}" + INFLUXDB_BIND_ADDRESS: "influxdb:8088" + INFLUXDB_BACKUP_MAIL: "${TTN_DASHBOARD_INFLUXDB_BACKUP_EMAIL:-}" + # Backuping influxdb metadata and database to cloud + SOURCE_NAME: "${TTN_DASHBOARD_INFLUXDB_HOST_NAME:-influxdb}" S3_BUCKET_INFLUXDB: "${TTN_DASHBOARD_AWS_S3_BUCKET_INFLUXDB:-.}" AWS_ACCESS_KEY_ID: "${TTN_DASHBOARD_AWS_ACCESS_KEY_ID:-.}" AWS_SECRET_ACCESS_KEY: "${TTN_DASHBOARD_AWS_SECRET_ACCESS_KEY:-.}" AWS_DEFAULT_REGION: "${TTN_DASHBOARD_AWS_DEFAULT_REGION:-.}" - # grafana opens ports on influxdb, so it needs to be able to talk to it. - links: - - influxdb - - - postfix: - restart: unless-stopped - build: - context: ./postfix - dockerfile: Dockerfile - args: - relay_ip: "${TTN_DASHBOARD_MAIL_RELAY_IP:-}" - host_name: "${TTN_DASHBOARD_MAIL_HOST_NAME:-.}" - domain: "${TTN_DASHBOARD_MAIL_DOMAIN:-.}" - grafana: restart: unless-stopped -<<<<<<< HEAD - image: grafana/grafana:latest - user: "root" -======= image: grafana/grafana:${TTN_DASHBOARD_GRAFANA_VERSION:-latest} ->>>>>>> 4b9b2ba... version updates + user: "root" volumes: - "${TTN_DASHBOARD_DATA}grafana:/var/lib/grafana" environment: GF_SECURITY_ADMIN_PASSWORD: "${TTN_DASHBOARD_GRAFANA_ADMIN_PASSWORD:-!notset}" - GF_SERVER_DOMAIN: "${TTN_DASHBOARD_APACHE_FQDN}" + GF_SERVER_DOMAIN: "${TTN_DASHBOARD_NGINX_FQDN}" GF_SERVER_ROOT_URL: "https://%(domain)s/grafana/" GF_SMTP_ENABLED: "${TTN_DASHBOARD_GRAFANA_SMTP_ENABLED:-false}" GF_SMTP_SKIP_VERIFY: "${TTN_DASHBOARD_GRAFANA_SMTP_SKIP_VERIFY:-false}" - GF_SMTP_HOST: "postfix:25" + GF_SMTP_HOST: "${TTN_DASHBOARD_GRAFANA_SMTP_HOST:-localhost}:25" GF_SMTP_FROM_ADDRESS: "${TTN_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS:-grafana@localhost}" GF_SMTP_FROM_NAME: "${TTN_DASHBOARD_GRAFANA_PROJECT_NAME:-Default} grafana admin" GF_LOG_MODE: "${TTN_DASHBOARD_GRAFANA_LOG_MODE:-console,file}" GF_LOG_LEVEL: "${TTN_DASHBOARD_GRAFANA_LOG_LEVEL:-info}" - GF_INSTALL_PLUGINS: "${TTN_DASHBOARD_GRAFANA_INSTALL_PLUGINS:-}" + GF_INSTALL_PLUGINS: "${TTN_DASHBOARD_GRAFANA_INSTALL_PLUGINS:-grafana-worldmap-panel}" GF_USERS_ALLOW_SIGN_UP: "${TTN_DASHBOARD_GRAFANA_USERS_ALLOW_SIGN_UP:-false}" # grafana opens ports on influxdb and postfix, so it needs to be able to talk to it. links: - influxdb - postfix + postfix: + restart: unless-stopped + build: + context: ./postfix + dockerfile: Dockerfile + args: + hostname: "${TTN_DASHBOARD_MAIL_HOST_NAME:-.}" + relay_ip: "${TTN_DASHBOARD_MAIL_RELAY_IP:-.}" + domain: "${TTN_DASHBOARD_MAIL_DOMAIN:-.}" + ports: + - "${TTN_DASHBOARD_PORT_POSTFIX:-25}:25" + hostname: "${TTN_DASHBOARD_MAIL_HOST_NAME:-.}" + ### end of file ### From 2421651d8ea49ed77a8dbcbd699d29d0d39b469f Mon Sep 17 00:00:00 2001 From: cmurugan Date: Thu, 25 Oct 2018 17:20:06 +0530 Subject: [PATCH 06/65] influxdb online backup changes --- influxdb-backup/Dockerfile | 28 ++----- influxdb-backup/README.md | 146 ++++++++++++++++++++----------------- influxdb-backup/backup.sh | 12 +-- 3 files changed, 94 insertions(+), 92 deletions(-) mode change 100644 => 100755 influxdb-backup/backup.sh diff --git a/influxdb-backup/Dockerfile b/influxdb-backup/Dockerfile index 4fd7dc4..99a67f1 100644 --- a/influxdb-backup/Dockerfile +++ b/influxdb-backup/Dockerfile @@ -1,39 +1,27 @@ # -# Dockerfile for building the extra-instance-for-influxdb-backup +# Dockerfile for building the influxdb instance with backup setup # -# Build the extra-instance using phusion base image -FROM phusion/baseimage +# passing arguments to install influxdb specific version +ARG version + +FROM influxdb:${version} + +# Default InfluxDB host +ENV INFLUX_HOST=influxdb # Change workdir RUN mkdir -p /opt/influxdb-backup WORKDIR "/opt/influxdb-backup" -# passing arguments to install influxdb specific version -ARG version - -# Install influxdb database -RUN apt-get update && apt-get install -y wget -RUN wget https://dl.influxdata.com/influxdb/releases/influxdb_${version}_amd64.deb -RUN dpkg -i influxdb_${version}_amd64.deb - # To backup influxdb to S3 Bucket, some packages need to be installed as follows: RUN apt-get update && apt-get install -y python-pip RUN pip install awscli --upgrade -# Default InfluxDB host -ENV INFLUX_HOST=influxdb - -# Amazon S3 bucket's backup working Directory -RUN mkdir -p /var/lib/amazon-bucket - # Backup script COPY showdb.sh /bin/showdb.sh COPY backup.sh /bin/backup.sh RUN chmod +x /bin/showdb.sh RUN chmod +x /bin/backup.sh -# Backup directory -RUN mkdir -p /var/lib/influxdb-backup - # end of file diff --git a/influxdb-backup/README.md b/influxdb-backup/README.md index bd44121..01b7b59 100644 --- a/influxdb-backup/README.md +++ b/influxdb-backup/README.md @@ -2,20 +2,17 @@ ```console -cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose up -d -Creating network "dockerttndashboard_default" with the default driver -Creating dockerttndashboard_postfix_1 ... -Creating dockerttndashboard_influxdb_1 ... -Creating dockerttndashboard_influxdb_1 -Creating dockerttndashboard_influxdb_1 ... done -Creating dockerttndashboard_postfix_1 ... done -Creating dockerttndashboard_influxdb-backup_1 -Creating dockerttndashboard_node-red_1 ... -Creating dockerttndashboard_grafana_1 ... -Creating dockerttndashboard_grafana_1 -Creating dockerttndashboard_node-red_1 ... done -Creating dockerttndashboard_apache_1 ... -Creating dockerttndashboard_apache_1 ... done +cmurugan@iot:~/server/influx_api_version/docker-ttn-dashboard$ docker-compose up -d + +dockerttndashboard_postfix_1 is up-to-date +Recreating dockerttndashboard_influxdb_1 ... +Recreating dockerttndashboard_influxdb_1 ... done +Recreating dockerttndashboard_grafana_1 ... +Recreating dockerttndashboard_grafana_1 +Recreating dockerttndashboard_node-red_1 ... +Recreating dockerttndashboard_node-red_1 ... done +Recreating dockerttndashboard_apache_1 ... +Recreating dockerttndashboard_apache_1 ... done ``` @@ -23,19 +20,21 @@ Creating dockerttndashboard_apache_1 ... done ```console -cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose ps - Name Command State Ports ------------------------------------------------------------------------------------------------------------------------- -dockerttndashboard_apache_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp -dockerttndashboard_grafana_1 /run.sh Up 3000/tcp -dockerttndashboard_influxdb-backup_1 /sbin/my_init Up -dockerttndashboard_influxdb_1 /entrypoint.sh influxd Up 8086/tcp -dockerttndashboard_node-red_1 npm start -- --userDir /da ... Up 1880/tcp -dockerttndashboard_postfix_1 /sbin/my_init Up 0.0.0.0:25->25/tcp - -cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose exec influxdb influx -Connected to http://localhost:8086 version 1.4.0 -InfluxDB shell version: 1.4.0 +cmurugan@iot:~/server/influx_api_version/docker-ttn-dashboard$ docker-compose ps + + Name Command State Ports +----------------------------------------------------------------------------------------------------------------- +dockerttndashboard_apache_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp +dockerttndashboard_grafana_1 /run.sh Up 3000/tcp +dockerttndashboard_influxdb_1 /entrypoint.sh influxd Up 8086/tcp +dockerttndashboard_node-red_1 npm start -- --userDir /da ... Up 1880/tcp +dockerttndashboard_postfix_1 /sbin/my_init Up 0.0.0.0:25->25/tcp + +cmurugan@iot:~/server/influx_api_version/docker-ttn-dashboard$ docker-compose exec influxdb bash + +root@a16175bb4ce0:/opt/influxdb-backup# influx +Connected to http://localhost:8086 version 1.6.4 +InfluxDB shell version: 1.6.4 > show databases name: databases name @@ -62,32 +61,49 @@ time host region value ## BACKUP DATABASE -### Backup can be taken through shell script by using extra instance (influxdb-backup) and synced with Amazon S3 cloud +### Backup can be taken through shell script and synced with Amazon S3 cloud ```console -cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker exec -it dockerttndashboard_influxdb-backup_1 bash +root@a16175bb4ce0:/opt/influxdb-backup# backup.sh -root@56a388b52486:/opt/influxdb-backup# backup.sh Backup Influx metadata -2018/04/10 09:50:52 backing up metastore to /var/lib/influxdb-backup/meta.03 -2018/04/10 09:50:52 backup complete +2018/10/25 11:00:44 backing up metastore to /var/lib/influxdb-backup/meta.00 +2018/10/25 11:00:44 No database, retention policy or shard ID given. Full meta store backed up. +2018/10/25 11:00:44 Backing up all databases in portable format +2018/10/25 11:00:44 backing up db= +2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01T00:00:00Z +2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=6 to /var/lib/influxdb-backup/_internal.monitor.00006.00 since 0001-01-01T00:00:00Z +2018/10/25 11:00:44 backing up db=testdb rp=autogen shard=7 to /var/lib/influxdb-backup/testdb.autogen.00007.00 since 0001-01-01T00:00:00Z +2018/10/25 11:00:44 backup complete: +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.meta +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s1.tar.gz +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s6.tar.gz +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s7.tar.gz +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.manifest Creating backup for _internal -2018/04/10 09:50:52 backing up db=_internal since 0001-01-01 00:00:00 +0000 UTC -2018/04/10 09:50:52 backing up metastore to /var/lib/influxdb-backup/meta.04 -2018/04/10 09:50:52 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01 00:00:00 +0000 UTC -2018/04/10 09:50:52 backing up db=_internal rp=monitor shard=2 to /var/lib/influxdb-backup/_internal.monitor.00002.00 since 0001-01-01 00:00:00 +0000 UTC -2018/04/10 09:50:52 backup complete +2018/10/25 11:00:44 backing up metastore to /var/lib/influxdb-backup/meta.00 +2018/10/25 11:00:44 backing up db=_internal +2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01T00:00:00Z +2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=6 to /var/lib/influxdb-backup/_internal.monitor.00006.00 since 0001-01-01T00:00:00Z +2018/10/25 11:00:44 backup complete: +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.meta +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s1.tar.gz +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s6.tar.gz +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.manifest Creating backup for testdb -2018/04/10 09:50:52 backing up db=testdb since 0001-01-01 00:00:00 +0000 UTC -2018/04/10 09:50:52 backing up metastore to /var/lib/influxdb-backup/meta.05 -2018/04/10 09:50:52 backing up db=testdb rp=autogen shard=3 to /var/lib/influxdb-backup/testdb.autogen.00003.00 since 0001-01-01 00:00:00 +0000 UTC -2018/04/10 09:50:52 backup complete +2018/10/25 11:00:44 backing up metastore to /var/lib/influxdb-backup/meta.00 +2018/10/25 11:00:44 backing up db=testdb +2018/10/25 11:00:44 backing up db=testdb rp=autogen shard=7 to /var/lib/influxdb-backup/testdb.autogen.00007.00 since 0001-01-01T00:00:00Z +2018/10/25 11:00:44 backup complete: +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.meta +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s7.tar.gz +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.manifest tar: Removing leading `/' from member names tar: Removing leading `/' from member names -upload: ../../var/lib/amazon-bucket/data_directory_backup_2018-04-10.tar.gz to s3://mcci-influxdb-test/data_directory_backup_2018-04-10.tar.gz -upload: ../../var/lib/amazon-bucket/metdata_db_backup_2018-04-10.tar.gz to s3://mcci-influxdb-test/metdata_db_backup_2018-04-10.tar.gz +upload: ../../var/lib/influxdb-S3-bucket/data_directory_backup_2018-10-25.tar.gz to s3://mcci-influxdb-test/data_directory_backup_2018-10-25.tar.gz +upload: ../../var/lib/influxdb-S3-bucket/metdata_db_backup_2018-10-25.tar.gz to s3://mcci-influxdb-test/metdata_db_backup_2018-10-25.tar.gz ``` @@ -119,9 +135,10 @@ drwxr-xr-x 35 root root 4096 Apr 10 09:50 .. ```console -cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose exec influxdb influx -Connected to http://localhost:8086 version 1.4.0 -InfluxDB shell version: 1.4.0 +root@a16175bb4ce0:/opt/influxdb-backup# influx + +Connected to http://localhost:8086 version 1.6.4 +InfluxDB shell version: 1.6.4 > show databases name: databases name @@ -137,34 +154,31 @@ _internal > exit ``` - -`(Stop the influxdb database in order to restore dropped "testdb" database)` +### Restoring metadata and database ```console -cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose stop influxdb -Stopping dockerttndashboard_influxdb_1 ... done +root@a16175bb4ce0:/opt/influxdb-backup# influxd restore -portable -host $INFLUX_HOST:8088 /var/lib/influxdb-backup -cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker exec -it dockerttndashboard_influxdb-backup_1 bash -root@56a388b52486:/opt/influxdb-backup# influxd restore -metadir /var/lib/influxdb/meta /var/lib/influxdb-backup -Using metastore snapshot: /var/lib/influxdb-backup/meta.05 -root@56a388b52486:/opt/influxdb-backup# influxd restore -database testdb -datadir /var/lib/influxdb/data /var/lib/influxdb-backup -Restoring from backup /var/lib/influxdb-backup/testdb.* -unpacking /var/lib/influxdb/data/testdb/autogen/3/000000001-000000001.tsm +2018/10/25 11:02:48 Restoring shard 7 live from backup 20181025T110044Z.s7.tar.gz +2018/10/25 11:02:48 Meta info not found for shard 5 on database testdb. Skipping shard file 20181025T100801Z.s5.tar.gz +2018/10/25 11:02:48 Meta info not found for shard 1 on database _internal. Skipping shard file 20181025T095242Z.s1.tar.gz +2018/10/25 11:02:48 Meta info not found for shard 6 on database _internal. Skipping shard file 20181025T095242Z.s6.tar.gz +2018/10/25 11:02:48 Meta info not found for shard 3 on database testdb. Skipping shard file 20181024T143005Z.s3.tar.gz +2018/10/25 11:02:48 Meta info not found for shard 2 on database testdb. Skipping shard file 20181024T142358Z.s2.tar.gz +root@a16175bb4ce0:/opt/influxdb-backup# influxd restore -portable -host $INFLUX_HOST:8088 -database testdb /var/lib/influxdb-backup -``` - -### Start the influxdb database and check for whether database has been restored +2018/10/25 11:03:04 error updating meta: DB metadata not changed. database may already exist +restore: DB metadata not changed. database may already exist -```console +### Checking the Database has been restored -cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose start influxdb -Starting influxdb ... done +```console -cmurugan@iotserver:/iot/main-server/docker-ttn-dashboard_version_updates/docker-ttn-dashboard$ docker-compose exec influxdb influx -Connected to http://localhost:8086 version 1.4.0 -InfluxDB shell version: 1.4.0 +root@a16175bb4ce0:/opt/influxdb-backup# influx +Connected to http://localhost:8086 version 1.6.4 +InfluxDB shell version: 1.6.4 > show databases name: databases name @@ -177,7 +191,7 @@ Using database testdb name: cpu time host region value ---- ---- ------ ----- -1523353042145216096 serverA us_west 0.64 +1540391379121807732 serverA us_west 0.64 > exit ``` diff --git a/influxdb-backup/backup.sh b/influxdb-backup/backup.sh old mode 100644 new mode 100755 index 16b7661..27b44d8 --- a/influxdb-backup/backup.sh +++ b/influxdb-backup/backup.sh @@ -4,22 +4,22 @@ DATABASES=$(/bin/showdb.sh) echo 'Backup Influx metadata' -influxd backup -host $INFLUX_HOST:8088 /var/lib/influxdb-backup +influxd backup -portable -host $INFLUX_HOST:8088 /var/lib/influxdb-backup # Replace colons with spaces to create list. for db in ${DATABASES//:/ }; do echo "Creating backup for $db" - influxd backup -database $db -host $INFLUX_HOST:8088 /var/lib/influxdb-backup + influxd backup -portable -database $db -host $INFLUX_HOST:8088 /var/lib/influxdb-backup done if [ $? -eq 0 ]; then - tar czf /var/lib/amazon-bucket/metdata_db_backup_`date +%F`.tar.gz /var/lib/influxdb-backup/ - tar czf /var/lib/amazon-bucket/data_directory_backup_`date +%F`.tar.gz /var/lib/influxdb/ - aws s3 sync /var/lib/amazon-bucket/ s3://${S3_BUCKET_INFLUXDB}/ + tar czf /var/lib/influxdb-S3-bucket/metdata_db_backup_`date +%F`.tar.gz /var/lib/influxdb-backup/ + tar czf /var/lib/influxdb-S3-bucket/data_directory_backup_`date +%F`.tar.gz /var/lib/influxdb/ + aws s3 sync /var/lib/influxdb-S3-bucket/ s3://${S3_BUCKET_INFLUXDB}/ fi # Remove the old backup data in local directory to avoid excessive storage use -find /var/lib/amazon-bucket/ -type f -mtime +90 -exec rm {} \; +find /var/lib/influxdb-S3-bucket/ -type f -mtime +90 -exec rm {} \; From 8d8817be7fefa8d9c8f8f932cf3d6ebc7c344d7b Mon Sep 17 00:00:00 2001 From: cmurugan Date: Thu, 25 Oct 2018 17:26:13 +0530 Subject: [PATCH 07/65] small correction --- influxdb-backup/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/influxdb-backup/README.md b/influxdb-backup/README.md index 01b7b59..ef5d467 100644 --- a/influxdb-backup/README.md +++ b/influxdb-backup/README.md @@ -172,6 +172,8 @@ root@a16175bb4ce0:/opt/influxdb-backup# influxd restore -portable -host $INFLUX_ 2018/10/25 11:03:04 error updating meta: DB metadata not changed. database may already exist restore: DB metadata not changed. database may already exist +``` + ### Checking the Database has been restored ```console From d2b47f086a3e45d1b61efb56503b3ca5a4f85848 Mon Sep 17 00:00:00 2001 From: cmurugan Date: Thu, 25 Oct 2018 17:30:37 +0530 Subject: [PATCH 08/65] small correction --- influxdb-backup/README.md | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/influxdb-backup/README.md b/influxdb-backup/README.md index ef5d467..3286f91 100644 --- a/influxdb-backup/README.md +++ b/influxdb-backup/README.md @@ -111,21 +111,16 @@ upload: ../../var/lib/influxdb-S3-bucket/metdata_db_backup_2018-10-25.tar.gz to ```console -root@56a388b52486:/opt/influxdb-backup# cd /var/lib/influxdb-backup/ - -root@56a388b52486:/var/lib/influxdb-backup# ls -al -total 456 -drwxr-xr-x 2 root root 4096 Apr 10 09:50 . -drwxr-xr-x 35 root root 4096 Apr 10 09:50 .. --rw-r--r-- 1 root root 174592 Apr 10 09:50 _internal.monitor.00001.00 --rw-r--r-- 1 root root 250368 Apr 10 09:50 _internal.monitor.00002.00 --rw-r--r-- 1 root root 131 Apr 9 10:07 meta.00 --rw-r--r-- 1 root root 234 Apr 10 09:38 meta.01 --rw-r--r-- 1 root root 234 Apr 10 09:44 meta.02 --rw-r--r-- 1 root root 234 Apr 10 09:50 meta.03 --rw-r--r-- 1 root root 234 Apr 10 09:50 meta.04 --rw-r--r-- 1 root root 234 Apr 10 09:50 meta.05 --rw-r--r-- 1 root root 2048 Apr 10 09:50 testdb.autogen.00003.00 +root@a16175bb4ce0:/opt/influxdb-backup# ls /var/lib/influxdb-backup/ + +20181024T142358Z.manifest 20181024T143005Z.s3.tar.gz 20181025T094917Z.s1.tar.gz 20181025T095242Z.s6.tar.gz 20181025T110044Z.meta +20181024T142358Z.meta 20181024T160855Z.manifest 20181025T094917Z.s5.tar.gz 20181025T100801Z.manifest 20181025T110044Z.s1.tar.gz +20181024T142358Z.s1.tar.gz 20181024T160855Z.meta 20181025T094917Z.s6.tar.gz 20181025T100801Z.meta 20181025T110044Z.s6.tar.gz +20181024T142358Z.s2.tar.gz 20181024T160855Z.s1.tar.gz 20181025T095242Z.manifest 20181025T100801Z.s1.tar.gz 20181025T110044Z.s7.tar.gz +20181024T143005Z.manifest 20181024T160855Z.s5.tar.gz 20181025T095242Z.meta 20181025T100801Z.s5.tar.gz +20181024T143005Z.meta 20181025T094917Z.manifest 20181025T095242Z.s1.tar.gz 20181025T100801Z.s6.tar.gz +20181024T143005Z.s1.tar.gz 20181025T094917Z.meta 20181025T095242Z.s5.tar.gz 20181025T110044Z.manifest + ``` @@ -179,6 +174,7 @@ restore: DB metadata not changed. database may already exist ```console root@a16175bb4ce0:/opt/influxdb-backup# influx + Connected to http://localhost:8086 version 1.6.4 InfluxDB shell version: 1.6.4 > show databases From ab623ac18cbe39704d56b830d47b50589d8da4ff Mon Sep 17 00:00:00 2001 From: cmurugan Date: Wed, 7 Nov 2018 21:02:36 +0530 Subject: [PATCH 09/65] No need influxdb-backup directory --- influxdb/Dockerfile | 27 ++++++ influxdb/README.md | 195 ++++++++++++++++++++++++++++++++++++++++++++ influxdb/backup.sh | 25 ++++++ influxdb/showdb.sh | 10 +++ 4 files changed, 257 insertions(+) create mode 100644 influxdb/Dockerfile create mode 100644 influxdb/README.md create mode 100755 influxdb/backup.sh create mode 100755 influxdb/showdb.sh diff --git a/influxdb/Dockerfile b/influxdb/Dockerfile new file mode 100644 index 0000000..99a67f1 --- /dev/null +++ b/influxdb/Dockerfile @@ -0,0 +1,27 @@ +# +# Dockerfile for building the influxdb instance with backup setup +# + +# passing arguments to install influxdb specific version +ARG version + +FROM influxdb:${version} + +# Default InfluxDB host +ENV INFLUX_HOST=influxdb + +# Change workdir +RUN mkdir -p /opt/influxdb-backup +WORKDIR "/opt/influxdb-backup" + +# To backup influxdb to S3 Bucket, some packages need to be installed as follows: +RUN apt-get update && apt-get install -y python-pip +RUN pip install awscli --upgrade + +# Backup script +COPY showdb.sh /bin/showdb.sh +COPY backup.sh /bin/backup.sh +RUN chmod +x /bin/showdb.sh +RUN chmod +x /bin/backup.sh + +# end of file diff --git a/influxdb/README.md b/influxdb/README.md new file mode 100644 index 0000000..3286f91 --- /dev/null +++ b/influxdb/README.md @@ -0,0 +1,195 @@ +# BUILD SETUP + +```console + +cmurugan@iot:~/server/influx_api_version/docker-ttn-dashboard$ docker-compose up -d + +dockerttndashboard_postfix_1 is up-to-date +Recreating dockerttndashboard_influxdb_1 ... +Recreating dockerttndashboard_influxdb_1 ... done +Recreating dockerttndashboard_grafana_1 ... +Recreating dockerttndashboard_grafana_1 +Recreating dockerttndashboard_node-red_1 ... +Recreating dockerttndashboard_node-red_1 ... done +Recreating dockerttndashboard_apache_1 ... +Recreating dockerttndashboard_apache_1 ... done + +``` + +### status of docker container and databases + +```console + +cmurugan@iot:~/server/influx_api_version/docker-ttn-dashboard$ docker-compose ps + + Name Command State Ports +----------------------------------------------------------------------------------------------------------------- +dockerttndashboard_apache_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp +dockerttndashboard_grafana_1 /run.sh Up 3000/tcp +dockerttndashboard_influxdb_1 /entrypoint.sh influxd Up 8086/tcp +dockerttndashboard_node-red_1 npm start -- --userDir /da ... Up 1880/tcp +dockerttndashboard_postfix_1 /sbin/my_init Up 0.0.0.0:25->25/tcp + +cmurugan@iot:~/server/influx_api_version/docker-ttn-dashboard$ docker-compose exec influxdb bash + +root@a16175bb4ce0:/opt/influxdb-backup# influx +Connected to http://localhost:8086 version 1.6.4 +InfluxDB shell version: 1.6.4 +> show databases +name: databases +name +---- +_internal +> create database testdb +> show databases +name: databases +name +---- +_internal +testdb +> use testdb +Using database testdb +> INSERT cpu,host=serverA,region=us_west value=0.64 +> SELECT * FROM cpu +name: cpu +time host region value +---- ---- ------ ----- +1523353042145216096 serverA us_west 0.64 +> exit + +``` + +## BACKUP DATABASE + +### Backup can be taken through shell script and synced with Amazon S3 cloud + + +```console + +root@a16175bb4ce0:/opt/influxdb-backup# backup.sh + +Backup Influx metadata +2018/10/25 11:00:44 backing up metastore to /var/lib/influxdb-backup/meta.00 +2018/10/25 11:00:44 No database, retention policy or shard ID given. Full meta store backed up. +2018/10/25 11:00:44 Backing up all databases in portable format +2018/10/25 11:00:44 backing up db= +2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01T00:00:00Z +2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=6 to /var/lib/influxdb-backup/_internal.monitor.00006.00 since 0001-01-01T00:00:00Z +2018/10/25 11:00:44 backing up db=testdb rp=autogen shard=7 to /var/lib/influxdb-backup/testdb.autogen.00007.00 since 0001-01-01T00:00:00Z +2018/10/25 11:00:44 backup complete: +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.meta +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s1.tar.gz +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s6.tar.gz +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s7.tar.gz +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.manifest +Creating backup for _internal +2018/10/25 11:00:44 backing up metastore to /var/lib/influxdb-backup/meta.00 +2018/10/25 11:00:44 backing up db=_internal +2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01T00:00:00Z +2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=6 to /var/lib/influxdb-backup/_internal.monitor.00006.00 since 0001-01-01T00:00:00Z +2018/10/25 11:00:44 backup complete: +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.meta +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s1.tar.gz +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s6.tar.gz +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.manifest +Creating backup for testdb +2018/10/25 11:00:44 backing up metastore to /var/lib/influxdb-backup/meta.00 +2018/10/25 11:00:44 backing up db=testdb +2018/10/25 11:00:44 backing up db=testdb rp=autogen shard=7 to /var/lib/influxdb-backup/testdb.autogen.00007.00 since 0001-01-01T00:00:00Z +2018/10/25 11:00:44 backup complete: +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.meta +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s7.tar.gz +2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.manifest +tar: Removing leading `/' from member names +tar: Removing leading `/' from member names +upload: ../../var/lib/influxdb-S3-bucket/data_directory_backup_2018-10-25.tar.gz to s3://mcci-influxdb-test/data_directory_backup_2018-10-25.tar.gz +upload: ../../var/lib/influxdb-S3-bucket/metdata_db_backup_2018-10-25.tar.gz to s3://mcci-influxdb-test/metdata_db_backup_2018-10-25.tar.gz + +``` + +### Backup has been taken in the below folder + +```console + +root@a16175bb4ce0:/opt/influxdb-backup# ls /var/lib/influxdb-backup/ + +20181024T142358Z.manifest 20181024T143005Z.s3.tar.gz 20181025T094917Z.s1.tar.gz 20181025T095242Z.s6.tar.gz 20181025T110044Z.meta +20181024T142358Z.meta 20181024T160855Z.manifest 20181025T094917Z.s5.tar.gz 20181025T100801Z.manifest 20181025T110044Z.s1.tar.gz +20181024T142358Z.s1.tar.gz 20181024T160855Z.meta 20181025T094917Z.s6.tar.gz 20181025T100801Z.meta 20181025T110044Z.s6.tar.gz +20181024T142358Z.s2.tar.gz 20181024T160855Z.s1.tar.gz 20181025T095242Z.manifest 20181025T100801Z.s1.tar.gz 20181025T110044Z.s7.tar.gz +20181024T143005Z.manifest 20181024T160855Z.s5.tar.gz 20181025T095242Z.meta 20181025T100801Z.s5.tar.gz +20181024T143005Z.meta 20181025T094917Z.manifest 20181025T095242Z.s1.tar.gz 20181025T100801Z.s6.tar.gz +20181024T143005Z.s1.tar.gz 20181025T094917Z.meta 20181025T095242Z.s5.tar.gz 20181025T110044Z.manifest + + +``` + +## RESTORE DATABASE + +### Drop the "testdb" database for checking purpose + +```console + +root@a16175bb4ce0:/opt/influxdb-backup# influx + +Connected to http://localhost:8086 version 1.6.4 +InfluxDB shell version: 1.6.4 +> show databases +name: databases +name +---- +_internal +testdb +> drop database testdb +> show databases +name: databases +name +---- +_internal +> exit + +``` +### Restoring metadata and database + +```console + +root@a16175bb4ce0:/opt/influxdb-backup# influxd restore -portable -host $INFLUX_HOST:8088 /var/lib/influxdb-backup + +2018/10/25 11:02:48 Restoring shard 7 live from backup 20181025T110044Z.s7.tar.gz +2018/10/25 11:02:48 Meta info not found for shard 5 on database testdb. Skipping shard file 20181025T100801Z.s5.tar.gz +2018/10/25 11:02:48 Meta info not found for shard 1 on database _internal. Skipping shard file 20181025T095242Z.s1.tar.gz +2018/10/25 11:02:48 Meta info not found for shard 6 on database _internal. Skipping shard file 20181025T095242Z.s6.tar.gz +2018/10/25 11:02:48 Meta info not found for shard 3 on database testdb. Skipping shard file 20181024T143005Z.s3.tar.gz +2018/10/25 11:02:48 Meta info not found for shard 2 on database testdb. Skipping shard file 20181024T142358Z.s2.tar.gz + +root@a16175bb4ce0:/opt/influxdb-backup# influxd restore -portable -host $INFLUX_HOST:8088 -database testdb /var/lib/influxdb-backup + +2018/10/25 11:03:04 error updating meta: DB metadata not changed. database may already exist +restore: DB metadata not changed. database may already exist + +``` + +### Checking the Database has been restored + +```console + +root@a16175bb4ce0:/opt/influxdb-backup# influx + +Connected to http://localhost:8086 version 1.6.4 +InfluxDB shell version: 1.6.4 +> show databases +name: databases +name +---- +_internal +testdb +> use testdb +Using database testdb +> SELECT * FROM cpu +name: cpu +time host region value +---- ---- ------ ----- +1540391379121807732 serverA us_west 0.64 +> exit + +``` diff --git a/influxdb/backup.sh b/influxdb/backup.sh new file mode 100755 index 0000000..27b44d8 --- /dev/null +++ b/influxdb/backup.sh @@ -0,0 +1,25 @@ +#!/bin/bash +#The Shell script will be used for taking backup and send it to Amazon s3 bucket. + +DATABASES=$(/bin/showdb.sh) + +echo 'Backup Influx metadata' +influxd backup -portable -host $INFLUX_HOST:8088 /var/lib/influxdb-backup + +# Replace colons with spaces to create list. +for db in ${DATABASES//:/ }; do + echo "Creating backup for $db" + influxd backup -portable -database $db -host $INFLUX_HOST:8088 /var/lib/influxdb-backup +done + +if [ $? -eq 0 ]; then + + tar czf /var/lib/influxdb-S3-bucket/metdata_db_backup_`date +%F`.tar.gz /var/lib/influxdb-backup/ + tar czf /var/lib/influxdb-S3-bucket/data_directory_backup_`date +%F`.tar.gz /var/lib/influxdb/ + aws s3 sync /var/lib/influxdb-S3-bucket/ s3://${S3_BUCKET_INFLUXDB}/ + +fi + +# Remove the old backup data in local directory to avoid excessive storage use +find /var/lib/influxdb-S3-bucket/ -type f -mtime +90 -exec rm {} \; + diff --git a/influxdb/showdb.sh b/influxdb/showdb.sh new file mode 100755 index 0000000..75c7a85 --- /dev/null +++ b/influxdb/showdb.sh @@ -0,0 +1,10 @@ +#! /bin/bash +# TO Show all Databases that will be used by backup.sh script for backup + +showdb(){ +influx -host $INFLUX_HOST -port 8086 -execute 'SHOW DATABASES' +} + +DATABASES=$(showdb) + +echo $DATABASES | sed -e 's/[\r]//g' | sed -e 's/^.\{26\}//' | sed 's/ /:/g' From 90e443e80d44d520ab3cbe8f670c5687964e1389 Mon Sep 17 00:00:00 2001 From: cmurugan Date: Wed, 7 Nov 2018 21:06:34 +0530 Subject: [PATCH 10/65] No need influxdb-backup directory --- influxdb-backup/Dockerfile | 27 ----- influxdb-backup/README.md | 195 ------------------------------------- influxdb-backup/backup.sh | 25 ----- influxdb-backup/showdb.sh | 10 -- 4 files changed, 257 deletions(-) delete mode 100644 influxdb-backup/Dockerfile delete mode 100644 influxdb-backup/README.md delete mode 100755 influxdb-backup/backup.sh delete mode 100755 influxdb-backup/showdb.sh diff --git a/influxdb-backup/Dockerfile b/influxdb-backup/Dockerfile deleted file mode 100644 index 99a67f1..0000000 --- a/influxdb-backup/Dockerfile +++ /dev/null @@ -1,27 +0,0 @@ -# -# Dockerfile for building the influxdb instance with backup setup -# - -# passing arguments to install influxdb specific version -ARG version - -FROM influxdb:${version} - -# Default InfluxDB host -ENV INFLUX_HOST=influxdb - -# Change workdir -RUN mkdir -p /opt/influxdb-backup -WORKDIR "/opt/influxdb-backup" - -# To backup influxdb to S3 Bucket, some packages need to be installed as follows: -RUN apt-get update && apt-get install -y python-pip -RUN pip install awscli --upgrade - -# Backup script -COPY showdb.sh /bin/showdb.sh -COPY backup.sh /bin/backup.sh -RUN chmod +x /bin/showdb.sh -RUN chmod +x /bin/backup.sh - -# end of file diff --git a/influxdb-backup/README.md b/influxdb-backup/README.md deleted file mode 100644 index 3286f91..0000000 --- a/influxdb-backup/README.md +++ /dev/null @@ -1,195 +0,0 @@ -# BUILD SETUP - -```console - -cmurugan@iot:~/server/influx_api_version/docker-ttn-dashboard$ docker-compose up -d - -dockerttndashboard_postfix_1 is up-to-date -Recreating dockerttndashboard_influxdb_1 ... -Recreating dockerttndashboard_influxdb_1 ... done -Recreating dockerttndashboard_grafana_1 ... -Recreating dockerttndashboard_grafana_1 -Recreating dockerttndashboard_node-red_1 ... -Recreating dockerttndashboard_node-red_1 ... done -Recreating dockerttndashboard_apache_1 ... -Recreating dockerttndashboard_apache_1 ... done - -``` - -### status of docker container and databases - -```console - -cmurugan@iot:~/server/influx_api_version/docker-ttn-dashboard$ docker-compose ps - - Name Command State Ports ------------------------------------------------------------------------------------------------------------------ -dockerttndashboard_apache_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp -dockerttndashboard_grafana_1 /run.sh Up 3000/tcp -dockerttndashboard_influxdb_1 /entrypoint.sh influxd Up 8086/tcp -dockerttndashboard_node-red_1 npm start -- --userDir /da ... Up 1880/tcp -dockerttndashboard_postfix_1 /sbin/my_init Up 0.0.0.0:25->25/tcp - -cmurugan@iot:~/server/influx_api_version/docker-ttn-dashboard$ docker-compose exec influxdb bash - -root@a16175bb4ce0:/opt/influxdb-backup# influx -Connected to http://localhost:8086 version 1.6.4 -InfluxDB shell version: 1.6.4 -> show databases -name: databases -name ----- -_internal -> create database testdb -> show databases -name: databases -name ----- -_internal -testdb -> use testdb -Using database testdb -> INSERT cpu,host=serverA,region=us_west value=0.64 -> SELECT * FROM cpu -name: cpu -time host region value ----- ---- ------ ----- -1523353042145216096 serverA us_west 0.64 -> exit - -``` - -## BACKUP DATABASE - -### Backup can be taken through shell script and synced with Amazon S3 cloud - - -```console - -root@a16175bb4ce0:/opt/influxdb-backup# backup.sh - -Backup Influx metadata -2018/10/25 11:00:44 backing up metastore to /var/lib/influxdb-backup/meta.00 -2018/10/25 11:00:44 No database, retention policy or shard ID given. Full meta store backed up. -2018/10/25 11:00:44 Backing up all databases in portable format -2018/10/25 11:00:44 backing up db= -2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01T00:00:00Z -2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=6 to /var/lib/influxdb-backup/_internal.monitor.00006.00 since 0001-01-01T00:00:00Z -2018/10/25 11:00:44 backing up db=testdb rp=autogen shard=7 to /var/lib/influxdb-backup/testdb.autogen.00007.00 since 0001-01-01T00:00:00Z -2018/10/25 11:00:44 backup complete: -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.meta -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s1.tar.gz -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s6.tar.gz -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s7.tar.gz -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.manifest -Creating backup for _internal -2018/10/25 11:00:44 backing up metastore to /var/lib/influxdb-backup/meta.00 -2018/10/25 11:00:44 backing up db=_internal -2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01T00:00:00Z -2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=6 to /var/lib/influxdb-backup/_internal.monitor.00006.00 since 0001-01-01T00:00:00Z -2018/10/25 11:00:44 backup complete: -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.meta -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s1.tar.gz -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s6.tar.gz -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.manifest -Creating backup for testdb -2018/10/25 11:00:44 backing up metastore to /var/lib/influxdb-backup/meta.00 -2018/10/25 11:00:44 backing up db=testdb -2018/10/25 11:00:44 backing up db=testdb rp=autogen shard=7 to /var/lib/influxdb-backup/testdb.autogen.00007.00 since 0001-01-01T00:00:00Z -2018/10/25 11:00:44 backup complete: -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.meta -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s7.tar.gz -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.manifest -tar: Removing leading `/' from member names -tar: Removing leading `/' from member names -upload: ../../var/lib/influxdb-S3-bucket/data_directory_backup_2018-10-25.tar.gz to s3://mcci-influxdb-test/data_directory_backup_2018-10-25.tar.gz -upload: ../../var/lib/influxdb-S3-bucket/metdata_db_backup_2018-10-25.tar.gz to s3://mcci-influxdb-test/metdata_db_backup_2018-10-25.tar.gz - -``` - -### Backup has been taken in the below folder - -```console - -root@a16175bb4ce0:/opt/influxdb-backup# ls /var/lib/influxdb-backup/ - -20181024T142358Z.manifest 20181024T143005Z.s3.tar.gz 20181025T094917Z.s1.tar.gz 20181025T095242Z.s6.tar.gz 20181025T110044Z.meta -20181024T142358Z.meta 20181024T160855Z.manifest 20181025T094917Z.s5.tar.gz 20181025T100801Z.manifest 20181025T110044Z.s1.tar.gz -20181024T142358Z.s1.tar.gz 20181024T160855Z.meta 20181025T094917Z.s6.tar.gz 20181025T100801Z.meta 20181025T110044Z.s6.tar.gz -20181024T142358Z.s2.tar.gz 20181024T160855Z.s1.tar.gz 20181025T095242Z.manifest 20181025T100801Z.s1.tar.gz 20181025T110044Z.s7.tar.gz -20181024T143005Z.manifest 20181024T160855Z.s5.tar.gz 20181025T095242Z.meta 20181025T100801Z.s5.tar.gz -20181024T143005Z.meta 20181025T094917Z.manifest 20181025T095242Z.s1.tar.gz 20181025T100801Z.s6.tar.gz -20181024T143005Z.s1.tar.gz 20181025T094917Z.meta 20181025T095242Z.s5.tar.gz 20181025T110044Z.manifest - - -``` - -## RESTORE DATABASE - -### Drop the "testdb" database for checking purpose - -```console - -root@a16175bb4ce0:/opt/influxdb-backup# influx - -Connected to http://localhost:8086 version 1.6.4 -InfluxDB shell version: 1.6.4 -> show databases -name: databases -name ----- -_internal -testdb -> drop database testdb -> show databases -name: databases -name ----- -_internal -> exit - -``` -### Restoring metadata and database - -```console - -root@a16175bb4ce0:/opt/influxdb-backup# influxd restore -portable -host $INFLUX_HOST:8088 /var/lib/influxdb-backup - -2018/10/25 11:02:48 Restoring shard 7 live from backup 20181025T110044Z.s7.tar.gz -2018/10/25 11:02:48 Meta info not found for shard 5 on database testdb. Skipping shard file 20181025T100801Z.s5.tar.gz -2018/10/25 11:02:48 Meta info not found for shard 1 on database _internal. Skipping shard file 20181025T095242Z.s1.tar.gz -2018/10/25 11:02:48 Meta info not found for shard 6 on database _internal. Skipping shard file 20181025T095242Z.s6.tar.gz -2018/10/25 11:02:48 Meta info not found for shard 3 on database testdb. Skipping shard file 20181024T143005Z.s3.tar.gz -2018/10/25 11:02:48 Meta info not found for shard 2 on database testdb. Skipping shard file 20181024T142358Z.s2.tar.gz - -root@a16175bb4ce0:/opt/influxdb-backup# influxd restore -portable -host $INFLUX_HOST:8088 -database testdb /var/lib/influxdb-backup - -2018/10/25 11:03:04 error updating meta: DB metadata not changed. database may already exist -restore: DB metadata not changed. database may already exist - -``` - -### Checking the Database has been restored - -```console - -root@a16175bb4ce0:/opt/influxdb-backup# influx - -Connected to http://localhost:8086 version 1.6.4 -InfluxDB shell version: 1.6.4 -> show databases -name: databases -name ----- -_internal -testdb -> use testdb -Using database testdb -> SELECT * FROM cpu -name: cpu -time host region value ----- ---- ------ ----- -1540391379121807732 serverA us_west 0.64 -> exit - -``` diff --git a/influxdb-backup/backup.sh b/influxdb-backup/backup.sh deleted file mode 100755 index 27b44d8..0000000 --- a/influxdb-backup/backup.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -#The Shell script will be used for taking backup and send it to Amazon s3 bucket. - -DATABASES=$(/bin/showdb.sh) - -echo 'Backup Influx metadata' -influxd backup -portable -host $INFLUX_HOST:8088 /var/lib/influxdb-backup - -# Replace colons with spaces to create list. -for db in ${DATABASES//:/ }; do - echo "Creating backup for $db" - influxd backup -portable -database $db -host $INFLUX_HOST:8088 /var/lib/influxdb-backup -done - -if [ $? -eq 0 ]; then - - tar czf /var/lib/influxdb-S3-bucket/metdata_db_backup_`date +%F`.tar.gz /var/lib/influxdb-backup/ - tar czf /var/lib/influxdb-S3-bucket/data_directory_backup_`date +%F`.tar.gz /var/lib/influxdb/ - aws s3 sync /var/lib/influxdb-S3-bucket/ s3://${S3_BUCKET_INFLUXDB}/ - -fi - -# Remove the old backup data in local directory to avoid excessive storage use -find /var/lib/influxdb-S3-bucket/ -type f -mtime +90 -exec rm {} \; - diff --git a/influxdb-backup/showdb.sh b/influxdb-backup/showdb.sh deleted file mode 100755 index 75c7a85..0000000 --- a/influxdb-backup/showdb.sh +++ /dev/null @@ -1,10 +0,0 @@ -#! /bin/bash -# TO Show all Databases that will be used by backup.sh script for backup - -showdb(){ -influx -host $INFLUX_HOST -port 8086 -execute 'SHOW DATABASES' -} - -DATABASES=$(showdb) - -echo $DATABASES | sed -e 's/[\r]//g' | sed -e 's/^.\{26\}//' | sed 's/ /:/g' From 79e0bd52c4813ef6431d47779cfa78c370b76e70 Mon Sep 17 00:00:00 2001 From: cmurugan Date: Wed, 7 Nov 2018 21:08:17 +0530 Subject: [PATCH 11/65] Hostname and domain name modification --- postfix/Dockerfile | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/postfix/Dockerfile b/postfix/Dockerfile index e093ed3..c124440 100644 --- a/postfix/Dockerfile +++ b/postfix/Dockerfile @@ -8,31 +8,37 @@ FROM phusion/baseimage RUN apt-get update && apt-get install -y \ iputils-ping \ net-tools \ - debconf-utils \ - mailutils + debconf-utils # passing arguments to build postfix image +ARG hostname ARG relay_ip -ARG host_name ARG domain # Install Postfix -RUN echo "postfix postfix/mailname string $host_name" | debconf-set-selections -RUN echo "postfix postfix/main_mailer_type string 'Internet Site'" | debconf-set-selections -RUN apt-get install -y postfix -RUN postconf -e relayhost=$relay_ip -RUN postconf -e myhostname=$host_name -RUN postconf -e mydomain=$domain -RUN postconf -e smtp_generic_maps=hash:/etc/postfix/generic -RUN postconf -e mynetworks="127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 172.18.0.0/16" -RUN postconf -e smtpd_use_tls=no -RUN echo $host_name > /etc/mailname - -# This will replace local mail addresses by valid Internet addresses when mail leaves the machine via SMTP. so please change it according to container. -RUN echo "root@aa7fde2ee7f1 iotmail@example.com" > /etc/postfix/generic -RUN postmap /etc/postfix/generic +run echo "postfix postfix/mailname string $host_name" | debconf-set-selections +run echo "postfix postfix/main_mailer_type string 'Internet Site'" | debconf-set-selections +run apt-get update && apt-get install -y postfix +run postconf -e relayhost=$relay_ip +run postconf -e myhostname=$hostname +run postconf -e mydomain=$domain +run postconf -e masquerade_domains=$domain +run postconf -e mydestination="\$myhostname, $hostname, localhost, localhost.localdomain, localhost" +run postconf -e mynetworks="127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 172.0.0.0/8" +run postconf -e smtpd_use_tls=no +run echo $domain > /etc/mailname + +# This will replace local mail addresses by valid Internet addresses when mail leaves the machine via SMTP. +run echo "root@${hostname} iotmail@${domain}" > /etc/postfix/generic +run postconf -e smtp_generic_maps=hash:/etc/postfix/generic +run postmap /etc/postfix/generic + +# mail command would be used for sending mails +run apt-get install -y mailutils # Start the postfix daemon during container startup RUN mkdir -p /etc/my_init.d COPY postfix.sh /etc/my_init.d/postfix.sh RUN chmod +x /etc/my_init.d/postfix.sh + + From 56aee15b65a5b88532419a60e546b5da2e14582e Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Thu, 4 Jul 2019 14:54:36 +0530 Subject: [PATCH 12/65] Updated files with Terry --- apache/Dockerfile.bak | 40 +++++++++++++++++++++ apache/certbot_cron.sh.bak | 11 ++++++ apache/proxy-grafana.conf.bak | 7 ++++ apache/proxy-influxdb.conf.bak | 19 ++++++++++ apache/proxy-nodered.conf.bak | 15 ++++++++ apache/setup.sh.bak | 63 ++++++++++++++++++++++++++++++++++ 6 files changed, 155 insertions(+) create mode 100644 apache/Dockerfile.bak create mode 100644 apache/certbot_cron.sh.bak create mode 100644 apache/proxy-grafana.conf.bak create mode 100644 apache/proxy-influxdb.conf.bak create mode 100644 apache/proxy-nodered.conf.bak create mode 100644 apache/setup.sh.bak diff --git a/apache/Dockerfile.bak b/apache/Dockerfile.bak new file mode 100644 index 0000000..723da05 --- /dev/null +++ b/apache/Dockerfile.bak @@ -0,0 +1,40 @@ +# +# Dockerfile for building the apache image +# + +# Start from Phusion. +FROM phusion/baseimage + +RUN /usr/bin/apt-get update && /usr/bin/apt-get install software-properties-common -y +RUN /usr/bin/add-apt-repository ppa:certbot/certbot && /usr/bin/apt-get update && /usr/bin/apt-get install apache2 -y +# +# Add the certbot layer +# +RUN /usr/bin/apt-get install python-certbot-apache -y +# +# enable proxys and generally set up. +# +RUN /usr/sbin/a2enmod proxy && \ + /usr/sbin/a2enmod proxy_http && \ + echo "ServerName localhost" > /etc/apache2/conf-available/fqdn.conf && \ + /usr/sbin/a2enconf fqdn.conf && \ + /usr/sbin/a2enmod authz_user authz_groupfile proxy_wstunnel + +# RUN mkdir -p /root +COPY setup.sh proxy-*.conf /root/ + +# Running scripts during container startup for letsencrypt update and Apache +RUN mkdir -p /etc/my_init.d +COPY setup.sh /etc/my_init.d/setup.sh +RUN chmod +x /etc/my_init.d/setup.sh + +# Enable letsencrypt renewal crontab +COPY certbot_cron.sh /etc/my_init.d/certbot_cron.sh +RUN chmod +x /etc/my_init.d/certbot_cron.sh + +# Start the Apache2 daemon during container startup +RUN mkdir /etc/service/apache2 +COPY apache2.sh /etc/service/apache2/run +RUN chmod +x /etc/service/apache2/run + +# end of file diff --git a/apache/certbot_cron.sh.bak b/apache/certbot_cron.sh.bak new file mode 100644 index 0000000..adf565b --- /dev/null +++ b/apache/certbot_cron.sh.bak @@ -0,0 +1,11 @@ +#!/bin/sh + +cd /root +#write out current crontab +crontab -l > mycron + +#echo new cron into cron file +echo "15 3 * * * /usr/bin/certbot renew" >> mycron + +#install new cron file +crontab mycron diff --git a/apache/proxy-grafana.conf.bak b/apache/proxy-grafana.conf.bak new file mode 100644 index 0000000..8604dbe --- /dev/null +++ b/apache/proxy-grafana.conf.bak @@ -0,0 +1,7 @@ + Redirect 301 / https://@{FQDN}/grafana/ + Redirect 301 /index.html https://@{FQDN}/grafana/ + Redirect 301 /grafana https://@{FQDN}/grafana/ + + ProxyPass http://grafana:3000/ + ProxyPassReverse http://grafana:3000/ + diff --git a/apache/proxy-influxdb.conf.bak b/apache/proxy-influxdb.conf.bak new file mode 100644 index 0000000..a31d9ea --- /dev/null +++ b/apache/proxy-influxdb.conf.bak @@ -0,0 +1,19 @@ + Redirect 301 /influxdb https://@{FQDN}/influxdb/ + + AuthType Basic + AuthName "InfluxDB admin" + AuthUserFile /etc/apache2/authdata/.htpasswd + AuthGroupFile /etc/apache2/authdata/.htgroup + Require group admin + ProxyPass http://influxdb:8083/ + ProxyPassReverse http://influxdb:8083/ + + + AuthType Basic + AuthName "InfluxDB queries" + AuthUserFile /etc/apache2/authdata/.htpasswd + AuthGroupFile /etc/apache2/authdata/.htgroup + Require group query + ProxyPass http://influxdb:8086/ + ProxyPassReverse http://influxdb:8086/ + diff --git a/apache/proxy-nodered.conf.bak b/apache/proxy-nodered.conf.bak new file mode 100644 index 0000000..5c1837e --- /dev/null +++ b/apache/proxy-nodered.conf.bak @@ -0,0 +1,15 @@ + ProxyPass /node-red/comms/ ws://node-red:1880/comms/ + ProxyPassReverse /node-red/comms/ ws://node-red:1880/comms/ + ProxyPass /node-red/comms ws://node-red:1880/comms + ProxyPassReverse /node-red/comms ws://node-red:1880/comms + ProxyPass /node-red/ http://node-red:1880/ + ProxyPassReverse /node-red/ http://node-red:1880/ + + Redirect 301 /node-red https://@{FQDN}/node-red/ + + AuthType Basic + AuthName "Node-RED" + AuthUserFile /etc/apache2/authdata/.htpasswd + AuthGroupFile /etc/apache2/authdata/.htgroup + Require group node-red + diff --git a/apache/setup.sh.bak b/apache/setup.sh.bak new file mode 100644 index 0000000..760f011 --- /dev/null +++ b/apache/setup.sh.bak @@ -0,0 +1,63 @@ +#!/bin/bash + +# set up the environment; these might not be set. +export HOME="/root" +export PATH="${PATH}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + +# test that we have a proper setup. +cd $HOME || exit 2 + +# test that authentication is set up, and set permissions as needed by us +if [ ! -d /etc/apache2/authdata ] ; then + echo "The authdata directory is not set; refer to docker-compose script" + exit 3 +fi +if [ ! -f /etc/apache2/authdata/.htpasswd ]; then + echo ".htpasswd file not found" + exit 3 +fi +if [ ! -f /etc/apache2/authdata/.htgroup ]; then + echo ".htgroup file not found" + exit 3 +fi +chown www-data /etc/apache2/authdata /etc/apache2/authdata/.htpasswd /etc/apache2/authdata/.htgroup +chmod 700 /etc/apache2/authdata +chmod 600 /etc/apache2/authdata/.htpasswd /etc/apache2/authdata/.htgroup + +# check that we got the vars we need +if [ -z "$CERTBOT_DOMAINS" -o "$CERTBOT_DOMAINS" = "." ]; then + echo "The docker-compose script must set CERTBOT_DOMAINS to value to be passed to certbot for --domains" + exit 3 +fi + +if [ -z "$CERTBOT_EMAIL" -o "$CERTBOT_EMAIL" = "." ]; then + echo "The docker-compose script must set CERTBOT_EMAIL to an email address useful to certbot/letsencrypt for notifications" + exit 3 +fi + +if [ -z "$APACHE_FQDN" -o "$APACHE_FQDN" = "." ]; then + echo "The docker-compose script must set APACHE_FQDN to the (single) fully-qualified domain at the top level" + exit 3 +fi + +# run cerbot to set up apache +if [ "$CERTBOT_TEST" != "test" ]; then + certbot --agree-tos --email "${CERTBOT_EMAIL}" --non-interactive --domains "$CERTBOT_DOMAINS" --apache --agree-tos --rsa-key-size 4096 --redirect || exit 4 + + # certbot actually launched apache. The simple hack is to stop it; then launch + # it again after we've edited the config files. + /usr/sbin/apache2ctl stop +fi + +# now, add the fields to the virtual host section for https. +set -- proxy-*.conf +if [ "$1" != "proxy-*.conf" ] ; then + echo "add proxy-specs to configuration from:" "$@" + sed -e "s/@{FQDN}/${APACHE_FQDN}/g" "$@" > /tmp/proxyspecs.conf || exit 5 + sed -e '/^ServerName/r/tmp/proxyspecs.conf' /etc/apache2/sites-available/000-default-le-ssl.conf > /tmp/000-default-le-ssl-local.conf || exit 6 + mv /tmp/000-default-le-ssl-local.conf /etc/apache2/sites-available || exit 7 + echo "enable the modified site, and disable the ssl defaults" + /usr/sbin/a2dissite 000-default-le-ssl.conf || exit 8 + /usr/sbin/a2ensite 000-default-le-ssl-local.conf || exit 9 +fi + From 346990915e443350b7caafb726bc5d36ba9dd15b Mon Sep 17 00:00:00 2001 From: root Date: Fri, 29 Nov 2019 15:33:36 +0530 Subject: [PATCH 13/65] added mqtts setup --- apache/Dockerfile.bak | 40 -------------------- apache/apache2.sh | 2 - apache/certbot_cron.sh.bak | 11 ------ apache/proxy-grafana.conf | 16 -------- apache/proxy-grafana.conf.bak | 7 ---- apache/proxy-influxdb.conf | 17 --------- apache/proxy-influxdb.conf.bak | 19 ---------- apache/proxy-nodered.conf | 22 ----------- apache/proxy-nodered.conf.bak | 15 -------- apache/setup.sh | 63 ------------------------------- apache/setup.sh.bak | 63 ------------------------------- influxdb/Dockerfile | 2 - influxdb/backup.sh | 29 ++++++++++---- influxdb/showdb.sh | 10 ----- mqtts/Dockerfile | 34 +++++++++++++++++ mqtts/mosquitto.conf | 19 ++++++++++ mqtts/mosquitto.sh | 2 + {apache => nginx}/Dockerfile | 21 ++++++----- {apache => nginx}/certbot_cron.sh | 0 nginx/nginx.sh | 2 + nginx/proxy-grafana.conf | 22 +++++++++++ nginx/proxy-influxdb.conf | 19 ++++++++++ nginx/proxy-mqtts.conf | 10 +++++ nginx/proxy-nodered.conf | 19 ++++++++++ nginx/setup.sh | 60 +++++++++++++++++++++++++++++ 25 files changed, 219 insertions(+), 305 deletions(-) delete mode 100644 apache/Dockerfile.bak delete mode 100644 apache/apache2.sh delete mode 100644 apache/certbot_cron.sh.bak delete mode 100644 apache/proxy-grafana.conf delete mode 100644 apache/proxy-grafana.conf.bak delete mode 100644 apache/proxy-influxdb.conf delete mode 100644 apache/proxy-influxdb.conf.bak delete mode 100644 apache/proxy-nodered.conf delete mode 100644 apache/proxy-nodered.conf.bak delete mode 100644 apache/setup.sh delete mode 100644 apache/setup.sh.bak delete mode 100755 influxdb/showdb.sh create mode 100644 mqtts/Dockerfile create mode 100644 mqtts/mosquitto.conf create mode 100644 mqtts/mosquitto.sh rename {apache => nginx}/Dockerfile (58%) rename {apache => nginx}/certbot_cron.sh (100%) create mode 100644 nginx/nginx.sh create mode 100644 nginx/proxy-grafana.conf create mode 100644 nginx/proxy-influxdb.conf create mode 100644 nginx/proxy-mqtts.conf create mode 100644 nginx/proxy-nodered.conf create mode 100644 nginx/setup.sh diff --git a/apache/Dockerfile.bak b/apache/Dockerfile.bak deleted file mode 100644 index 723da05..0000000 --- a/apache/Dockerfile.bak +++ /dev/null @@ -1,40 +0,0 @@ -# -# Dockerfile for building the apache image -# - -# Start from Phusion. -FROM phusion/baseimage - -RUN /usr/bin/apt-get update && /usr/bin/apt-get install software-properties-common -y -RUN /usr/bin/add-apt-repository ppa:certbot/certbot && /usr/bin/apt-get update && /usr/bin/apt-get install apache2 -y -# -# Add the certbot layer -# -RUN /usr/bin/apt-get install python-certbot-apache -y -# -# enable proxys and generally set up. -# -RUN /usr/sbin/a2enmod proxy && \ - /usr/sbin/a2enmod proxy_http && \ - echo "ServerName localhost" > /etc/apache2/conf-available/fqdn.conf && \ - /usr/sbin/a2enconf fqdn.conf && \ - /usr/sbin/a2enmod authz_user authz_groupfile proxy_wstunnel - -# RUN mkdir -p /root -COPY setup.sh proxy-*.conf /root/ - -# Running scripts during container startup for letsencrypt update and Apache -RUN mkdir -p /etc/my_init.d -COPY setup.sh /etc/my_init.d/setup.sh -RUN chmod +x /etc/my_init.d/setup.sh - -# Enable letsencrypt renewal crontab -COPY certbot_cron.sh /etc/my_init.d/certbot_cron.sh -RUN chmod +x /etc/my_init.d/certbot_cron.sh - -# Start the Apache2 daemon during container startup -RUN mkdir /etc/service/apache2 -COPY apache2.sh /etc/service/apache2/run -RUN chmod +x /etc/service/apache2/run - -# end of file diff --git a/apache/apache2.sh b/apache/apache2.sh deleted file mode 100644 index 5fd8874..0000000 --- a/apache/apache2.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -exec /usr/sbin/apache2ctl -DFOREGROUND diff --git a/apache/certbot_cron.sh.bak b/apache/certbot_cron.sh.bak deleted file mode 100644 index adf565b..0000000 --- a/apache/certbot_cron.sh.bak +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -cd /root -#write out current crontab -crontab -l > mycron - -#echo new cron into cron file -echo "15 3 * * * /usr/bin/certbot renew" >> mycron - -#install new cron file -crontab mycron diff --git a/apache/proxy-grafana.conf b/apache/proxy-grafana.conf deleted file mode 100644 index 2a5dd3b..0000000 --- a/apache/proxy-grafana.conf +++ /dev/null @@ -1,16 +0,0 @@ - Redirect 301 / https://@{FQDN}/grafana/ - Redirect 301 /index.html https://@{FQDN}/grafana/ - Redirect 301 /grafana https://@{FQDN}/grafana/ - - Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" - Header always set X-Frame-Options "SAMEORIGIN" - Header always set X-Xss-Protection "1; mode=block" - Header always set X-Content-Type-Options "nosniff" - Header always set Content-Security-Policy "default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: *.global.ssl.fastly.net" - Header always set Referrer-Policy: "same-origin" - Header always set Feature-Policy: "accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'" - Header edit Set-Cookie ^(.*)$ $1;Secure - ProxyPass http://grafana:3000/ - ProxyPassReverse http://grafana:3000/ - ProxyPassReverseCookiePath / /grafana/ - diff --git a/apache/proxy-grafana.conf.bak b/apache/proxy-grafana.conf.bak deleted file mode 100644 index 8604dbe..0000000 --- a/apache/proxy-grafana.conf.bak +++ /dev/null @@ -1,7 +0,0 @@ - Redirect 301 / https://@{FQDN}/grafana/ - Redirect 301 /index.html https://@{FQDN}/grafana/ - Redirect 301 /grafana https://@{FQDN}/grafana/ - - ProxyPass http://grafana:3000/ - ProxyPassReverse http://grafana:3000/ - diff --git a/apache/proxy-influxdb.conf b/apache/proxy-influxdb.conf deleted file mode 100644 index 2116290..0000000 --- a/apache/proxy-influxdb.conf +++ /dev/null @@ -1,17 +0,0 @@ - Redirect 301 /influxdb:8086/ https://@{FQDN}/influxdb:8086/ - - Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" - Header always set X-Frame-Options "SAMEORIGIN" - Header always set X-Xss-Protection "1; mode=block" - Header always set X-Content-Type-Options "nosniff" - Header always set Content-Security-Policy "default-src 'self'" - Header always set Referrer-Policy: "same-origin" - Header always set Feature-Policy: "accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'" - AuthType Basic - AuthName "InfluxDB queries" - AuthUserFile /etc/apache2/authdata/.htpasswd - AuthGroupFile /etc/apache2/authdata/.htgroup - Require group query - ProxyPass http://influxdb:8086/ - ProxyPassReverse http://influxdb:8086/ - diff --git a/apache/proxy-influxdb.conf.bak b/apache/proxy-influxdb.conf.bak deleted file mode 100644 index a31d9ea..0000000 --- a/apache/proxy-influxdb.conf.bak +++ /dev/null @@ -1,19 +0,0 @@ - Redirect 301 /influxdb https://@{FQDN}/influxdb/ - - AuthType Basic - AuthName "InfluxDB admin" - AuthUserFile /etc/apache2/authdata/.htpasswd - AuthGroupFile /etc/apache2/authdata/.htgroup - Require group admin - ProxyPass http://influxdb:8083/ - ProxyPassReverse http://influxdb:8083/ - - - AuthType Basic - AuthName "InfluxDB queries" - AuthUserFile /etc/apache2/authdata/.htpasswd - AuthGroupFile /etc/apache2/authdata/.htgroup - Require group query - ProxyPass http://influxdb:8086/ - ProxyPassReverse http://influxdb:8086/ - diff --git a/apache/proxy-nodered.conf b/apache/proxy-nodered.conf deleted file mode 100644 index e97cdc1..0000000 --- a/apache/proxy-nodered.conf +++ /dev/null @@ -1,22 +0,0 @@ - ProxyPass /node-red/comms/ ws://node-red:1880/comms/ - ProxyPassReverse /node-red/comms/ ws://node-red:1880/comms/ - ProxyPass /node-red/comms ws://node-red:1880/comms - ProxyPassReverse /node-red/comms ws://node-red:1880/comms - ProxyPass /node-red/ http://node-red:1880/ - ProxyPassReverse /node-red/ http://node-red:1880/ - - Redirect 301 /node-red https://@{FQDN}/node-red/ - - Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" - Header always set X-Frame-Options "SAMEORIGIN" - Header always set X-Xss-Protection "1; mode=block" - Header always set X-Content-Type-Options "nosniff" - Header always set Content-Security-Policy "default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:" - Header always set Referrer-Policy: "same-origin" - Header always set Feature-Policy: "accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'" - AuthType Basic - AuthName "Node-RED" - AuthUserFile /etc/apache2/authdata/.htpasswd - AuthGroupFile /etc/apache2/authdata/.htgroup - Require group node-red - diff --git a/apache/proxy-nodered.conf.bak b/apache/proxy-nodered.conf.bak deleted file mode 100644 index 5c1837e..0000000 --- a/apache/proxy-nodered.conf.bak +++ /dev/null @@ -1,15 +0,0 @@ - ProxyPass /node-red/comms/ ws://node-red:1880/comms/ - ProxyPassReverse /node-red/comms/ ws://node-red:1880/comms/ - ProxyPass /node-red/comms ws://node-red:1880/comms - ProxyPassReverse /node-red/comms ws://node-red:1880/comms - ProxyPass /node-red/ http://node-red:1880/ - ProxyPassReverse /node-red/ http://node-red:1880/ - - Redirect 301 /node-red https://@{FQDN}/node-red/ - - AuthType Basic - AuthName "Node-RED" - AuthUserFile /etc/apache2/authdata/.htpasswd - AuthGroupFile /etc/apache2/authdata/.htgroup - Require group node-red - diff --git a/apache/setup.sh b/apache/setup.sh deleted file mode 100644 index 92f902b..0000000 --- a/apache/setup.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env bash - -# set up the environment; these might not be set. -export HOME="/root" -export PATH="${PATH}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - -# test that we have a proper setup. -cd $HOME || exit 2 - -# test that authentication is set up, and set permissions as needed by us -if [ ! -d /etc/apache2/authdata ] ; then - echo "The authdata directory is not set; refer to docker-compose script" - exit 3 -fi -if [ ! -f /etc/apache2/authdata/.htpasswd ]; then - echo ".htpasswd file not found" - exit 3 -fi -if [ ! -f /etc/apache2/authdata/.htgroup ]; then - echo ".htgroup file not found" - exit 3 -fi -chown www-data /etc/apache2/authdata /etc/apache2/authdata/.htpasswd /etc/apache2/authdata/.htgroup -chmod 700 /etc/apache2/authdata -chmod 600 /etc/apache2/authdata/.htpasswd /etc/apache2/authdata/.htgroup - -# check that we got the vars we need -if [ -z "$CERTBOT_DOMAINS" -o "$CERTBOT_DOMAINS" = "." ]; then - echo "The docker-compose script must set CERTBOT_DOMAINS to value to be passed to certbot for --domains" - exit 3 -fi - -if [ -z "$CERTBOT_EMAIL" -o "$CERTBOT_EMAIL" = "." ]; then - echo "The docker-compose script must set CERTBOT_EMAIL to an email address useful to certbot/letsencrypt for notifications" - exit 3 -fi - -if [ -z "$APACHE_FQDN" -o "$APACHE_FQDN" = "." ]; then - echo "The docker-compose script must set APACHE_FQDN to the (single) fully-qualified domain at the top level" - exit 3 -fi - -# run cerbot to set up apache -if [ "$CERTBOT_TEST" != "test" ]; then - certbot --agree-tos --email "${CERTBOT_EMAIL}" --non-interactive --domains "$CERTBOT_DOMAINS" --apache --agree-tos --rsa-key-size 4096 --redirect || exit 4 - - # certbot actually launched apache. The simple hack is to stop it; then launch - # it again after we've edited the config files. - /usr/sbin/apache2ctl stop -fi - -# now, add the fields to the virtual host section for https. -set -- proxy-*.conf -if [ "$1" != "proxy-*.conf" ] ; then - echo "add proxy-specs to configuration from:" "$@" - sed -e "s/@{FQDN}/${APACHE_FQDN}/g" "$@" > /tmp/proxyspecs.conf || exit 5 - sed -e '/^ServerName/r/tmp/proxyspecs.conf' /etc/apache2/sites-available/000-default-le-ssl.conf > /tmp/000-default-le-ssl-local.conf || exit 6 - mv /tmp/000-default-le-ssl-local.conf /etc/apache2/sites-available || exit 7 - echo "enable the modified site, and disable the ssl defaults" - /usr/sbin/a2dissite 000-default-le-ssl.conf || exit 8 - /usr/sbin/a2ensite 000-default-le-ssl-local.conf || exit 9 -fi - diff --git a/apache/setup.sh.bak b/apache/setup.sh.bak deleted file mode 100644 index 760f011..0000000 --- a/apache/setup.sh.bak +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash - -# set up the environment; these might not be set. -export HOME="/root" -export PATH="${PATH}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - -# test that we have a proper setup. -cd $HOME || exit 2 - -# test that authentication is set up, and set permissions as needed by us -if [ ! -d /etc/apache2/authdata ] ; then - echo "The authdata directory is not set; refer to docker-compose script" - exit 3 -fi -if [ ! -f /etc/apache2/authdata/.htpasswd ]; then - echo ".htpasswd file not found" - exit 3 -fi -if [ ! -f /etc/apache2/authdata/.htgroup ]; then - echo ".htgroup file not found" - exit 3 -fi -chown www-data /etc/apache2/authdata /etc/apache2/authdata/.htpasswd /etc/apache2/authdata/.htgroup -chmod 700 /etc/apache2/authdata -chmod 600 /etc/apache2/authdata/.htpasswd /etc/apache2/authdata/.htgroup - -# check that we got the vars we need -if [ -z "$CERTBOT_DOMAINS" -o "$CERTBOT_DOMAINS" = "." ]; then - echo "The docker-compose script must set CERTBOT_DOMAINS to value to be passed to certbot for --domains" - exit 3 -fi - -if [ -z "$CERTBOT_EMAIL" -o "$CERTBOT_EMAIL" = "." ]; then - echo "The docker-compose script must set CERTBOT_EMAIL to an email address useful to certbot/letsencrypt for notifications" - exit 3 -fi - -if [ -z "$APACHE_FQDN" -o "$APACHE_FQDN" = "." ]; then - echo "The docker-compose script must set APACHE_FQDN to the (single) fully-qualified domain at the top level" - exit 3 -fi - -# run cerbot to set up apache -if [ "$CERTBOT_TEST" != "test" ]; then - certbot --agree-tos --email "${CERTBOT_EMAIL}" --non-interactive --domains "$CERTBOT_DOMAINS" --apache --agree-tos --rsa-key-size 4096 --redirect || exit 4 - - # certbot actually launched apache. The simple hack is to stop it; then launch - # it again after we've edited the config files. - /usr/sbin/apache2ctl stop -fi - -# now, add the fields to the virtual host section for https. -set -- proxy-*.conf -if [ "$1" != "proxy-*.conf" ] ; then - echo "add proxy-specs to configuration from:" "$@" - sed -e "s/@{FQDN}/${APACHE_FQDN}/g" "$@" > /tmp/proxyspecs.conf || exit 5 - sed -e '/^ServerName/r/tmp/proxyspecs.conf' /etc/apache2/sites-available/000-default-le-ssl.conf > /tmp/000-default-le-ssl-local.conf || exit 6 - mv /tmp/000-default-le-ssl-local.conf /etc/apache2/sites-available || exit 7 - echo "enable the modified site, and disable the ssl defaults" - /usr/sbin/a2dissite 000-default-le-ssl.conf || exit 8 - /usr/sbin/a2ensite 000-default-le-ssl-local.conf || exit 9 -fi - diff --git a/influxdb/Dockerfile b/influxdb/Dockerfile index 99a67f1..265513f 100644 --- a/influxdb/Dockerfile +++ b/influxdb/Dockerfile @@ -19,9 +19,7 @@ RUN apt-get update && apt-get install -y python-pip RUN pip install awscli --upgrade # Backup script -COPY showdb.sh /bin/showdb.sh COPY backup.sh /bin/backup.sh -RUN chmod +x /bin/showdb.sh RUN chmod +x /bin/backup.sh # end of file diff --git a/influxdb/backup.sh b/influxdb/backup.sh index 27b44d8..d00745b 100755 --- a/influxdb/backup.sh +++ b/influxdb/backup.sh @@ -1,21 +1,34 @@ #!/bin/bash -#The Shell script will be used for taking backup and send it to Amazon s3 bucket. +#The Shell script will be used for taking backup and send it to Amazon s3 bucket. -DATABASES=$(/bin/showdb.sh) +# TO list all Databases in influxdb databases + +showdb(){ +influx -host $INFLUX_HOST -port 8086 -execute 'SHOW DATABASES' +} + +showdb > /data.txt + +sed -i '1,3d' /data.txt + +#Backing up the metadata echo 'Backup Influx metadata' influxd backup -portable -host $INFLUX_HOST:8088 /var/lib/influxdb-backup -# Replace colons with spaces to create list. -for db in ${DATABASES//:/ }; do + +#Backing up the databases listed. +while read db +do echo "Creating backup for $db" - influxd backup -portable -database $db -host $INFLUX_HOST:8088 /var/lib/influxdb-backup -done + influxd backup -portable -database "$db" -host $INFLUX_HOST:8088 /var/lib/influxdb-backup +done < "/data.txt" +# Moving the backup to Amazon Cloud if [ $? -eq 0 ]; then - tar czf /var/lib/influxdb-S3-bucket/metdata_db_backup_`date +%F`.tar.gz /var/lib/influxdb-backup/ - tar czf /var/lib/influxdb-S3-bucket/data_directory_backup_`date +%F`.tar.gz /var/lib/influxdb/ + tar czf /var/lib/influxdb-S3-bucket/${SOURCE_NAME}_metdata_db_backup_`date +%F`.tar.gz /var/lib/influxdb-backup/ + tar czf /var/lib/influxdb-S3-bucket/${SOURCE_NAME}_data_directory_backup_`date +%F`.tar.gz /var/lib/influxdb/ aws s3 sync /var/lib/influxdb-S3-bucket/ s3://${S3_BUCKET_INFLUXDB}/ fi diff --git a/influxdb/showdb.sh b/influxdb/showdb.sh deleted file mode 100755 index 75c7a85..0000000 --- a/influxdb/showdb.sh +++ /dev/null @@ -1,10 +0,0 @@ -#! /bin/bash -# TO Show all Databases that will be used by backup.sh script for backup - -showdb(){ -influx -host $INFLUX_HOST -port 8086 -execute 'SHOW DATABASES' -} - -DATABASES=$(showdb) - -echo $DATABASES | sed -e 's/[\r]//g' | sed -e 's/^.\{26\}//' | sed 's/ /:/g' diff --git a/mqtts/Dockerfile b/mqtts/Dockerfile new file mode 100644 index 0000000..c65a904 --- /dev/null +++ b/mqtts/Dockerfile @@ -0,0 +1,34 @@ +# +# Dockerfile for building MQTTS +# + +# Build the MQTTS using phusion base image + +# passing arguments to map letsencrypt certs + +FROM phusion/baseimage + +# Installing mosquitto packages and certbot +RUN add-apt-repository ppa:certbot/certbot +RUN apt-get update && apt-get install -y \ + certbot \ + mosquitto \ + mosquitto-clients + +# passing arguments to map letsencrypt certs +ARG ssl_cert + +# Linking letsencrypt certiifcates to mosquitto conf +RUN ln -sf /etc/letsencrypt/live/${ssl_cert}/cert.pem /etc/mosquitto/cert.pem +RUN ln -sf /etc/letsencrypt/live/${ssl_cert}/chain.pem /etc/mosquitto/chain.pem +RUN ln -sf /etc/letsencrypt/live/${ssl_cert}/privkey.pem /etc/mosquitto/privkey.pem + + +# Copying mosquitto configuration +COPY mosquitto.conf /etc/mosquitto/mosquitto.conf + +# Start the MQTTS daemon during container startup +RUN mkdir /etc/service/mosquitto +COPY mosquitto.sh /etc/service/mosquitto/run +RUN chmod +x /etc/service/mosquitto/run + diff --git a/mqtts/mosquitto.conf b/mqtts/mosquitto.conf new file mode 100644 index 0000000..75c4aae --- /dev/null +++ b/mqtts/mosquitto.conf @@ -0,0 +1,19 @@ +# Plain MQTT protocol +listener 1883 + +# username/password authentication; the password file should be present else mosquitto service fail. +allow_anonymous false +password_file /etc/mosquitto/credentials/passwd + +# MQTT over TLS/SSL +listener 8883 +certfile /etc/mosquitto/cert.pem +cafile /etc/mosquitto/chain.pem +keyfile /etc/mosquitto/privkey.pem + +# WebSockets over TLS/SSL +listener 8083 +protocol websockets +certfile /etc/mosquitto/cert.pem +cafile /etc/mosquitto/chain.pem +keyfile /etc/mosquitto/privkey.pem diff --git a/mqtts/mosquitto.sh b/mqtts/mosquitto.sh new file mode 100644 index 0000000..7ffdccf --- /dev/null +++ b/mqtts/mosquitto.sh @@ -0,0 +1,2 @@ +#!/bin/bash +/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf diff --git a/apache/Dockerfile b/nginx/Dockerfile similarity index 58% rename from apache/Dockerfile rename to nginx/Dockerfile index dc0273b..122d7fa 100644 --- a/apache/Dockerfile +++ b/nginx/Dockerfile @@ -6,19 +6,20 @@ FROM phusion/baseimage RUN /usr/bin/apt-get update && /usr/bin/apt-get install software-properties-common -y -RUN /usr/bin/add-apt-repository ppa:certbot/certbot && /usr/bin/apt-get update && /usr/bin/apt-get install apache2 -y +RUN /usr/bin/add-apt-repository ppa:certbot/certbot && /usr/bin/apt-get update && /usr/bin/apt-get install nginx apache2-utils -y # # Add the certbot layer # -RUN /usr/bin/apt-get install python-certbot-apache -y +RUN /usr/bin/apt-get install python-certbot-nginx -y # # enable proxys and generally set up. # -RUN /usr/sbin/a2enmod proxy && \ - /usr/sbin/a2enmod proxy_http && \ - echo "ServerName localhost" > /etc/apache2/conf-available/fqdn.conf && \ - /usr/sbin/a2enconf fqdn.conf && \ - /usr/sbin/a2enmod authz_user authz_groupfile proxy_wstunnel headers +##RUN /usr/sbin/a2enmod proxy && \ +## /usr/sbin/a2enmod proxy_http && \ +## /usr/sbin/a2enmod proxy_balancer && \ +## echo "ServerName localhost" > /etc/apache2/conf-available/fqdn.conf && \ +## /usr/sbin/a2enconf fqdn.conf && \ +## /usr/sbin/a2enmod authz_user authz_groupfile proxy_wstunnel headers # RUN mkdir -p /root COPY setup.sh proxy-*.conf /root/ @@ -33,8 +34,8 @@ COPY certbot_cron.sh /etc/my_init.d/certbot_cron.sh RUN chmod +x /etc/my_init.d/certbot_cron.sh # Start the Apache2 daemon during container startup -RUN mkdir /etc/service/apache2 -COPY apache2.sh /etc/service/apache2/run -RUN chmod +x /etc/service/apache2/run +RUN mkdir /etc/service/nginx +COPY nginx.sh /etc/service/nginx/run +RUN chmod +x /etc/service/nginx/run # end of file diff --git a/apache/certbot_cron.sh b/nginx/certbot_cron.sh similarity index 100% rename from apache/certbot_cron.sh rename to nginx/certbot_cron.sh diff --git a/nginx/nginx.sh b/nginx/nginx.sh new file mode 100644 index 0000000..69946a6 --- /dev/null +++ b/nginx/nginx.sh @@ -0,0 +1,2 @@ +#!/bin/bash +/usr/sbin/nginx -g 'daemon off;' diff --git a/nginx/proxy-grafana.conf b/nginx/proxy-grafana.conf new file mode 100644 index 0000000..8a85cc7 --- /dev/null +++ b/nginx/proxy-grafana.conf @@ -0,0 +1,22 @@ + rewrite ^/$ https://@{FQDN}/grafana/ permanent; + rewrite ^/index.html$ https://@{FQDN}/grafana/; + rewrite ^/grafana$ https://@{FQDN}/grafana/; + location /grafana/ { + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + add_header X-Frame-Options SAMEORIGIN always; + add_header X-Xss-Protection "1; mode=block" always; + add_header X-Content-Type-Options nosniff always; + add_header Content-Security-Policy "default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline' blob:; img-src 'self' data: *.global.ssl.fastly.net" always; + add_header Feature-Policy: "accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'" always; + + proxy_set_header X-Forwarded-Host $host:$server_port; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_http_version 1.1; + proxy_pass http://grafana:3000/; + + } + diff --git a/nginx/proxy-influxdb.conf b/nginx/proxy-influxdb.conf new file mode 100644 index 0000000..ee60139 --- /dev/null +++ b/nginx/proxy-influxdb.conf @@ -0,0 +1,19 @@ + rewrite ^/influxdb:8086/$ https://@{FQDN}/influxdb:8086/; + location /influxdb:8086/ { + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Xss-Protection "1; mode=block" always; + add_header X-Content-Type-Options "nosniff" always; + add_header Content-Security-Policy "default-src 'self'" always; + add_header 'Referrer-Policy' 'origin'; + add_header Feature-Policy: "accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'" always; + proxy_set_header X-Forwarded-Host $host:$server_port; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_pass http://influxdb:8086/; + auth_basic "InfluxDB queries"; + auth_basic_user_file /etc/nginx/authdata/.htpasswd; + } diff --git a/nginx/proxy-mqtts.conf b/nginx/proxy-mqtts.conf new file mode 100644 index 0000000..b07f130 --- /dev/null +++ b/nginx/proxy-mqtts.conf @@ -0,0 +1,10 @@ + rewrite ^/mqtts$ https://@{FQDN}/mqtts/; + location /mqtts/ { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_http_version 1.1; + proxy_pass https://mqtts:8083/; + + } diff --git a/nginx/proxy-nodered.conf b/nginx/proxy-nodered.conf new file mode 100644 index 0000000..fdc2d8e --- /dev/null +++ b/nginx/proxy-nodered.conf @@ -0,0 +1,19 @@ + rewrite ^/node-red$ https://@{FQDN}/node-red/; + location /node-red/ { + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Xss-Protection "1; mode=block" always; + add_header X-Content-Type-Options "nosniff" always; + add_header Content-Security-Policy "default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:" always; + add_header 'Referrer-Policy' 'origin'; + add_header Feature-Policy: "accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'" always; + proxy_set_header X-Forwarded-Host $host:$server_port; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_pass http://node-red:1880/; + auth_basic "Node-RED"; + auth_basic_user_file /etc/nginx/authdata/.htpasswd; + } diff --git a/nginx/setup.sh b/nginx/setup.sh new file mode 100644 index 0000000..a511a87 --- /dev/null +++ b/nginx/setup.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +# set up the environment; these might not be set. +export HOME="/root" +export PATH="${PATH}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + +# test that we have a proper setup. +cd $HOME || exit 2 + +# test that authentication is set up, and set permissions as needed by us +if [ ! -d /etc/nginx/authdata ] ; then + echo "The authdata directory is not set; refer to docker-compose script" + exit 3 +fi + +if [ ! -f /etc/nginx/authdata/.htpasswd ]; then + echo ".htpasswd file not found" + exit 3 +fi +chown www-data /etc/nginx/authdata /etc/nginx/authdata/.htpasswd +chmod 700 /etc/nginx/authdata + +# check that we got the vars we need +if [ -z "$CERTBOT_DOMAINS" -o "$CERTBOT_DOMAINS" = "." ]; then + echo "The docker-compose script must set CERTBOT_DOMAINS to value to be passed to certbot for --domains" + exit 3 +fi + +if [ -z "$CERTBOT_EMAIL" -o "$CERTBOT_EMAIL" = "." ]; then + echo "The docker-compose script must set CERTBOT_EMAIL to an email address useful to certbot/letsencrypt for notifications" + exit 3 +fi + +if [ -z "$NGINX_FQDN" -o "$NGINX_FQDN" = "." ]; then + echo "The docker-compose script must set NGINX_FQDN to the (single) fully-qualified domain at the top level" + exit 3 +fi + +# run cerbot to set up Nginx +if [ "$CERTBOT_TEST" != "test" ]; then + certbot --agree-tos --email "${CERTBOT_EMAIL}" --non-interactive --domains "$CERTBOT_DOMAINS" --nginx --agree-tos --rsa-key-size 4096 --redirect || exit 4 + + # certbot actually launched Nginx. The simple hack is to stop it; then launch + # it again after we've edited the config files. + /usr/sbin/nginx -s stop && echo "stopped successfully" +fi + +# now, add the fields to the virtual host section for https. +set -- proxy-*.conf +if [ "$1" != "prox-*.conf" ] ; then + echo "add proxy-specs to configuration from:" "$@" + sed -e "s/@{FQDN}/${NGINX_FQDN}/g" "$@" > /tmp/proxyspecs.conf || exit 5 + sed -e '/listen 443 ssl;/r/tmp/proxyspecs.conf' /etc/nginx/sites-available/default > /tmp/000-default-le-ssl-local.conf || exit 6 + mv /tmp/000-default-le-ssl-local.conf /etc/nginx/sites-available || exit 7 + echo "enable the modified site, and disable the ssl defaults" + rm -rf /etc/nginx/sites-enabled/default || echo exit 8 + rm -rf /etc/nginx/sites-enabled/000-default-le-ssl-local.conf || exit 9 + ln -s /etc/nginx/sites-available/000-default-le-ssl-local.conf /etc/nginx/sites-enabled/000-default-le-ssl-local.conf || exit 10 +fi + From 265a3a8aaf56a3d3f7e436d992879b8653e9a58d Mon Sep 17 00:00:00 2001 From: root Date: Wed, 18 Dec 2019 11:05:37 +0530 Subject: [PATCH 14/65] enabled automatic backup --- influxdb/Dockerfile | 2 ++ influxdb/backup.sh | 29 +++++++++++++++++++++++++++-- influxdb/certbot_cron.sh | 11 +++++++++++ influxdb/influx.sh | 4 ++++ influxdb/influxdb.conf | 7 +++++++ influxdb/postfix.sh | 2 ++ influxdb/showdb.sh | 10 ++++++++++ 7 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 influxdb/certbot_cron.sh create mode 100644 influxdb/influx.sh create mode 100644 influxdb/influxdb.conf create mode 100644 influxdb/postfix.sh create mode 100755 influxdb/showdb.sh diff --git a/influxdb/Dockerfile b/influxdb/Dockerfile index 265513f..99a67f1 100644 --- a/influxdb/Dockerfile +++ b/influxdb/Dockerfile @@ -19,7 +19,9 @@ RUN apt-get update && apt-get install -y python-pip RUN pip install awscli --upgrade # Backup script +COPY showdb.sh /bin/showdb.sh COPY backup.sh /bin/backup.sh +RUN chmod +x /bin/showdb.sh RUN chmod +x /bin/backup.sh # end of file diff --git a/influxdb/backup.sh b/influxdb/backup.sh index d00745b..e54a8bd 100755 --- a/influxdb/backup.sh +++ b/influxdb/backup.sh @@ -2,7 +2,7 @@ #The Shell script will be used for taking backup and send it to Amazon s3 bucket. # TO list all Databases in influxdb databases - +DATE=`date +%d-%m-%y_%H-%M` showdb(){ influx -host $INFLUX_HOST -port 8086 -execute 'SHOW DATABASES' } @@ -30,9 +30,34 @@ if [ $? -eq 0 ]; then tar czf /var/lib/influxdb-S3-bucket/${SOURCE_NAME}_metdata_db_backup_`date +%F`.tar.gz /var/lib/influxdb-backup/ tar czf /var/lib/influxdb-S3-bucket/${SOURCE_NAME}_data_directory_backup_`date +%F`.tar.gz /var/lib/influxdb/ aws s3 sync /var/lib/influxdb-S3-bucket/ s3://${S3_BUCKET_INFLUXDB}/ - + echo "DATE:" $DATE > /influxbackup.txt + echo " " >> /influxbackup.txt + echo "DESCRIPTION: ${SOURCE_NAME}_Influxdb backup" >> /influxbackup.txt + echo " " >> /influxbackup.txt + echo "STATUS: influxdb backup is Successful." >> /influxbackup.txt + echo " " >> /influxbackup.txt + echo "******* Influxdb Database & metadata Backup ********" >> /influxbackup.txt + echo " " >> /influxbackup.txt + aws s3 ls s3://${S3_BUCKET_INFLUXDB}/ --human-readable | grep -i ${SOURCE_NAME}_metdata | cut -d' ' -f3- | tac | head -10 &>> /influxbackup.txt + echo " " >> /influxbackup.txt + echo "************** Influxdb data Backup ****************" >> /influxbackup.txt + echo " " >> /influxbackup.txt + aws s3 ls s3://${S3_BUCKET_INFLUXDB}/ --human-readable | grep -i ${SOURCE_NAME}_data | cut -d' ' -f3- | tac | head -10 &>> /influxbackup.txt + echo " " >> /influxbackup.txt + echo "********************** END ********************* " >> /influxbackup.txt + +else + echo "DATE:" $DATE > /influxbackup.txt + echo " " >> /influxbackup.txt + echo "DESCRIPTION: ${SOURCE_NAME}_Influxdb backup" >> /influxbackup.txt + echo " " >> /influxbackup.txt + echo "STATUS: influxdb backup is Failed." >> /influxbackup.txt + echo " " >> /influxbackup.txt + echo "Something went wrong, Please check it" >> /influxbackup.txt + cat /influxbackup.txt | mail -s "${SOURCE_NAME}: influxdb backup" ${INFLUXDB_BACKUP_MAIL} fi # Remove the old backup data in local directory to avoid excessive storage use find /var/lib/influxdb-S3-bucket/ -type f -mtime +90 -exec rm {} \; +cat /influxbackup.txt | mail -s "${SOURCE_NAME}: influxdb backup" ${INFLUXDB_BACKUP_MAIL} diff --git a/influxdb/certbot_cron.sh b/influxdb/certbot_cron.sh new file mode 100644 index 0000000..a4f10b1 --- /dev/null +++ b/influxdb/certbot_cron.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +cd /root +#write out current crontab +crontab -l > mycron + +#echo new cron into cron file +echo "35 6 * * * /bin/backup.sh" >> mycron + +#install new cron file +crontab mycron diff --git a/influxdb/influx.sh b/influxdb/influx.sh new file mode 100644 index 0000000..50aa472 --- /dev/null +++ b/influxdb/influx.sh @@ -0,0 +1,4 @@ +#!/bin/sh +#/etc/init.d/influxdb start +/usr/bin/influxd -config /etc/influxdb/influxdb.conf + diff --git a/influxdb/influxdb.conf b/influxdb/influxdb.conf new file mode 100644 index 0000000..986803a --- /dev/null +++ b/influxdb/influxdb.conf @@ -0,0 +1,7 @@ +[meta] + dir = "/var/lib/influxdb/meta" + +[data] + dir = "/var/lib/influxdb/data" + engine = "tsm1" + wal-dir = "/var/lib/influxdb/wal" diff --git a/influxdb/postfix.sh b/influxdb/postfix.sh new file mode 100644 index 0000000..c14d96e --- /dev/null +++ b/influxdb/postfix.sh @@ -0,0 +1,2 @@ +#!/bin/sh +/etc/init.d/postfix restart diff --git a/influxdb/showdb.sh b/influxdb/showdb.sh new file mode 100755 index 0000000..75c7a85 --- /dev/null +++ b/influxdb/showdb.sh @@ -0,0 +1,10 @@ +#! /bin/bash +# TO Show all Databases that will be used by backup.sh script for backup + +showdb(){ +influx -host $INFLUX_HOST -port 8086 -execute 'SHOW DATABASES' +} + +DATABASES=$(showdb) + +echo $DATABASES | sed -e 's/[\r]//g' | sed -e 's/^.\{26\}//' | sed 's/ /:/g' From 2b1251ef8310900a0ce6dc93c5d7ed7972fc2495 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 18 Dec 2019 11:13:01 +0530 Subject: [PATCH 15/65] enabled automatic backup --- influxdb/Dockerfile | 68 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 7 deletions(-) diff --git a/influxdb/Dockerfile b/influxdb/Dockerfile index 99a67f1..14a72d0 100644 --- a/influxdb/Dockerfile +++ b/influxdb/Dockerfile @@ -2,10 +2,50 @@ # Dockerfile for building the influxdb instance with backup setup # -# passing arguments to install influxdb specific version -ARG version +##FROM influxdb:${version} +FROM phusion/baseimage + +RUN apt-get update && apt-get install -y wget +ARG distrib_id +ARG distrib_codename + +RUN echo "${distrib_id}" +RUN wget -qO- https://repos.influxdata.com/influxdb.key | apt-key add - +RUN /bin/bash -c "source /etc/lsb-release" +RUN echo "deb https://repos.influxdata.com/${distrib_id} ${distrib_codename} stable" | tee /etc/apt/sources.list.d/influxdb.list + +#some basic package installation for troubleshooting +RUN apt-get update && apt-get install -y \ + iputils-ping \ + net-tools \ + debconf-utils + +# passing arguments to build postfix image +ARG hostname +ARG relay_ip +ARG domain + +# Install Postfix +run echo "postfix postfix/mailname string $host_name" | debconf-set-selections +run echo "postfix postfix/main_mailer_type string 'Internet Site'" | debconf-set-selections +run apt-get update && apt-get install -y postfix +run postconf -e relayhost=$relay_ip +run postconf -e myhostname=$hostname +run postconf -e mydomain=$domain +run postconf -e masquerade_domains=$domain +run postconf -e mydestination="\$myhostname, $hostname, localhost, localhost.localdomain, localhost" +run postconf -e mynetworks="127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 172.0.0.0/8" +run postconf -e smtpd_use_tls=no +run echo $domain > /etc/mailname + +# This will replace local mail addresses by valid Internet addresses when mail leaves the machine via SMTP. +run echo "root@${domain} influxdbbackup@${domain}" > /etc/postfix/generic +run postconf -e smtp_generic_maps=hash:/etc/postfix/generic +run postmap /etc/postfix/generic + +# mail command would be used for sending mails +run apt-get install -y mailutils -FROM influxdb:${version} # Default InfluxDB host ENV INFLUX_HOST=influxdb @@ -15,13 +55,27 @@ RUN mkdir -p /opt/influxdb-backup WORKDIR "/opt/influxdb-backup" # To backup influxdb to S3 Bucket, some packages need to be installed as follows: -RUN apt-get update && apt-get install -y python-pip +RUN apt-get update && apt-get install -y python-pip influxdb RUN pip install awscli --upgrade -# Backup script -COPY showdb.sh /bin/showdb.sh +# Backup script for influxdb COPY backup.sh /bin/backup.sh -RUN chmod +x /bin/showdb.sh RUN chmod +x /bin/backup.sh +COPY influxdb.conf /etc/influxdb/influxdb.conf + +# Enable influxdb database automatic backup crontab +COPY certbot_cron.sh /etc/my_init.d/certbot_cron.sh +RUN chmod +x /etc/my_init.d/certbot_cron.sh + +# Start the postfix daemon during container startup +RUN mkdir -p /etc/my_init.d +COPY postfix.sh /etc/my_init.d/postfix.sh +RUN chmod +x /etc/my_init.d/postfix.sh + + +# Starting influxd daemon service +RUN mkdir /etc/service/influx +COPY influx.sh /etc/service/influx/run +RUN chmod +x /etc/service/influx/run # end of file From 202384fa60a49a37847cc87895f2ba133d4a0e6b Mon Sep 17 00:00:00 2001 From: root Date: Wed, 18 Dec 2019 11:21:54 +0530 Subject: [PATCH 16/65] enabled automatic backup --- influxdb/Dockerfile | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/influxdb/Dockerfile b/influxdb/Dockerfile index 14a72d0..15c34a4 100644 --- a/influxdb/Dockerfile +++ b/influxdb/Dockerfile @@ -1,10 +1,13 @@ # -# Dockerfile for building the influxdb instance with backup setup +# Dockerfile for building the influxdb instance with S3-backup and Mail alert setup # -##FROM influxdb:${version} FROM phusion/baseimage +# Default InfluxDB host +ENV INFLUX_HOST=influxdb + +# Install Influxdb stable release RUN apt-get update && apt-get install -y wget ARG distrib_id ARG distrib_codename @@ -46,10 +49,6 @@ run postmap /etc/postfix/generic # mail command would be used for sending mails run apt-get install -y mailutils - -# Default InfluxDB host -ENV INFLUX_HOST=influxdb - # Change workdir RUN mkdir -p /opt/influxdb-backup WORKDIR "/opt/influxdb-backup" From 1bd06ba6e77bbb87ba8bda381eb26e1a4e6e8685 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 18 Dec 2019 11:53:28 +0530 Subject: [PATCH 17/65] enabled HTTP Endpoint --- nginx/proxy-nodered.conf | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/nginx/proxy-nodered.conf b/nginx/proxy-nodered.conf index fdc2d8e..0833e99 100644 --- a/nginx/proxy-nodered.conf +++ b/nginx/proxy-nodered.conf @@ -17,3 +17,22 @@ auth_basic "Node-RED"; auth_basic_user_file /etc/nginx/authdata/.htpasswd; } + +# Enabling HTTP Endpoint using node-red + + location /post/ { + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Xss-Protection "1; mode=block" always; + add_header X-Content-Type-Options "nosniff" always; + add_header Content-Security-Policy "default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:" always; + add_header 'Referrer-Policy' 'origin'; + add_header Feature-Policy: "accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'" always; + proxy_set_header X-Forwarded-Host $host:$server_port; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_pass http://node-red:1880/post; + } From ee50578cbcaf7bed73ada04d6e4f93218933211a Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Fri, 10 Jan 2020 11:15:06 +0530 Subject: [PATCH 18/65] Removing unwanted entries --- nginx/Dockerfile | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/nginx/Dockerfile b/nginx/Dockerfile index 122d7fa..93a66ca 100644 --- a/nginx/Dockerfile +++ b/nginx/Dockerfile @@ -7,21 +7,11 @@ FROM phusion/baseimage RUN /usr/bin/apt-get update && /usr/bin/apt-get install software-properties-common -y RUN /usr/bin/add-apt-repository ppa:certbot/certbot && /usr/bin/apt-get update && /usr/bin/apt-get install nginx apache2-utils -y -# + # Add the certbot layer -# RUN /usr/bin/apt-get install python-certbot-nginx -y -# -# enable proxys and generally set up. -# -##RUN /usr/sbin/a2enmod proxy && \ -## /usr/sbin/a2enmod proxy_http && \ -## /usr/sbin/a2enmod proxy_balancer && \ -## echo "ServerName localhost" > /etc/apache2/conf-available/fqdn.conf && \ -## /usr/sbin/a2enconf fqdn.conf && \ -## /usr/sbin/a2enmod authz_user authz_groupfile proxy_wstunnel headers - -# RUN mkdir -p /root + +# Copying Proxy files COPY setup.sh proxy-*.conf /root/ # Running scripts during container startup for letsencrypt update and Apache From 13b969317831e4a365b8e3a8aa29d3e9c151789c Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Fri, 10 Jan 2020 11:23:45 +0530 Subject: [PATCH 19/65] some adjustments --- nginx/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nginx/Dockerfile b/nginx/Dockerfile index 93a66ca..7dfbf25 100644 --- a/nginx/Dockerfile +++ b/nginx/Dockerfile @@ -1,5 +1,5 @@ # -# Dockerfile for building the apache image +# Dockerfile for building the Nginx image # # Start from Phusion. @@ -14,7 +14,7 @@ RUN /usr/bin/apt-get install python-certbot-nginx -y # Copying Proxy files COPY setup.sh proxy-*.conf /root/ -# Running scripts during container startup for letsencrypt update and Apache +# Running scripts during container startup for letsencrypt update and configuring proxy files behind Nginx RUN mkdir -p /etc/my_init.d COPY setup.sh /etc/my_init.d/setup.sh RUN chmod +x /etc/my_init.d/setup.sh @@ -23,7 +23,7 @@ RUN chmod +x /etc/my_init.d/setup.sh COPY certbot_cron.sh /etc/my_init.d/certbot_cron.sh RUN chmod +x /etc/my_init.d/certbot_cron.sh -# Start the Apache2 daemon during container startup +# Start the Nginx daemon during container startup RUN mkdir /etc/service/nginx COPY nginx.sh /etc/service/nginx/run RUN chmod +x /etc/service/nginx/run From 12a8ae90300769ae44ce5bb13a0d0c64e3c1bfef Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Fri, 10 Jan 2020 11:38:49 +0530 Subject: [PATCH 20/65] adjustments --- nginx/setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nginx/setup.sh b/nginx/setup.sh index a511a87..9e9a8b8 100644 --- a/nginx/setup.sh +++ b/nginx/setup.sh @@ -47,7 +47,7 @@ fi # now, add the fields to the virtual host section for https. set -- proxy-*.conf -if [ "$1" != "prox-*.conf" ] ; then +if [ "$1" != "proxy-*.conf" ] ; then echo "add proxy-specs to configuration from:" "$@" sed -e "s/@{FQDN}/${NGINX_FQDN}/g" "$@" > /tmp/proxyspecs.conf || exit 5 sed -e '/listen 443 ssl;/r/tmp/proxyspecs.conf' /etc/nginx/sites-available/default > /tmp/000-default-le-ssl-local.conf || exit 6 From 218c8ea319c20fe33683475558800061738590b4 Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Fri, 10 Jan 2020 12:44:01 +0530 Subject: [PATCH 21/65] adjustments --- influxdb/{certbot_cron.sh => influxdb_cron.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename influxdb/{certbot_cron.sh => influxdb_cron.sh} (100%) diff --git a/influxdb/certbot_cron.sh b/influxdb/influxdb_cron.sh similarity index 100% rename from influxdb/certbot_cron.sh rename to influxdb/influxdb_cron.sh From a98ea792495d80d5e1d8eb9bf9afea38c25f7662 Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Fri, 10 Jan 2020 12:48:27 +0530 Subject: [PATCH 22/65] adjustments --- influxdb/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/influxdb/Dockerfile b/influxdb/Dockerfile index 15c34a4..3ddd6e7 100644 --- a/influxdb/Dockerfile +++ b/influxdb/Dockerfile @@ -63,7 +63,7 @@ RUN chmod +x /bin/backup.sh COPY influxdb.conf /etc/influxdb/influxdb.conf # Enable influxdb database automatic backup crontab -COPY certbot_cron.sh /etc/my_init.d/certbot_cron.sh +COPY influxdb_cron.sh /etc/my_init.d/certbot_cron.sh RUN chmod +x /etc/my_init.d/certbot_cron.sh # Start the postfix daemon during container startup From 77e77f9abdf40f262414a35cf283da393dc5cdd8 Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Fri, 10 Jan 2020 12:49:42 +0530 Subject: [PATCH 23/65] Update Dockerfile --- influxdb/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/influxdb/Dockerfile b/influxdb/Dockerfile index 3ddd6e7..6933d8b 100644 --- a/influxdb/Dockerfile +++ b/influxdb/Dockerfile @@ -63,8 +63,8 @@ RUN chmod +x /bin/backup.sh COPY influxdb.conf /etc/influxdb/influxdb.conf # Enable influxdb database automatic backup crontab -COPY influxdb_cron.sh /etc/my_init.d/certbot_cron.sh -RUN chmod +x /etc/my_init.d/certbot_cron.sh +COPY influxdb_cron.sh /etc/my_init.d/influxdb_cron.sh +RUN chmod +x /etc/my_init.d/influxdb_cron.sh # Start the postfix daemon during container startup RUN mkdir -p /etc/my_init.d From bd16b9abe847dcacc45dda8eaf6711bc51243356 Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Thu, 23 Jan 2020 08:58:51 +0530 Subject: [PATCH 24/65] Update Dockerfile --- influxdb/Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/influxdb/Dockerfile b/influxdb/Dockerfile index 6933d8b..69c277d 100644 --- a/influxdb/Dockerfile +++ b/influxdb/Dockerfile @@ -63,15 +63,14 @@ RUN chmod +x /bin/backup.sh COPY influxdb.conf /etc/influxdb/influxdb.conf # Enable influxdb database automatic backup crontab +RUN mkdir -p /etc/my_init.d COPY influxdb_cron.sh /etc/my_init.d/influxdb_cron.sh RUN chmod +x /etc/my_init.d/influxdb_cron.sh # Start the postfix daemon during container startup -RUN mkdir -p /etc/my_init.d COPY postfix.sh /etc/my_init.d/postfix.sh RUN chmod +x /etc/my_init.d/postfix.sh - # Starting influxd daemon service RUN mkdir /etc/service/influx COPY influx.sh /etc/service/influx/run From aa7d9eab8be9cb2503e995eed9bfbbe977fa6f57 Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Tue, 17 Mar 2020 20:11:36 +0530 Subject: [PATCH 25/65] Fixing: Loading env for crontab --- influxdb/influxdb_cron.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/influxdb/influxdb_cron.sh b/influxdb/influxdb_cron.sh index a4f10b1..1994998 100644 --- a/influxdb/influxdb_cron.sh +++ b/influxdb/influxdb_cron.sh @@ -5,7 +5,7 @@ cd /root crontab -l > mycron #echo new cron into cron file -echo "35 6 * * * /bin/backup.sh" >> mycron +echo "35 6 * * * /bin/bash -l -c '/bin/backup.sh'" > mycron #install new cron file crontab mycron From 6b40985565a840b9b1d35524669d32111b9ed901 Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Fri, 22 May 2020 17:19:38 +0100 Subject: [PATCH 26/65] some modification needed --- docker-compose.yml | 210 +++++++++++++++++++++++++-------------------- influxdb/backup.sh | 3 +- 2 files changed, 118 insertions(+), 95 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index fd09bae..a5603d1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,10 +3,10 @@ # Name: docker-compose.yml # # Function: -# Configure the docker-ttn-dashboard collection of docker containers. +# Configure the docker-iot-dashboard collection of docker containers. # # Copyright: -# This file copyright (c) 2017-2019 by +# This file copyright (c) 2017-2020 by # # MCCI Corporation # 3520 Krums Corners Road @@ -23,7 +23,7 @@ # # Note: if you are running this manually, you must set a number of variables, -# not least TTN_DASHBOARD_DATA, which must be the path to the top data directory +# not least IOT_DASHBOARD_DATA, which must be the path to the top data directory # for these apps. If you use dashboard-ctl, this will be done for you. # # To get a list of all variables used in this file, use the following command: @@ -32,90 +32,112 @@ # To get a list of undocumented variables, use the following command, # then look in the left hand column: # -# comm <(sed -n -e 's/#.*$//' -e 's/[^$]*${\([^-:}]*\)[-:}][^$]*/\1/p' docker-compose.yml | LC_ALL=C sort -u) <(sed -n -e '/^# TTN_[A-Z_0-9]*$/s/^# //p' docker-compose.yml | LC_ALL=C sort -u ) +# comm <(sed -n -e 's/#.*$//' -e 's/[^$]*${\([^-:}]*\)[-:}][^$]*/\1/p' docker-compose.yml | LC_ALL=C sort -u) <(sed -n -e '/^# IOT_[A-Z_0-9]*$/s/^# //p' docker-compose.yml | LC_ALL=C sort -u ) # #+++ -# TTN_DASHBOARD_NGINX_FQDN +# IOT_DASHBOARD_NGINX_FQDN # The fully-qualified domain name to be served by NGINX. # -# TTN_DASHBOARD_AWS_ACCESS_KEY_ID -# The access key for AWS for backups. +# IOT_DASHBOARD_AWS_ACCESS_KEY_ID +# The access key for AWS for backups. # -# TTN_DASHBOARD_AWS_DEFAULT_REGION -# The AWS default region. +# IOT_DASHBOARD_AWS_DEFAULT_REGION +# The AWS default region. # -# TTN_DASHBOARD_AWS_S3_BUCKET_INFLUXDB -# The S3 bucket to use for uploading the influxdb backup data. +# IOT_DASHBOARD_AWS_S3_BUCKET_INFLUXDB +# The S3 bucket to use for uploading the influxdb backup data. # -# TTN_DASHBOARD_AWS_SECRET_ACCESS_KEY -# The AWS API secret key for backing up influxdb data. +# IOT_DASHBOARD_AWS_SECRET_ACCESS_KEY +# The AWS API secret key for backing up influxdb data. # -# TTN_DASHBOARD_CERTBOT_EMAIL +# IOT_DASHBOARD_CERTBOT_EMAIL # The email address to be used for registering with Let's Encrypt. # -# TTN_DASHBOARD_CERTBOT_FQDN +# IOT_DASHBOARD_CERTBOT_FQDN # The domain(s) to be used by certbot when registering with Let's Encrypt. # -# TTN_DASHBOARD_DATA +# IOT_DASHBOARD_DATA # The path to the data directory. This must end with a '/', and must either # be absolute or must begin with './'. (If not, you'll get parse errors.) # -# TTN_DASHBOARD_GRAFANA_ADMIN_PASSWORD +# IOT_DASHBOARD_GRAFANA_ADMIN_PASSWORD # The password to be used for the admin user on first login. This is ignored # after the Grafana database has been built. # -# TTN_DASHBOARD_GRAFANA_PROJECT_NAME +# IOT_DASHBOARD_GRAFANA_PROJECT_NAME # The project name to be used for the emails from the administrator. # -# TTN_DASHBOARD_GRAFANA_LOG_MODE +# IOT_DASHBOARD_GRAFANA_LOG_MODE # Set the grafana log mode. # -# TTN_DASHBOARD_GRAFANA_LOG_LEVEL +# IOT_DASHBOARD_GRAFANA_LOG_LEVEL # Set the grafana log level (e.g. debug) # -# TTN_DASHBOARD_GRAFANA_SMTP_ENABLED +# IOT_DASHBOARD_GRAFANA_SMTP_ENABLED # Set to true to enable SMTP. # -# TTN_DASHBOARD_GRAFANA_SMTP_SKIP_VERIFY +# IOT_DASHBOARD_GRAFANA_SMTP_SKIP_VERIFY # Set to true to disable SSL verification. # Defaults to false. # -# TTN_DASHBOARD_GRAFANA_INSTALL_PLUGINS -# A list of grafana plugins to install. +# IOT_DASHBOARD_GRAFANA_INSTALL_PLUGINS +# A list of grafana plugins to install. Use (comma and space) ", " to delimit plugins. # -# TTN_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS -# The "from" address for Grafana emails. +# IOT_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS +# The "from" address for Grafana emails. # -# TTN_DASHBOARD_GRAFANA_USERS_ALLOW_SIGN_UP +# IOT_DASHBOARD_GRAFANA_USERS_ALLOW_SIGN_UP # Set to true to allow users to sign up. # -# TTN_DASHBOARD_INFLUXDB_ADMIN_PASSWORD +# IOT_DASHBOARD_INFLUXDB_ADMIN_PASSWORD # The password to be used for the admin user by influxdb. Again, this is # ignored after the influxdb database has been built. # -# TTN_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME +# IOT_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME # The inital database to be created on first launch of influxdb. Ignored # after influxdb has been launched. # -# TTN_DASHBOARD_MAIL_DOMAIN -# the postfix mail domain. +# IOT_DASHBOARD_MAIL_DOMAIN +# the postfix mail domain. # -# TTN_DASHBOARD_MAIL_HOST_NAME -# the external FQDN for the mail host. +# IOT_DASHBOARD_MAIL_HOST_NAME +# the external FQDN for the mail host. # -# TTN_DASHBOARD_MAIL_RELAY_IP -# the mail relay machine, assuming that the real mailer is upstream from us. +# IOT_DASHBOARD_MAIL_RELAY_IP +# the mail relay machine, assuming that the real mailer is upstream from us. # -# TTN_DASHBOARD_PORT_HTTP +# IOT_DASHBOARD_PORT_HTTP # The port to listen to for HTTP. Primarily for test purposes. Defaults to # 80. # -# TTN_DASHBOARD_PORT_HTTPS +# IOT_DASHBOARD_PORT_HTTPS # The port to listen to for HTTPS. Primarily for test purposes. Defaults to # 443. # -# TTN_DASHBOARD_TIMEZONE +# IOT_DASHBOARD_TIMEZONE # The timezone to use. Defaults to GMT. +# +# IOT_DASHBOARD_NODE_RED_VERSION +# To Install specific version of node-red version. Defaults to latest. +# +# IOT_DASHBOARD_NODE_RED_INSTALL_MODULES +# Install the required node-red modules. use "space" to delimit the modules. +# +# IOT_DASHBOARD_PORT_MQTT_TCP +# Accessing mqtt channel over TCP. Defaults to 1883. +# +# IOT_DASHBOARD_PORT_MQTT_SSL +# Accessing mqtt channel over TLS/SSL. Defaults to 8883. +# +# IOT_DASHBOARD_PORT_MQTT_WSS +# Accessing mqtt channel over WSS. Defaults to 8083. +# +# IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME +# the external FQDN for the influxdb host +# +# IOT_DASHBOARD_INFLUXDB_BACKUP_EMAIL +# Backup mail will be sent to the mentioned MAIL IDs. Use "space" to delimit the MAIL IDs. +# #--- # Also see nginx/setup.sh, which uses some additional test variables when @@ -127,18 +149,18 @@ services: # the nginx server connects us to the outside world nginx: environment: - CERTBOT_DOMAINS: "${TTN_DASHBOARD_CERTBOT_FQDN:-.}" - CERTBOT_EMAIL: "${TTN_DASHBOARD_CERTBOT_EMAIL:-.}" - NGINX_FQDN: "${TTN_DASHBOARD_NGINX_FQDN:-.}" + CERTBOT_DOMAINS: "${IOT_DASHBOARD_CERTBOT_FQDN:-.}" + CERTBOT_EMAIL: "${IOT_DASHBOARD_CERTBOT_EMAIL:-.}" + NGINX_FQDN: "${IOT_DASHBOARD_NGINX_FQDN:-.}" restart: unless-stopped build: nginx ports: - - "${TTN_DASHBOARD_PORT_HTTP:-80}:80" - - "${TTN_DASHBOARD_PORT_HTTPS:-443}:443" + - "${IOT_DASHBOARD_PORT_HTTP:-80}:80" + - "${IOT_DASHBOARD_PORT_HTTPS:-443}:443" volumes: - - "${TTN_DASHBOARD_DATA}docker-nginx/htdocs:/usr/local/nginx/htdocs" - - "${TTN_DASHBOARD_DATA}docker-nginx/letsencrypt:/etc/letsencrypt" - - "${TTN_DASHBOARD_DATA}docker-nginx/authdata:/etc/nginx/authdata" + - "${IOT_DASHBOARD_DATA}docker-nginx/htdocs:/usr/local/nginx/htdocs" + - "${IOT_DASHBOARD_DATA}docker-nginx/letsencrypt:/etc/letsencrypt" + - "${IOT_DASHBOARD_DATA}docker-nginx/authdata:/etc/nginx/authdata" # nginx proxies for all of the below, so it needs to have links to them. # Examine nginx/proxy-*.conf to see how the links are set up. Also bear @@ -157,14 +179,14 @@ services: context: ./node-red dockerfile: Dockerfile args: - node_red_version: "${TTN_DASHBOARD_NODE_RED_VERSION:-latest}" - node_red_contrib_ttn_version: "${TTN_DASHBOARD_NODE_RED_CONTRIB_TTN_VERSION:-latest}" - node_red_install_modules: "${TTN_DASHBOARD_NODE_RED_INSTALL_MODULES:-}" + node_red_version: "${IOT_DASHBOARD_NODE_RED_VERSION:-latest}" + node_red_contrib_ttn_version: "${IOT_DASHBOARD_NODE_RED_CONTRIB_TTN_VERSION:-latest}" + node_red_install_modules: "${IOT_DASHBOARD_NODE_RED_INSTALL_MODULES:-}" user: "root" volumes: - - "${TTN_DASHBOARD_DATA}node-red:/data" + - "${IOT_DASHBOARD_DATA}node-red:/data" environment: - TZ: "${TTN_DASHBOARD_TIMEZONE:-GMT}" + TZ: "${IOT_DASHBOARD_TIMEZONE:-GMT}" # nodered opens ports on influxdb and postfix so it needs to be able to talk to it. links: - influxdb @@ -176,15 +198,15 @@ services: context: ./mqtts dockerfile: Dockerfile args: - ssl_cert: "${TTN_DASHBOARD_NGINX_FQDN:-.}" + ssl_cert: "${IOT_DASHBOARD_NGINX_FQDN:-.}" ports: - - "${TTN_DASHBOARD_PORT_MQTT:-1883}:1883" - - "8883:8883" - - "8083:8083" + - "${IOT_DASHBOARD_PORT_MQTT_TCP:-1883}:1883" + - "${IOT_DASHBOARD_PORT_MQTT_SSL:-8883}:8883" + - "${IOT_DASHBOARD_PORT_MQTT_WSS:-8083}:8083" volumes: - - "${TTN_DASHBOARD_DATA}docker-nginx/letsencrypt:/etc/letsencrypt" - - "${TTN_DASHBOARD_DATA}mqtt/credentials:/etc/mosquitto/credentials" - hostname: "${TTN_DASHBOARD_MQTT_HOST_NAME:-mqtt}" + - "${IOT_DASHBOARD_DATA}docker-nginx/letsencrypt:/etc/letsencrypt" + - "${IOT_DASHBOARD_DATA}mqtt/credentials:/etc/mosquitto/credentials" + hostname: "${IOT_DASHBOARD_MQTT_HOST_NAME:-mqtts}" influxdb: restart: unless-stopped @@ -192,50 +214,50 @@ services: context: ./influxdb dockerfile: Dockerfile args: - distrib_id: "${TTN_DASHBOARD_OS_distrib_id:-ubuntu}" - distrib_codename: "${TTN_DASHBOARD_OS_distrib_id:-xenial}" - hostname: "${TTN_DASHBOARD_INFLUXDB_MAIL_HOST_NAME:-.}" - relay_ip: "${TTN_DASHBOARD_MAIL_RELAY_IP:-.}" - domain: "${TTN_DASHBOARD_MAIL_DOMAIN:-.}" - hostname: "${TTN_DASHBOARD_INFLUXDB_MAIL_HOST_NAME:-.}" + distrib_id: "${IOT_DASHBOARD_OS_DISTRIB_ID:-ubuntu}" + distrib_codename: "${IOT_DASHBOARD_OS_DISTRIB_CODENAME:-xenial}" + hostname: "${IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME:-.}" + relay_ip: "${IOT_DASHBOARD_MAIL_RELAY_IP:-.}" + domain: "${IOT_DASHBOARD_MAIL_DOMAIN:-.}" + hostname: "${IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME:-.}" ports: - - "${TTN_DASHBOARD_PORT_INFLUXDB:-8086}:8086" + - "8086" volumes: - - "${TTN_DASHBOARD_DATA}influxdb:/var/lib/influxdb" + - "${IOT_DASHBOARD_DATA}influxdb:/var/lib/influxdb" # Dircectory for influxdb metadata and database backup inside "./data" - - "${TTN_DASHBOARD_DATA}influx-backup:/var/lib/influxdb-backup" - - "${TTN_DASHBOARD_DATA}influxdb-S3-bucket:/var/lib/influxdb-S3-bucket" + - "${IOT_DASHBOARD_DATA}influx-backup:/var/lib/influxdb-backup" + - "${IOT_DASHBOARD_DATA}influxdb-S3-bucket:/var/lib/influxdb-S3-bucket" environment: - INFLUXDB_INIT_PWD: "${TTN_DASHBOARD_INFLUXDB_ADMIN_PASSWORD:-!notset}" - PRE_CREATE_DB: "${TTN_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME:-demo}" + INFLUXDB_INIT_PWD: "${IOT_DASHBOARD_INFLUXDB_ADMIN_PASSWORD:-!notset}" + PRE_CREATE_DB: "${IOT_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME:-demo}" INFLUXDB_BIND_ADDRESS: "influxdb:8088" - INFLUXDB_BACKUP_MAIL: "${TTN_DASHBOARD_INFLUXDB_BACKUP_EMAIL:-}" + INFLUXDB_BACKUP_MAIL: "${IOT_DASHBOARD_INFLUXDB_BACKUP_EMAIL:-}" # Backuping influxdb metadata and database to cloud - SOURCE_NAME: "${TTN_DASHBOARD_INFLUXDB_HOST_NAME:-influxdb}" - S3_BUCKET_INFLUXDB: "${TTN_DASHBOARD_AWS_S3_BUCKET_INFLUXDB:-.}" - AWS_ACCESS_KEY_ID: "${TTN_DASHBOARD_AWS_ACCESS_KEY_ID:-.}" - AWS_SECRET_ACCESS_KEY: "${TTN_DASHBOARD_AWS_SECRET_ACCESS_KEY:-.}" - AWS_DEFAULT_REGION: "${TTN_DASHBOARD_AWS_DEFAULT_REGION:-.}" + SOURCE_NAME: "${IOT_DASHBOARD_CERTBOT_FQDN}" + S3_BUCKET_INFLUXDB: "${IOT_DASHBOARD_AWS_S3_BUCKET_INFLUXDB:-.}" + AWS_ACCESS_KEY_ID: "${IOT_DASHBOARD_AWS_ACCESS_KEY_ID:-.}" + AWS_SECRET_ACCESS_KEY: "${IOT_DASHBOARD_AWS_SECRET_ACCESS_KEY:-.}" + AWS_DEFAULT_REGION: "${IOT_DASHBOARD_AWS_DEFAULT_REGION:-.}" grafana: restart: unless-stopped - image: grafana/grafana:${TTN_DASHBOARD_GRAFANA_VERSION:-latest} + image: grafana/grafana:${IOT_DASHBOARD_GRAFANA_VERSION:-latest} user: "root" volumes: - - "${TTN_DASHBOARD_DATA}grafana:/var/lib/grafana" + - "${IOT_DASHBOARD_DATA}grafana:/var/lib/grafana" environment: - GF_SECURITY_ADMIN_PASSWORD: "${TTN_DASHBOARD_GRAFANA_ADMIN_PASSWORD:-!notset}" - GF_SERVER_DOMAIN: "${TTN_DASHBOARD_NGINX_FQDN}" + GF_SECURITY_ADMIN_PASSWORD: "${IOT_DASHBOARD_GRAFANA_ADMIN_PASSWORD:-!notset}" + GF_SERVER_DOMAIN: "${IOT_DASHBOARD_NGINX_FQDN}" GF_SERVER_ROOT_URL: "https://%(domain)s/grafana/" - GF_SMTP_ENABLED: "${TTN_DASHBOARD_GRAFANA_SMTP_ENABLED:-false}" - GF_SMTP_SKIP_VERIFY: "${TTN_DASHBOARD_GRAFANA_SMTP_SKIP_VERIFY:-false}" - GF_SMTP_HOST: "${TTN_DASHBOARD_GRAFANA_SMTP_HOST:-localhost}:25" - GF_SMTP_FROM_ADDRESS: "${TTN_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS:-grafana@localhost}" - GF_SMTP_FROM_NAME: "${TTN_DASHBOARD_GRAFANA_PROJECT_NAME:-Default} grafana admin" - GF_LOG_MODE: "${TTN_DASHBOARD_GRAFANA_LOG_MODE:-console,file}" - GF_LOG_LEVEL: "${TTN_DASHBOARD_GRAFANA_LOG_LEVEL:-info}" - GF_INSTALL_PLUGINS: "${TTN_DASHBOARD_GRAFANA_INSTALL_PLUGINS:-grafana-worldmap-panel}" - GF_USERS_ALLOW_SIGN_UP: "${TTN_DASHBOARD_GRAFANA_USERS_ALLOW_SIGN_UP:-false}" + GF_SMTP_ENABLED: "${IOT_DASHBOARD_GRAFANA_SMTP_ENABLED:-false}" + GF_SMTP_SKIP_VERIFY: "${IOT_DASHBOARD_GRAFANA_SMTP_SKIP_VERIFY:-false}" + GF_SMTP_HOST: "postfix:25" + GF_SMTP_FROM_ADDRESS: "${IOT_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS:-grafana@localhost}" + GF_SMTP_FROM_NAME: "${IOT_DASHBOARD_GRAFANA_PROJECT_NAME:-Default} grafana admin" + GF_LOG_MODE: "${IOT_DASHBOARD_GRAFANA_LOG_MODE:-console,file}" + GF_LOG_LEVEL: "${IOT_DASHBOARD_GRAFANA_LOG_LEVEL:-info}" + GF_INSTALL_PLUGINS: "${IOT_DASHBOARD_GRAFANA_INSTALL_PLUGINS:-grafana-worldmap-panel}" + GF_USERS_ALLOW_SIGN_UP: "${IOT_DASHBOARD_GRAFANA_USERS_ALLOW_SIGN_UP:-false}" # grafana opens ports on influxdb and postfix, so it needs to be able to talk to it. links: - influxdb @@ -247,11 +269,11 @@ services: context: ./postfix dockerfile: Dockerfile args: - hostname: "${TTN_DASHBOARD_MAIL_HOST_NAME:-.}" - relay_ip: "${TTN_DASHBOARD_MAIL_RELAY_IP:-.}" - domain: "${TTN_DASHBOARD_MAIL_DOMAIN:-.}" + hostname: "${IOT_DASHBOARD_MAIL_HOST_NAME:-.}" + relay_ip: "${IOT_DASHBOARD_MAIL_RELAY_IP:-.}" + domain: "${IOT_DASHBOARD_MAIL_DOMAIN:-.}" ports: - - "${TTN_DASHBOARD_PORT_POSTFIX:-25}:25" - hostname: "${TTN_DASHBOARD_MAIL_HOST_NAME:-.}" + - "25" + hostname: "${IOT_DASHBOARD_MAIL_HOST_NAME:-.}" ### end of file ### diff --git a/influxdb/backup.sh b/influxdb/backup.sh index e54a8bd..6f7f651 100755 --- a/influxdb/backup.sh +++ b/influxdb/backup.sh @@ -58,6 +58,7 @@ else fi # Remove the old backup data in local directory to avoid excessive storage use -find /var/lib/influxdb-S3-bucket/ -type f -mtime +90 -exec rm {} \; +find /var/lib/influxdb-S3-bucket/ -type f -exec rm {} \; +find /var/lib/influxdb-backup/ -type f -exec rm {} \; cat /influxbackup.txt | mail -s "${SOURCE_NAME}: influxdb backup" ${INFLUXDB_BACKUP_MAIL} From 1b77ec0c39829a88500271bc76b8546e90df932d Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Fri, 22 May 2020 17:25:11 +0100 Subject: [PATCH 27/65] updating Readme and setup --- README.md | 271 ++++++++++++++++++++--------- SETUP.md | 510 +++++++++++++++++++++++++----------------------------- 2 files changed, 423 insertions(+), 358 deletions(-) diff --git a/README.md b/README.md index fbac68f..db42fc5 100644 --- a/README.md +++ b/README.md @@ -1,155 +1,256 @@ +**Table of Contents** + +[1 Introduction](#introduction) + +[2 Application Server Installation](#application-server-installation) + +* [2.1 Definitions](#definitions) + +* [2.2 Security](#security) + +* [2.3 Assumptions](#assumptions) + +* [2.4 Composition and External Ports](#composition-and-external-ports) + +* [2.5 Data Files](#data-files) + +* [2.6 Reuse and removal of data files](#reuse-and-removal-of-data-files) + +* [2.7 Node-RED and Grafana Examples](#node-red-and-grafana-examples) + + + [2.7.1 Connecting to InfluxDB from Node-RED and +Grafana](#connecting-to-influxdb-from-node-red-and-grafana) + + + [2.7.2 Logging in to Grafana](#logging-in-to-grafana) + + + [2.7.3 Data source settings in Grafana](#data-source-settings-in-grafana) + +* [2.8 MQTTS Examples:](#mqtts-examples) + + + # Dashboard example for The Things Network This repository contains a complete example that grabs device data from The Things Network, stores it in a database, and then displays the data using a web-based dashboard. You can set this up on a "Ubuntu + Docker" VM from the Microsoft Azure store (or on a Ubuntu VM from [DreamCompute](https://www.dreamhost.com/cloud/computing/), or on a Docker droplet from [Digital Ocean](https://www.digitalocean.com/)) with minimal effort. You should set up this service to run all the time so as to capture the data from your devices; you then access the data at your convenience using a web browser. -This dashboard uses [docker-compose](https://docs.docker.com/compose/overview/) to set up a group of four primary [docker containers](https://www.docker.com), backed by two auxiliary containers: -1. An instance of [Apache](http://apache.org), which proxies the other services, handles access control, gets SSL certificates from [Let's Encrypt](https://letsencrypt.org), and faces the outside world. -2. An instance of [Node-RED](http://nodered.org/), which processes the data from the individual nodes, and puts it into the database. -3. An instance of [InfluxDB](https://www.influxdata.com/), which stores the data as time-series measurements with tags. -4. An instance of [Grafana](http://grafana.org/), which gives a web-based dashboard interface to the data. -The auxiliary containers are: +Introduction +============ + +This document explains the Application Server Installation and its setup. [Docker](https://docs.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) are used to make the installation and +setup easier. + + + +This dashboard uses [docker-compose](https://docs.docker.com/compose/overview/) to set up a group of five primary [docker containers](https://www.docker.com), backed by one auxiliary container: + +1. An instance of [Nginx](https://www.nginx.com/), which proxies the other services handles access control, gets SSL certificates from [Let's Encrypt](https://letsencrypt.org/), and faces the outside world. + +2. An instance of [Node-RED](http://nodered.org/), which processes the data + from the individual nodes, and puts it into the database. + +3. An instance of InfluxDB, which stores the data as time-series measurements with tags. + +4. An instance of [Grafana](http://grafana.org/), which gives a web-based dashboard interface to the data. + +5. An instance of [Mqtt](https://mosquitto.org/), which provides a lightweight method of carrying out messaging using a publish/subscribe model + +The auxiliary container is: -1. `influxdb-backup`, which (if configured) runs periodic backups. -2. `postfix`, which (if configured) handles outbound mail services for the containers. +1. [Postfix](http://www.postfix.org/documentation.html), which (if configured) handles outbound mail services for the containers. -To make things more specific, most of the description here assumes use of Microsoft Azure. However, I have tested this on Ubuntu 16 LTS without difficulty (apart from the additional complexity of setting up `apt-get` to fetch docker, and the need for a manual install of `docker-compose`), on DreamCompute, and on Digital Ocean. I believe that this will work on any Linux or Linux-like platform that supports docker, docker-compose, and node-red. It's likely to run on a Raspberry Pi... but as of this writing, this has not been tested. +To make things more specific, most of the description here assumes use of Microsoft Azure. However, this was tested on Ubuntu 16 with no issues (apart from the additional complexity of setting up `apt-get` to fetch docker, and the need for a manual install of `docker-compose`), on Dream Compute, and on Digital Ocean This will work on any Linux or Linux-like platform that supports docker, docker-compose, and Node-. Its likelihood of working with Raspberry Pi has not been tested as yet. -## Definitions +Application Server Installation +================================ -* The **host system** is the system running Docker and Docker-compose. -* A **container** is one of the virtual systems running under Docker on the host system. -* A **file on the host** is a file on the host system (typically not visible from within the container(s). -* A **file in container *X*** (or a **file in the *X* container**) is a file in a file-system associated with container *X* (and typically not visible from the host system). +Definitions +----------- -## Security +- The **host system** is the system that runs Docker and Docker-compose. -All communication with the Apache server are encrypted using SSL with auto-provisioned certificates from Let's Encrypt. Grafana is the primary point of access for most users, and Grafana's login is used for that purpose. +- A **container** is one of the virtual systems running under Docker on the host system. -Access to Node-RED and InfluxDB is via special URLs (__base__/node-red/ and __base__/influxdb/, where __base__ is the URL served by the Apache container). These URLs are protected via Apache `htpasswd` and `htgroup` file entries. These entries are files in the Apache container, and must be manually edited by an administrator. +- A **file on the host** is a file present on the host system (typically not + visible from within the container(s)). -The initial administrator's login password for Grafana must be initialized prior to starting the very first; it's stored in `grafana/.env`. (When you start the Grafana container the first time, it creates `grafana.db` in the Grafana container, and stores the password at that time. If `grafana.db` already exists, the password in `grafana/.env` is ignored.) +- A **file in container X** (or a **file in the X container**) is a file + present in a file-system associated with container *X* (and typically not + visible from the host system). -Microsoft Azure, by default, will not open any of the ports to the outside world, so you will need to open port 443 for SSL access to Apache. +Security +-------- -For concreteness, the following table assumes that __base__ is `server.example.com`. +All communication with the Nginx server is encrypted using SSL with auto-provisioned certificates from Let's Encrypt. Grafana is the primary point of access for most users, and Grafana's login is used for that purpose. -To access | Open this link | Notes -----------|----------------|-------- -Node-RED | [https://server.example.com/node-red/](https://server.example.com/node-red/) | Port number is not needed and shouldn't be used. Note trailing '/' after `node-red`. -InfluxDB API queries | [https://server.example.com/influxdb/:8086](https://server.example.com/influxdb/:8086) | Port number **_is_** needed. Also note trailing '/' after `influxdb`. -Grafana | [https://server.example.com](https://server.example.com) | Port number is not needed and shouldn't be used. +Access to Node-RED and InfluxDB is via special URLs (**base**/node-red/ and **base**/influxdb:8086/, where **base** is the URL served by the Nginx container). These URLs are protected via Nginx `htpasswd` file entries. These entries are files in the Nginx container, and must be manually edited by an Administrator. -This can be visualized as below: -![Connection Architecture using SSH](assets/Connection-architecture.png) +The initial administrator's login password for Grafana must be initialized prior to starting; it's stored in `grafana/.env`. (When the Grafana container is started for the first time, it creates `grafana.db` in the Grafana container, and stores +the password at that time. If `grafana.db` already exists, the password in grafana/.env is ignored.) -## Assumptions +Microsoft Azure, by default, will not open any of the ports to the outside world, so the user will need to open port 443 for SSL access to Nginx. -* Your host system must have docker-compose 1.9 or later (for which see https://github.com/docker-compose -- be aware that apt-get normally doesn't grab this; if configured at all, it frequently gets an out-of-date version). +For concreteness, the following table assumes that **base** is “server.example.com”. -* The environment variable `TTN_DASHBOARD_DATA`, if set, points to the common directory for your data. If not set, docker-compose will quit at startup. (This is by design!) +> Table User Access - - `${TTN_DASHBOARD_DATA}node-red` will have your local Node-RED data. - - `${TTN_DASHBOARD_DATA}influxdb` will have your local influxdb data (this is what you should back up) - - `${TTN_DASHBOARD_DATA}grafana` will have your dashboards +|**To access**| **Open this link**| **Notes**| +|-------------|-------------------|----------| +| Node-RED | | Port number is not needed and shouldn't be used. Note trailing '/' after node-red. | +| InfluxDB API queries | | Port number is needed. Also note trailing '/' after influxdb. | +| Grafana | [https://server.example.com](https://server.example.com/)| Port number is not needed and shouldn't be used. | +| Mqtt | | Mqtt client is needed. To test it via [Mqtt web portal](https://www.eclipse.org/paho/clients/js/utility/) | -## Composition and External Ports +This can be visualized as shown in the figure below: -Within their containers, the individual programs use their usual ports, but these are isolated from the outside world, except as specified by `docker-compose.yml`. +Figure Docker connection and User Access -In `docker-compose.yml`, the following ports on the docker host are connected to the individual programs. +![C:\\Users\\cmurugan\\Pictures\\Picture4.png](media/360b4dbc4a05763ea99e103a2f378d25.png) -* Apache runs on 80 and 443. (All connections to port 80 are redirected to 443 using SSL). +Assumptions +----------- -Remember, if your server is running on a cloud platform like Microsoft Azure or AWS, you need to check the firewall and confirm that the ports are open to the outside world. +- The host system must have docker-compose verison 1.9 or later (for which  -- be aware that apt-get normally doesn't grab this; if configured at all, it frequently gets an out-of-date version). -## Installation +- The environment variable `IOT_DASHBOARD_DATA`, if set, points to the common directory for the data. If not set, docker-compose will quit at start-up. (This is by design!) -Please refer to [`SETUP.md`](./SETUP.md) for detailed set-up instructions. + - `${IOT_DASHBOARD_DATA}node-red` will have the local Node-RED data. -## Data Files + - `${IOT_DASHBOARD_DATA}influxdb`  will have the local InfluxDB data (this should be backed-up) -When designing this collection of services, we had to decide where to store the data files. We had two choices: keep them inside the docker containers, or keep them in locations on the host system. The advantage of the the former is that everything is reset when you rebuild the docker images. The disadvantage of the former is that you lose all your data when you rebuild. On the other hand, there's another level of indirection when keeping things on the host, as the files reside in different locations on the host and in the docker containers. + - `${IOT_DASHBOARD_DATA}grafana` will have all the dashboards + + - `${IOT_DASHBOARD_DATA}mqtt/credentials` will have the user credentials + +Composition and External Ports +------------------------------ + +Within the containers, the individual programs use their usual ports, but these are isolated from the outside world, except as specified by `docker-compose.yml` file. + +In `docker-compose.yml`, the following ports on the docker host are connected to the individual programs. + +- Nginx runs on 80 and 443. (All connections to port 80 are redirected to 443 using SSL). + +Remember, if the server is running on a cloud platform like Microsoft Azure or AWS, one needs to check the firewall and confirm that the ports are open to the outside world. + +Data Files +---------- + +When designing this collection of services, there were two choices to store the +data files: + +- To keep them inside the docker containers, or + +- To keep them in locations on the host system. + +The advantage of the former is that everything is reset when the docker images are rebuilt. The disadvantage of the former is that there is a possibility to lose all the data when it’s rebuilt. On the other hand, there's another level of indirection when keeping things on the host, as the files reside in different locations on the host and in the docker containers. Data files are kept in the following locations by default. -Component | Data file location on host | Location in container -----------|----------------------------|---------------------- -Node-RED | `${TTN_DASHBOARD_DATA}node-red` | `/data` -InfluxDB | `${TTN_DASHBOARD_DATA}influxdb`| `/data` -Grafana | `${TTN_DASHBOARD_DATA}grafana`| `/var/lib/grafana` +Table Data Location -As shown, you can easily change locations on the **host** (e.g. for testing). You do this by setting the environment variable `TTN_DASHBOARD_DATA` to the **absolute path** (with trailing slash) to the containing directory prior to calling `docker-compose up`. The above paths are appended to the value of `TTN_DASHBOARD_DATA`. Directories are created as needed. +| **Component** | **Data file location on host**| **Location in container** | +|---------------|-----------|----------------------------| +| Node-RED | `${IOT_DASHBOARD_DATA}node-red`| /data +| InfluxDB | `${IOT_DASHBOARD_DATA}influxdb` | /var/lib/influxdb +| Grafana | `${IOT_DASHBOARD_DATA}grafana` | /var/lib/grafana| +| Mqtt | `${IOT_DASHBOARD_DATA}mqtt/credentials` | /etc/mosquitto/credentials -Normally, this is done by an appropriate setting in the `.env` file. +As shown, one can easily change locations on the **host** (e.g. for testing). This can be done by setting the environment variable `IOT_DASHBOARD_DATA` to the **absolute path** (with trailing slash) to the containing directory prior to +calling `docker-compose up`. The above paths are appended to the value of `IOT_DASHBOARD_DATA`. Directories are created as needed. -Consider the following example: +Normally, this is done by an appropriate setting in the `.env` file. +Consider the following example: ```bash -$ grep TTN_DASHBOARD_DATA .env -TTN_DASHBOARD_DATA=/dashboard-data/ -$ docker-compose up -d +$ grep IOT_DASHBOARD_DATA .env +IOT_DASHBOARD_DATA=/dashboard-data/ +$ docker-compose up –d ``` - In this case, the data files are created in the following locations: -Component | Data file location -----------|------------------- -Node-RED | `/dashboard-data/node-red` -InfluxDB | `/dashboard-data/influxdb` -Grafana | `/dashboard-data/grafana` +Table Data Location Examples + +| **Component** | **Data file location** | +|---------------|-----------------------------------| +| Node-RED | /dashboard-data/node-red | +| InfluxDB | /dashboard-data/influxdb | +| Grafana | /dashboard-data/grafana | +| Mqtt | /dashboard-data/ mqtt/credentials | -### Reuse and removal of data files +Reuse and removal of data files +------------------------------- -Since data files on the host are not removed between runs, as long as you don't remove the files between runs, your data will preserved. +Since data files on the host are not removed between runs, as long as the files are not removed between runs, the data will be preserved. -Sometimes this is inconvenient, and you'll want to remove some or all of the data. For a variety of reasons, the data files and directories are created owned by root, so you must use the `sudo` command to remove the data files. Here's an example of how to do it: +Sometimes this is inconvenient, and it is necessary to remove some or all of the data. For a variety of reasons, the data files and directories are created owned by root, so the `sudo` command must be used to remove the data files. Here's an example of how to do it: ```bash source .env -sudo rm -rf ${TTN_DASHBOARD_DATA}node-red -sudo rm -rf ${TTN_DASHBOARD_DATA}influxdb -sudo rm -rf ${TTN_DASHBOARD_DATA}grafana +sudo rm -rf \${IOT_DASHBOARD_DATA}node-red +sudo rm -rf \${IOT_DASHBOARD_DATA}influxdb +sudo rm -rf \${IOT_DASHBOARD_DATA}Grafana +sudo rm –rf \${IOT_DASHBOARD_DATA}mqtt/credentials ``` -## Node-RED and Grafana Examples +Node-RED and Grafana Examples +----------------------------- This version requires that you set up Node-RED, the database and the Grafana dashboards manually, but we hope to add a reasonable set of initial files in a future release. -## Connecting to InfluxDB from Node-RED and Grafana +### Connecting to InfluxDB from Node-RED and Grafana -There is one point that is somewhat confusing about the connections from Node-RED and Grafana to InfluxDB. Even though InfluxDB is running on the same host, it is logically running on its own virtual machine (created by docker). Because of this, Node-RED and Grafana cannot use **`localhost`** when connecting to Grafana. A special name is provided by docker: **`influxdb`**. Note that there's no DNS suffix. If you don't use **`influxdb`**, Node-RED and Grafana will not be able to connect. +* There is one point that is somewhat confusing about the connections from Node-RED and Grafana to InfluxDB. Even though InfluxDB is running on the same host, it is logically running on its own virtual machine (created by docker). Because of this, Node-RED and Grafana cannot use **`local host`** when connecting to Grafana. A special name is provided by docker: `influxdb`. Note that there's no DNS suffix. If `InfluxDB` is not used, Node-RED and Grafana will not be able to connect. -## Logging in to Grafana +### Logging in to Grafana -* On the login screen, the user name is "`admin`". The initial password is given by the value of the variable `GF_SECURITY_ADMIN_PASSWORD` in `grafana/.env`. Note that if you change the password in `grafana/.env` after the first time you launch the grafana containder, the admin password does not change. If you somehow lose the previous value of the admin password, and you don't have another admin login, it's very hard to recover; easiest is to remove `grafana.db` and start over. +* On the login screen, the user name is "`admin`". The initial password is given by the value of the variable `GF_SECURITY_ADMIN_PASSWORD` in `grafana/.env`. Note that if you change the password in `grafana/.env` after the first time you launch the grafana container, the admin password does not change. If you somehow lose the previous value of the admin password, and you don't have another admin login, it's very hard to recover; easiest is to remove `grafana.db` and start over. ### Data source settings in Grafana -* Set the URL (under HTTP Settings) to `http://influxdb:8086`. +- Set the URL (under HTTP Settings) to . + +- Select the database. + +- Leave the username and password blank. + +- Click "Save & Test". + +MQTTS Examples +-------------- + +Mqtts has been configured to access in the below channel: + +1. MQTT over Nginx proxy: + + Host: dashboard.example.com Port: 443 + Path: /mqtts/ + + Username/Password directs to mosquitto’s configuration (password_file) + +1. MQTT over TLS/SSL: -* Select the database. + Host: dashboard.example.com Port: 8883 -* Leave user and password blank. + Username/Password directs to mosquitto’s configuration (password_file) -* Click "Save & Test". +1. WebSockets over TLS/SSL: -## Future work + Host: dashboard.example.com Port: 8083 + + Username/Password directs to mosquitto’s configuration (password_file) -Although the dashboard is already very useful, it's incomplete. Please refer to `TODO.md`, and also note that we're considering the following. Check in for updates! +1. MQTT over TCP protocol: -1. Add a script to setup the passwords initially for Grafana and for access to node-red and Influxdb. -2. Admin script to show roles and maintain the `.htpasswd` and `.htgroup` files. -3. Add the auto-update cron script -- right now you have to restart in order to get the SSL certs updated. Not a big deal, as the patches-requiring-reboot interval is shorter than the life of the certs, but still, this should be fixed. -4. Switch to [phusion](https://github.com/phusion/baseimage-docker) for the base image, instead of Ubuntu. -5. Provide suitable initial files for Grafana and Node-RED, assuming MCCI sensor nodes. -6. The initial script should prompt for the data base name. + Host: dashboard.example.com Port: 1883 -## Acknowledgements + Username/Password directs to mosquitto’s configuration (password_file) -This builds on work done by Johan Stokking of [The Things Network](www.thethingsnetwork.org) for the staging environment. Additional adaptation done by Terry Moore of [MCCI](www.mcci.com). +To test the above channels, user needs [mosquitto +client](https://mosquitto.org/download/) tool except the first one: “MQTT over +Nginx proxy”. In order to test the “MQTT over Nginx proxy”, user needs to access +[mqtt web portal](https://www.eclipse.org/paho/clients/js/utility/) tool. -Other contributors: [Olivier Girondel](https://github.com/oliv3), [Murugan Chandrasekar](https://github.com/MuruganChandrasekar). diff --git a/SETUP.md b/SETUP.md index a283e9e..aa5b245 100644 --- a/SETUP.md +++ b/SETUP.md @@ -1,404 +1,372 @@ -# Set-by-step Setup Instructions - - - - +[Setup Instructions](#setup-instructions) -- [Notes](#notes) -- [Cloud-Provider Setup](#cloud-provider-setup) - - [On Digital Ocean](#on-digital-ocean) - - [Create droplet](#create-droplet) - - [Configure droplet](#configure-droplet) -- [After server is set up](#after-server-is-set-up) - - [Create and edit the `.env` file](#create-and-edit-the-env-file) - - [Set up the Node-RED and InfluxDB API logins](#set-up-the-node-red-and-influxdb-api-logins) -- [Start the server](#start-the-server) - - [Restart servers in the background](#restart-servers-in-the-background) - - [Initial testing](#initial-testing) - - [Set up first data source](#set-up-first-data-source) - - [Test Node-RED](#test-node-red) - - [Creating an InfluxDB database](#creating-an-influxdb-database) -- [Add Apache log in for NodeRed or query after the fact](#add-apache-log-in-for-nodered-or-query-after-the-fact) +* [1 Cloud-Provider Setup](#cloud-provider-setup) - - - + + [1.1 On Digital Ocean](#on-digital-ocean) -## Notes + + [Create droplet](#create-droplet) -Throughout the following, we assume you're creating a dashboard server named `dashboard.example.com`. Change this to whatever you like. For convenience, we name other things consistently: + + [Configure droplet](#configure-droplet) -`/opt/docker/dashboard.example.com` is the directory (on the host system) containing the docker files. +* [2 After server is set up](#after-server-is-set-up) -`/var/opt/docker/dashboard.example.com` is the directory (on the host system) containing persistent data. + + [2.1 Create and edit the .env file](#create-and-edit-the.envfile) -We assume that you're familiar with Node-RED. + + [2.2 Set up the Node-RED and InfluxDB API logins](#set-up-the-node-red-and-influxdb-api-logins) -## Cloud-Provider Setup +* [3 Start the server](#start-the-server) -First you have to choose a cloud provider and install Docker and Docker-Compose. That's very much provider dependent. + + [3.1 Restart servers in the background](#restart-servers-in-the-background) -### On Digital Ocean + + [3.2 Initial testing](#initial-testing) -_Last Update: 2019-07-31_ + + [3.3 Set up first data source](#set-up-first-data-source) -#### Create droplet + + [3.4 Test Node-RED](#test-node-red) -1. Log in at [Digital Ocean](https://cloud.digitalocean.com/) + + [3.5 Creating an InfluxDB database](#creating-an-influxdb-database) -2. Create a new project (if needed) to hold your new droplet. + + [3.6 Add Nginx log in for NodeRed or query after the fact](#add-nginx-log-in-for-nodered-or-query-after-the-fact) -3. Discover > Marketplace, search for `Docker` + + [3.7 MQTT User Credentials setup](#mqtt-user-credentials-setup) + -4. You should come to this page: https://cloud.digitalocean.com/marketplace/5ba19751fc53b8179c7a0071?i=ec3581 +Setup Instructions +================== -5. Press "Create" +**Notes:** -6. Select the standard 8G GB Starter that is selected. +For example, if the dashboard server name: `dashboard.example.com` -7. Choose a datacenter; I chose New York. +Other things are to be named consistently: -8. Additional options: none. +- `/opt/docker/dashboard.example.com` is the directory (on the host system) containing the docker files. -9. Add your SSH keys. +- `/var/opt/docker/dashboard.example.com` is the directory (on the host system) containing persistent data. -10. Choose a host name, e.g. `passivehouse-ecovillage`. +- Node-RED familiarity is assumed. -11. Select your project. +Cloud-Provider Setup +----------------------- -12. Press "Create" +As an initial step, a cloud provider is required and Docker and Docker-Compose must be installed which is provider dependent. -#### Configure droplet +### On Digital Ocean +-------------------- -1. Note the IP address from above. +#### Create droplet -2. `ssh root@{ipaddress}` +1. Log in to [Digital Ocean](https://cloud.digitalocean.com/) -3. Remove the motd (message of the day). +2. Create a new project (if needed) to hold the new droplet. -4. Add user: +3. Discover \> Marketplace, search for `Docker` - ```bash - adduser username - adduser username admin - adduser username docker - adduser username plugdev - adduser username staff - ``` +4. This page will be redirected: + -5. Disable root login via SSH or via password +5. Press "Create" -6. Optional: enable `username` to sudo without password. +6. Select the standard 8G GB Starter that is selected. - ```bash - sudo VISUAL=vi visudo - ``` +7. Choose a datacenter; *New York is selected in the example created for this document.* - Add the following line at the bottom: +8. Additional options: none. - ```sudoers - username ALL=(ALL) NOPASSWD: ALL - ``` +9. Add the SSH keys. -7. Test that you can become `username`: +10. Choose a host name, *e.g. `passivehouse-ecovillage`.* - ```console - # sudo -i username - username@host-name:~$ - ``` +11. Select the project. -8. Drop back to root, and then copy the authorized_keys file to `~username`: +12. Press "Create" - ```bash - mkdir -m 700 ~username/.ssh - cp -p .ssh/authorized_keys ~username/.ssh - chown -R username.username ~username/.ssh/authorized_keys - ``` +#### Configure droplet -9. See if you can ssh in. +1. Note the IP address from above. -10. Optional: set up `byobu` by default: +2. `ssh root\@{ipaddress}` - ```bash - byobu - byobu-enable - ``` +3. Remove the motd (message of the day). -11. Set the host name. +4. Add user: - ```bash - vi /etc/hosts - ``` +```bash + adduser username + adduser username admin + adduser username docker + adduser username plugdev + adduser username staff +``` - Change the line `127.0.1.1 name name` to `127.0.0.1 myhost.myfq.dn myhost`. +5. Disable root login via SSH or via password -12. If needed, use `hostnamectl` to set the static hostname to match `myhost`. +6. Optional: enable `username` to sudo without password. +```bash + sudo VISUAL=vi visudo +``` + + Add the following line at the bottom: +```bash + username ALL=(ALL) NOPASSWD: ALL +``` +7. Test that you can become `username`: +```console + # sudo -i username + username\@host-name:\~\$ +``` +8. Drop back to root, and then copy the authorized_keys file to  `~username`: +```bash + mkdir -m 700 \~username/.ssh + cp -p .ssh/authorized_keys \~username/.ssh + chown -R username.username \~username/.ssh/authorized_keys +``` +9. Confirm if the user can SSH in. -13. set up Git: +10. Optional: set up byobu by default: +```bash + byobu + byobu-enable +``` +11. Set the host name. +```bash + vi /etc/hosts +``` + Change the line `127.0.1.1 name name` to `127.0.0.1 myhost.myfq.dn myhost`. + +12. If needed, use `hostnamectl` to set the static hostname to match `myhost`. - ```bash +13. set up Git: +```bash sudo add-apt-repository ppa:git-core/ppa sudo apt update sudo apt install git - ``` +``` +14. We'll put the docker files at `/opt/docker/docker-iot-dashboard`, setting up as follows: + ```bash +sudo mkdir /opt/docker +cd /opt/docker +sudo chgrp admin . +sudo chmod g+w . +``` -14. We'll put the docker files at `/opt/docker/docker-ttn-dashboard`, setting up as follows: +#### +------- - ```bash - sudo mkdir /opt/docker - cd /opt/docker - sudo chgrp admin . - sudo chmod g+w . - ``` -## After server is set up +After server is set up +---------------------- -The following instructions are essentially independent of the cloud provider and the underlying distribution. But we've only tested on Ubuntu and (in 2017) on CentOS. +The following instructions are essentially independent of the cloud provider and the underlying distribution. But this was only tested on Ubuntu and (in 2019) on CentOS. 1. Clone this repository. + ```bash + git clone git\@github.com:mcci-catena/docker-iot-dashboard.git /opt/docker/dashboard.example.com +``` - ```bash - git clone git@github.com:mcci-catena/docker-ttn-dashboard.git /opt/docker/dashboard.example.com - ``` - -2. Move to the directory populated in step 1. - - ```bash - cd /opt/docker/dashboard.example.com - ``` - -3. Get a fully-qualified domain name (FQDN) for your server, for which you control DNS. Point it to your server. Make sure it works, using "`dig FQDN`" -- you should get back an `A` record pointing to your server's IP address. - -### Create and edit the `.env` file - -1. Create a `.env` file. To get a template: +2. Move to the directory populated in step 1. + ```bash + cd /opt/docker/dashboard.example.com +``` +3. Get a fully-qualified domain name (FQDN) for the server, for which the DNS can be controlled. Point it to the server. Make sure it works, using "`dig FQDN`" -- get back an `A` record pointing to your server's IP address. - ```bash - sed -ne '/^#+++/,/^#---/p' docker-compose.yml | sed -e '/^#[^ \t]/d' -e '/^# TTN/s/$/=/' > .env - ``` +### Create and edit the .env file -2. Edit the `.env` file as follows: +1. Create a .env file. To get a template: + ```bash + sed -ne '/^#+++/,/^#---/p' docker-compose.yml | sed -e '/^#[^ \t]/d' -e '/^# TTN/s/$/=/' > .env +``` +2. Edit the .env file as follows: - 1. `TTN_DASHBOARD_APACHE_FQDN=myhost.example.com` - This sets the name of your resulting server. It tells Apache what it's serving out. It must be a fully-qualified domain name (FQDN) that resolves to the IP address of the container host. + 1. `IOT_DASHBOARD_NGINX_FQDN=myhost.example.com`  this sets the name of the resulting server. It tells Nginx what it's serving out. It must be a fully-qualified domain name (FQDN) that resolves to the IP address of the container host. - 2. `TTN_DASHBOARD_CERTBOT_FQDN=myhost.example.com` - This should be the same as `TTN_DASHBOARD_APACHE_FQDN`. + 2. `IOT_DASHBOARD_CERTBOT_FQDN=myhost.example.com`  this should be the same as `IOT_DASHBOARD_NGINX_FQDN`. - 3. `TTN_DASHBOARD_CERTBOT_EMAIL=someone@example.com` - This sets the contact email for Let's Encrypt. The script automatically accepts the Let's Encrypt terms of service, and this indicates who is doing the accepting. + 3. `IOT_DASHBOARD_CERTBOT_EMAIL=someone\@example.com`  this sets the contact email for Let's Encrypt. The script automatically accepts the Let's Encrypt terms of service, and this indicates who is doing the accepting. - 4. `TTN_DASHBOARD_DATA=/full/path/to/directory/` - The trailing slash is required! - This will put all the data file for this instance as subdirectories of the specified path. If you leave this undefined, `docker-compose` will print error messages and quit. + 4. `IOT_DASHBOARD_DATA=/full/path/to/directory/`  the trailing slash is required! This will put all the data file for this instance as subdirectories of the specified path. If this is undefined, `docker-compose` will print error messages and quit. - 5. `TTN_DASHBOARD_GRAFANA_ADMIN_PASSWORD=SomethingVerySecretIndeed` - This sets the *initial* password for the Grafana `admin` login. You should change this via the Grafana UI after booting the server. + 5. `IOT_DASHBOARD_GRAFANA_ADMIN_PASSWORD=SomethingVerySecretIndeed` this needs to be confidential. Indeed this sets the *initial* password for the Grafana admin login.This should be changed via the Grafana UI after booting the server. - 6. `TTN_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS` - This sets the Grafana originating mail address. + 6. `IOT_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS`   this sets the Grafana + originating mail address. - 7. `TTN_DASHBOARD_GRAFANA_INSTALL_PLUGINS` - This sets a list of Grafana plugins to install. + 7. `IOT_DASHBOARD_GRAFANA_INSTALL_PLUGINS`  this sets a list of Grafana plugins to install. - 8. `TTN_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME=demo` - Change "demo" to the desired name of the initial database that will be created in InfluxDB. + 8. `IOT_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME=demo` Change "demo" to the desired name of the initial database that will be created in InfluxDB. - 9. `TTN_DASHBOARD_MAIL_HOST_NAME=myhost.example.com` - This sets the name of your mail server. Used by Postfix. + 9. `IOT_DASHBOARD_MAIL_HOST_NAME=myhost.example.com`  this sets the name of your mail server. Used by Postfix. - 10. `TTN_DASHBOARD_MAIL_DOMAIN=example.com` - This sets the domain name of your mail server. Used by Postfix. + 10. `IOT_DASHBOARD_MAIL_DOMAIN=example.com`  this sets the domain name of your mail server. Used by Postfix. - 11. `TTN_DASHBOARD_NODERED_INSTALL_PLUGINS=node-red-node-example1 node-red-node-example2` - This installs one or more Node-RED plug-ins. + 11. `IOT_DASHBOARD_NODERED_INSTALL_PLUGINS=node-red-node-example1 + node-red-node-example2`  this installs one or more Node-RED plug-ins. - 11. `TTN_DASHBOARD_TIMEZONE=Europe/Paris` - If not defined, the default timezone will be GMT. + 12. `IOT_DASHBOARD_TIMEZONE=Europe/Paris`  If not defined, the default time + zone will be GMT. -Your `.env` file should look like this: +The `.env` file should look like this: ```bash ### env file for configuring dashboard.example.com -TTN_DASHBOARD_APACHE_FQDN=dashboard.example.com -# The fully-qualified domain name to be served by Apache. +IOT_DASHBOARD_NGINX_FQDN=dashboard.example.com +# The fully-qualified domain name to be served by Nginx. # -# TTN_DASHBOARD_AWS_ACCESS_KEY_ID= +# IOT_DASHBOARD_AWS_ACCESS_KEY_ID= # The access key for AWS for backups. # -# TTN_DASHBOARD_AWS_DEFAULT_REGION= +# IOT_DASHBOARD_AWS_DEFAULT_REGION= # The AWS default region. # -# TTN_DASHBOARD_AWS_S3_BUCKET_INFLUXDB= +# IOT_DASHBOARD_AWS_S3_BUCKET_INFLUXDB= # The S3 bucket to use for uploading the influxdb backup data. # -# TTN_DASHBOARD_AWS_SECRET_ACCESS_KEY= +# IOT_DASHBOARD_AWS_SECRET_ACCESS_KEY= # The AWS API secret key for backing up influxdb data. # -TTN_DASHBOARD_CERTBOT_EMAIL=somebody@example.com +IOT_DASHBOARD_CERTBOT_EMAIL=somebody@example.com # The email address to be used for registering with Let's Encrypt. # -TTN_DASHBOARD_CERTBOT_FQDN=dashboard.example.com +IOT_DASHBOARD_CERTBOT_FQDN=dashboard.example.com # The domain(s) to be used by certbot when registering with Let's Encrypt. # -TTN_DASHBOARD_DATA=/var/opt/docker/dashboard.example.com/ +IOT_DASHBOARD_DATA=/var/opt/docker/dashboard.example.com/ # The path to the data directory. This must end with a '/', and must eithe r # be absolute or must begin with './'. (If not, you'll get parse errors.) # -TTN_DASHBOARD_GRAFANA_ADMIN_PASSWORD=................... +IOT_DASHBOARD_GRAFANA_ADMIN_PASSWORD=................... # The password to be used for the admin user on first login. This is ignored # after the Grafana database has been built. # -TTN_DASHBOARD_GRAFANA_PROJECT_NAME=My Dashboard +IOT_DASHBOARD_GRAFANA_PROJECT_NAME=My Dashboard # The project name to be used for the emails from the administrator. # -# TTN_DASHBOARD_GRAFANA_LOG_MODE= +# IOT_DASHBOARD_GRAFANA_LOG_MODE= # Set the grafana log mode. # -# TTN_DASHBOARD_GRAFANA_LOG_LEVEL= +# IOT_DASHBOARD_GRAFANA_LOG_LEVEL= # Set the grafana log level (e.g. debug) # -TTN_DASHBOARD_GRAFANA_SMTP_ENABLED=true +IOT_DASHBOARD_GRAFANA_SMTP_ENABLED=true # Set to true to enable SMTP. # -# TTN_DASHBOARD_GRAFANA_SMTP_SKIP_VERIFY= +# IOT_DASHBOARD_GRAFANA_SMTP_SKIP_VERIFY= # Set to true to disable SSL verification. # Defaults to false. # -# TTN_DASHBOARD_GRAFANA_INSTALL_PLUGINS= +# IOT_DASHBOARD_GRAFANA_INSTALL_PLUGINS= # A list of grafana plugins to install. # -TTN_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS=grafana-admin@dashboard.example.com +IOT_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS=grafana-admin@dashboard.example.com # The "from" address for Grafana emails. # -# TTN_DASHBOARD_GRAFANA_USERS_ALLOW_SIGN_UP= +# IOT_DASHBOARD_GRAFANA_USERS_ALLOW_SIGN_UP= # Set to true to allow users to sign-up to get access to the dashboard. # -TTN_DASHBOARD_INFLUXDB_ADMIN_PASSWORD=jadb4a4WH5za7wvp +IOT_DASHBOARD_INFLUXDB_ADMIN_PASSWORD=jadb4a4WH5za7wvp # The password to be used for the admin user by influxdb. Again, this is # ignored after the influxdb database has been built. # -TTN_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME=mydatabase +IOT_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME=mydatabase # The inital database to be created on first launch of influxdb. Ignored # after influxdb has been launched. # -TTN_DASHBOARD_MAIL_DOMAIN=example.com +IOT_DASHBOARD_MAIL_DOMAIN=example.com # the postfix mail domain. # -TTN_DASHBOARD_MAIL_HOST_NAME=dashboard.example.com +IOT_DASHBOARD_MAIL_HOST_NAME=dashboard.example.com # the external FQDN for the mail host. # -# TTN_DASHBOARD_MAIL_RELAY_IP= +# IOT_DASHBOARD_MAIL_RELAY_IP= # the mail relay machine, assuming that the real mailer is upstream from us. # -TTN_DASHBOARD_NODERED_INSTALL_PLUGINS=node-red-node-example1 nodered-node-example2 -# Additional plugins to be installed for Node-RED. +IOT_DASHBOARD_NODERED_INSTALL_PLUGINS=node-red-node-example1 nodered-node-example2 +# Additional plugins to be installed for Node-RED. # -# TTN_DASHBOARD_PORT_HTTP= +# IOT_DASHBOARD_PORT_HTTP= # The port to listen to for HTTP. Primarily for test purposes. Defaults to # 80. # -# TTN_DASHBOARD_PORT_HTTPS= +# IOT_DASHBOARD_PORT_HTTPS= # The port to listen to for HTTPS. Primarily for test purposes. Defaults to # 443. # -# TTN_DASHBOARD_TIMEZONE= +# IOT_DASHBOARD_TIMEZONE= # The timezone to use. Defaults to GMT. ``` ### Set up the Node-RED and InfluxDB API logins -1. Prepare everything: - - ```bash +1. Prepare everything: +```bash docker-compose pull docker-compose build - ```` - - If there are any errors, fix them before going on. - -2. Use `docker-compose run apache /bin/bash` to launch a shell in the Apache context. - - - If this fails with the message, `ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?`, then probably your user ID is not in the `docker` group. To fix this, `sudo adduser MYUSER docker`, where "MYUSER" is your login ID. Then (**very important**) log out and log back in. - -3. Change ownership of Apache's `/etc/apache2/authdata` to user `www-data`. - - ```bash - chown www-data /etc/apache2/authdata - ``` - -4. Add Apache's `/etc/apache2/authdata/.htpasswd`. - - ```bash - touch /etc/apache2/authdata/.htpasswd - chown www-data /etc/apache2/authdata/.htpasswd - ``` - -5. Add user logins for node-red and influxdb queries. Make `USERS` be a list of login IDs. - - ```bash - export USERS="tmm amy josh" - for USER in $USERS; do echo "Set password for "$USER; htpasswd /etc/apache2/authdata/.htpasswd $USER; done - ``` - -6. Add Apache's `/etc/apache2/authdata/.htgroup`. +``` +If there are any errors, they need to be fixed before going on. - ```bash - # this assumes USERS is still set from previous step. - touch /etc/apache2/authdata/.htgroup - chown www-data /etc/apache2/authdata/.htgroup - echo "node-red: ${USERS}" >>/etc/apache2/authdata/.htgroup - echo "query: ${USERS}" >>/etc/apache2/authdata/.htgroup - ``` +2. Use `docker-compose run nginx /bin/bash` to launch a shell in the Nginx container. -7. Exit Apache's container with Control+D. + - If this fails with the message, `ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?`, then probably the user ID is not in the `docker` group. To fix this, `sudo adduser MYUSER docker`, where "MYUSER" is the login ID. Then (**very important**) log out and log back in. -## Start the server +3. Change ownership of Nginx's /etc/nginx/authdata to user `www-data`. +```bash + chown www-data /etc/nginx/authdata +``` +4. Add Nginx's /etc/nginx/authdata/.htpasswd. +```bash + touch /etc/nginx/authdata/.htpasswd + chown www-data /etc/nginx/authdata/.htpasswd +``` +5. Add user logins for node-red and influxdb queries Make `USERS` be a list of login IDs. +```bash + export USERS="tmm amy josh" + for USER in $USERS; do echo "Set password for "$USER; + htpasswd /etc/nginx/authdata/.htpasswd $USER; done +``` +6. Exit Nginx's container with Control+D. -1. We recommend you first start things up in "interactive mode". +Start the server +---------------- - ```bash +1. Starting things up in "interactive mode" is recommended. +```bash docker-compose up - ``` - - This will show you the log files. It will also be pretty clear if there are any issues. +``` +This will show the log files. It will also be pretty clear if there are any issues. - One common error (for me, anyway) is entering an illegal initial InfluxDB database name. InfluxDB will spew a number of errors, but eventually it will start up anyway. But then you'll need to create a database manually. +One common error (for me, anyway) is entering an illegal initial InfluxDB database name. InfluxDB will spew a number of errors, but eventually it will start up anyway. But then the database needs to be created manually. ### Restart servers in the background -Once the servers are coming up interactively, use ^C to shut them down, then restart in daemon mode. - +Once the servers are coming up interactively, use \^C to shut them down, and then restart in daemon mode. ```bash -docker-compose up -d + docker-compose up -d ``` - ### Initial testing -- Open Grafana on **https://dashboard.example.com**, and log in as admin. +- Open Grafana on [https://dashboard.example.com](https://dashboard.example.com/), and log in as admin. -- Change the admin password. +- Change the admin password. -#### Set up first data source +### Set up first data source -Use the Grafana UI -- either click on "add first data source" or use "Configure>Add Data Source", and add an InfluxDB data source. +Use the Grafana UI -- either click on "add first data source" or use "Configure\>Add Data Source", and add an InfluxDB data source. -- Set the URL (under HTTP Settings) to `http://influxdb:8086`. +- Set the URL (under HTTP Settings) to ``. -- Select the database. If InfluxDB properly initialized a database, you should also be able to connect to it as a Grafana data source. If not, you'll first need to [create an InfluxDB database](#creating-an-influxdb-database). +- Select the database. If InfluxDB is properly initialized in a database, connect to it as a Grafana data source. If not, [create an InfluxDB database](https://github.com/mcci-catena/docker-iot-dashboard/blob/master/SETUP.md#creating-an-influxdb-database). -- Leave user and password blank. +- Leave user and password blank. -- Click "Save & Test". +- Click "Save & Test". ### Test Node-RED -Open Node-RED on **https://dashboard.example.com/node-red/**, and build a flow that stores data in InfluxDB. **Be sure to add the trailing slash! Otherwise you'll get a 404 from Grafana. We'll fix this soon.** +Open Node-RED on , and build a flow that stores data in InfluxDB. **Be sure to add the trailing slash! Otherwise a 404 error pops from Grafana. This will be fixed soon.** ### Creating an InfluxDB database -To create a database, log in to the host machine, and cd to `/opt/docker/dashboard.example.com`. Use the following commands: +To create a database, log in to the host machine, and cd to `/opt/docker/dashboard.example.com`. Use the following commands: ```console $ docker-compose exec influxdb /bin/bash @@ -422,51 +390,47 @@ my-new-database # ^D $ ``` - -## Add Apache log in for NodeRed or query after the fact +### Add Nginx log in for NodeRed or query after the fact To add a user with Node-RED access or query access, follow this procedure. -1. Log into the host machine - -2. cd to `/opt/docker/dashboard.example.com`. - -3. log into the apache docker container. - - ```console - $ docker-compose exec apache /bin/bash - # - ``` - -4. In the container, move to the `authdata` directory. - - ```console - # cd /etc/apache2/authdata - # - ``` - -5. Add the user. - - ```console - # htpasswd .htpasswd {newuserid} - New password: - Re-type new password: - Adding password for user {newuserid} - # - ``` +1. Log into the host machine -6. Grant permissions to the user by updating `.htgroup` in the same directory. +2. Change the directory (cd) to `/opt/docker/dashboard.example.com`. - ```console - # vi .htgroup - ``` +3. log into the Nginx docker container. +```console + $ docker-compose exec Nginx /bin/bash +``` +4. In the container, move to the authdata directory. +```console + # cd /etc/nginx/authdata +``` +5. Add the user. +```console +# htpasswd .htpasswd {newuserid} +New password: +Re-type new password: +Adding password for user {newuserid} +``` +6. Close the connection to nginx (Ctrl+D). - There are at least two groups, `node-red` and `query`. +### MQTT User Credentials setup - - Add `{newuserid}` to group `node-red` if you want to grant access to Node-READ. +To access mqtt channel, user needs credentials to access it. - - Add `{newuserid}` to group `query` if you want to grant access for InfluxDB queries. +1. Log into the host machine -7. Write and save the file, then use `cat` to display it. +2. Change the directory (cd) to `/opt/docker/dashboard.example.com`. -8. Close the connection to apache (control+D). +3. log into the mqtts docker container. +```bash + $ docker-compose exec mqtts /bin/bash +``` +4. In the container, +```bash + # mosquitto_passwd -c /etc/mosquitto/credentials/passwd \ + Password: + Reenter password: +``` +5. Close the connection to mqtts (Ctrl+D). From dd777dd5db908b27012a33e797030012e96908bb Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Fri, 22 May 2020 17:35:34 +0100 Subject: [PATCH 28/65] updating Readme and setup --- README.md | 2 +- assets/Connection-architecture-old.png | Bin 0 -> 160430 bytes ...re.svg => Connection-architecture-old.svg} | 0 assets/Connection-architecture.png | Bin 160430 -> 106256 bytes 4 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/Connection-architecture-old.png rename assets/{Connection-architecture.svg => Connection-architecture-old.svg} (100%) diff --git a/README.md b/README.md index db42fc5..2321f44 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ This can be visualized as shown in the figure below: Figure Docker connection and User Access -![C:\\Users\\cmurugan\\Pictures\\Picture4.png](media/360b4dbc4a05763ea99e103a2f378d25.png) +![Connection Architecture using SSH](assets/Connection-architecture.png) Assumptions ----------- diff --git a/assets/Connection-architecture-old.png b/assets/Connection-architecture-old.png new file mode 100644 index 0000000000000000000000000000000000000000..d71f6e2afd07fc67ac9653bceb71d89369989e2a GIT binary patch literal 160430 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�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 A*p-us%>k9s4ce5;PU4O+BmGGQ+Qj| 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踏{uJbE`Qgoh&r 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%0D5ipQCpIag7bWcUm)U5$^*LswA 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�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 A*p-us%>k9s4ce5;PU4O+BmGGQ+Qj| zWT+41eNX_j#@+3T2K`VYP0JpdVjC!C{sPt!zgM?{tml*BO+Q#fwilA-X@VDD8xL;f zg~(0UjM|>a8e9;YG_PKfkeD|;UDYExYs%5)a9izolA4JQRy__`3C%cZN9_>pA@BQt zFuo7Vu($YBjLt(}A}VWsEf)2~Q1HR+^O83HZCiLYZ=LciOt8^&TC)9S^-TUlaQQ&u zhqN4hVcF`?2R-_l;K)djdBEM{WW4&`FINp2>N^2w)V{e zq908L6rR4%T8oRv&BX{ZD zdk30tNL5g8x4^n(L@anqs($U`vj^qaRa%tfQ2H9Sxh;FT4j~*_zJn+jx()fRP7{Ee4++Cq;nY% zhTV&vUVnM{aIt>MbE?SPHvRNN%x3ISTDfLg#Zzj*p`^-j42C&6uI`;2{W&9Uj{+igcX0#3|3+-TF7=2mt1U zz?8r|*Po0B;m_VCT5%Li545;6rE_FsJm!>;SY2Ji#P-E+!lcPYW0DXeIbC%_{9X?a zA5cvEesBFxT)l0YOFluC;q)R<#SJ8RhR87>%I@3)0>=$Ug3Dpl;0a`xAocs(B~@2x zZ>K_E5i|I!4zW87FW~zO)d; z{s(%c&BMZA$*uSRCxU~P9@$pm0=C?IL?JZaBM$^|SJSS!$XRCScxWY|mCe>xIOk)B zl&bwnWsCIe_m8;`kEGksLWsUYXTD(6bznR+@7Vn9*PK{-&b_0)I;-exouf9be)NmK z<#0ZupB!y;5wR4&!EsPtdtFNZ&>rm}6A=QcK)U(Iv`MCztZU+nsNMJ&&%S;{V@gJt z-r7@Ot>I(K*KV}-ERT_5D!x)A&laD~Q5x699?f|RjaE)`t=+N`o^lEPx1I;8ViXeef_Fz2!M z*hakuo5EVQhQSSdE0&x}sHh|k8lNcuJKOP(L*ms53v@zXh`l8s(Ye1S`KC*Vf#L9?Yq0e7 z@eQ<%=c6AkWcXZ9oNLukknozJGP1GcBncnA65|Y?@msGy?BU*sz4zqhtM8$HowXGx zgX=;qi4y_GZ{%cK*g>2xiXY;jnDt#iXLY8-0BD%pzcUm-9`?LBxpH?0J061kx$0Ce z&|xRE^8IMm&+PWG>`J5r3}raFOH3Ii+v0GhQQqR48i&DQ9sJkO&Um~#anu}cGy z&82iJ-%Q{@9U*0^sK**{aacbk;A0oF)%1aJ#bb*b6hQpfdi=wud<1HiyLwW7yt;oY zrbps(JVszot%#9-I6gFgNCwuDXzq9#(w-cb^64$@TXz&d)F#~K z23Hn0hiGk2*TI;YYAHgsrjEj&^!D@^k~3Sx@CI_QdpRF`4%Z5KiwxVk93r6?x6-kd znY}Bo&@-QdAYD)w9fHsvZZ3SN@sGc1AN=MNgRuSi9M?}LwW60*+a2Sv?~NFWvacTx zE)4y=7}61t0kXO~@>YqKUF=lvxI<^LAYhfAFPLOj*`FxdXUH+p!3rv-<48PaeJ#3e zr(3_qGp}rE8Fj%Rh7X~wShwA5QIvK2Z(G~!lg{KnrDcYDi|`Y#8kYjM+xS)hkNTXL z8fMR^@4*Fc^x@pfbCI<@a~2c$h$YUU%|3rKhK6QB1|wYM1lVK>qb7bBJ@JzbiqGf~J8d~7|JN(j4Cg4-kt7XY~&pXlVT*YXE$yAdHYfzEFfxLEP zLJX!ocO)(1Xz(fTU8w@ufOp|*{)q?cga6&Y$t*g$TCRzEfQ=KN$KD+W#Om$j80F%k zsy)9E%G`qq8zmVEq5d#-@E-Dt5TqYLI#qrhgS>3(5AQU42Y87kRT~R1$otATE|!%b z1?Vt*RITA@X9&i&2E*tW7Y;|DKi zx(iyMcCQVqi=N_~k}Kl7MlH<}K`ea;czL14evznYw7WWEGab{P`7}F#{}RwgdLmI7 z{MVvq>Q*vhrXB$_1KgvLH0R2tL;Cb@#s9VqSn+4sQ(4vN_Y?ZaS%B{Uvr3;@W#QNs z-w2VJ|3tS{KQ4E`?xuKUKKbTt;4qQNt}xbsEZBVia2P<$%oql(2unA5VsC$h_*a9` zn*lM?6aKjc-hIb>d3)0snU0b+Mx8dyANZc%%!kGm7CV*6Hul+`-X3JXtj8s2mWfa>eK8^M-rilMxp1`AVT}h&>t*Nr z!l))&Y2PvTe~2;*UA;KW|Lzz#+-Oy^q&Yq~zE`s=GyWj-=erMfl!|G|FLiTnI3$~nkAi;V9Z1Fr+6GWS+-B(b4P|dj->{g;mYJA;i zvq!6!^^YjDjoA;oc{1q3{?!W-!&|R%3IsFr6FfCY7=R@l!^c(&+x(W%lsmg^P;Y~k zQW%km81Av%0*Vpp#G?Uxrv-a4WUc^l@c$U0jBzKy(O*L1ce8vxLG7i!+sH}U_ymTD zn?y+FM|2$d3qG-}5IGe1prVzmt3c3aC5NPQP?#A$eEiQ%>GmUQU=z1uZf)Q^FUI{JgB_>V|{<2p_nptQB*QVu?9koNZ>mCRxm$C z{!mEO5r}FAvnkjOhgb4S6aDB-d!T+Ok7e`Qu{ox0e0FQT8Qltpimsb@;-&|Z;MMrbv@PB~fFRq8Qw+l8GN3sDt;6e;2&=Ebi?6@6|brxV>FT=>eFXK^*62^5rFN zWgmy;C72r$m6B$W4l?1G1BYzY z5qS}r_>rJOCjz5?{8O|aLF&cuCVY^Mc;s8&34}TA_@5+|U*#`G-MKF7v3y{)m_1Qe z&Trf82*!}hZQ~ea?`j1qVgDNqL=zq%u1*PJCk|sI- zMLaO{G8Yn+wX?3QyXD&v8rqUBRS#uUWY7i}C4b=&+cn#>W&)!8M%T8M7sV~cOYd6# z5=e5#)dQyG7H6+(;OJhDZyoDHQ+c|rVK12KK@TLEnkBsyL44(h?h)2z+jLR4kVyHe zLhk_w=2DVMOK`%-P=H6;>gKth>u9YGgi678!-){l>k&a(14@Vrq z)66_O3J!!V0I{pj8(jP~aUMlEwIz9g1;PA}DEdDYV{3vFU<^OZIF3}|Zb@WjW|a$l zZIxBA6fAL7$w0Rg`CZZClc1yq?7{Vm`3Y55HCR5Wbdi3a2Kce<(S+4u?S-1%W7D#< z(pM$lyUdtsUq2^<{;j;{_UW!%23wtG9tH3pd6q01X;ZtK3~H{l@e<0nJcj<*aAkND zRxS1~*F-vQu@Hh0!jC-MX|vTjR-ogf-|#nAOzqziSUVd8PCeWE>{Z%e^C(cIx@_8} zr;_G3C~{V;X~tdCbaC6p?AF|K)0ri-%5yyJ3hL7Y~dR9$= z(ag+^o#@;PTbTMpTQmAfu*8r(XIe#PjOqi6=kT|p2N&t9OulvHoQ+f)L)n|1%CD(p zaEehpQ7$0{Zu@ZR$8C*{7Y|zwX23JROu)52_cG5xieprNM7y0!cvIcC`%Ux=%COW_ zU0@9G^Q@D15)&V%rWelZoTxjA74Ae9%G+_}LhC=+&`|({XM}rshrMEZl`=rmh&|LIA`)dZ#{=9W~->zbZr6lf^9JuM)pO2=IY=p}?%*H{A$iX^LXrK8Mw240~jD ztz6JZrhgH!wf91pSEhONXuMyRgsHPy_rIU*Y0iW~fmLU9xd3W>^uxudm<1t(b&qHI z%dbI+k4IOTZV#u;zh6_jxMHkSYJ09t%wo~V$1Q!*B7orB6(9){FUt|JB9c`;tuS+{ zNtMecY$O_v<3XnZi*RJ97GN3nA1VW!naca84wI}p|Mmo;L4~i@g50{VP?YH{0PV8R z%mTf5vi0J|qqXy4_M^h|a)H#-cB5FvW(yE@^*$=&cfGBVqL~ykNz_dP zB!zClJqx}knsM&9{T_Ax2g9p+HyWQC{{{mh*^&lCB}odd(B9DkGAK#xlIFW+*5P5u zu#?;vum4>hXbmw6hR6U}AN6+@iXGeoOayEF1d5wWq3_`ES^H^wukgn9elNvA2|fmf zWxXpei^t89Cy5y1HQUU+Xz!S-*aQ*jV7J096wR{wDOp3mQKO4QgHMCJRa-7N8`79h zA@7DOvVKL_DSvxF0B~(z7Ip6c^`5G+TlkO308$g7v74WRy1#Oj)F)nqx3JdHbFA(H zen;fLV`k29w*B0AITp`T^P-iRkIWl;My4+W#Vt_(1icC^8ak>OZ;Ro%HRd;{N+-7C zC=nole$JV=uj(@G*v#Iy%$;>9VFFT`i#c%mQRCc&EmUJ{y=CN&N}|a6ND2 zxO9hrPtGnUrE&56V=c^yUXEi+A4GQIqo-^EStPoZoV^A31I#z++j}GVr3!XGA{{r} z!CPtU(xtsEqXk>&zmta$ld>vp;6&8|mp%@heNzh<^XrzLZ@v|a2$`CEEl4;51X;`M zLk(UVw(TAE!1zrV{J;wMi+k@mcYn80X~)in>sRpDhXr5?Lk!q!9rF+>oGb10#5w6@ z(Ajl>sS#vS#^;7@*mE{GaZ8EyolxLGE>!FnPzvH(&y3Gib@}f*WgY-(FFj8RkF=v{ zQJVp-n}z~DbU(lp1O6eSYodyOdofMAAnD{AZ4?h+`}Za^d2(xrhYjezICcFPwN<<< zUrw8J56OOCzE%5Kn?nVGk((mwzC>hu!(TJc9CU3ktwXtKpr1Ej_s6hz4@-IoCN*78 zYpM$Phm>rTkENB08H?33zr{IICw|Kzl$;F2mG&AsCINzKMVXafxg9Wo5%GT{gR3l zMdMVe2JC(o44TO_ai{k*CT9So*ED{K%fM%lA2fp+@E8Hu)q6Jwd=+zg>|;%#qFFi0 zF4fuk-N2r}Cd}#wE3<-{W{-_(EXH2SyA*hF6ktmL)P&GYIje@!ZwN?((U5zV(?9@E z7jqd8ZknGZwP1IlkIp5G9E1V7LF6ksu}3(e^zf(+Y>??L<7$!T<916{)z$(OkoBCK z1K5(V*Nmb1mgm8{@T<$_;XL_U(Pr4&<)M1xM_Y-089={INI?z|zk6C>1;!wxtDT{j z<@z~}`NdtUu0=!OMkhYG1B%1vfWNez&Dcnxw{1Cg2KfA;GP|rIUBChCoohsm1~<8WaG1d{Y77ZPy`E998e$ z{7hOE{mUpTiE1VdT=E`ARRUltT$;@fP+TNv+-!YYg zA@bo;7e2i})RDPr2W#Y{OUy0h)knY{Ht$I|0a>l`w{;9$Bz3pN zc$`!KYKhv34#9$^%)C4wP6>{x zdTZ`m8M!;?DH32$?@!dZZJ*yvR1QBRP_ZWtk&ESPB+mQ_R_hZ8iC~(XPqst*pT^sb z7lF-Rq{A-T1W;4lNnj7%A0pU|#`(GBV06b;PG5%Jpb7iGh))TBpB(c$pkrC*q@TGys672M>IR;`r?Z|0 zEc48*rsqH{jQ(*o>k zblBFnH?wCESao2cy@59vEgzX^6+1;=HTNb*D|)9~&7!D@_w=$f#opebaSr&wd%N%{ zX-OqEM2KlOSV$Z!mx97C0Tt+D-}uTP(CEE7lJ;gEH;6u<2V$M!<^MkPc?gzP{A3+3 zo;0KTtOi=*`afwy-Qua1NCt)-7Rc86Ee5mbl5)->pbTjRM2P`bpRwkbD+w(_vcrqx z=a7OOp+rB@QOct1o3Q2NC_K~_4N>>1BqZ<~yQq-o|DntR&8WZ21PH77GkvoB4aW$~ zyYO&#Kcm@$#DpVEu^kt@W=?g=n`se5%drV5#2i&kfk!H*$K6zDqygDe7Iy`9$q;L< zWje>qwT;#{WAN?h2vr3sr(A4nH%;DKt6bT#D)xAn3n@H+Zk9Z!UgGeoS-cH+$Q=g| z5tNf%9>nGQ9l_*ksMy0ejhh^ZKOo>5<76Jp0`AtcYNW?m_nHPkG7U>WVDkYIfB<{tAQ>QP*IEK@No5riZtl@lqb{wExsmC9UqSgcP84-KotP@eKwCZHZNoS72 zUmV1Q3`UV)RN2U7f}G?>)j6OA_eBjL>Szq7d82HAC zYV&6=@!YqWIt7Ev;2H1Yss+o(c4+LJoiWkdUF|`Mm0~}TrTxZ!Xa+!`Ku(tq1%hX; zFW@&by6=)H;em|XahI>vJ&}7{N(8uJp3-!=SXBPY?Q9X|bjn0(dQ{12fR(eJzl9u z4^rOTePxu?Dt_)X;YY){MhjL~UyS-Ud%M4zRd4BPX4|&9d#;QW;j_SlTcD*9gSi%9 zPle0uZ1)`JHWt{!`j^`}5igC;!L4ry62wL~0D4(S)xGZ7Nk45YeWT~!H960UqY1zs zQ)%b!sD7X}8lW#HZQ*8Ar=pesOUUs{%0nMkBxv)8I(}=tsJNy??y=4ZigihSIv~KZ zC}r&BAYu^zXQhs9^WE(|ng2yL&jQ}mebWMYnZS2Y&-vMQ()4?mh2K|P(7RN;bi}g! zZr>PD@gSVCiMui9c1TN=z2&7zdvqvm{Q&({eOJDcR1T^*gu>Ov|2h)MUC#F zM$OtfR2SM>t=ZZuqBb$BD79L(_ozK;C5TYfqKMc*%pzuD1hKtWxS!wgyvOmrzx$tC zL%!p>&g(os=loRH0MJf);a@fFi;MK*F6f+FuQtl; zP1W`|v|`COKsSa^4r+0J`V6wSm4lMfqGQL%Q^w`F_G5R%0L*QZ$b@v%HEO5aS(MN2 zeav#$j34pRw%T@rYRVM}nBVi;Q`^L_ zH1QFQhgpUS+Mq5?%0*rO31zfu4wUl4X{P7Imx$BhhX<1Dm&0TY;L0`o%ke0o^y@vs z+SZLcZC}}yUkD}wmBMlrRMME%VIf<%v9GEQN>FN2;7$!W3Mc*8*JO)|8 zUw60(NB|RMUoEO!{-m)!z>??<+E1L_wI7_43#+%XnvwE$SWY}S!fYRu*S`N_F9#?F zmg(=nqX3u}%%uuTr1%ycTdK}`<*?!yxLNOzxC&XJk~mqTu4){MrPg-22>I+~mSDwc zw?K3&MVxVKE5L~Sv+=w`UJ{cT#Aj#f3|5U(u7m&g1Ea+^vW?Vne9klFJk$&nN20ZN zU0N=Nv5YoR+N)WNYj9#%guqa{c+EcWgM)YP=1iI?fm%i(Kz*8r;AygKld+tvv$l&d z{AW7#Wg@b@mYUqV2fZ4d$GKLoUGiB-P)KjkN(19)U0m128AK?BLZWnP=TgC1bpNZ0 zY;$78tlF|UcQu`AmhF~ZE%n~V^x`_G=)@t>y zOKpj^c4yv4xpJarx5vLvE@zCYrgMi0Ad_oDnWz5)aANt9P2%S!M?*1070D%SlgbSY zX6@a#GZ>3k6N~lJ)uznNzT4~RBy=xU4>6xHN)f^3%vYd^bKtIH6fFXG}H7QEScN0dV|!=D$tj%6kz8S znEQ6S;l;C>z9XG|R$-(86Gq!NrVXp@?IYgXXO}yI9}qx}U6fj~>j1-f?SL7;=K53; z+q6x!{pZMyce1sFPx@YG3h&MgM`ESX0ldXdo=6F2&n8tk1x$6RTdqgOwyZ2o%v?oD zw>u6#67s@f@{J3q&LbGa+x!O1;>KHRCgoePD0->01cL!H;$}b4v=K5rPN-@-1@Fm$ z;Q@I=L!0Cg&R(Pp1mdQcHk=JZ{n}Zi7+OE-dlYaya=q^YzHqf3!;cB_L#gPVYDz4z z;5I=2%w?C`O5e^EQwwc>Z?Q@BZe7&&I$dTa$K?n=37YGup1$)^eUb5b^mscZ)(_;N z)vonN4r34VU0VA)67#5!cmf>WYoTd`y!I5mXEE+S6~~L^wHMDr>^}!cdUR(xJFNX? zlp!Kl-UhjOz=Nc^Q7*u|u6$@z-0vJ6wHeutrpc-nu`l4|Btj)1vgOcS!kxrjK;&Z3I#eOcw&zy|e7MFg zlTBCMY%b5;Ma3DYtpUJ3etXnic6>f8M^Jq6&86JtT?d?TH&iy&RJg|4Ak5Kogr`-c zQ>1$bkY#)Hi9CCVJ~2e{OxB2*1vN);vsd|1@T*G>txjOZszwdr1!t#ie3_o<3m)mlfMN`qGel$sR7WD&AVVp#Y7dG*m;~IAbiSzMIf!bX3 zV!wY;jV*OVXSdn*0RZy^nP8^D~obRSwh2yr3)-xl;q|V ziJNMQXBF6g;w^l8;>u|~Vj(80Vlz`}*tIRuR@$oF@%Ns=wKhvrr-X(VKxV4As zvY)mRJ>F9yQEkA(aYu%{5p(;r`O(ET^Xwt3!Y`@t1%+foXY6)Ou5a=GBB1-?5XrB- zK3Vt9UkdgsS-?K*gE(uu+@6k=K4M;+>e4s>zERQKqJITH)Ra}yz=W$mi84iV1rQBpjrNP0mVT4eL1XeaFZg${pK*VOt8Wcu4Ot?ogpNFDRV)_2 z`{Y-eo!Eeg`dECfX>^Ep+?<>-&Gf(M{9mszb@Iv=btI}S&{FP;V7lrcT0XE)#Yyy_B<02JU*L%8 z0p}q0xS9GSQ1Xv|uHv>hW<~`#zAC2X{&OHi!{qPDij8|Kzb&a9Z|F4zTUY}#t!-}2 z;M}qr#8U1Wg)QRE_`4`DkH2CIIxzM#LO$8%CrIg>L zf4Hkz<^^VOj-cy#S2gb5qMwoAwvhnyR+BY7^CQ%bWSlb9kAnBNIQV}y^w|DJ8dKN& zMNOL|54aYfq;&k zVI8R9l1U2D9UXi`0>J>!#WMzJOlE#Iy_C7(n^<>4Z3geX-*X1!i!jf|uc5?7HD6@% zgnW!{Q|CO+lT~AvQ{SyyVT*iIl{>N^Hw0IZ zivC(kuMVhng|4&sp^EZV-apx(MJOT?XD!NDz}tf}GnH8=46}YRaw;}JveKgcc$ppH zF1|mrG?6Hs;<;btP9Dkv(U|7_gPs{-wR>szN2xrPvUO9HXtnzE`@e;Ej^zAOq6u_Y(d^r5P*Ite-%UAc-swQ{ za9FS{iH6>tQ(<$M_XjoSOYLkNv#KvzuNd^tooOEyQSWEx%%qO-+UNfnr4ju`M6gEd zY`$sU)b~fsqn>7qZ^)C;^VA>#`8$tR&&DsOCawU5yEtcR;bNl)U{`s(+{~5+v2w`f@di;3ABEA|S1%;O&l%e^{AIM)S zGzl%_?D+5@$Dqx>=6fw+#zl)CNLTM-VZa4jh_Letp^i{y~YGhqZj=i*Bcf#emFqa`1w?3qiTr8xKTu~E=`o+4{gc*l4=F*)Y%VjS$zV( z|LhTHo$g~gItsF~T%IbZWMHc>R;Y#>`d}r^mDL>z2R-upJpOqGF^JvJV zyi<7^AK6kIeaunw`@V;9F0lm=efe7Kd`cr^Nw$lpfC*R}*W{P}xD3qJRsYiyh5!3h zsjtQV+eXT*M~t&bvS}SE8i*{eIFcn8uO+#(RYzcA035Be1%jo%u06xm2sWt9UxX0U zkCRvuPOc!fUsTvBAnFd6SZ^nb<@Ld@(SDfHRf|Q0C67G60TO=`Ng$}3D%oy-C3~Zx z9prXFj{|eHffT>}i)h>B6Dm%O-GCkVJXu@7mE;8Fv@Cl#uF~n1^^Z=^b+VF=xnTT0wto zUE+utp=V9LYIMlJglpu!4AW^gmTEqSy6vDkv2gDRIl^{I&EK$Ng+G@+uoT{vjio*#%)4;DR%MuFo?TmC^Or^;E2DVk3*;P?_^>CVzEduN zh)A>Z7!8P70L-~JEwHqC>?sOP9*i&DNHz{Tdi-Bz-#ch#-5J z%mvLkRO8Wm`KVpyoN5wYb1F$Nv}|foiYLl+Zf7ifZCyvdZr*`5t%)y|QRh7u#wovu zDEv};dtk&i-BPB*nRDGC^y2ve2~~ti@zx*l<94AZA(Mgklp2SGD~4}h>V?M!^cAI? zI_d~fyv)bXi|9p3>WScK=O{bac}&LswzKY^?WsD?$jzS&tnu@L@sfKFaK2bMfDB*ZGfZt#u+(6xCb_?^^x0sbru{iFAc5a>4SA%tt2o761P zmL)XvHlT%Z{#N<5vRffT^OH%acn^Qof@9{bt78JO4s^DuJ8R>peSA!_YrYHe38@ zmc`0P_x)$TrXAoBxd-ROIAOl~WeYQ~?DQ>umK9=}&>CIP46=^fv2oiF9>tClJ!1u% z^&rXg-o_thuNoH@*ACk5lye>*F4|=;yBIH1$oU1EHs=c2oSp+sW-H6bLHP4`2Hyy< z-!`_}pUD`iH{!AFjUEn|tJ`TA?LVtN@pvC#dE)CXdXY$)`EyAUKAKS_4E-GI2~2b@ z3C3__|B`0ZU;4K!rTNkWG(`4!o$yX${r)21KJH5O0j@-LsfT?JuARV@hI|}{SK|Vs ztD@0;zQ2~XoLY(He2o=FSLThianeILwBTxdQW83_IY`?w`Pdo%{Z6j+>PNWgQ{CcQ9FP) ziv{Pn^st?P%rP|38UHzNVy&8#PI-A^LC_tB@!L<|Y`H**JEU?PDz*DRY^oZjb=y0C zqrXIdPo97!rc&OgC@i?H4?ZeyuOL-0T*IrD3s@#}k$o&U&83NFoxEbOnRC>97FWB~ zmF&tEvhZ*=_L5w`K{m(ZmSCUps#D4o|D1^M>u+3huuKSRM`~a=8b5??-#!YYkc2-; zC1ebl2{v*n*{vJ(E@XJhz14M|+#|W)=S)}3H-R1XsvzDl2=8|7Ww-X6>wo9`eBJS( zw&r}7M|#>#8{2+!0A5R2Ly^Q^X8IaX;?e2HGnaB})(thz6+@&sShb;G&N-E6Hg9QI zDW%?%%Tt0Pr8%%D@0|rGDIi8&IXbAK^7e8PvzN7g9?H8=x6oKK!aB)%*qYBx|36N>D1zKR-zpn3zPq8COwmWSDR9I`A^lv*A!X$ zGRz-`AqsovaLU@6^F-$0EyY&s+V9ko8EVOJfo5t<6tkN;WQFAj$j*3XxOVX1IcxGl zSZeorS*F+N4ZT+>k_mLR8-isE$&>+zma+c4m*%Z}jzvnXsV}ibcj6s?2&nD+VNm?$ zO>)xit|N0y*2rU-gz|#&L&n%p&hqCh_SS6PE5)N0{C_GIDj3TJ%T;?I|8Ayi^26); z;`);6mi-LW=Px#AD%b*tbn2_6cvg8VXexvFxc=X2L3tyJ-)ser%BU{t;niB@L;#eM3+2D2`_>H%(_ZB92cwSly6oE}p~JF%u25NM zu{pMg+U+)jMQ@{R>X>5d8}0?V?d&o#!;k2S;-yDcC_=@qt*g|Wm3Ci~E@SSAQn{+N zBqA}p7|B5yU`h6#s}~qSj}JRdXmBKdM#NMAuC&$U5TA5<~j z)P3$?J?T1T;*f7SSADlBLDgkHWoFZzQ(-%{`)~No;9%Ogm!g8g05IL*B-V#1Fk9g? z));uT`}0*Smq9 zI@Ruy)b%JZ(C(L76ZZ$RSLsU~G_myh3eNjxiz8*0daDT+9yUJO-@r;XG29)tZ@>17 z{E27W?Z)*}*j_pOA-6<4)jiV_GyMepd0FtGw+H4+dB9U1Su9BVehP$e&TxO6{tK!H zHm5);fKbc2o-j}7jdL;lx@pXtdUogC?n`nCc9CqW6fm^iXsAN5y>|k85_^Pa^jtC> z6R3yqym!R%g%k3A*K@t|ZuZ1;@Iu>afPPczfiPYil?1vsbgnuKHWr%#vRI+@>AlPYi|Im_b6 zm$>l~!u6!RMgzclV|mxVb@Ybb7k`Nz8^R;DF|>5 zB!bcVE$K|xk>lFl3*`bucENNkagyyh%hU`QP{0OPvH>$nZfHJH?$H~;+2RX}`7X*w zm*Wf+xrlwIln1Q+7eK($Bzxk0tCY5wd8)K@G@w0#V_si>u$Q<3RA43<1m205a@Qyruc`ac@zZZ*%H+1zr?SXcM>N-Er+i*(H zQz&ku{b)0E`RFR0M0ET_Hq{*b95A9ec(lTxxu~Uoxp6Y1AVe%2@kNj4rvFJNeHVhU z=-J1rYzE^h*9pIV)fPl(zpl!^{0dW0RJzN2*IL%`q{w}}*=0RY1)rf3Q0&Oix!dEk-H`AMdL5VupKJ8Zx$<-$bSv^*daK$iI!xg+&85yC|HmWUdwWC+*Q@AS^k|- zxK>^Js+l`0Vb0O=wu83i;u-YKUM0Rb{mSH!U#hHHSnd=KnU_>cC?~c| z4)_xn{aW+)Sl7{_&$|}86~n7EtUjosmB>zM`%n|T47SN)(8E_{7gVcvr*^oFy$@B= z=Butmh|ztj(iGQ^9slM3Z0Ua*^_b&%#_#q{D+=#%?OoGu-vy)hDV~9fX+D34y+(Sjrnir=m z3^OJE@?z}+wGUj2BmG;}sK1DF53bvLU-fbzRKH+{lqFFeRx? z6yC+*4y0$YSU8QkH%4>ADxj7mrzuh09 zvc>92qZ?5-FM5C91<~*U+x9*hO_g1$oI2#_F%ZF5I6|<=< zFx_hZ40`LW*@nqIwlbU_8yB=9;H1jD7mN8&OsG@QlERy_Lxy;j*YU-v41BAc_V_de zmZ#CZ)g~L3LkkQhaO1plh2)%ubLA`v z%^{wQz%u`go!+y>=jVVrJswbKIC)7jpz7$b@Nkg#Zcx&2R1cuGaGMYL`0mFZ*1ztc zF-R2Hm+@VgFyO3np}?t;=vwpA;J2PPvJ83>4VuPkW66-3yaxo?0nw3 zxX`}caAsy&uC6VhNkF6A??wWyU%*MA-^w?zF&2N*zh5UyCr0Py=mti0(c7;xc38p9 zD+T&+d_=Od+VL_1A>L_!dJyX64V8Qc=r1jCC4Elmi(jJs*i$~S-_B9?Gg);fi2|lH zFBDD0J~gOTm)vU=@GvR=rEBf_2`U=(zZNA-U5473w9eA^Br~4eq8X`MQVv-+UvuTO zZ{*Ee=goWp8tHYgbjG76hSiR_aiZp7F8m6fbG4cvK|etdT+fP7V}8n~r~WBVSp1fM zEq#N2Dla`Rg%egWp7Sk+QKSK7fY&_5f7=tpsu1q_2Xz3RfQ)OHa@~mk$Ea)xYDFu3 zRJ}(@OJ6gH!6hk5pH7TDQYOka-`k@pk%R*T328s;p||PHdYw>kIRPf86z|Fs^V$Hd z=>AO#9dav?Jzuud{#9k(Pwfwa>Mtp?c}HC|Sc)iQY-HbezSv!IX25a!Y(GJDWNn3@ zMlQ+yie2lKzICSEWcqf$kBwd+*1=qE&Eb;5f1BcQ(|x2|Zf0LxL5pH+SE>udy0Jm|31VQ_M z)c>!>pU!lpgPGYE?UMEIZ%OdWL(AXvB#YZ?w!b!)-0(TUqUAA#lc~{dJe_+>V$?vS zmD&0x#~r!N6*C9QE_PtHCGBe4kCURrRYfO{ea3E(y;Jr67v0*17s4!F;t4t6Oj9z0 zynVZzlC6K3OZlF2t5m4W=np+SDOh+~#l7nyPhh21Y2;kXF&9n&dJ;2&|G8G|O?oMo zUwPjPL9A~kdrYKm`jPK>zj|v*EB0|rHi&J) z-Cf28O46@TI9riCH|yl^FK2=AGekv8xX+j6gj=p+R`oo-4EfaIQ*^cezu93qzZ<$HuqsHwzV z7pqno475yF#q=agjN;kDd_n~LRiU&?jy#?F_M|uL4xQ?%W9x2^_04#t$XSG39LN5$ zfkUZO>Chw0>$gu^+U4m)&N`MOn%6+tWY8}MljM0u134Ox1AnSn8RWvtW6pewRUi@NMm9I*LM*^+&zV8&y}?AUX5Nhv(D7b1zPOC^$Jl@g!zOI#zej*NtYAW~()G zN!3V1QJ$9^cX&cIva4daTGNTNnTVYZ$zSh_2vLX_aBJGZg~3x9os(5I zP+zZVL0FT>30t>%X?f}_*=aSuybuq9ClCD7KLsh#NZt*$ggVzc)UhIC;xxA{5CE7% z&~IwxB*-3(Gkh?HziqKEU{-loqE^I&Ty>uFo@DHkVNx}9LGJr>nuCm+y$41^%#igO?LN<=O+7M6yf9=uI zB{#LHBtyJwM^XNQ=oH@f*NV_$^4ol68!L-D3f}JnT?8PjMMb5pdheg-V;;Kb$b`6= zsQ63u&*=kK4D$1-*yv`&MrY1U_Zx>SSL?=0BgnGt(SEDf{zbX(P)M`3fm$4>9S8$A zq8V>jO2C9QYU!?TMt{EHhCABqVp!=IoSQEw2`U~4?b(uW+)+h)^#G@M7qyT=jrW!4 z-?9kXAG5cMyg-ixghxOb>!RA{_L?=Bzk9>6Q%3(xp?T}S-)tXIv0i$XIErX=bW+OtDecyHSJb-eF?FA| zfM9?Jp&8G7$w~OQ)vrNjVfap{&^H~S4s{l`v#2G9!gXs3KMhR$l~u#l8OUKZ7{X3> zX%aT;hjka+FIx_lVJ=xpzr~5;HWljjlboqyt$cXV2Lsa?fxpeXWa}#0Y+&hcK!vA| zuPJ^{3np-%oP^W5^FvHOo^>ayRh5DWk*b7S-;095U{DDA(_vMuD~8udvY z2N(cA3t3fUaqqVFCeB`|}VLT=eFznNxIJ`MCo5&x(-K3Y0_ zMr0dNK;rdH9<6TME3}3u=Rd75bQ%9keaPbv4jb z^L(P1d6+c?aYcgbqKU!Cy||~~TBlDho8nIa3BCOjTOrl$mDb5S7u-4c{ zPL353pQ7o^X+qBAjzY4_2PANIex;h91Ak9r`6B2}j4D+00e=mDb*>Gn1&MTa)ds(T zD9zZp_#sQAbb@kg%0IS|Z*L9;?$@`;nS~&uypODI{H#izmsD`S3{EKI@wvKG@ReJy zHBI#i>3>V6_&CCW0fmOOshj|xGiPjkC7L9ehZE%X*PDdeTOsc0;OqGb`CxfJ{wD(} z-|=ePoHF~HD*>;{(&1F472Mf*9q&068}S}Z(?Nmh8%xXB8?NW&mt|}(^Wfks5*z4sRcnf!>U*} z84@=l-so6f5$~z1>VC)ja=kygS2dPi` z3+(~Zb~bMOn+mjLgqx*u9CZsI%z+!F#0e{2d@?`%EARC|2aKeGa~hj?%^<2TmT(M? zDH4apA45qr9Y=P5AKOWj(`_SF6yu+}WFxA(c2dshzhylNHr<4=9u&wym_s8UImOOa zlsGWf)?~EV$UQ7$1t0$zx3dnkw6O&ThgV48GP#DkEkSNzXJfQD?C*VT0&wPJwCl{) zZ9VX`C{(pHdY?fR`BK>64WU|yBLWuA$gG9f#LDl7uY-7+$p!Q$aLHSItSXk04?Ke; z`S5!^jrO{Y2dB#Mn+=v5B#KU!bxb|(KB8;pIh|LBZ_NrIg0iSo%v0@?&dT%Es{7e> zK|=&_U0MTj0tZu4V4kgorW&G31hm#D63$Wk!4zLo%_XZ!81aRT>?@K#n?5BY&M)Bq)3$$HHE)c3eF$Vzpw?u2 z>9Pq`eVLp;IKZbbGFeGu{$@x6BZ_m5iAxIfJRCOTmY2rsENr1KPW>~V=jk>8-JA$5 zCEhYA`ZK0@-we5}EiQ6LKB`8* zxJcgVn?AUGFbmZjL40oK-4Z9rMH-1ZJ97%&fi2vy1|kaCgpQ8)J1;cH+rvOFG$c;( zU~7)G_q>7f2b{{)i{Xsh!utJit-KXhbQ=aECiy zBoAFErG6Sw7vE#C#{1m`=p~*E3j^@cTSay~t2QYnBN^@($#3z6ffiS&*HqxNC9d{? zTSqXgo(7`w_Gi5MsBNQWle6O9d-b^4kiq~^q6eA$o))E{3Vz?5`L)P)q`Jax{Jz7` z`zAMC|5?#9H6$R-J~rF!PT8*3ith&9Du2sX+S@(LH^#w!k`|%=#eXqA!Y~tVCsM>0o zkC(S3rnq)15B*#z){BX%!XUz_p=@2Igs>2S(OOq{oYWAPWh{6l$Ywey$)_STMTvtW z`_qR~v<%J4yB$C5me~+nXY-vJFNLh=no13$zz=a6-wwCvM>I)5R1Frw5Njxtzm_A_ z>Fe=uV14oyo{^cW1#wJyd$djm>dYNtmO^F&_x}@CN(5h5RESj{_0mY)iNj3YaY&;+ z!ESC^?(qM50*EZ@b1P9l5A~!)Sv{lZ1>Q9T_$!~i-uh-$@c)7X+XZoLJUuJopzQ3b zd(L}U%XS(xH-e}9o0B#*!VZ2C@jrkfW90u{rZeN`<|v}6-5&@8WO8s^>yaba9}|uP z3IAzsmkYQ7|FmD<+#(M z`L6zKYkg-M z1HG$<%AFp1vvO_p+rStUMar2#x6+@%#sjV3y}vz5H0ArXnh@beUB1k*-(QG#eC?y4 zH@5*WY`bj7_>j|P_S4BkoMtx(Y-}^_;hWMk-&JsOT&RgGCh{4RsDf{zXDmvlmJLoG zJ=6%yyf5}9koiVO3FO9#1komho35hm3xu3h3xZX_TS_Zxn>NC5C+heuJlBY>E@PZb z^57(t&7oy7jW8-0KM6hZIKcU+kCFJfIHA1Kio6_-9Te}qEqjoRXTRKtqj>A zRx(y3GLq622e#6uZNT9cqV(LM)cPID87)n_8W#&bZnH62r2ENtQ|ePc-btLkYTa^p z1P(16kIK#PIbk5S7H$9slp#7}!VcCZEsa;gRo>%79941#Ui`mzj3vu^-y7x%&Mgmq zkDQ{q-sj^B?aZ<->(MUq1YluvtVFp+fCr^jq-XiRH2LmoH<7Bzx9sW#6xRO-8Sog| z=py=cMG0{-3Uh^*bA%MCM+!!}7ocopqIaV0jj)Rg(90=>qqW$A(GqOIU}=-h$bbbq zBbP*|ia^%5Vi{;a7s&`Xb4Og$50f)!C2IM+FizU}W1RT=OewRW6N_9CCxIL==lgd2 zf6IZ%&)f`|numqHz$vJ z8yH;>!kcK>ju<2IU0)1N-2jjQi%c>cyTl()EmWDwB5QucjH8g}arCscW1(GzZ6W(l(tfet@w zt=}ESadO^D0VsSExxXxU09?gS1XE>NX<+>=u#DhkSN;AzkZH@wv$&~k9&-mqx(tpT z1d@xdltkE2HpV;a<7W){&|ZrZLJ9k8!#Bg|6SXxo69!9~V(&C1+s@tKh6RKso8$%b z#+3#?Ro5xnoV)4^DV(ovi9eTRHu+H0=-+Ko=e}99jY`X5%AKCQ&@w0N5r+c9^U6xyX4wwD@YaWS@9t~Wmct%!|#Un0qAH)P*{QcIJwhYG<@ z47+J*Y*dCd9Mv>?1{xwEkavG#pec7hw2}AHe{M>Wy!*_&WLi#e%fAcAP4GyR40m%r z%_ksv^#+$UYoUx9x^&QEFVLHZT3HxyXwF1zY&}uAOPc1gJz7Rui&Py6fsBhuAQKw+ zOeb@1bDKP32&Gm1A|q(GHZI(?^e=rY7O4mLq!_E zASiC8>Z!NBNm_E?JbKF(Q^;vH(D#TuRH{#?V}*%O_TGn95s|HJIIpsvnr-j>=9+mX zmpGcyjVOUr+o9Y0Hq#otLs_9JC2XG{KL4B?`=qYpw;zDW1>rK*8Q})gyWmdj&jrB) z>Rp)+?|LCoRz$+J7P$EX`1@oIpF8<3mqhA3-bXTg-CrG8Be)d9M2icog{@tK~f zF!j;R6lFKf(4=Q;q2hRqXmPP9MSia|3BP*GaQFM>95$uI*U^b^3=)hZRBpCs_o$c3 z;m*^x&o>UZHE$<)avj|Kmir=DFQ3~voI|ErjGq~-&`;K-gx?aSTz|{15uC}P$|DjA zJKgN$xh>l6k%6gQ*j=DT5XTICSHbJT97dVEB@>*9ls#6+i|2?&8f;VVSGQzqhWQ*Ge;?sHMSh^^0&Fkgq8dv54zs|2^z;#S~%LC(@1$|E3db*74Z zTh~?2#sZ7flZ>aCy>-iQJ2)o(HVzKsvR}_yTZpo`;5?bcP!IUrIpgPUrWL#b+%~jP zkMcBTUg4_^_KQ`QzceLUJi^``=m|-*>$#NAH?h~b@6o?Q*hKP9GeVS%@LnJY#LDnu zdoM%CO*d;AdDoEFr)b?bqebj=-Z2P|tUKvo8`w0A+J-8turUh)AqOQ`{osm#2_u&fvBg7}-AWjB(=?)_qA40eBsJ&6E$ zk=nOlwcdB7SsKe3Wv#6g^XdGyuC7SVSz5twvEvij_-CCv({*knC^d@w;Sfxkyi{?E ziIcu9VOQ}Dg!^yFtkT71 zzn3RoC6JDdd+Z~<=Xr6qz(9)sEn@wemT_afoJI#P)8@i$U;{Qq(f$y`-c~16iF9z% zw6iGEy}0!6*mOKzwl>6Fuu5dP*J+~0`b6q6#Wbn@u6NV2E>G#AVvU>5%3=|PaK_j= z!GRelo2bXHwo8m3S~I_rrn$f?%;iDNFnwrh9D4Q8MTjtsCwq{Z`!yV%B9HyK{Blf> zoL=2Nx2JAo)ueiz`sh}@?fnJhpsTbAE%w#+WyH=p!THUkf踏{uJbE`Qgoh&r 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 Date: Sat, 23 May 2020 07:06:29 +0100 Subject: [PATCH 29/65] updating Readme and setup --- README.md | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 2321f44..664bcd9 100644 --- a/README.md +++ b/README.md @@ -29,9 +29,9 @@ Grafana](#connecting-to-influxdb-from-node-red-and-grafana) -# Dashboard example for The Things Network +# Dashboard example for Internet of Things(IoT) -This repository contains a complete example that grabs device data from The Things Network, stores it in a database, and then displays the data using a web-based dashboard. +This repository contains a complete example that grabs device data from IoT-Network server, stores it in a database, and then displays the data using a web-based dashboard. You can set this up on a "Ubuntu + Docker" VM from the Microsoft Azure store (or on a Ubuntu VM from [DreamCompute](https://www.dreamhost.com/cloud/computing/), or on a Docker droplet from [Digital Ocean](https://www.digitalocean.com/)) with minimal effort. You should set up this service to run all the time so as to capture the data from your devices; you then access the data at your convenience using a web browser. @@ -40,7 +40,7 @@ You can set this up on a "Ubuntu + Docker" VM from the Microsoft Azure store (or Introduction ============ -This document explains the Application Server Installation and its setup. [Docker](https://docs.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) are used to make the installation and +This `README.md` explains the Application Server Installation and its setup. [Docker](https://docs.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) are used to make the installation and setup easier. @@ -222,7 +222,7 @@ This version requires that you set up Node-RED, the database and the Grafana das MQTTS Examples -------------- -Mqtts has been configured to access in the below channel: +Mqtts has been configured to access in the below channels: 1. MQTT over Nginx proxy: @@ -249,8 +249,14 @@ Mqtts has been configured to access in the below channel: Username/Password directs to mosquitto’s configuration (password_file) -To test the above channels, user needs [mosquitto -client](https://mosquitto.org/download/) tool except the first one: “MQTT over -Nginx proxy”. In order to test the “MQTT over Nginx proxy”, user needs to access -[mqtt web portal](https://www.eclipse.org/paho/clients/js/utility/) tool. +- To test the above channels, user needs [mosquitto +client](https://mosquitto.org/download/) tool except the first one: “MQTT over Nginx proxy”. + +- In order to test the “MQTT over Nginx proxy”, user needs to access [mqtt web portal](https://www.eclipse.org/paho/clients/js/utility/) tool. + +Setup Instructions +================== + +Please refer to [`SETUP.md`](./SETUP.md) for detailed set-up instructions. + From 02d252f20f90672d5b54c0cc8170c9878d4ac68e Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Sat, 23 May 2020 08:58:03 +0100 Subject: [PATCH 30/65] updating Readme and setup --- README.md | 59 +++++++++++---------- SETUP.md | 154 +++++++++++++++++++++--------------------------------- 2 files changed, 92 insertions(+), 121 deletions(-) diff --git a/README.md b/README.md index 664bcd9..bd81f52 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,32 @@ **Table of Contents** -[1 Introduction](#introduction) +[Introduction](#introduction) -[2 Application Server Installation](#application-server-installation) -* [2.1 Definitions](#definitions) +[Definitions](#definitions) -* [2.2 Security](#security) +[Security](#security) -* [2.3 Assumptions](#assumptions) +[Assumptions](#assumptions) -* [2.4 Composition and External Ports](#composition-and-external-ports) +[Composition and External Ports](#composition-and-external-ports) -* [2.5 Data Files](#data-files) +[Data Files](#data-files) -* [2.6 Reuse and removal of data files](#reuse-and-removal-of-data-files) +[Reuse and removal of data files](#reuse-and-removal-of-data-files) -* [2.7 Node-RED and Grafana Examples](#node-red-and-grafana-examples) +[Node-RED and Grafana Examples](#node-red-and-grafana-examples) - + [2.7.1 Connecting to InfluxDB from Node-RED and +[Connecting to InfluxDB from Node-RED and Grafana](#connecting-to-influxdb-from-node-red-and-grafana) - + [2.7.2 Logging in to Grafana](#logging-in-to-grafana) +[Logging in to Grafana](#logging-in-to-grafana) - + [2.7.3 Data source settings in Grafana](#data-source-settings-in-grafana) +[Data source settings in Grafana](#data-source-settings-in-grafana) -* [2.8 MQTTS Examples:](#mqtts-examples) +[MQTTS Examples:](#mqtts-examples) + +[Setup Instructions](#setup-instructions) @@ -40,19 +41,19 @@ You can set this up on a "Ubuntu + Docker" VM from the Microsoft Azure store (or Introduction ============ -This `README.md` explains the Application Server Installation and its setup. [Docker](https://docs.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) are used to make the installation and +This [`SETUP.md`](./SETUP.md) explains the Application Server Installation and its setup. [Docker](https://docs.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) are used to make the installation and setup easier. This dashboard uses [docker-compose](https://docs.docker.com/compose/overview/) to set up a group of five primary [docker containers](https://www.docker.com), backed by one auxiliary container: -1. An instance of [Nginx](https://www.nginx.com/), which proxies the other services handles access control, gets SSL certificates from [Let's Encrypt](https://letsencrypt.org/), and faces the outside world. +1. An instance of [Nginx](https://www.nginx.com/), which proxies the other services, handles access control, gets SSL certificates from [Let's Encrypt](https://letsencrypt.org/), and faces the outside world. 2. An instance of [Node-RED](http://nodered.org/), which processes the data from the individual nodes, and puts it into the database. -3. An instance of InfluxDB, which stores the data as time-series measurements with tags. +3. An instance of [InfluxDB](https://docs.influxdata.com/influxdb/), which stores the data as time-series measurements with tags. 4. An instance of [Grafana](http://grafana.org/), which gives a web-based dashboard interface to the data. @@ -64,8 +65,6 @@ The auxiliary container is: To make things more specific, most of the description here assumes use of Microsoft Azure. However, this was tested on Ubuntu 16 with no issues (apart from the additional complexity of setting up `apt-get` to fetch docker, and the need for a manual install of `docker-compose`), on Dream Compute, and on Digital Ocean This will work on any Linux or Linux-like platform that supports docker, docker-compose, and Node-. Its likelihood of working with Raspberry Pi has not been tested as yet. -Application Server Installation -================================ Definitions ----------- @@ -84,11 +83,9 @@ Definitions Security -------- -All communication with the Nginx server is encrypted using SSL with auto-provisioned certificates from Let's Encrypt. Grafana is the primary point of access for most users, and Grafana's login is used for that purpose. - -Access to Node-RED and InfluxDB is via special URLs (**base**/node-red/ and **base**/influxdb:8086/, where **base** is the URL served by the Nginx container). These URLs are protected via Nginx `htpasswd` file entries. These entries are files in the Nginx container, and must be manually edited by an Administrator. +All communication with the Nginx server is encrypted using SSL with auto-provisioned certificates from Let's Encrypt. Grafana is the primary point of access for most users, and Grafana's login is used for that purpose. Access to Node-RED and InfluxDB is via special URLs (**base**/node-red/ and **base**/influxdb:8086/, where **base** is the URL served by the Nginx container). These URLs are protected via Nginx `htpasswd` file entries. These entries are files in the Nginx container, and must be manually edited by an Administrator. -The initial administrator's login password for Grafana must be initialized prior to starting; it's stored in `grafana/.env`. (When the Grafana container is started for the first time, it creates `grafana.db` in the Grafana container, and stores +The initial administrator's login password for Grafana must be initialized prior to starting; it's stored in `.env`. (When the Grafana container is started for the first time, it creates `grafana.db` in the Grafana container, and stores the password at that time. If `grafana.db` already exists, the password in grafana/.env is ignored.) Microsoft Azure, by default, will not open any of the ports to the outside world, so the user will need to open port 443 for SSL access to Nginx. @@ -123,6 +120,8 @@ Assumptions - `${IOT_DASHBOARD_DATA}grafana` will have all the dashboards + - `${IOT_DASHBOARD_DATA}docker-nginx` will have `.htpasswd` credentials folder `authdata` and Let's Encrypt certs folder `letsencrypt` + - `${IOT_DASHBOARD_DATA}mqtt/credentials` will have the user credentials Composition and External Ports @@ -158,6 +157,8 @@ Table Data Location | InfluxDB | `${IOT_DASHBOARD_DATA}influxdb` | /var/lib/influxdb | Grafana | `${IOT_DASHBOARD_DATA}grafana` | /var/lib/grafana| | Mqtt | `${IOT_DASHBOARD_DATA}mqtt/credentials` | /etc/mosquitto/credentials +|Nginx| `${IOT_DASHBOARD_DATA}docker-nginx/authdata`| /etc/nginx/authdata +||`${IOT_DASHBOARD_DATA}docker-nginx/letsencrypt`|/etc/letsencrypt As shown, one can easily change locations on the **host** (e.g. for testing). This can be done by setting the environment variable `IOT_DASHBOARD_DATA` to the **absolute path** (with trailing slash) to the containing directory prior to calling `docker-compose up`. The above paths are appended to the value of `IOT_DASHBOARD_DATA`. Directories are created as needed. @@ -180,6 +181,8 @@ Table Data Location Examples | InfluxDB | /dashboard-data/influxdb | | Grafana | /dashboard-data/grafana | | Mqtt | /dashboard-data/ mqtt/credentials | +| Nginx | /dashboard-data/docker-nginx/authdata| +||/dashboard-data/docker-nginx/letsencrypt Reuse and removal of data files ------------------------------- @@ -190,16 +193,16 @@ Sometimes this is inconvenient, and it is necessary to remove some or all of the ```bash source .env -sudo rm -rf \${IOT_DASHBOARD_DATA}node-red -sudo rm -rf \${IOT_DASHBOARD_DATA}influxdb -sudo rm -rf \${IOT_DASHBOARD_DATA}Grafana -sudo rm –rf \${IOT_DASHBOARD_DATA}mqtt/credentials +sudo rm -rf ${IOT_DASHBOARD_DATA}node-red +sudo rm -rf ${IOT_DASHBOARD_DATA}influxdb +sudo rm -rf ${IOT_DASHBOARD_DATA}Grafana +sudo rm –rf ${IOT_DASHBOARD_DATA}mqtt/credentials ``` Node-RED and Grafana Examples ----------------------------- -This version requires that you set up Node-RED, the database and the Grafana dashboards manually, but we hope to add a reasonable set of initial files in a future release. +This version requires that you set up Node-RED, the Influxdb database and the Grafana dashboards manually, but we hope to add a reasonable set of initial files in a future release. ### Connecting to InfluxDB from Node-RED and Grafana @@ -207,7 +210,7 @@ This version requires that you set up Node-RED, the database and the Grafana das ### Logging in to Grafana -* On the login screen, the user name is "`admin`". The initial password is given by the value of the variable `GF_SECURITY_ADMIN_PASSWORD` in `grafana/.env`. Note that if you change the password in `grafana/.env` after the first time you launch the grafana container, the admin password does not change. If you somehow lose the previous value of the admin password, and you don't have another admin login, it's very hard to recover; easiest is to remove `grafana.db` and start over. +* On the login screen, the user name is "`admin`". The initial password is given by the value of the variable `GF_SECURITY_ADMIN_PASSWORD` in `.env`. Note that if you change the password in `.env` after the first time you launch the grafana container, the admin password does not change. If you somehow lose the previous value of the admin password, and you don't have another admin login, it's very hard to recover; easiest is to remove `grafana.db` and start over. ### Data source settings in Grafana diff --git a/SETUP.md b/SETUP.md index aa5b245..3753d9b 100644 --- a/SETUP.md +++ b/SETUP.md @@ -10,7 +10,7 @@ * [2 After server is set up](#after-server-is-set-up) - + [2.1 Create and edit the .env file](#create-and-edit-the.envfile) + + [2.1 Create and edit the .env file](#create-and-edit-the-.env-file) + [2.2 Set up the Node-RED and InfluxDB API logins](#set-up-the-node-red-and-influxdb-api-logins) @@ -26,8 +26,6 @@ + [3.5 Creating an InfluxDB database](#creating-an-influxdb-database) - + [3.6 Add Nginx log in for NodeRed or query after the fact](#add-nginx-log-in-for-nodered-or-query-after-the-fact) - + [3.7 MQTT User Credentials setup](#mqtt-user-credentials-setup) @@ -60,7 +58,7 @@ As an initial step, a cloud provider is required and Docker and Docker-Compose m 2. Create a new project (if needed) to hold the new droplet. -3. Discover \> Marketplace, search for `Docker` +3. Discover > Marketplace, search for `Docker` 4. This page will be redirected: @@ -85,7 +83,7 @@ As an initial step, a cloud provider is required and Docker and Docker-Compose m 1. Note the IP address from above. -2. `ssh root\@{ipaddress}` +2. `ssh root@{ipaddress}` 3. Remove the motd (message of the day). @@ -112,13 +110,13 @@ As an initial step, a cloud provider is required and Docker and Docker-Compose m 7. Test that you can become `username`: ```console # sudo -i username - username\@host-name:\~\$ + username@host-name:~$ ``` 8. Drop back to root, and then copy the authorized_keys file to  `~username`: ```bash - mkdir -m 700 \~username/.ssh - cp -p .ssh/authorized_keys \~username/.ssh - chown -R username.username \~username/.ssh/authorized_keys + mkdir -m 700 ~username/.ssh + cp -p .ssh/authorized_keys ~username/.ssh + chown -R username.username ~username/.ssh/authorized_keys ``` 9. Confirm if the user can SSH in. @@ -160,7 +158,7 @@ The following instructions are essentially independent of the cloud provider and 1. Clone this repository. ```bash - git clone git\@github.com:mcci-catena/docker-iot-dashboard.git /opt/docker/dashboard.example.com + git clone git@github.com:mcci-catena/docker-iot-dashboard.git /opt/docker/dashboard.example.com ``` 2. Move to the directory populated in step 1. @@ -181,7 +179,7 @@ The following instructions are essentially independent of the cloud provider and 2. `IOT_DASHBOARD_CERTBOT_FQDN=myhost.example.com`  this should be the same as `IOT_DASHBOARD_NGINX_FQDN`. - 3. `IOT_DASHBOARD_CERTBOT_EMAIL=someone\@example.com`  this sets the contact email for Let's Encrypt. The script automatically accepts the Let's Encrypt terms of service, and this indicates who is doing the accepting. + 3. `IOT_DASHBOARD_CERTBOT_EMAIL=someone@example.com`  this sets the contact email for Let's Encrypt. The script automatically accepts the Let's Encrypt terms of service, and this indicates who is doing the accepting. 4. `IOT_DASHBOARD_DATA=/full/path/to/directory/`  the trailing slash is required! This will put all the data file for this instance as subdirectories of the specified path. If this is undefined, `docker-compose` will print error messages and quit. @@ -204,95 +202,86 @@ The following instructions are essentially independent of the cloud provider and 12. `IOT_DASHBOARD_TIMEZONE=Europe/Paris`  If not defined, the default time zone will be GMT. + 13. `IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME=myhost.example.com` this sets the name of your mail server for backup mail. Used by Postfix. + + 14. `IOT_DASHBOARD_INFLUXDB_BACKUP_EMAIL=a@example.com bexample.com` Backup mail will be sent to the mentioned MAIL IDs. + The `.env` file should look like this: ```bash ### env file for configuring dashboard.example.com IOT_DASHBOARD_NGINX_FQDN=dashboard.example.com -# The fully-qualified domain name to be served by Nginx. -# -# IOT_DASHBOARD_AWS_ACCESS_KEY_ID= -# The access key for AWS for backups. -# -# IOT_DASHBOARD_AWS_DEFAULT_REGION= -# The AWS default region. -# -# IOT_DASHBOARD_AWS_S3_BUCKET_INFLUXDB= -# The S3 bucket to use for uploading the influxdb backup data. -# -# IOT_DASHBOARD_AWS_SECRET_ACCESS_KEY= -# The AWS API secret key for backing up influxdb data. -# +# The fully-qualified domain name to be served by NGINX. +# IOT_DASHBOARD_AWS_ACCESS_KEY_ID +# The access key for AWS for backups. +# IOT_DASHBOARD_AWS_DEFAULT_REGION +# The AWS default region. +# IOT_DASHBOARD_AWS_S3_BUCKET_INFLUXDB +# The S3 bucket to use for uploading the influxdb backup data. +# IOT_DASHBOARD_AWS_SECRET_ACCESS_KEY +# The AWS API secret key for backing up influxdb data. IOT_DASHBOARD_CERTBOT_EMAIL=somebody@example.com # The email address to be used for registering with Let's Encrypt. -# IOT_DASHBOARD_CERTBOT_FQDN=dashboard.example.com # The domain(s) to be used by certbot when registering with Let's Encrypt. -# IOT_DASHBOARD_DATA=/var/opt/docker/dashboard.example.com/ -# The path to the data directory. This must end with a '/', and must eithe -r +# The path to the data directory. This must end with a '/', and must either # be absolute or must begin with './'. (If not, you'll get parse errors.) -# IOT_DASHBOARD_GRAFANA_ADMIN_PASSWORD=................... # The password to be used for the admin user on first login. This is ignored # after the Grafana database has been built. -# IOT_DASHBOARD_GRAFANA_PROJECT_NAME=My Dashboard # The project name to be used for the emails from the administrator. -# -# IOT_DASHBOARD_GRAFANA_LOG_MODE= +# IOT_DASHBOARD_GRAFANA_LOG_MODE # Set the grafana log mode. -# -# IOT_DASHBOARD_GRAFANA_LOG_LEVEL= +# IOT_DASHBOARD_GRAFANA_LOG_LEVEL # Set the grafana log level (e.g. debug) -# IOT_DASHBOARD_GRAFANA_SMTP_ENABLED=true # Set to true to enable SMTP. -# -# IOT_DASHBOARD_GRAFANA_SMTP_SKIP_VERIFY= +IOT_DASHBOARD_GRAFANA_SMTP_SKIP_VERIFY=true # Set to true to disable SSL verification. # Defaults to false. -# -# IOT_DASHBOARD_GRAFANA_INSTALL_PLUGINS= -# A list of grafana plugins to install. -# +IOT_DASHBOARD_GRAFANA_INSTALL_PLUGINS=plugins1, plugins2 +# A list of grafana plugins to install. Use (comma and space) ", " to delimit plugins. IOT_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS=grafana-admin@dashboard.example.com -# The "from" address for Grafana emails. -# -# IOT_DASHBOARD_GRAFANA_USERS_ALLOW_SIGN_UP= -# Set to true to allow users to sign-up to get access to the dashboard. -# +# The "from" address for Grafana emails. +IOT_DASHBOARD_GRAFANA_USERS_ALLOW_SIGN_UP=true +# Set to true to allow users to sign up. IOT_DASHBOARD_INFLUXDB_ADMIN_PASSWORD=jadb4a4WH5za7wvp # The password to be used for the admin user by influxdb. Again, this is # ignored after the influxdb database has been built. -# IOT_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME=mydatabase # The inital database to be created on first launch of influxdb. Ignored # after influxdb has been launched. -# IOT_DASHBOARD_MAIL_DOMAIN=example.com -# the postfix mail domain. -# +# the postfix mail domain. IOT_DASHBOARD_MAIL_HOST_NAME=dashboard.example.com -# the external FQDN for the mail host. -# -# IOT_DASHBOARD_MAIL_RELAY_IP= -# the mail relay machine, assuming that the real mailer is upstream from us. -# -IOT_DASHBOARD_NODERED_INSTALL_PLUGINS=node-red-node-example1 nodered-node-example2 -# Additional plugins to be installed for Node-RED. -# -# IOT_DASHBOARD_PORT_HTTP= +# the external FQDN for the mail host. +IOT_DASHBOARD_MAIL_RELAY_IP= +# the mail relay machine, assuming that the real mailer is upstream from us. +# IOT_DASHBOARD_PORT_HTTP # The port to listen to for HTTP. Primarily for test purposes. Defaults to # 80. -# -# IOT_DASHBOARD_PORT_HTTPS= +# IOT_DASHBOARD_PORT_HTTPS # The port to listen to for HTTPS. Primarily for test purposes. Defaults to # 443. -# -# IOT_DASHBOARD_TIMEZONE= +# IOT_DASHBOARD_TIMEZONE # The timezone to use. Defaults to GMT. +# IOT_DASHBOARD_NODE_RED_VERSION +# To Install specific version of node-red version. Defaults to latest. +IOT_DASHBOARD_NODE_RED_INSTALL_MODULES=node-red-node-example1 nodered-node-example2 +# Install the required node-red modules. use "space" to delimit the modules. +# IOT_DASHBOARD_PORT_MQTT_TCP +# Accessing mqtt channel over TCP. Defaults to 1883. +# IOT_DASHBOARD_PORT_MQTT_SSL +# Accessing mqtt channel over TLS/SSL. Defaults to 8883. +# IOT_DASHBOARD_PORT_MQTT_WSS +# Accessing mqtt channel over WSS. Defaults to 8083. +IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME=influxdbbackup.example.com +# the external FQDN for the influxdb host +IOT_DASHBOARD_INFLUXDB_BACKUP_EMAIL=somebody1@example.com somebody2@example.com +# Backup mail will be sent to the mentioned MAIL IDs. Use "space" to delimit the MAIL IDs. + ``` ### Set up the Node-RED and InfluxDB API logins @@ -304,9 +293,12 @@ IOT_DASHBOARD_NODERED_INSTALL_PLUGINS=node-red-node-example1 nodered-node-exampl ``` If there are any errors, they need to be fixed before going on. -2. Use `docker-compose run nginx /bin/bash` to launch a shell in the Nginx container. +2. log into the Nginx docker container. +```console + $ docker-compose exec nginx /bin/bash +``` - - If this fails with the message, `ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?`, then probably the user ID is not in the `docker` group. To fix this, `sudo adduser MYUSER docker`, where "MYUSER" is the login ID. Then (**very important**) log out and log back in. +If this fails with the message, `ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?`, then probably the user ID is not in the `docker` group. To fix this, `sudo adduser MYUSER docker`, where "MYUSER" is the login ID. Then (**very important**) log out and log back in. 3. Change ownership of Nginx's /etc/nginx/authdata to user `www-data`. ```bash @@ -338,7 +330,7 @@ One common error (for me, anyway) is entering an illegal initial InfluxDB databa ### Restart servers in the background -Once the servers are coming up interactively, use \^C to shut them down, and then restart in daemon mode. +Once the servers are coming up interactively, use ^C to shut them down, and then restart in daemon mode. ```bash docker-compose up -d ``` @@ -350,7 +342,7 @@ Once the servers are coming up interactively, use \^C to shut them down, and the ### Set up first data source -Use the Grafana UI -- either click on "add first data source" or use "Configure\>Add Data Source", and add an InfluxDB data source. +Use the Grafana UI -- either click on "add first data source" or use "Configure >Add Data Source", and add an InfluxDB data source. - Set the URL (under HTTP Settings) to ``. @@ -390,30 +382,6 @@ my-new-database # ^D $ ``` -### Add Nginx log in for NodeRed or query after the fact - -To add a user with Node-RED access or query access, follow this procedure. - -1. Log into the host machine - -2. Change the directory (cd) to `/opt/docker/dashboard.example.com`. - -3. log into the Nginx docker container. -```console - $ docker-compose exec Nginx /bin/bash -``` -4. In the container, move to the authdata directory. -```console - # cd /etc/nginx/authdata -``` -5. Add the user. -```console -# htpasswd .htpasswd {newuserid} -New password: -Re-type new password: -Adding password for user {newuserid} -``` -6. Close the connection to nginx (Ctrl+D). ### MQTT User Credentials setup @@ -429,7 +397,7 @@ To access mqtt channel, user needs credentials to access it. ``` 4. In the container, ```bash - # mosquitto_passwd -c /etc/mosquitto/credentials/passwd \ + # mosquitto_passwd -c /etc/mosquitto/credentials/passwd Password: Reenter password: ``` From 66aabae281057e7303267b67524c3a518c9757d2 Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Sat, 23 May 2020 18:22:18 +0100 Subject: [PATCH 31/65] updating Readme and setup --- README.md | 5 ++ SETUP.md | 13 +++ influxdb/README.md | 202 +++++++++++++++++++++------------------------ 3 files changed, 110 insertions(+), 110 deletions(-) diff --git a/README.md b/README.md index bd81f52..72f30ed 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,8 @@ Grafana](#connecting-to-influxdb-from-node-red-and-grafana) [Setup Instructions](#setup-instructions) +[Influxdb Backup and Restore](#Influxdb-Backup-and-Restore) + # Dashboard example for Internet of Things(IoT) @@ -262,4 +264,7 @@ Setup Instructions Please refer to [`SETUP.md`](./SETUP.md) for detailed set-up instructions. +Influxdb Backup and Restore +=========================== +Please refer to [`README.md`](./influxdb/README.md). diff --git a/SETUP.md b/SETUP.md index 3753d9b..cb88b91 100644 --- a/SETUP.md +++ b/SETUP.md @@ -334,6 +334,19 @@ Once the servers are coming up interactively, use ^C to shut them down, and then ```bash docker-compose up -d ``` +Status of the containers can be seen as below +```bash + docker-compose ps + +Name Command State Ports +----------------------------------------------------------------- +docker-iot-dashboard_grafana_1 /run.sh Up 3000/tcp +docker-iot-dashboard_influxdb_1 /sbin/my_init Up 8086/tcp +docker-iot-dashboard_mqtts_1 /sbin/my_init Up 0.0.0.0:1883->1883/tcp, 0.0.0.0:8083->8083/tcp, 0.0.0.0:8883->8883/tcp +docker-iot-dashboard_nginx_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp +docker-iot-dashboard_node-red_1 npm start -- --userDir /da ... Up (healthy) 1880/tcp +docker-iot-dashboard_postfix_1 /sbin/my_init Up 25/tcp +``` ### Initial testing - Open Grafana on [https://dashboard.example.com](https://dashboard.example.com/), and log in as admin. diff --git a/influxdb/README.md b/influxdb/README.md index 3286f91..fe0262a 100644 --- a/influxdb/README.md +++ b/influxdb/README.md @@ -1,45 +1,27 @@ -# BUILD SETUP +# Influxdb Backup -```console - -cmurugan@iot:~/server/influx_api_version/docker-ttn-dashboard$ docker-compose up -d -dockerttndashboard_postfix_1 is up-to-date -Recreating dockerttndashboard_influxdb_1 ... -Recreating dockerttndashboard_influxdb_1 ... done -Recreating dockerttndashboard_grafana_1 ... -Recreating dockerttndashboard_grafana_1 -Recreating dockerttndashboard_node-red_1 ... -Recreating dockerttndashboard_node-red_1 ... done -Recreating dockerttndashboard_apache_1 ... -Recreating dockerttndashboard_apache_1 ... done - -``` - -### status of docker container and databases +## status of docker container and databases ```console -cmurugan@iot:~/server/influx_api_version/docker-ttn-dashboard$ docker-compose ps +root@ithaca-power:/iot/testing/docker-iot-dashboard# docker-compose ps + Name Command State Ports +-------------------------------------------------------------------------------------------------------------------------------------------------------- +docker-iot-dashboard_grafana_1 /run.sh Up 3000/tcp +docker-iot-dashboard_influxdb_1 /sbin/my_init Up 8086/tcp +docker-iot-dashboard_mqtts_1 /sbin/my_init Up 0.0.0.0:1883->1883/tcp, 0.0.0.0:8083->8083/tcp, 0.0.0.0:8883->8883/tcp +docker-iot-dashboard_nginx_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp +docker-iot-dashboard_node-red_1 npm start -- --userDir /da ... Up (healthy) 1880/tcp +docker-iot-dashboard_postfix_1 /sbin/my_init Up 25/tcp - Name Command State Ports ------------------------------------------------------------------------------------------------------------------ -dockerttndashboard_apache_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp -dockerttndashboard_grafana_1 /run.sh Up 3000/tcp -dockerttndashboard_influxdb_1 /entrypoint.sh influxd Up 8086/tcp -dockerttndashboard_node-red_1 npm start -- --userDir /da ... Up 1880/tcp -dockerttndashboard_postfix_1 /sbin/my_init Up 0.0.0.0:25->25/tcp -cmurugan@iot:~/server/influx_api_version/docker-ttn-dashboard$ docker-compose exec influxdb bash +root@ithaca-power:/iot/testing/docker-iot-dashboard# docker-compose exec influxdb bash -root@a16175bb4ce0:/opt/influxdb-backup# influx -Connected to http://localhost:8086 version 1.6.4 -InfluxDB shell version: 1.6.4 -> show databases -name: databases -name ----- -_internal + +root@influxdb:/opt/influxdb-backup# influx +Connected to http://localhost:8086 version 1.8.0 +InfluxDB shell version: 1.8.0 > create database testdb > show databases name: databases @@ -54,86 +36,80 @@ Using database testdb name: cpu time host region value ---- ---- ------ ----- -1523353042145216096 serverA us_west 0.64 +1590247547512536078 serverA us_west 0.64 > exit ``` -## BACKUP DATABASE +## Backing up Databases -### Backup can be taken through shell script and synced with Amazon S3 cloud +* Backup can be taken through shell script and synced with Amazon S3 cloud and then mail notification will be sent for the backup. + +* Note: The backup shell script `backup.sh` wiil be configured in Crontab while building.(For testing, running `backup.sh` manually ) + +* The backup shell script `backup.sh` will back up everything. ```console -root@a16175bb4ce0:/opt/influxdb-backup# backup.sh +root@influxdb:/opt/influxdb-backup# backup.sh Backup Influx metadata -2018/10/25 11:00:44 backing up metastore to /var/lib/influxdb-backup/meta.00 -2018/10/25 11:00:44 No database, retention policy or shard ID given. Full meta store backed up. -2018/10/25 11:00:44 Backing up all databases in portable format -2018/10/25 11:00:44 backing up db= -2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01T00:00:00Z -2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=6 to /var/lib/influxdb-backup/_internal.monitor.00006.00 since 0001-01-01T00:00:00Z -2018/10/25 11:00:44 backing up db=testdb rp=autogen shard=7 to /var/lib/influxdb-backup/testdb.autogen.00007.00 since 0001-01-01T00:00:00Z -2018/10/25 11:00:44 backup complete: -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.meta -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s1.tar.gz -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s6.tar.gz -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s7.tar.gz -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.manifest +2020/05/23 15:29:40 backing up metastore to /var/lib/influxdb-backup/meta.00 +2020/05/23 15:29:40 No database, retention policy or shard ID given. Full meta store backed up. +2020/05/23 15:29:40 Backing up all databases in portable format +2020/05/23 15:29:40 backing up db= +2020/05/23 15:29:40 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01T00:00:00Z +2020/05/23 15:29:40 backing up db=testdb rp=autogen shard=2 to /var/lib/influxdb-backup/testdb.autogen.00002.00 since 0001-01-01T00:00:00Z +2020/05/23 15:29:40 backup complete: +2020/05/23 15:29:40 /var/lib/influxdb-backup/20200523T152940Z.meta +2020/05/23 15:29:40 /var/lib/influxdb-backup/20200523T152940Z.s1.tar.gz +2020/05/23 15:29:40 /var/lib/influxdb-backup/20200523T152940Z.s2.tar.gz +2020/05/23 15:29:40 /var/lib/influxdb-backup/20200523T152940Z.manifest Creating backup for _internal -2018/10/25 11:00:44 backing up metastore to /var/lib/influxdb-backup/meta.00 -2018/10/25 11:00:44 backing up db=_internal -2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01T00:00:00Z -2018/10/25 11:00:44 backing up db=_internal rp=monitor shard=6 to /var/lib/influxdb-backup/_internal.monitor.00006.00 since 0001-01-01T00:00:00Z -2018/10/25 11:00:44 backup complete: -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.meta -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s1.tar.gz -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s6.tar.gz -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.manifest +2020/05/23 15:29:40 backing up metastore to /var/lib/influxdb-backup/meta.00 +2020/05/23 15:29:40 backing up db=_internal +2020/05/23 15:29:40 backing up db=_internal rp=monitor shard=1 to /var/lib/influxdb-backup/_internal.monitor.00001.00 since 0001-01-01T00:00:00Z +2020/05/23 15:29:40 backup complete: +2020/05/23 15:29:40 /var/lib/influxdb-backup/20200523T152940Z.meta +2020/05/23 15:29:40 /var/lib/influxdb-backup/20200523T152940Z.s1.tar.gz +2020/05/23 15:29:40 /var/lib/influxdb-backup/20200523T152940Z.manifest Creating backup for testdb -2018/10/25 11:00:44 backing up metastore to /var/lib/influxdb-backup/meta.00 -2018/10/25 11:00:44 backing up db=testdb -2018/10/25 11:00:44 backing up db=testdb rp=autogen shard=7 to /var/lib/influxdb-backup/testdb.autogen.00007.00 since 0001-01-01T00:00:00Z -2018/10/25 11:00:44 backup complete: -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.meta -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.s7.tar.gz -2018/10/25 11:00:44 /var/lib/influxdb-backup/20181025T110044Z.manifest +2020/05/23 15:29:40 backing up metastore to /var/lib/influxdb-backup/meta.00 +2020/05/23 15:29:40 backing up db=testdb +2020/05/23 15:29:40 backing up db=testdb rp=autogen shard=2 to /var/lib/influxdb-backup/testdb.autogen.00002.00 since 0001-01-01T00:00:00Z +2020/05/23 15:29:40 backup complete: +2020/05/23 15:29:40 /var/lib/influxdb-backup/20200523T152940Z.meta +2020/05/23 15:29:40 /var/lib/influxdb-backup/20200523T152940Z.s2.tar.gz +2020/05/23 15:29:40 /var/lib/influxdb-backup/20200523T152940Z.manifest tar: Removing leading `/' from member names tar: Removing leading `/' from member names -upload: ../../var/lib/influxdb-S3-bucket/data_directory_backup_2018-10-25.tar.gz to s3://mcci-influxdb-test/data_directory_backup_2018-10-25.tar.gz -upload: ../../var/lib/influxdb-S3-bucket/metdata_db_backup_2018-10-25.tar.gz to s3://mcci-influxdb-test/metdata_db_backup_2018-10-25.tar.gz +tar: Removing leading `/' from hard link targets +upload: ../../var/lib/influxdb-S3-bucket/ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz to s3://mcci-influxdb-test/ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz +upload: ../../var/lib/influxdb-S3-bucket/ithaca-power.mcci.com_data_directory_backup_2020-05-23.tar.gz to s3://mcci-influxdb-test/ithaca-power.mcci.com_data_directory_backup_2020-05-23.tar.gz -``` -### Backup has been taken in the below folder - -```console +``` -root@a16175bb4ce0:/opt/influxdb-backup# ls /var/lib/influxdb-backup/ +* Backup files will be uploaded in Amazon S3 bucket and it can be viewed using below command. +```bash -20181024T142358Z.manifest 20181024T143005Z.s3.tar.gz 20181025T094917Z.s1.tar.gz 20181025T095242Z.s6.tar.gz 20181025T110044Z.meta -20181024T142358Z.meta 20181024T160855Z.manifest 20181025T094917Z.s5.tar.gz 20181025T100801Z.manifest 20181025T110044Z.s1.tar.gz -20181024T142358Z.s1.tar.gz 20181024T160855Z.meta 20181025T094917Z.s6.tar.gz 20181025T100801Z.meta 20181025T110044Z.s6.tar.gz -20181024T142358Z.s2.tar.gz 20181024T160855Z.s1.tar.gz 20181025T095242Z.manifest 20181025T100801Z.s1.tar.gz 20181025T110044Z.s7.tar.gz -20181024T143005Z.manifest 20181024T160855Z.s5.tar.gz 20181025T095242Z.meta 20181025T100801Z.s5.tar.gz -20181024T143005Z.meta 20181025T094917Z.manifest 20181025T095242Z.s1.tar.gz 20181025T100801Z.s6.tar.gz -20181024T143005Z.s1.tar.gz 20181025T094917Z.meta 20181025T095242Z.s5.tar.gz 20181025T110044Z.manifest +root@influxdb:/opt/influxdb-backup# aws s3 ls s3://${S3_BUCKET_INFLUXDB}/ +root@influxdb:/opt/influxdb-backup# aws s3 ls s3://${S3_BUCKET_INFLUXDB}/ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz +2020-05-23 15:29:43 15447 ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz ``` -## RESTORE DATABASE - -### Drop the "testdb" database for checking purpose +# Influxdb Restore +## Restoring Databases +* Drop the "testdb" database for checking purpose ```console -root@a16175bb4ce0:/opt/influxdb-backup# influx - -Connected to http://localhost:8086 version 1.6.4 -InfluxDB shell version: 1.6.4 +root@influxdb:/opt/influxdb-backup# influx +Connected to http://localhost:8086 version 1.8.0 +InfluxDB shell version: 1.8.0 > show databases name: databases name @@ -149,34 +125,40 @@ _internal > exit ``` -### Restoring metadata and database - -```console - -root@a16175bb4ce0:/opt/influxdb-backup# influxd restore -portable -host $INFLUX_HOST:8088 /var/lib/influxdb-backup - -2018/10/25 11:02:48 Restoring shard 7 live from backup 20181025T110044Z.s7.tar.gz -2018/10/25 11:02:48 Meta info not found for shard 5 on database testdb. Skipping shard file 20181025T100801Z.s5.tar.gz -2018/10/25 11:02:48 Meta info not found for shard 1 on database _internal. Skipping shard file 20181025T095242Z.s1.tar.gz -2018/10/25 11:02:48 Meta info not found for shard 6 on database _internal. Skipping shard file 20181025T095242Z.s6.tar.gz -2018/10/25 11:02:48 Meta info not found for shard 3 on database testdb. Skipping shard file 20181024T143005Z.s3.tar.gz -2018/10/25 11:02:48 Meta info not found for shard 2 on database testdb. Skipping shard file 20181024T142358Z.s2.tar.gz - -root@a16175bb4ce0:/opt/influxdb-backup# influxd restore -portable -host $INFLUX_HOST:8088 -database testdb /var/lib/influxdb-backup +* Downloading Backed up Databases from Amazon S3 Bucket +```bash +root@influxdb:/opt/influxdb-backup# aws s3 cp s3://${S3_BUCKET_INFLUXDB}/ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz . +download: s3://mcci-influxdb-test/ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz to ./ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz +root@influxdb:/opt/influxdb-backup# ls -al +total 28 +drwxr-xr-x 1 root root 4096 May 23 15:37 . +drwxr-xr-x 1 root root 4096 May 18 05:46 .. +-rw-r--r-- 1 root root 15447 May 23 15:29 ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz +``` +* Extracting the backed up files +```bash +root@influxdb:/opt/influxdb-backup# tar xvf staging1-ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz +var/lib/influxdb-backup/ +var/lib/influxdb-backup/20200523T152940Z.meta +var/lib/influxdb-backup/20200523T152940Z.s1.tar.gz +var/lib/influxdb-backup/20200523T152940Z.s2.tar.gz +var/lib/influxdb-backup/20200523T152940Z.manifest -2018/10/25 11:03:04 error updating meta: DB metadata not changed. database may already exist -restore: DB metadata not changed. database may already exist +``` +* To restore all databases found within the backup directory +```bash +root@influxdb:/opt/influxdb-backup# influxd restore -portable -host $INFLUX_HOST:8088 var/lib/influxdb-backup/ +2020/05/23 15:45:23 Restoring shard 2 live from backup 20200523T152940Z.s2.tar.gz ``` -### Checking the Database has been restored +* Checking the Database has been restored ```console -root@a16175bb4ce0:/opt/influxdb-backup# influx - -Connected to http://localhost:8086 version 1.6.4 -InfluxDB shell version: 1.6.4 +root@influxdb:/opt/influxdb-backup# influx +Connected to http://localhost:8086 version 1.8.0 +InfluxDB shell version: 1.8.0 > show databases name: databases name @@ -189,7 +171,7 @@ Using database testdb name: cpu time host region value ---- ---- ------ ----- -1540391379121807732 serverA us_west 0.64 +1590247547512536078 serverA us_west 0.64 > exit ``` From da8ee9dad80c4316c5d9f9b717e88cfe9503fabd Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Sat, 23 May 2020 18:23:57 +0100 Subject: [PATCH 32/65] securing some containers ports --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a5603d1..87f39e1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -220,7 +220,7 @@ services: relay_ip: "${IOT_DASHBOARD_MAIL_RELAY_IP:-.}" domain: "${IOT_DASHBOARD_MAIL_DOMAIN:-.}" hostname: "${IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME:-.}" - ports: + expose: - "8086" volumes: - "${IOT_DASHBOARD_DATA}influxdb:/var/lib/influxdb" @@ -272,7 +272,7 @@ services: hostname: "${IOT_DASHBOARD_MAIL_HOST_NAME:-.}" relay_ip: "${IOT_DASHBOARD_MAIL_RELAY_IP:-.}" domain: "${IOT_DASHBOARD_MAIL_DOMAIN:-.}" - ports: + expose: - "25" hostname: "${IOT_DASHBOARD_MAIL_HOST_NAME:-.}" From 98183a697de236f9cdee51218f9e7739c57a45e3 Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Sat, 23 May 2020 18:33:41 +0100 Subject: [PATCH 33/65] updating Readme and setup --- influxdb/README.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/influxdb/README.md b/influxdb/README.md index fe0262a..8752afa 100644 --- a/influxdb/README.md +++ b/influxdb/README.md @@ -14,11 +14,14 @@ docker-iot-dashboard_mqtts_1 /sbin/my_init Up docker-iot-dashboard_nginx_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp docker-iot-dashboard_node-red_1 npm start -- --userDir /da ... Up (healthy) 1880/tcp docker-iot-dashboard_postfix_1 /sbin/my_init Up 25/tcp - - +``` +* Moving to `influxdb` container. +```console root@ithaca-power:/iot/testing/docker-iot-dashboard# docker-compose exec influxdb bash +``` - +* checking the databases available. +```console root@influxdb:/opt/influxdb-backup# influx Connected to http://localhost:8086 version 1.8.0 InfluxDB shell version: 1.8.0 @@ -92,7 +95,7 @@ upload: ../../var/lib/influxdb-S3-bucket/ithaca-power.mcci.com_data_directory_ba ``` * Backup files will be uploaded in Amazon S3 bucket and it can be viewed using below command. -```bash +```console root@influxdb:/opt/influxdb-backup# aws s3 ls s3://${S3_BUCKET_INFLUXDB}/ @@ -126,7 +129,7 @@ _internal ``` * Downloading Backed up Databases from Amazon S3 Bucket -```bash +```console root@influxdb:/opt/influxdb-backup# aws s3 cp s3://${S3_BUCKET_INFLUXDB}/ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz . download: s3://mcci-influxdb-test/ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz to ./ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz root@influxdb:/opt/influxdb-backup# ls -al @@ -136,7 +139,7 @@ drwxr-xr-x 1 root root 4096 May 18 05:46 .. -rw-r--r-- 1 root root 15447 May 23 15:29 ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz ``` * Extracting the backed up files -```bash +```console root@influxdb:/opt/influxdb-backup# tar xvf staging1-ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz var/lib/influxdb-backup/ var/lib/influxdb-backup/20200523T152940Z.meta @@ -146,7 +149,7 @@ var/lib/influxdb-backup/20200523T152940Z.manifest ``` * To restore all databases found within the backup directory -```bash +```console root@influxdb:/opt/influxdb-backup# influxd restore -portable -host $INFLUX_HOST:8088 var/lib/influxdb-backup/ 2020/05/23 15:45:23 Restoring shard 2 live from backup 20200523T152940Z.s2.tar.gz From fa75b6e63989e6718088f0aa82dbf681d786bec4 Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Sat, 23 May 2020 19:00:03 +0100 Subject: [PATCH 34/65] updating Readme and setup --- SETUP.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/SETUP.md b/SETUP.md index cb88b91..c6494b1 100644 --- a/SETUP.md +++ b/SETUP.md @@ -340,12 +340,12 @@ Status of the containers can be seen as below Name Command State Ports ----------------------------------------------------------------- -docker-iot-dashboard_grafana_1 /run.sh Up 3000/tcp -docker-iot-dashboard_influxdb_1 /sbin/my_init Up 8086/tcp -docker-iot-dashboard_mqtts_1 /sbin/my_init Up 0.0.0.0:1883->1883/tcp, 0.0.0.0:8083->8083/tcp, 0.0.0.0:8883->8883/tcp -docker-iot-dashboard_nginx_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp -docker-iot-dashboard_node-red_1 npm start -- --userDir /da ... Up (healthy) 1880/tcp -docker-iot-dashboard_postfix_1 /sbin/my_init Up 25/tcp +dashboardexamplecom_grafana_1 /run.sh Up 3000/tcp +dashboardexamplecom_influxdb_1 /sbin/my_init Up 8086/tcp +dashboardexamplecom_mqtts_1 /sbin/my_init Up 0.0.0.0:1883->1883/tcp, 0.0.0.0:8083->8083/tcp, 0.0.0.0:8883->8883/tcp +dashboardexamplecom_nginx_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp +dashboardexamplecom_node-red_1 npm start -- --userDir /da ... Up (healthy) 1880/tcp +dashboardexamplecom_postfix_1 /sbin/my_init Up 25/tcp ``` ### Initial testing From dfb821872ea04e86a9d714d232eb5364518bcdf6 Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Sat, 23 May 2020 19:04:09 +0100 Subject: [PATCH 35/65] updating Readme and setup --- SETUP.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/SETUP.md b/SETUP.md index c6494b1..8fcf2e7 100644 --- a/SETUP.md +++ b/SETUP.md @@ -1,5 +1,5 @@ -[Setup Instructions](#setup-instructions) - +# Set-by-step Setup Instructions +* [Notes](#notes) * [1 Cloud-Provider Setup](#cloud-provider-setup) + [1.1 On Digital Ocean](#on-digital-ocean) @@ -27,10 +27,8 @@ + [3.5 Creating an InfluxDB database](#creating-an-influxdb-database) + [3.7 MQTT User Credentials setup](#mqtt-user-credentials-setup) - -Setup Instructions -================== + **Notes:** From 92682461b4ad38b79d13be5a70ba09a65a13fb25 Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Sat, 23 May 2020 19:07:42 +0100 Subject: [PATCH 36/65] updating Readme and setup --- SETUP.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SETUP.md b/SETUP.md index 8fcf2e7..a321a81 100644 --- a/SETUP.md +++ b/SETUP.md @@ -1,4 +1,4 @@ -# Set-by-step Setup Instructions +# Step-by-step Setup Instructions * [Notes](#notes) * [1 Cloud-Provider Setup](#cloud-provider-setup) @@ -28,7 +28,7 @@ + [3.7 MQTT User Credentials setup](#mqtt-user-credentials-setup) - + **Notes:** @@ -202,7 +202,7 @@ The following instructions are essentially independent of the cloud provider and 13. `IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME=myhost.example.com` this sets the name of your mail server for backup mail. Used by Postfix. - 14. `IOT_DASHBOARD_INFLUXDB_BACKUP_EMAIL=a@example.com bexample.com` Backup mail will be sent to the mentioned MAIL IDs. + 14. `IOT_DASHBOARD_INFLUXDB_BACKUP_EMAIL=a@example.com b@example.com` Backup mail will be sent to the mentioned MAIL IDs. The `.env` file should look like this: From 5834eb1f788377178ecd89d46d14553229632c45 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 28 May 2020 05:19:00 +0000 Subject: [PATCH 37/65] apache->nginx htaccess adjustmnts --- docker-compose.yml | 3 ++- nginx/proxy-influxdb.conf | 2 +- nginx/proxy-nodered.conf | 2 +- nginx/setup.sh | 21 +++++++++++++++++---- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 87f39e1..c4c9af7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -160,7 +160,8 @@ services: volumes: - "${IOT_DASHBOARD_DATA}docker-nginx/htdocs:/usr/local/nginx/htdocs" - "${IOT_DASHBOARD_DATA}docker-nginx/letsencrypt:/etc/letsencrypt" - - "${IOT_DASHBOARD_DATA}docker-nginx/authdata:/etc/nginx/authdata" + - "${IOT_DASHBOARD_DATA}docker-nginx/authdata/influxdb:/etc/nginx/authdata/influxdb" + - "${IOT_DASHBOARD_DATA}docker-nginx/authdata/nodered:/etc/nginx/authdata/nodered" # nginx proxies for all of the below, so it needs to have links to them. # Examine nginx/proxy-*.conf to see how the links are set up. Also bear diff --git a/nginx/proxy-influxdb.conf b/nginx/proxy-influxdb.conf index ee60139..b9b7910 100644 --- a/nginx/proxy-influxdb.conf +++ b/nginx/proxy-influxdb.conf @@ -15,5 +15,5 @@ proxy_set_header Host $host; proxy_pass http://influxdb:8086/; auth_basic "InfluxDB queries"; - auth_basic_user_file /etc/nginx/authdata/.htpasswd; + auth_basic_user_file /etc/nginx/authdata/influxdb/.htpasswd; } diff --git a/nginx/proxy-nodered.conf b/nginx/proxy-nodered.conf index 0833e99..12b891b 100644 --- a/nginx/proxy-nodered.conf +++ b/nginx/proxy-nodered.conf @@ -15,7 +15,7 @@ proxy_set_header Host $host; proxy_pass http://node-red:1880/; auth_basic "Node-RED"; - auth_basic_user_file /etc/nginx/authdata/.htpasswd; + auth_basic_user_file /etc/nginx/authdata/nodered/.htpasswd; } # Enabling HTTP Endpoint using node-red diff --git a/nginx/setup.sh b/nginx/setup.sh index 9e9a8b8..7ad4651 100644 --- a/nginx/setup.sh +++ b/nginx/setup.sh @@ -8,17 +8,30 @@ export PATH="${PATH}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bi cd $HOME || exit 2 # test that authentication is set up, and set permissions as needed by us -if [ ! -d /etc/nginx/authdata ] ; then +if [ ! -d /etc/nginx/authdata/nodered ] ; then echo "The authdata directory is not set; refer to docker-compose script" exit 3 fi -if [ ! -f /etc/nginx/authdata/.htpasswd ]; then + +if [ ! -d /etc/nginx/authdata/influxdb ] ; then + echo "The authdata directory is not set; refer to docker-compose script" + exit 3 +fi + +if [ ! -f /etc/nginx/authdata/nodered/.htpasswd ]; then echo ".htpasswd file not found" exit 3 fi -chown www-data /etc/nginx/authdata /etc/nginx/authdata/.htpasswd -chmod 700 /etc/nginx/authdata + + +if [ ! -f /etc/nginx/authdata/influxdb/.htpasswd ]; then + echo ".htpasswd file not found" + exit 3 +fi + +chown -R www-data $(find /etc/nginx/authdata -type d) +chmod 700 $(find /etc/nginx/authdata -type d) # check that we got the vars we need if [ -z "$CERTBOT_DOMAINS" -o "$CERTBOT_DOMAINS" = "." ]; then From b969901543759a04859d6615c577e2414afa1f08 Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Thu, 28 May 2020 08:08:38 +0100 Subject: [PATCH 38/65] updated setup.md --- SETUP.md | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/SETUP.md b/SETUP.md index a321a81..4f0fe77 100644 --- a/SETUP.md +++ b/SETUP.md @@ -298,22 +298,32 @@ If there are any errors, they need to be fixed before going on. If this fails with the message, `ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?`, then probably the user ID is not in the `docker` group. To fix this, `sudo adduser MYUSER docker`, where "MYUSER" is the login ID. Then (**very important**) log out and log back in. -3. Change ownership of Nginx's /etc/nginx/authdata to user `www-data`. +3. Create `.htpasswd` file for node-red and influxdb queries authentication. ```bash - chown www-data /etc/nginx/authdata + touch /etc/nginx/authdata/influxdb/.htpasswd + touch /etc/nginx/authdata/nodered/.htpasswd + chown www-data /etc/nginx/authdata/influxdb/.htpasswd + chown www-data /etc/nginx/authdata/nodered/.htpasswd ``` -4. Add Nginx's /etc/nginx/authdata/.htpasswd. +4. Add user logins for node-red and influxdb queries Make `USERS` be a list of login IDs. + +- For Node-red authentication: + ```bash - touch /etc/nginx/authdata/.htpasswd - chown www-data /etc/nginx/authdata/.htpasswd + export USERS="tmm amy josh" + for USER in $USERS; do echo "Set password for "$USER; + htpasswd /etc/nginx/authdata/nodered/.htpasswd $USER; done ``` -5. Add user logins for node-red and influxdb queries Make `USERS` be a list of login IDs. +- For Influxdb queries: + ```bash export USERS="tmm amy josh" for USER in $USERS; do echo "Set password for "$USER; - htpasswd /etc/nginx/authdata/.htpasswd $USER; done + htpasswd /etc/nginx/authdata/influxdb/.htpasswd $USER; done ``` -6. Exit Nginx's container with Control+D. + + +5. Exit Nginx's container with Control+D. Start the server ---------------- From a1c4b2f7fd279e87085615d5f75ae2efc1c088f2 Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Fri, 5 Jun 2020 17:55:55 +0100 Subject: [PATCH 39/65] adding htpasswd migration script: apache->nginx --- SETUP.md | 21 ++++++++++++- htpasswd_migration.sh | 68 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 htpasswd_migration.sh diff --git a/SETUP.md b/SETUP.md index 4f0fe77..05f36d7 100644 --- a/SETUP.md +++ b/SETUP.md @@ -291,9 +291,28 @@ IOT_DASHBOARD_INFLUXDB_BACKUP_EMAIL=somebody1@example.com somebody2@example.com ``` If there are any errors, they need to be fixed before going on. + +#### Migrating `htpasswd` from Apache to Nginx +--- +- Download the [`htpasswd_migration.sh`](./htpasswd_migration.sh) into your local directory (on the host system) containing the docker files. +- Run the script as below. +```bash +chmod +x htpasswd_migration.sh +./htpasswd_migration.sh +``` +- you will receive `htpasswd` for each controlled services and then copy them(`node-red_htpasswd`, `query_htpasswd`) in appropriate files as below. + +- For Node-red: + `${IOT_DASHBOARD_DATA}docker-nginx/authdata/nodered/.htpasswd` + +- For Infludb Queries: + `${IOT_DASHBOARD_DATA}docker-nginx/authdata/influxdb/.htpasswd` +- If you copied the files, please avoid steps `[2-5]` to `htpasswd` below. +--- + 2. log into the Nginx docker container. ```console - $ docker-compose exec nginx /bin/bash + $ docker-compose run nginx /bin/bash ``` If this fails with the message, `ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?`, then probably the user ID is not in the `docker` group. To fix this, `sudo adduser MYUSER docker`, where "MYUSER" is the login ID. Then (**very important**) log out and log back in. diff --git a/htpasswd_migration.sh b/htpasswd_migration.sh new file mode 100644 index 0000000..036430d --- /dev/null +++ b/htpasswd_migration.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# This Script will create htpasswd for each controlled services for migration Apache->Nginx +read -p "Please enter .env file location : " envi + + if [[ ! -f $envi ]] + then + echo "Please enter correct file location" + exit + fi +source $envi +htgroup=${IOT_DASHBOARD_DATA}docker-apache2/authdata/.htgroup +htpasswd=${IOT_DASHBOARD_DATA}docker-apache2/authdata/.htpasswd + +PS3="Please enter your choice on the number listed above, To exit press 'ctrl+d ' : " +select var in "creating htpasswd for each controlled service manually" "creating htpasswd for each controlled service automatically" +do +case $var in + + "creating htpasswd for each controlled service manually") + + read -p "please let me know the output file name of .htpasswd for which controlled service : " output + if [[ -z $output ]] + then + echo "Please enter output file name" + exit + fi + > ${output}_htpasswd + + + for i in $(cat $htgroup | xargs | tr ' |,' '\n' | sed 's/.*:$//' | sort -u) + do + read -p "Do you want the User: $i to be added in .htpasswd (y/n) : " j + case $j in + + [yY][eE][sS]|[yY]) + + sed -n "/$i/p" $htpasswd >> ${output}_htpasswd + ;; + + [nN][oO]|[nN]) + + continue + ;; + *) + echo "Please Enter yes or no" + break + ;; + esac + done + ;; + + "creating htpasswd for each controlled service automatically") + while read -r line + do + file=$(echo "$line" | awk '{print $1}' | sed 's/://') + > ${file}_htpasswd + for k in $(echo "$line" | xargs | tr ' |,' '\n') + do + sed -n "/$k/p" $htpasswd >> ${file}_htpasswd + done + done < "$htgroup" + ;; + + *) + echo "Please enter correct number" + ;; +esac +done From 20926c1c7565315390cab55791aca421a498623c Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Fri, 5 Jun 2020 22:35:47 +0530 Subject: [PATCH 40/65] Update SETUP.md --- SETUP.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SETUP.md b/SETUP.md index 05f36d7..0672531 100644 --- a/SETUP.md +++ b/SETUP.md @@ -291,9 +291,9 @@ IOT_DASHBOARD_INFLUXDB_BACKUP_EMAIL=somebody1@example.com somebody2@example.com ``` If there are any errors, they need to be fixed before going on. - -#### Migrating `htpasswd` from Apache to Nginx --- +#### Migrating `htpasswd` from Apache to Nginx + - Download the [`htpasswd_migration.sh`](./htpasswd_migration.sh) into your local directory (on the host system) containing the docker files. - Run the script as below. ```bash From 0d1dbb980afbb6341d4719e24ff8044820eb82d3 Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Thu, 11 Jun 2020 11:35:08 +0530 Subject: [PATCH 41/65] Update htpasswd_migration.sh --- htpasswd_migration.sh | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/htpasswd_migration.sh b/htpasswd_migration.sh index 036430d..4a66535 100644 --- a/htpasswd_migration.sh +++ b/htpasswd_migration.sh @@ -8,8 +8,8 @@ read -p "Please enter .env file location : " envi exit fi source $envi -htgroup=${IOT_DASHBOARD_DATA}docker-apache2/authdata/.htgroup -htpasswd=${IOT_DASHBOARD_DATA}docker-apache2/authdata/.htpasswd +htgroup=${TTN_DASHBOARD_DATA}docker-apache2/authdata/.htgroup +htpasswd=${TTN_DASHBOARD_DATA}docker-apache2/authdata/.htpasswd PS3="Please enter your choice on the number listed above, To exit press 'ctrl+d ' : " select var in "creating htpasswd for each controlled service manually" "creating htpasswd for each controlled service automatically" @@ -47,6 +47,13 @@ case $var in ;; esac done + echo " " + echo " " + echo " " + echo "It is done. Thanks!" + echo " " + echo " " + exit ;; "creating htpasswd for each controlled service automatically") @@ -58,6 +65,13 @@ case $var in do sed -n "/$k/p" $htpasswd >> ${file}_htpasswd done + echo " " + echo " " + echo " " + echo "It is done. Thanks!" + echo " " + echo " " + exit done < "$htgroup" ;; From f347fdd71ebbc7f6c3297acff4ddcefdf967e8df Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Thu, 25 Jun 2020 19:59:24 +0530 Subject: [PATCH 42/65] Update SETUP.md --- SETUP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SETUP.md b/SETUP.md index 0672531..cb8da32 100644 --- a/SETUP.md +++ b/SETUP.md @@ -107,7 +107,7 @@ As an initial step, a cloud provider is required and Docker and Docker-Compose m ``` 7. Test that you can become `username`: ```console - # sudo -i username + # sudo su - username username@host-name:~$ ``` 8. Drop back to root, and then copy the authorized_keys file to  `~username`: From ada91b3c802358eb8fe07a2c834a9493b3af15c9 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 19 Nov 2020 10:51:03 +0000 Subject: [PATCH 43/65] phusion versioning --- influxdb/Dockerfile | 2 +- mqtts/Dockerfile | 2 +- nginx/Dockerfile | 2 +- postfix/Dockerfile | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/influxdb/Dockerfile b/influxdb/Dockerfile index 69c277d..e3d5397 100644 --- a/influxdb/Dockerfile +++ b/influxdb/Dockerfile @@ -2,7 +2,7 @@ # Dockerfile for building the influxdb instance with S3-backup and Mail alert setup # -FROM phusion/baseimage +FROM phusion/baseimage:bionic-1.0.0 # Default InfluxDB host ENV INFLUX_HOST=influxdb diff --git a/mqtts/Dockerfile b/mqtts/Dockerfile index c65a904..c0e6172 100644 --- a/mqtts/Dockerfile +++ b/mqtts/Dockerfile @@ -6,7 +6,7 @@ # passing arguments to map letsencrypt certs -FROM phusion/baseimage +FROM phusion/baseimage:bionic-1.0.0 # Installing mosquitto packages and certbot RUN add-apt-repository ppa:certbot/certbot diff --git a/nginx/Dockerfile b/nginx/Dockerfile index 7dfbf25..edaff87 100644 --- a/nginx/Dockerfile +++ b/nginx/Dockerfile @@ -3,7 +3,7 @@ # # Start from Phusion. -FROM phusion/baseimage +FROM phusion/baseimage:bionic-1.0.0 RUN /usr/bin/apt-get update && /usr/bin/apt-get install software-properties-common -y RUN /usr/bin/add-apt-repository ppa:certbot/certbot && /usr/bin/apt-get update && /usr/bin/apt-get install nginx apache2-utils -y diff --git a/postfix/Dockerfile b/postfix/Dockerfile index c124440..8d9abf5 100644 --- a/postfix/Dockerfile +++ b/postfix/Dockerfile @@ -2,7 +2,7 @@ # Dockerfile for building POSTFIX # # Build the Postfix using phusion base image -FROM phusion/baseimage +FROM phusion/baseimage:bionic-1.0.0 # some basic package installation for troubleshooting RUN apt-get update && apt-get install -y \ From f93bef3886ed8cfe8a72affb649195311b8375fd Mon Sep 17 00:00:00 2001 From: Terry Moore Date: Wed, 2 Dec 2020 20:23:08 -0500 Subject: [PATCH 44/65] Changes from review --- LICENSE.md | 2 +- README.md | 218 ++++++++----------- SETUP.md | 427 +++++++++++++++++++++----------------- TODO.md | 6 +- docker-compose.yml | 7 +- htpasswd_migration.sh | 37 ++-- influxdb/README.md | 74 ++++--- influxdb/influxdb_cron.sh | 10 +- influxdb/showdb.sh | 4 +- 9 files changed, 410 insertions(+), 375 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index 5aa5556..902cbb6 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ # MIT License -Copyright (c) 2017-2019 MCCI Corporation +Copyright (c) 2017-2020 MCCI Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 72f30ed..5c023d6 100644 --- a/README.md +++ b/README.md @@ -1,89 +1,73 @@ -**Table of Contents** - -[Introduction](#introduction) - - -[Definitions](#definitions) - -[Security](#security) - -[Assumptions](#assumptions) - -[Composition and External Ports](#composition-and-external-ports) - -[Data Files](#data-files) - -[Reuse and removal of data files](#reuse-and-removal-of-data-files) - -[Node-RED and Grafana Examples](#node-red-and-grafana-examples) - -[Connecting to InfluxDB from Node-RED and -Grafana](#connecting-to-influxdb-from-node-red-and-grafana) - -[Logging in to Grafana](#logging-in-to-grafana) - -[Data source settings in Grafana](#data-source-settings-in-grafana) - -[MQTTS Examples:](#mqtts-examples) - -[Setup Instructions](#setup-instructions) - -[Influxdb Backup and Restore](#Influxdb-Backup-and-Restore) - - - -# Dashboard example for Internet of Things(IoT) +# Dashboard example for Internet of Things (IoT) This repository contains a complete example that grabs device data from IoT-Network server, stores it in a database, and then displays the data using a web-based dashboard. You can set this up on a "Ubuntu + Docker" VM from the Microsoft Azure store (or on a Ubuntu VM from [DreamCompute](https://www.dreamhost.com/cloud/computing/), or on a Docker droplet from [Digital Ocean](https://www.digitalocean.com/)) with minimal effort. You should set up this service to run all the time so as to capture the data from your devices; you then access the data at your convenience using a web browser. +**Table of Contents** - -Introduction -============ + + + + + +- [Introduction](#introduction) +- [Definitions](#definitions) +- [Security](#security) +- [Assumptions](#assumptions) +- [Composition and External Ports](#composition-and-external-ports) +- [Data Files](#data-files) +- [Reuse and removal of data files](#reuse-and-removal-of-data-files) +- [Node-RED and Grafana Examples](#node-red-and-grafana-examples) + - [Connecting to InfluxDB from Node-RED and Grafana](#connecting-to-influxdb-from-node-red-and-grafana) + - [Logging in to Grafana](#logging-in-to-grafana) + - [Data source settings in Grafana](#data-source-settings-in-grafana) +- [MQTTS Examples](#mqtts-examples) +- [Setup Instructions](#setup-instructions) +- [Influxdb Backup and Restore](#influxdb-backup-and-restore) +- [Meta](#meta) + + + + + +## Introduction This [`SETUP.md`](./SETUP.md) explains the Application Server Installation and its setup. [Docker](https://docs.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) are used to make the installation and setup easier. - - This dashboard uses [docker-compose](https://docs.docker.com/compose/overview/) to set up a group of five primary [docker containers](https://www.docker.com), backed by one auxiliary container: -1. An instance of [Nginx](https://www.nginx.com/), which proxies the other services, handles access control, gets SSL certificates from [Let's Encrypt](https://letsencrypt.org/), and faces the outside world. +1. An instance of [Nginx](https://www.nginx.com/), which proxies the other services, handles access control, gets SSL certificates from [Let's Encrypt](https://letsencrypt.org/), and faces the outside world. -2. An instance of [Node-RED](http://nodered.org/), which processes the data - from the individual nodes, and puts it into the database. +2. An instance of [Node-RED](http://nodered.org/), which processes the data from the individual nodes, and puts it into the database. -3. An instance of [InfluxDB](https://docs.influxdata.com/influxdb/), which stores the data as time-series measurements with tags. +3. An instance of [InfluxDB](https://docs.influxdata.com/influxdb/), which stores the data as time-series measurements with tags. -4. An instance of [Grafana](http://grafana.org/), which gives a web-based dashboard interface to the data. +4. An instance of [Grafana](http://grafana.org/), which gives a web-based dashboard interface to the data. -5. An instance of [Mqtt](https://mosquitto.org/), which provides a lightweight method of carrying out messaging using a publish/subscribe model +5. An instance of [Mqtt](https://mosquitto.org/), which provides a lightweight method of carrying out messaging using a publish/subscribe model The auxiliary container is: -1. [Postfix](http://www.postfix.org/documentation.html), which (if configured) handles outbound mail services for the containers. +1. [Postfix](http://www.postfix.org/documentation.html), which (if configured) handles outbound mail services for the containers. To make things more specific, most of the description here assumes use of Microsoft Azure. However, this was tested on Ubuntu 16 with no issues (apart from the additional complexity of setting up `apt-get` to fetch docker, and the need for a manual install of `docker-compose`), on Dream Compute, and on Digital Ocean This will work on any Linux or Linux-like platform that supports docker, docker-compose, and Node-. Its likelihood of working with Raspberry Pi has not been tested as yet. +## Definitions -Definitions ------------ +- The **host system** is the system that runs Docker and Docker-compose. -- The **host system** is the system that runs Docker and Docker-compose. +- A **container** is one of the virtual systems running under Docker on the host system. -- A **container** is one of the virtual systems running under Docker on the host system. - -- A **file on the host** is a file present on the host system (typically not +- A **file on the host** is a file present on the host system (typically not visible from within the container(s)). -- A **file in container X** (or a **file in the X container**) is a file +- A **file in container X** (or a **file in the X container**) is a file present in a file-system associated with container *X* (and typically not visible from the host system). -Security --------- +## Security All communication with the Nginx server is encrypted using SSL with auto-provisioned certificates from Let's Encrypt. Grafana is the primary point of access for most users, and Grafana's login is used for that purpose. Access to Node-RED and InfluxDB is via special URLs (**base**/node-red/ and **base**/influxdb:8086/, where **base** is the URL served by the Nginx container). These URLs are protected via Nginx `htpasswd` file entries. These entries are files in the Nginx container, and must be manually edited by an Administrator. @@ -94,7 +78,7 @@ Microsoft Azure, by default, will not open any of the ports to the outside world For concreteness, the following table assumes that **base** is “server.example.com”. -> Table User Access +**User Access** |**To access**| **Open this link**| **Notes**| |-------------|-------------------|----------| @@ -105,62 +89,57 @@ For concreteness, the following table assumes that **base** is “server.exam This can be visualized as shown in the figure below: -Figure Docker connection and User Access +**Docker connection and User Access** ![Connection Architecture using SSH](assets/Connection-architecture.png) -Assumptions ------------ +## Assumptions -- The host system must have docker-compose verison 1.9 or later (for which  -- be aware that apt-get normally doesn't grab this; if configured at all, it frequently gets an out-of-date version). +- The host system must have docker-compose verison 1.9 or later (for which  -- be aware that apt-get normally doesn't grab this; if configured at all, it frequently gets an out-of-date version). -- The environment variable `IOT_DASHBOARD_DATA`, if set, points to the common directory for the data. If not set, docker-compose will quit at start-up. (This is by design!) +- The environment variable `IOT_DASHBOARD_DATA`, if set, points to the common directory for the data. If not set, docker-compose will quit at start-up. (This is by design!) - - `${IOT_DASHBOARD_DATA}node-red` will have the local Node-RED data. + - `${IOT_DASHBOARD_DATA}node-red` will have the local Node-RED data. - - `${IOT_DASHBOARD_DATA}influxdb`  will have the local InfluxDB data (this should be backed-up) + - `${IOT_DASHBOARD_DATA}influxdb`  will have the local InfluxDB data (this should be backed-up) - - `${IOT_DASHBOARD_DATA}grafana` will have all the dashboards + - `${IOT_DASHBOARD_DATA}grafana` will have all the dashboards - - `${IOT_DASHBOARD_DATA}docker-nginx` will have `.htpasswd` credentials folder `authdata` and Let's Encrypt certs folder `letsencrypt` + - `${IOT_DASHBOARD_DATA}docker-nginx` will have `.htpasswd` credentials folder `authdata` and Let's Encrypt certs folder `letsencrypt` - - `${IOT_DASHBOARD_DATA}mqtt/credentials` will have the user credentials + - `${IOT_DASHBOARD_DATA}mqtt/credentials` will have the user credentials -Composition and External Ports ------------------------------- +## Composition and External Ports Within the containers, the individual programs use their usual ports, but these are isolated from the outside world, except as specified by `docker-compose.yml` file. In `docker-compose.yml`, the following ports on the docker host are connected to the individual programs. -- Nginx runs on 80 and 443. (All connections to port 80 are redirected to 443 using SSL). +- Nginx runs on 80 and 443. (All connections to port 80 are redirected to 443 using SSL). Remember, if the server is running on a cloud platform like Microsoft Azure or AWS, one needs to check the firewall and confirm that the ports are open to the outside world. -Data Files ----------- +## Data Files When designing this collection of services, there were two choices to store the data files: -- To keep them inside the docker containers, or +- we could keep them inside the docker containers, or -- To keep them in locations on the host system. +- we could keep them in locations on the host system. The advantage of the former is that everything is reset when the docker images are rebuilt. The disadvantage of the former is that there is a possibility to lose all the data when it’s rebuilt. On the other hand, there's another level of indirection when keeping things on the host, as the files reside in different locations on the host and in the docker containers. -Data files are kept in the following locations by default. - -Table Data Location +Because IoT data is generally persistent, we decided that the the extra level of indirection was required. To help find things, consult the followign table. Data files are kept in the following locations by default. | **Component** | **Data file location on host**| **Location in container** | |---------------|-----------|----------------------------| -| Node-RED | `${IOT_DASHBOARD_DATA}node-red`| /data -| InfluxDB | `${IOT_DASHBOARD_DATA}influxdb` | /var/lib/influxdb +| Node-RED | `${IOT_DASHBOARD_DATA}node-red`| /data +| InfluxDB | `${IOT_DASHBOARD_DATA}influxdb` | /var/lib/influxdb | Grafana | `${IOT_DASHBOARD_DATA}grafana` | /var/lib/grafana| -| Mqtt | `${IOT_DASHBOARD_DATA}mqtt/credentials` | /etc/mosquitto/credentials -|Nginx| `${IOT_DASHBOARD_DATA}docker-nginx/authdata`| /etc/nginx/authdata -||`${IOT_DASHBOARD_DATA}docker-nginx/letsencrypt`|/etc/letsencrypt +| Mqtt | `${IOT_DASHBOARD_DATA}mqtt/credentials` | /etc/mosquitto/credentials +| Nginx | `${IOT_DASHBOARD_DATA}docker-nginx/authdata`| /etc/nginx/authdata +| Let's Encrypt certificates |`${IOT_DASHBOARD_DATA}docker-nginx/letsencrypt`|/etc/letsencrypt As shown, one can easily change locations on the **host** (e.g. for testing). This can be done by setting the environment variable `IOT_DASHBOARD_DATA` to the **absolute path** (with trailing slash) to the containing directory prior to calling `docker-compose up`. The above paths are appended to the value of `IOT_DASHBOARD_DATA`. Directories are created as needed. @@ -168,11 +147,13 @@ calling `docker-compose up`. The above paths are appended to the value of `IOT Normally, this is done by an appropriate setting in the `.env` file. Consider the following example: -```bash + +```console $ grep IOT_DASHBOARD_DATA .env IOT_DASHBOARD_DATA=/dashboard-data/ $ docker-compose up –d ``` + In this case, the data files are created in the following locations: Table Data Location Examples @@ -184,10 +165,9 @@ Table Data Location Examples | Grafana | /dashboard-data/grafana | | Mqtt | /dashboard-data/ mqtt/credentials | | Nginx | /dashboard-data/docker-nginx/authdata| -||/dashboard-data/docker-nginx/letsencrypt +| Certificates | /dashboard-data/docker-nginx/letsencrypt -Reuse and removal of data files -------------------------------- +## Reuse and removal of data files Since data files on the host are not removed between runs, as long as the files are not removed between runs, the data will be preserved. @@ -201,70 +181,50 @@ sudo rm -rf ${IOT_DASHBOARD_DATA}Grafana sudo rm –rf ${IOT_DASHBOARD_DATA}mqtt/credentials ``` -Node-RED and Grafana Examples ------------------------------ +## Node-RED and Grafana Examples This version requires that you set up Node-RED, the Influxdb database and the Grafana dashboards manually, but we hope to add a reasonable set of initial files in a future release. ### Connecting to InfluxDB from Node-RED and Grafana -* There is one point that is somewhat confusing about the connections from Node-RED and Grafana to InfluxDB. Even though InfluxDB is running on the same host, it is logically running on its own virtual machine (created by docker). Because of this, Node-RED and Grafana cannot use **`local host`** when connecting to Grafana. A special name is provided by docker: `influxdb`. Note that there's no DNS suffix. If `InfluxDB` is not used, Node-RED and Grafana will not be able to connect. +There is one point that is somewhat confusing about the connections from Node-RED and Grafana to InfluxDB. Even though InfluxDB is running on the same host, it is logically running on its own virtual machine (created by docker). Because of this, Node-RED and Grafana cannot use **`local host`** when connecting to Grafana. A special name is provided by docker: `influxdb`. Note that there's no DNS suffix. If `InfluxDB` is not used, Node-RED and Grafana will not be able to connect. ### Logging in to Grafana -* On the login screen, the user name is "`admin`". The initial password is given by the value of the variable `GF_SECURITY_ADMIN_PASSWORD` in `.env`. Note that if you change the password in `.env` after the first time you launch the grafana container, the admin password does not change. If you somehow lose the previous value of the admin password, and you don't have another admin login, it's very hard to recover; easiest is to remove `grafana.db` and start over. +On the login screen, the initial user name is "`admin`". The initial password is given by the value of the variable `GF_SECURITY_ADMIN_PASSWORD` in `.env`. Note that if you change the password in `.env` after the first time you launch the grafana container, the admin password does not change. If you somehow lose the previous value of the admin password, and you don't have another admin login, it's very hard to recover; easiest is to remove `grafana.db` and start over. ### Data source settings in Grafana -- Set the URL (under HTTP Settings) to . - -- Select the database. - -- Leave the username and password blank. +- Set the URL (under HTTP Settings) to . -- Click "Save & Test". +- Select the database. -MQTTS Examples --------------- +- Leave the username and password blank. -Mqtts has been configured to access in the below channels: +- Click "Save & Test". -1. MQTT over Nginx proxy: +## MQTTS Examples - Host: dashboard.example.com Port: 443 - Path: /mqtts/ +Mqtts can be accessed in the following ways: - Username/Password directs to mosquitto’s configuration (password_file) +Method | Path | Credentials +--------|--------|------------- +MQTT over Nginx proxy | https://dashboard.example.com/mqtts/:443 | Username/Password come from mosquitto’s configuration (password_file) +MQTT over TLS/SSL | https://dashboard.example.com:8883 | Username/Password come from mosquitto’s configuration (password_file) +WebSockets over TLS/SSL | https://dashboard.example.com:8083 | Username/Password come from mosquitto’s configuration (password_file) +MQTT over TCP protocol (not secure) | http://dashboard.example.com:1883 |Username/Password come from mosquitto’s configuration (password_file) -1. MQTT over TLS/SSL: +- To test the above channels (other than "MQTT over Nginx proxy"), the user also will need a [mosquitto +client](https://mosquitto.org/download/) tool. - Host: dashboard.example.com Port: 8883 +- In order to test the "MQTT over Nginx proxy", the user should use the [mqtt web portal](https://www.eclipse.org/paho/clients/js/utility/) tool. - Username/Password directs to mosquitto’s configuration (password_file) - -1. WebSockets over TLS/SSL: - - Host: dashboard.example.com Port: 8083 - - Username/Password directs to mosquitto’s configuration (password_file) - -1. MQTT over TCP protocol: - - Host: dashboard.example.com Port: 1883 - - Username/Password directs to mosquitto’s configuration (password_file) - -- To test the above channels, user needs [mosquitto -client](https://mosquitto.org/download/) tool except the first one: “MQTT over Nginx proxy”. - -- In order to test the “MQTT over Nginx proxy”, user needs to access [mqtt web portal](https://www.eclipse.org/paho/clients/js/utility/) tool. - -Setup Instructions -================== +## Setup Instructions Please refer to [`SETUP.md`](./SETUP.md) for detailed set-up instructions. -Influxdb Backup and Restore -=========================== -Please refer to [`README.md`](./influxdb/README.md). +## Influxdb Backup and Restore + +Please refer to [`influxdb/README.md`](./influxdb/README.md). +## Meta diff --git a/SETUP.md b/SETUP.md index cb8da32..4789c39 100644 --- a/SETUP.md +++ b/SETUP.md @@ -1,75 +1,68 @@ # Step-by-step Setup Instructions -* [Notes](#notes) -* [1 Cloud-Provider Setup](#cloud-provider-setup) - + [1.1 On Digital Ocean](#on-digital-ocean) + + + + - + [Create droplet](#create-droplet) +- [Notes](#notes) +- [Cloud-Provider-Specific Setup](#cloud-provider-specific-setup) + - [On Digital Ocean](#on-digital-ocean) + - [Create droplet](#create-droplet) + - [Configure droplet](#configure-droplet) +- [After server is set up](#after-server-is-set-up) + - [Create and edit the .env file](#create-and-edit-the env file) + - [Set up the Node-RED and InfluxDB API logins](#set-up-the-node-red-and-influxdb-api-logins) + - [Migrating `htpasswd` from Apache to Nginx (if required)](#migrating-htpasswd-from-apache-to-nginx-if-required) + - [Creating new `htpasswd` files](#creating-new-htpasswd-files) + - [Start the server](#start-the-server) + - [Restart servers in the background](#restart-servers-in-the-background) + - [Initial testing](#initial-testing) + - [Set up first data source](#set-up-first-data-source) + - [Test Node-RED](#test-node-red) + - [Creating an InfluxDB database](#creating-an-influxdb-database) + - [MQTT User Credentials setup](#mqtt-user-credentials-setup) - + [Configure droplet](#configure-droplet) + + + -* [2 After server is set up](#after-server-is-set-up) +## Notes - + [2.1 Create and edit the .env file](#create-and-edit-the-.env-file) +Throughout this document, we use `dashboard.example.com` as the DNS name for the server. You will, of course, change this to something more suitable. When you do this, other things are to be named consistently: - + [2.2 Set up the Node-RED and InfluxDB API logins](#set-up-the-node-red-and-influxdb-api-logins) +- `/opt/docker/dashboard.example.com` is the directory (on the host system) containing the docker files. -* [3 Start the server](#start-the-server) +- `/var/opt/docker/dashboard.example.com` is the directory (on the host system) containing persistent data. - + [3.1 Restart servers in the background](#restart-servers-in-the-background) +Node-RED familiarity is assumed. - + [3.2 Initial testing](#initial-testing) +## Cloud-Provider-Specific Setup - + [3.3 Set up first data source](#set-up-first-data-source) - - + [3.4 Test Node-RED](#test-node-red) - - + [3.5 Creating an InfluxDB database](#creating-an-influxdb-database) - - + [3.7 MQTT User Credentials setup](#mqtt-user-credentials-setup) - - - -**Notes:** - -For example, if the dashboard server name: `dashboard.example.com` - -Other things are to be named consistently: - -- `/opt/docker/dashboard.example.com` is the directory (on the host system) containing the docker files. - -- `/var/opt/docker/dashboard.example.com` is the directory (on the host system) containing persistent data. - -- Node-RED familiarity is assumed. - -Cloud-Provider Setup ------------------------ - -As an initial step, a cloud provider is required and Docker and Docker-Compose must be installed which is provider dependent. +As an initial step, a cloud provider is required and Docker and Docker-Compose must be installed. The procedure is provider dependent. ### On Digital Ocean --------------------- #### Create droplet -1. Log in to [Digital Ocean](https://cloud.digitalocean.com/) +1. Log in to [Digital Ocean](https://cloud.digitalocean.com/) -2. Create a new project (if needed) to hold the new droplet. +2. Create a new project (if needed) to hold the new droplet. -3. Discover > Marketplace, search for `Docker` +3. Discover > Marketplace, search for `Docker` -4. This page will be redirected: +4. This page will be redirected: -5. Press "Create" +5. Press "Create" -6. Select the standard 8G GB Starter that is selected. +6. Select the standard 8G GB Starter that is selected. -7. Choose a datacenter; *New York is selected in the example created for this document.* +7. Choose a datacenter; *New York is selected in the example created for this document.* -8. Additional options: none. +8. Additional options: none. -9. Add the SSH keys. +9. Add the SSH keys. 10. Choose a host name, *e.g. `passivehouse-ecovillage`.* @@ -79,132 +72,172 @@ As an initial step, a cloud provider is required and Docker and Docker-Compose m #### Configure droplet -1. Note the IP address from above. +1. Note the IP address from above. -2. `ssh root@{ipaddress}` +2. `ssh root@{ipaddress}` -3. Remove the motd (message of the day). +3. Remove the motd (message of the day). -4. Add user: +4. Add user(s). Change `username` as needed. -```bash + ```bash adduser username adduser username admin adduser username docker adduser username plugdev adduser username staff -``` + ``` -5. Disable root login via SSH or via password +5. Disable root login via SSH or via password -6. Optional: enable `username` to sudo without password. -```bash - sudo VISUAL=vi visudo -``` - + Add the following line at the bottom: -```bash - username ALL=(ALL) NOPASSWD: ALL -``` -7. Test that you can become `username`: -```console - # sudo su - username - username@host-name:~$ -``` -8. Drop back to root, and then copy the authorized_keys file to  `~username`: -```bash - mkdir -m 700 ~username/.ssh - cp -p .ssh/authorized_keys ~username/.ssh - chown -R username.username ~username/.ssh/authorized_keys -``` -9. Confirm if the user can SSH in. +6. Optional: enable `username` to sudo without password. -10. Optional: set up byobu by default: -```bash + ```bash + sudo VISUAL=vi visudo + ``` + + Add the following line at the bottom: + + ```bash + username ALL=(ALL) NOPASSWD: ALL + ``` + +7. Test that you can become `username`: + + ```console + # sudo su - username + username@host-name:~$ + ``` + +8. Drop back to root, and then copy the authorized_keys file to  `~username`: + + ```bash + mkdir -m 700 ~username/.ssh + cp -p .ssh/authorized_keys ~username/.ssh + chown -R username.username ~username/.ssh/authorized_keys + ``` + +9. Confirm that the user can SSH in. + +10. Optional: set up byobu by default. This allows a session to continue even if your connection drops. + + ```bash byobu byobu-enable -``` -11. Set the host name. -```bash + ``` + +11. Set the host name. + + ```bash vi /etc/hosts -``` - Change the line `127.0.1.1 name name` to `127.0.0.1 myhost.myfq.dn myhost`. + ``` -12. If needed, use `hostnamectl` to set the static hostname to match `myhost`. + Change the line `127.0.1.1 name name` to `127.0.0.1 myhost.myfq.dn myhost`. -13. set up Git: -```bash +12. If needed, use `hostnamectl` to set the static hostname to match `myhost`. + +13. Set up git. This makes sure you have the latest version. + + ```bash sudo add-apt-repository ppa:git-core/ppa sudo apt update sudo apt install git -``` -14. We'll put the docker files at `/opt/docker/docker-iot-dashboard`, setting up as follows: - ```bash -sudo mkdir /opt/docker -cd /opt/docker -sudo chgrp admin . -sudo chmod g+w . -``` + ``` -#### -------- +14. We'll put the docker files at `/opt/docker/docker-iot-dashboard`, setting up as follows: + ```bash + sudo mkdir /opt/docker + cd /opt/docker + sudo chgrp admin . + sudo chmod g+w . + ``` -After server is set up ----------------------- +## After server is set up The following instructions are essentially independent of the cloud provider and the underlying distribution. But this was only tested on Ubuntu and (in 2019) on CentOS. 1. Clone this repository. - ```bash + + ```bash git clone git@github.com:mcci-catena/docker-iot-dashboard.git /opt/docker/dashboard.example.com -``` + ``` + +2. Move to the directory populated in step 1. -2. Move to the directory populated in step 1. - ```bash + ```bash cd /opt/docker/dashboard.example.com -``` -3. Get a fully-qualified domain name (FQDN) for the server, for which the DNS can be controlled. Point it to the server. Make sure it works, using "`dig FQDN`" -- get back an `A` record pointing to your server's IP address. + ``` + +3. Get a fully-qualified domain name (FQDN) for the server, for which the DNS can be controlled. Point it to the server. Make sure it works, using "`dig FQDN`" -- get back an `A` record pointing to your server's IP address. ### Create and edit the .env file -1. Create a .env file. To get a template: - ```bash - sed -ne '/^#+++/,/^#---/p' docker-compose.yml | sed -e '/^#[^ \t]/d' -e '/^# TTN/s/$/=/' > .env +First, create a .env file. The following comand sequence can be cut and paste to generate an empty template: + +```bash +sed -ne '/^#+++/,/^#---/p' docker-compose.yml | sed -e '/^#[^ \t]/d' -e '/^# TTN/s/$/=/' > .env ``` -2. Edit the .env file as follows: - 1. `IOT_DASHBOARD_NGINX_FQDN=myhost.example.com`  this sets the name of the resulting server. It tells Nginx what it's serving out. It must be a fully-qualified domain name (FQDN) that resolves to the IP address of the container host. +Then, edit the .env file as follows: + +1. `IOT_DASHBOARD_NGINX_FQDN=myhost.example.com` + + This sets the name of the resulting server. It tells Nginx what it's serving out. It must be a fully-qualified domain name (FQDN) that resolves to the IP address of the container host. + +2. `IOT_DASHBOARD_CERTBOT_FQDN=myhost.example.com` - 2. `IOT_DASHBOARD_CERTBOT_FQDN=myhost.example.com`  this should be the same as `IOT_DASHBOARD_NGINX_FQDN`. + This should be the same as `IOT_DASHBOARD_NGINX_FQDN`. - 3. `IOT_DASHBOARD_CERTBOT_EMAIL=someone@example.com`  this sets the contact email for Let's Encrypt. The script automatically accepts the Let's Encrypt terms of service, and this indicates who is doing the accepting. +3. `IOT_DASHBOARD_CERTBOT_EMAIL=someone@example.com` - 4. `IOT_DASHBOARD_DATA=/full/path/to/directory/`  the trailing slash is required! This will put all the data file for this instance as subdirectories of the specified path. If this is undefined, `docker-compose` will print error messages and quit. + This sets the contact email for Let's Encrypt. The script automatically accepts the Let's Encrypt terms of service, and this indicates who is doing the accepting. - 5. `IOT_DASHBOARD_GRAFANA_ADMIN_PASSWORD=SomethingVerySecretIndeed` this needs to be confidential. Indeed this sets the *initial* password for the Grafana admin login.This should be changed via the Grafana UI after booting the server. +4. `IOT_DASHBOARD_DATA=/full/path/to/directory/` - 6. `IOT_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS`   this sets the Grafana - originating mail address. + The trailing slash is required! This will put all the data files for this instance as subdirectories of the specified path. If this is undefined, `docker-compose` will print error messages and quit. - 7. `IOT_DASHBOARD_GRAFANA_INSTALL_PLUGINS`  this sets a list of Grafana plugins to install. +5. `IOT_DASHBOARD_GRAFANA_ADMIN_PASSWORD=SomethingVerySecretIndeed` - 8. `IOT_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME=demo` Change "demo" to the desired name of the initial database that will be created in InfluxDB. + This needs to be confidential. Indeed this sets the *initial* password for the Grafana admin login.This should be changed via the Grafana UI after booting the server. - 9. `IOT_DASHBOARD_MAIL_HOST_NAME=myhost.example.com`  this sets the name of your mail server. Used by Postfix. +6. `IOT_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS` - 10. `IOT_DASHBOARD_MAIL_DOMAIN=example.com`  this sets the domain name of your mail server. Used by Postfix. + This sets the Grafana originating mail address. - 11. `IOT_DASHBOARD_NODERED_INSTALL_PLUGINS=node-red-node-example1 - node-red-node-example2`  this installs one or more Node-RED plug-ins. +7. `IOT_DASHBOARD_GRAFANA_INSTALL_PLUGINS=plugin plugin2` - 12. `IOT_DASHBOARD_TIMEZONE=Europe/Paris`  If not defined, the default time - zone will be GMT. + This sets a list of Grafana plugins to install. - 13. `IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME=myhost.example.com` this sets the name of your mail server for backup mail. Used by Postfix. +8. `IOT_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME=demo` - 14. `IOT_DASHBOARD_INFLUXDB_BACKUP_EMAIL=a@example.com b@example.com` Backup mail will be sent to the mentioned MAIL IDs. + Change "demo" to the desired name of the initial database that will be created in InfluxDB. -The `.env` file should look like this: +9. `IOT_DASHBOARD_MAIL_HOST_NAME=myhost.example.com` + + This sets the name of your mail server. Used by Postfix. + +10. `IOT_DASHBOARD_MAIL_DOMAIN=example.com` + + This sets the domain name of your mail server. Used by Postfix. + +11. `IOT_DASHBOARD_NODERED_INSTALL_PLUGINS=node-red-node-example1 node-red-node-example2` + + This installs one or more Node-RED plug-ins. + +12. `IOT_DASHBOARD_TIMEZONE=Europe/Paris` + + If not defined, the default time zone will be GMT. + +13. `IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME=myhost.example.com` + + This sets the name of your mail server for backup mail. Used by Postfix. + +14. `IOT_DASHBOARD_INFLUXDB_BACKUP_EMAIL=a@example.com b@example.com` + + Backup mail will be sent to the mentioned MAIL IDs. + +The resulting `.env` file should look like this: ```bash ### env file for configuring dashboard.example.com @@ -279,91 +312,110 @@ IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME=influxdbbackup.example.com # the external FQDN for the influxdb host IOT_DASHBOARD_INFLUXDB_BACKUP_EMAIL=somebody1@example.com somebody2@example.com # Backup mail will be sent to the mentioned MAIL IDs. Use "space" to delimit the MAIL IDs. - ``` ### Set up the Node-RED and InfluxDB API logins -1. Prepare everything: +Run the following commands. + ```bash - docker-compose pull - docker-compose build +docker-compose pull +docker-compose build ``` + If there are any errors, they need to be fixed before going on. ---- -#### Migrating `htpasswd` from Apache to Nginx +#### Migrating `htpasswd` from Apache to Nginx (if required) + +If migrating from an older version of the dashboard that used Apache, you'll need to migrate the `htpasswd` file. + +- Copy [`htpasswd_migration.sh`](./htpasswd_migration.sh) into your local directory (on the host system) containing the docker files. -- Download the [`htpasswd_migration.sh`](./htpasswd_migration.sh) into your local directory (on the host system) containing the docker files. - Run the script as below. -```bash -chmod +x htpasswd_migration.sh -./htpasswd_migration.sh -``` -- you will receive `htpasswd` for each controlled services and then copy them(`node-red_htpasswd`, `query_htpasswd`) in appropriate files as below. -- For Node-red: + ```bash + chmod +x htpasswd_migration.sh + ./htpasswd_migration.sh + ``` + +- This script creates one `htpasswd` for each of the controlled services, and then copies them(`node-red_htpasswd`, `query_htpasswd`) to appropriate files as below. + + - For Node-red: `${IOT_DASHBOARD_DATA}docker-nginx/authdata/nodered/.htpasswd` -- For Infludb Queries: + - For Infludb Queries: `${IOT_DASHBOARD_DATA}docker-nginx/authdata/influxdb/.htpasswd` -- If you copied the files, please avoid steps `[2-5]` to `htpasswd` below. ---- -2. log into the Nginx docker container. -```console +- If you are migrating older `htpasswd` files, please skip steps `[1-4]` to `htpasswd` below. + +#### Creating new `htpasswd` files + +1. Log into the Nginx docker container. + + ```console $ docker-compose run nginx /bin/bash -``` + # + ``` -If this fails with the message, `ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?`, then probably the user ID is not in the `docker` group. To fix this, `sudo adduser MYUSER docker`, where "MYUSER" is the login ID. Then (**very important**) log out and log back in. + If this fails with the message, `ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?`, then probably the user ID is not in the `docker` group. To fix this, `sudo adduser MYUSER docker`, where "MYUSER" is the login ID. Then (**very important**) log out and log back in. -3. Create `.htpasswd` file for node-red and influxdb queries authentication. -```bash +2. Create `.htpasswd` files for node-red and influxdb queries authentication. + + ```bash touch /etc/nginx/authdata/influxdb/.htpasswd touch /etc/nginx/authdata/nodered/.htpasswd chown www-data /etc/nginx/authdata/influxdb/.htpasswd chown www-data /etc/nginx/authdata/nodered/.htpasswd -``` -4. Add user logins for node-red and influxdb queries Make `USERS` be a list of login IDs. + ``` -- For Node-red authentication: +3. Add user logins for node-red and influxdb queries. Make `USERS` be a list of login IDs. -```bash - export USERS="tmm amy josh" - for USER in $USERS; do echo "Set password for "$USER; - htpasswd /etc/nginx/authdata/nodered/.htpasswd $USER; done -``` -- For Influxdb queries: + - For Node-red authentication: -```bash - export USERS="tmm amy josh" - for USER in $USERS; do echo "Set password for "$USER; - htpasswd /etc/nginx/authdata/influxdb/.htpasswd $USER; done -``` + ```bash + export USERS="tmm amy josh" + for USER in $USERS; do \ + echo "Set password for "$USER; \ + htpasswd /etc/nginx/authdata/nodered/.htpasswd $USER; \ + done + ``` + - For Influxdb queries: -5. Exit Nginx's container with Control+D. + ```bash + export USERS="tmm amy josh" + for USER in $USERS; do \ + echo "Set password for "$USER; \ + htpasswd /etc/nginx/authdata/influxdb/.htpasswd $USER; \ + done + ``` -Start the server ----------------- +4. Exit Nginx's container with Control+D. -1. Starting things up in "interactive mode" is recommended. -```bash +### Start the server + +1. Starting things up in "interactive mode" is recommended as a first step. + + ```bash docker-compose up -``` -This will show the log files. It will also be pretty clear if there are any issues. + ``` + +This will show the log output from the various services. It will also be pretty clear if there are any issues. One common error (for me, anyway) is entering an illegal initial InfluxDB database name. InfluxDB will spew a number of errors, but eventually it will start up anyway. But then the database needs to be created manually. ### Restart servers in the background Once the servers are coming up interactively, use ^C to shut them down, and then restart in daemon mode. + ```bash - docker-compose up -d +docker-compose up -d ``` + Status of the containers can be seen as below -```bash - docker-compose ps + +```console +$ docker-compose ps Name Command State Ports ----------------------------------------------------------------- @@ -374,23 +426,24 @@ dashboardexamplecom_nginx_1 /sbin/my_init Up 0.0.0.0:443->443/tcp, 0. dashboardexamplecom_node-red_1 npm start -- --userDir /da ... Up (healthy) 1880/tcp dashboardexamplecom_postfix_1 /sbin/my_init Up 25/tcp ``` + ### Initial testing -- Open Grafana on [https://dashboard.example.com](https://dashboard.example.com/), and log in as admin. +- Open Grafana on [https://dashboard.example.com](https://dashboard.example.com/), and log in as admin. -- Change the admin password. +- Change the admin password. ### Set up first data source Use the Grafana UI -- either click on "add first data source" or use "Configure >Add Data Source", and add an InfluxDB data source. -- Set the URL (under HTTP Settings) to ``. +- Set the URL (under HTTP Settings) to ``. -- Select the database. If InfluxDB is properly initialized in a database, connect to it as a Grafana data source. If not, [create an InfluxDB database](https://github.com/mcci-catena/docker-iot-dashboard/blob/master/SETUP.md#creating-an-influxdb-database). +- Select the database. If InfluxDB is properly initialized in a database, connect to it as a Grafana data source. If not, [create an InfluxDB database](https://github.com/mcci-catena/docker-iot-dashboard/blob/master/SETUP.md#creating-an-influxdb-database). -- Leave user and password blank. +- Leave user and password blank. -- Click "Save & Test". +- Click "Save & Test". ### Test Node-RED @@ -427,18 +480,22 @@ $ To access mqtt channel, user needs credentials to access it. -1. Log into the host machine +1. Log into the host machine -2. Change the directory (cd) to `/opt/docker/dashboard.example.com`. +2. Change the directory (cd) to `/opt/docker/dashboard.example.com`. -3. log into the mqtts docker container. -```bash +3. log into the mqtts docker container. + + ```bash $ docker-compose exec mqtts /bin/bash -``` -4. In the container, -```bash + ``` + +4. In the container, set the user password. + + ```bash # mosquitto_passwd -c /etc/mosquitto/credentials/passwd Password: Reenter password: -``` -5. Close the connection to mqtts (Ctrl+D). + ``` + +5. Close the connection to mqtts (Ctrl+D). diff --git a/TODO.md b/TODO.md index 220592a..9cc26e9 100644 --- a/TODO.md +++ b/TODO.md @@ -2,9 +2,9 @@ 1. Prepare a script that queries the user during the setup and sets the `.env` file. -2. The script should also get names and roles for access to Node-red and InfluxDB. It then will seed `.htaccess` and `.htgroup`. +2. The script should also get names and roles for access to Node-red and InfluxDB. It then will seed `.htpasswd` files. -3. Same script should be able to show user-by-user roles, and adjust them. (Right now the matrix is transposed; for each role you can look at `.htgroup` and find the members, but you can't easily see all the roles for a member.) +3. Same script should be able to show user-by-user roles, and adjust them. 4. Figure out what to do if the user changes `GRAFANA_ENV_ADMIN_PASSWORD` after the image has been launched once; at present, this is ignored. This might be a maintenance script and/or a makefile so that the system detects edits and does the right thing. @@ -12,4 +12,4 @@ 6. Integrate the other things from `SETUP.md`. -7. Add scripts to backup and restore the user's data directories. Backup should run off-line (unless there's a very good way to backup the datasets from all the servers while they're up). Restore must run off-line. Scripts should do the necessary to ensure that the servers are in fact stopped. This is now partially done with the AWS changes, but more work needs to be done. +7. Add documention on setting up backups. diff --git a/docker-compose.yml b/docker-compose.yml index c4c9af7..35873fd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,9 +15,10 @@ # Distributed under the terms of the license file shipped with this # collection. # -# Author: -# Terry Moore, MCCI Corporation -# Based on work by Johan Stocking, The Things Network +# Authors: +# Terry Moore, MCCI Corporation +# Murugan Chandrasekar, MCCI Corporation +# Based on work by Johan Stocking, The Things Network # ############################################################################## diff --git a/htpasswd_migration.sh b/htpasswd_migration.sh index 4a66535..ef15578 100644 --- a/htpasswd_migration.sh +++ b/htpasswd_migration.sh @@ -1,15 +1,16 @@ #!/bin/bash # This Script will create htpasswd for each controlled services for migration Apache->Nginx -read -p "Please enter .env file location : " envi +read -r -p "Please enter .env file location : " envi - if [[ ! -f $envi ]] - then - echo "Please enter correct file location" - exit - fi -source $envi -htgroup=${TTN_DASHBOARD_DATA}docker-apache2/authdata/.htgroup -htpasswd=${TTN_DASHBOARD_DATA}docker-apache2/authdata/.htpasswd +if [[ ! -f $envi ]] +then + echo "Please enter correct file location" + exit +fi + +source "$envi" +htgroup="${TTN_DASHBOARD_DATA}docker-apache2/authdata/.htgroup" +htpasswd="${TTN_DASHBOARD_DATA}docker-apache2/authdata/.htpasswd" PS3="Please enter your choice on the number listed above, To exit press 'ctrl+d ' : " select var in "creating htpasswd for each controlled service manually" "creating htpasswd for each controlled service automatically" @@ -18,23 +19,23 @@ case $var in "creating htpasswd for each controlled service manually") - read -p "please let me know the output file name of .htpasswd for which controlled service : " output + read -rp "please let me know the output file name of .htpasswd for which controlled service : " output if [[ -z $output ]] then echo "Please enter output file name" exit fi - > ${output}_htpasswd + true > "${output}_htpasswd" - for i in $(cat $htgroup | xargs | tr ' |,' '\n' | sed 's/.*:$//' | sort -u) + for i in $(tr < "$htgroup" ' |,' '\n' | sed 's/.*:$//' | sort -u) do - read -p "Do you want the User: $i to be added in .htpasswd (y/n) : " j + read -r -p "Do you want the User: $i to be added in .htpasswd (y/n) : " j case $j in [yY][eE][sS]|[yY]) - sed -n "/$i/p" $htpasswd >> ${output}_htpasswd + sed -n "/$i/p" "$htpasswd" >> "${output}_htpasswd" ;; [nN][oO]|[nN]) @@ -60,11 +61,11 @@ case $var in while read -r line do file=$(echo "$line" | awk '{print $1}' | sed 's/://') - > ${file}_htpasswd + touch > "${file}_htpasswd" for k in $(echo "$line" | xargs | tr ' |,' '\n') - do - sed -n "/$k/p" $htpasswd >> ${file}_htpasswd - done + do + sed -n "/$k/p" "$htpasswd" >> "${file}_htpasswd" + done echo " " echo " " echo " " diff --git a/influxdb/README.md b/influxdb/README.md index 8752afa..5b9ccda 100644 --- a/influxdb/README.md +++ b/influxdb/README.md @@ -1,10 +1,22 @@ # Influxdb Backup + + + + -## status of docker container and databases +- [Status of docker container and databases](#status-of-docker-container-and-databases) +- [Checking the databases available](#checking-the-databases-available) +- [Backing up Databases](#backing-up-databases) +- [Restoring Databases](#restoring-databases) -```console + + + + +## Status of docker container and databases +```console root@ithaca-power:/iot/testing/docker-iot-dashboard# docker-compose ps Name Command State Ports -------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -15,13 +27,14 @@ docker-iot-dashboard_nginx_1 /sbin/my_init Up docker-iot-dashboard_node-red_1 npm start -- --userDir /da ... Up (healthy) 1880/tcp docker-iot-dashboard_postfix_1 /sbin/my_init Up 25/tcp ``` -* Moving to `influxdb` container. -```console -root@ithaca-power:/iot/testing/docker-iot-dashboard# docker-compose exec influxdb bash -``` -* checking the databases available. +## Checking the databases available + +Moving to `influxdb` container. + ```console +username@ithaca-power:/iot/testing/docker-iot-dashboard$ docker-compose exec influxdb bash +root@influxdb# cd /opt/influxdb-backup root@influxdb:/opt/influxdb-backup# influx Connected to http://localhost:8086 version 1.8.0 InfluxDB shell version: 1.8.0 @@ -41,20 +54,17 @@ time host region value ---- ---- ------ ----- 1590247547512536078 serverA us_west 0.64 > exit - ``` ## Backing up Databases -* Backup can be taken through shell script and synced with Amazon S3 cloud and then mail notification will be sent for the backup. - -* Note: The backup shell script `backup.sh` wiil be configured in Crontab while building.(For testing, running `backup.sh` manually ) +Backup can be taken through shell script and synced with Amazon S3 cloud. When complete, mail notification will be sent for the backup. -* The backup shell script `backup.sh` will back up everything. +The backup shell script `backup.sh` wiil be configured in Crontab while building. (For testing, run `backup.sh` manually ) +The backup shell script `backup.sh` will back up everything. ```console - root@influxdb:/opt/influxdb-backup# backup.sh Backup Influx metadata @@ -90,26 +100,23 @@ tar: Removing leading `/' from member names tar: Removing leading `/' from hard link targets upload: ../../var/lib/influxdb-S3-bucket/ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz to s3://mcci-influxdb-test/ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz upload: ../../var/lib/influxdb-S3-bucket/ithaca-power.mcci.com_data_directory_backup_2020-05-23.tar.gz to s3://mcci-influxdb-test/ithaca-power.mcci.com_data_directory_backup_2020-05-23.tar.gz - - ``` -* Backup files will be uploaded in Amazon S3 bucket and it can be viewed using below command. -```console +* Backup files will be uploaded in Amazon S3 bucket. They can be viewed using below command. +```console root@influxdb:/opt/influxdb-backup# aws s3 ls s3://${S3_BUCKET_INFLUXDB}/ - root@influxdb:/opt/influxdb-backup# aws s3 ls s3://${S3_BUCKET_INFLUXDB}/ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz 2020-05-23 15:29:43 15447 ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz - ``` # Influxdb Restore + ## Restoring Databases -* Drop the "testdb" database for checking purpose -```console +In this example, we drop the "`testdb`" database for checking purpose +```console root@influxdb:/opt/influxdb-backup# influx Connected to http://localhost:8086 version 1.8.0 InfluxDB shell version: 1.8.0 @@ -126,9 +133,10 @@ name ---- _internal > exit - ``` -* Downloading Backed up Databases from Amazon S3 Bucket + +Next, we download the backed up databases from the Amazon S3 Bucket. + ```console root@influxdb:/opt/influxdb-backup# aws s3 cp s3://${S3_BUCKET_INFLUXDB}/ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz . download: s3://mcci-influxdb-test/ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz to ./ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz @@ -138,27 +146,28 @@ drwxr-xr-x 1 root root 4096 May 23 15:37 . drwxr-xr-x 1 root root 4096 May 18 05:46 .. -rw-r--r-- 1 root root 15447 May 23 15:29 ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz ``` -* Extracting the backed up files -```console + +We extract the backed up files. + +```console root@influxdb:/opt/influxdb-backup# tar xvf staging1-ithaca-power.mcci.com_metdata_db_backup_2020-05-23.tar.gz var/lib/influxdb-backup/ var/lib/influxdb-backup/20200523T152940Z.meta var/lib/influxdb-backup/20200523T152940Z.s1.tar.gz var/lib/influxdb-backup/20200523T152940Z.s2.tar.gz var/lib/influxdb-backup/20200523T152940Z.manifest - ``` -* To restore all databases found within the backup directory -```console +We restore all databases found within the backup directory. + +```console root@influxdb:/opt/influxdb-backup# influxd restore -portable -host $INFLUX_HOST:8088 var/lib/influxdb-backup/ 2020/05/23 15:45:23 Restoring shard 2 live from backup 20200523T152940Z.s2.tar.gz ``` -* Checking the Database has been restored - -```console +Finally, we check that the database has been restored +```console root@influxdb:/opt/influxdb-backup# influx Connected to http://localhost:8086 version 1.8.0 InfluxDB shell version: 1.8.0 @@ -176,5 +185,4 @@ time host region value ---- ---- ------ ----- 1590247547512536078 serverA us_west 0.64 > exit - -``` +``` \ No newline at end of file diff --git a/influxdb/influxdb_cron.sh b/influxdb/influxdb_cron.sh index 1994998..3da62f1 100644 --- a/influxdb/influxdb_cron.sh +++ b/influxdb/influxdb_cron.sh @@ -1,11 +1,19 @@ #!/bin/sh +# exit on unchecked errors +set -e + +# backups are scheduled via the root crontab. Start by heading there cd /root + #write out current crontab crontab -l > mycron #echo new cron into cron file -echo "35 6 * * * /bin/bash -l -c '/bin/backup.sh'" > mycron +echo "35 6 * * * /bin/bash -l -c '/bin/backup.sh'" >> mycron + +#delete duplicated lines +sort -u -o mycron mycron #install new cron file crontab mycron diff --git a/influxdb/showdb.sh b/influxdb/showdb.sh index 75c7a85..c328c7f 100755 --- a/influxdb/showdb.sh +++ b/influxdb/showdb.sh @@ -2,9 +2,9 @@ # TO Show all Databases that will be used by backup.sh script for backup showdb(){ -influx -host $INFLUX_HOST -port 8086 -execute 'SHOW DATABASES' +influx -host "$INFLUX_HOST" -port 8086 -execute 'SHOW DATABASES' } DATABASES=$(showdb) -echo $DATABASES | sed -e 's/[\r]//g' | sed -e 's/^.\{26\}//' | sed 's/ /:/g' +echo "$DATABASES" | sed -e 's/[\r]//g' | sed -e 's/^.\{26\}//' | sed 's/ /:/g' From 1b815ff4851d88ef38d6ab88c2e103cd5aef1c47 Mon Sep 17 00:00:00 2001 From: Terry Moore Date: Wed, 2 Dec 2020 23:18:17 -0500 Subject: [PATCH 45/65] tighten up htpasswd_migration script --- htpasswd_migration.sh | 96 +++++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 45 deletions(-) diff --git a/htpasswd_migration.sh b/htpasswd_migration.sh index ef15578..2ba2547 100644 --- a/htpasswd_migration.sh +++ b/htpasswd_migration.sh @@ -1,5 +1,5 @@ #!/bin/bash -# This Script will create htpasswd for each controlled services for migration Apache->Nginx +# This script will create htpasswd for each controlled services for migration Apache->Nginx read -r -p "Please enter .env file location : " envi if [[ ! -f $envi ]] @@ -8,7 +8,15 @@ then exit fi -source "$envi" +# $1 is the file to read. Result is one setting per line, name followed by single space +# followed by value. We can't source the .env file because it's really a .ini file and +# doesn't follow shell syntax. +function _parseenv { + sed -n -e 's/#.*$//g' -e 's/^[ \t]*//' -e 's/[ \t]*=[ \t]*/=/' -e 's/^\([A-Za-z0-9_][A-Za-z0-9_]*\)=\(.*\)$/\1 \2/p' "$1" +} + +TTN_DASHBOARD_DATA="$(_parseenv "$envi" | sed -ne 's/^TTN_DASHBOARD_DATA //p')" + htgroup="${TTN_DASHBOARD_DATA}docker-apache2/authdata/.htgroup" htpasswd="${TTN_DASHBOARD_DATA}docker-apache2/authdata/.htpasswd" @@ -17,67 +25,65 @@ select var in "creating htpasswd for each controlled service manually" "creating do case $var in - "creating htpasswd for each controlled service manually") + "creating htpasswd for each controlled service manually") + PS3="Please select service: " + select output in $(sed 's/:.*$//' "$htgroup") + do + true > "${output}_htpasswd" + - read -rp "please let me know the output file name of .htpasswd for which controlled service : " output - if [[ -z $output ]] - then - echo "Please enter output file name" - exit - fi - true > "${output}_htpasswd" + for i in $(tr < "$htgroup" ' |,' '\n' | sed 's/.*:$//' | sort -u) + do + read -r -p "Do you want the User: $i to be added in .htpasswd (y/n) : " j + case $j in + [yY][eE][sS]|[yY]) - for i in $(tr < "$htgroup" ' |,' '\n' | sed 's/.*:$//' | sort -u) - do - read -r -p "Do you want the User: $i to be added in .htpasswd (y/n) : " j - case $j in + sed -n "/$i/p" "$htpasswd" >> "${output}_htpasswd" + ;; + + [nN][oO]|[nN]) - [yY][eE][sS]|[yY]) - - sed -n "/$i/p" "$htpasswd" >> "${output}_htpasswd" - ;; - - [nN][oO]|[nN]) - - continue - ;; - *) - echo "Please Enter yes or no" - break - ;; - esac + continue + ;; + *) + echo "Please Enter yes or no" + break + ;; + esac + done done - echo " " - echo " " - echo " " - echo "It is done. Thanks!" - echo " " - echo " " + echo " " + echo " " + echo " " + echo "It is done. Thanks!" + echo " " + echo " " exit ;; "creating htpasswd for each controlled service automatically") while read -r line do - file=$(echo "$line" | awk '{print $1}' | sed 's/://') - touch > "${file}_htpasswd" - for k in $(echo "$line" | xargs | tr ' |,' '\n') + file=$(echo "$line" | awk '{print $1}' | sed 's/://') + echo "create:" "${file}_htpasswd" + true > "${file}_htpasswd" + for k in $(echo "$line" | tr ' |,' '\n') do sed -n "/$k/p" "$htpasswd" >> "${file}_htpasswd" done - echo " " - echo " " - echo " " - echo "It is done. Thanks!" - echo " " - echo " " - exit done < "$htgroup" + echo " " + echo " " + echo " " + echo "It is done. Thanks!" + echo " " + echo " " + exit ;; *) echo "Please enter correct number" ;; -esac +esac done From cd1a7cc882a8a2f3edafdb4206bd8124b22e39df Mon Sep 17 00:00:00 2001 From: Terry Moore Date: Fri, 4 Dec 2020 12:23:59 +0000 Subject: [PATCH 46/65] Catch error when crontab isn't set --- influxdb/influxdb_cron.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/influxdb/influxdb_cron.sh b/influxdb/influxdb_cron.sh index 3da62f1..4c13808 100644 --- a/influxdb/influxdb_cron.sh +++ b/influxdb/influxdb_cron.sh @@ -7,7 +7,7 @@ set -e cd /root #write out current crontab -crontab -l > mycron +crontab -l > mycron || echo "no crontab for root, going on" #echo new cron into cron file echo "35 6 * * * /bin/bash -l -c '/bin/backup.sh'" >> mycron From d3867ebd821040ee0ed1d07ce4c7170d6fd7e1bf Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Tue, 8 Dec 2020 12:52:19 +0530 Subject: [PATCH 47/65] setup.md update --- SETUP.md | 224 +++++++++++++++++++++++++--------------- assets/mqtt_nginx_1.png | Bin 0 -> 36952 bytes assets/mqtt_nginx_2.png | Bin 0 -> 8089 bytes assets/mqtt_nginx_3.png | Bin 0 -> 4965 bytes assets/mqtt_nginx_4.png | Bin 0 -> 45361 bytes assets/mqtt_web_1.png | Bin 0 -> 11926 bytes assets/mqtt_web_2.png | Bin 0 -> 5193 bytes assets/mqtt_web_3.png | Bin 0 -> 5474 bytes assets/mqtt_web_4.png | Bin 0 -> 27666 bytes 9 files changed, 138 insertions(+), 86 deletions(-) create mode 100755 assets/mqtt_nginx_1.png create mode 100755 assets/mqtt_nginx_2.png create mode 100755 assets/mqtt_nginx_3.png create mode 100755 assets/mqtt_nginx_4.png create mode 100755 assets/mqtt_web_1.png create mode 100755 assets/mqtt_web_2.png create mode 100755 assets/mqtt_web_3.png create mode 100755 assets/mqtt_web_4.png diff --git a/SETUP.md b/SETUP.md index 4789c39..5360cf3 100644 --- a/SETUP.md +++ b/SETUP.md @@ -3,27 +3,7 @@ - - -- [Notes](#notes) -- [Cloud-Provider-Specific Setup](#cloud-provider-specific-setup) - - [On Digital Ocean](#on-digital-ocean) - - [Create droplet](#create-droplet) - - [Configure droplet](#configure-droplet) -- [After server is set up](#after-server-is-set-up) - - [Create and edit the .env file](#create-and-edit-the env file) - - [Set up the Node-RED and InfluxDB API logins](#set-up-the-node-red-and-influxdb-api-logins) - - [Migrating `htpasswd` from Apache to Nginx (if required)](#migrating-htpasswd-from-apache-to-nginx-if-required) - - [Creating new `htpasswd` files](#creating-new-htpasswd-files) - - [Start the server](#start-the-server) - - [Restart servers in the background](#restart-servers-in-the-background) - - [Initial testing](#initial-testing) - - [Set up first data source](#set-up-first-data-source) - - [Test Node-RED](#test-node-red) - - [Creating an InfluxDB database](#creating-an-influxdb-database) - - [MQTT User Credentials setup](#mqtt-user-credentials-setup) - - +autoauto- [Notes](#notes)auto- [Cloud-Provider-Specific Setup](#cloud-provider-specific-setup)auto - [On Digital Ocean](#on-digital-ocean)auto - [Create droplet](#create-droplet)auto - [Configure droplet](#configure-droplet)auto- [After server is set up](#after-server-is-set-up)auto - [Create and edit the .env file](#create-and-edit-the env file)auto - [Set up the Node-RED and InfluxDB API logins](#set-up-the-node-red-and-influxdb-api-logins)auto - [Migrating `htpasswd` from Apache to Nginx (if required)](#migrating-htpasswd-from-apache-to-nginx-if-required)auto - [Creating new `htpasswd` files](#creating-new-htpasswd-files)auto - [MQTT User Credentials setup](#mqtt-user-credentials-setup)auto - [Start the server](#start-the-server)auto - [Restart servers in the background](#restart-servers-in-the-background)auto - [Initial testing](#initial-testing)auto - [Set up first data source](#set-up-first-data-source)auto - [Test Node-RED](#test-node-red)auto - [Creating an InfluxDB database](#creating-an-influxdb-database)autoauto @@ -52,19 +32,19 @@ As an initial step, a cloud provider is required and Docker and Docker-Compose m 3. Discover > Marketplace, search for `Docker` 4. This page will be redirected: - + 5. Press "Create" 6. Select the standard 8G GB Starter that is selected. -7. Choose a datacenter; *New York is selected in the example created for this document.* +7. Choose a datacenter; _New York is selected in the example created for this document._ 8. Additional options: none. 9. Add the SSH keys. -10. Choose a host name, *e.g. `passivehouse-ecovillage`.* +10. Choose a host name, _e.g. `passivehouse-ecovillage`._ 11. Select the project. @@ -109,7 +89,7 @@ As an initial step, a cloud provider is required and Docker and Docker-Compose m username@host-name:~$ ``` -8. Drop back to root, and then copy the authorized_keys file to  `~username`: +8. Drop back to root, and then copy the authorized_keys file to  `~username`: ```bash mkdir -m 700 ~username/.ssh @@ -159,15 +139,15 @@ The following instructions are essentially independent of the cloud provider and 1. Clone this repository. - ```bash - git clone git@github.com:mcci-catena/docker-iot-dashboard.git /opt/docker/dashboard.example.com - ``` + ```bash + git clone git@github.com:mcci-catena/docker-iot-dashboard.git /opt/docker/dashboard.example.com + ``` 2. Move to the directory populated in step 1. - ```bash - cd /opt/docker/dashboard.example.com - ``` + ```bash + cd /opt/docker/dashboard.example.com + ``` 3. Get a fully-qualified domain name (FQDN) for the server, for which the DNS can be controlled. Point it to the server. Make sure it works, using "`dig FQDN`" -- get back an `A` record pointing to your server's IP address. @@ -183,39 +163,39 @@ Then, edit the .env file as follows: 1. `IOT_DASHBOARD_NGINX_FQDN=myhost.example.com` - This sets the name of the resulting server. It tells Nginx what it's serving out. It must be a fully-qualified domain name (FQDN) that resolves to the IP address of the container host. + This sets the name of the resulting server. It tells Nginx what it's serving out. It must be a fully-qualified domain name (FQDN) that resolves to the IP address of the container host. 2. `IOT_DASHBOARD_CERTBOT_FQDN=myhost.example.com` - This should be the same as `IOT_DASHBOARD_NGINX_FQDN`. + This should be the same as `IOT_DASHBOARD_NGINX_FQDN`. 3. `IOT_DASHBOARD_CERTBOT_EMAIL=someone@example.com` - This sets the contact email for Let's Encrypt. The script automatically accepts the Let's Encrypt terms of service, and this indicates who is doing the accepting. + This sets the contact email for Let's Encrypt. The script automatically accepts the Let's Encrypt terms of service, and this indicates who is doing the accepting. 4. `IOT_DASHBOARD_DATA=/full/path/to/directory/` - The trailing slash is required! This will put all the data files for this instance as subdirectories of the specified path. If this is undefined, `docker-compose` will print error messages and quit. + The trailing slash is required! This will put all the data files for this instance as subdirectories of the specified path. If this is undefined, `docker-compose` will print error messages and quit. 5. `IOT_DASHBOARD_GRAFANA_ADMIN_PASSWORD=SomethingVerySecretIndeed` - This needs to be confidential. Indeed this sets the *initial* password for the Grafana admin login.This should be changed via the Grafana UI after booting the server. + This needs to be confidential. Indeed this sets the *initial* password for the Grafana admin login.This should be changed via the Grafana UI after booting the server. 6. `IOT_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS` - This sets the Grafana originating mail address. + This sets the Grafana originating mail address. 7. `IOT_DASHBOARD_GRAFANA_INSTALL_PLUGINS=plugin plugin2` - This sets a list of Grafana plugins to install. + This sets a list of Grafana plugins to install. 8. `IOT_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME=demo` - Change "demo" to the desired name of the initial database that will be created in InfluxDB. + Change "demo" to the desired name of the initial database that will be created in InfluxDB. 9. `IOT_DASHBOARD_MAIL_HOST_NAME=myhost.example.com` - This sets the name of your mail server. Used by Postfix. + This sets the name of your mail server. Used by Postfix. 10. `IOT_DASHBOARD_MAIL_DOMAIN=example.com` @@ -333,10 +313,10 @@ If migrating from an older version of the dashboard that used Apache, you'll nee - Run the script as below. - ```bash - chmod +x htpasswd_migration.sh - ./htpasswd_migration.sh - ``` + ```bash + chmod +x htpasswd_migration.sh + ./htpasswd_migration.sh + ``` - This script creates one `htpasswd` for each of the controlled services, and then copies them(`node-red_htpasswd`, `query_htpasswd`) to appropriate files as below. @@ -352,53 +332,74 @@ If migrating from an older version of the dashboard that used Apache, you'll nee 1. Log into the Nginx docker container. - ```console - $ docker-compose run nginx /bin/bash - # - ``` + ```console + $ docker-compose run nginx /bin/bash + # + ``` If this fails with the message, `ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?`, then probably the user ID is not in the `docker` group. To fix this, `sudo adduser MYUSER docker`, where "MYUSER" is the login ID. Then (**very important**) log out and log back in. 2. Create `.htpasswd` files for node-red and influxdb queries authentication. - ```bash - touch /etc/nginx/authdata/influxdb/.htpasswd - touch /etc/nginx/authdata/nodered/.htpasswd - chown www-data /etc/nginx/authdata/influxdb/.htpasswd - chown www-data /etc/nginx/authdata/nodered/.htpasswd - ``` + ```bash + touch /etc/nginx/authdata/influxdb/.htpasswd + touch /etc/nginx/authdata/nodered/.htpasswd + chown www-data /etc/nginx/authdata/influxdb/.htpasswd + chown www-data /etc/nginx/authdata/nodered/.htpasswd + ``` 3. Add user logins for node-red and influxdb queries. Make `USERS` be a list of login IDs. - For Node-red authentication: - ```bash - export USERS="tmm amy josh" - for USER in $USERS; do \ - echo "Set password for "$USER; \ - htpasswd /etc/nginx/authdata/nodered/.htpasswd $USER; \ - done - ``` + ```bash + export USERS="tmm amy josh" + for USER in $USERS; do \ + echo "Set password for "$USER; \ + htpasswd /etc/nginx/authdata/nodered/.htpasswd $USER; \ + done + ``` - For Influxdb queries: - ```bash - export USERS="tmm amy josh" - for USER in $USERS; do \ - echo "Set password for "$USER; \ - htpasswd /etc/nginx/authdata/influxdb/.htpasswd $USER; \ - done - ``` + ```bash + export USERS="tmm amy josh" + for USER in $USERS; do \ + echo "Set password for "$USER; \ + htpasswd /etc/nginx/authdata/influxdb/.htpasswd $USER; \ + done + ``` 4. Exit Nginx's container with Control+D. +#### Set up the `MQTTs` User Credentials + +To access mqtt channel, user needs credentials to access it. + +1. Log into the mqtts docker container. + + ```console + $ docker-compose run mqtts /bin/bash + # + ``` + +2. In the container, Create username and password using `mosquitto_passwd` command. ( option `-c` - Create a new password file. If the file already exists, it will be overwritten. so `-c` should be used for the first user creation. please avoid `-c` for the second user creation onwards. ) + + ```bash + # mosquitto_passwd -c /etc/mosquitto/credentials/passwd + Password: + Reenter password: + ``` + +3. Close the connection to mqtts (Ctrl+D). + ### Start the server 1. Starting things up in "interactive mode" is recommended as a first step. - ```bash - docker-compose up - ``` + ```bash + docker-compose up + ``` This will show the log output from the various services. It will also be pretty clear if there are any issues. @@ -476,26 +477,77 @@ my-new-database $ ``` -### MQTT User Credentials setup +### Test MQTT Channels -To access mqtt channel, user needs credentials to access it. +- To test the `MQTT over TCP` and `MQTT over TLS/SSL` channels user can use [mosquitto client](https://mosquitto.org/download/) tool. -1. Log into the host machine + - MQTT over TCP -2. Change the directory (cd) to `/opt/docker/dashboard.example.com`. + `Subscribing` mqtt channel on topic `test` -3. log into the mqtts docker container. + ```bash + mosquitto_sub -h testing-in.mcci.com -t test -p 1883 -u user1 -P pwd123 + + hello + ``` - ```bash - $ docker-compose exec mqtts /bin/bash - ``` + `publishing` on mqtt channel with topic `test` -4. In the container, set the user password. + ```bash + mosquitto_pub -h testing-in.mcci.com -m "hello" -t test -p 1883 -u user1 -P pwd123 + ``` - ```bash - # mosquitto_passwd -c /etc/mosquitto/credentials/passwd - Password: - Reenter password: - ``` + - MQTT over TLS/SSL + + `Subscribing` mqtt channel on topic `test` + + ```bash + mosquitto_sub -h testing-in.mcci.com -t test -p 8883 -u user1 -P tmm123 --capath /etc/ssl/certs/ + + hello + ``` + + `publishing` on mqtt channel with topic `test` + + ```bash + + mosquitto_pub -h testing-in.mcci.com -m "hello" -t test -p 8883 -u user1 -P tmm123 --capath /etc/ssl/certs/ + ``` + +- In order to test the "MQTT over Nginx proxy", the user can use the `mqtts web based client` [portal1](http://tools.emqx.io/) or [portal2](https://www.eclipse.org/paho/clients/js/utility/). + + *Using [portal1](http://tools.emqx.io/)* + + Connection Details + + ![mqtt_testing](assets/mqtt_nginx_1.png) + + `Subscribing` mqtt channel on topic `test` + + ![mqtt_testing](assets/mqtt_nginx_2.png) + + `publishing` on mqtt channel with topic `test` + + ![mqtt_testing](assets/mqtt_nginx_3.png) + + Full window + + ![mqtt_testing](assets/mqtt_nginx_4.png) + +- To test the `MQTT over WebSockets with TLS/SSL`, the user can use the `mqtts web based client` [Portal](http://www.hivemq.com/demos/websocket-client/). + + Connection Details + + ![mqtt_testing](assets/mqtt_web_1.png) + + `Subscribing` mqtt channel on topic `test` + + ![mqtt_testing](assets/mqtt_web_2.png) + + `publishing` on mqtt channel with topic `test` + + ![mqtt_testing](assets/mqtt_web_3.png) + + Full window -5. Close the connection to mqtts (Ctrl+D). + ![mqtt_testing](assets/mqtt_web_4.png) diff --git a/assets/mqtt_nginx_1.png b/assets/mqtt_nginx_1.png new file mode 100755 index 0000000000000000000000000000000000000000..908054146dc239baaaebaa6e5a8f7995bd0e01f3 GIT binary patch literal 36952 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 literal 0 HcmV?d00001 diff --git a/assets/mqtt_nginx_2.png b/assets/mqtt_nginx_2.png new file mode 100755 index 0000000000000000000000000000000000000000..84b97466b1946090cec1f4c2c36b033bac3de06c GIT binary patch literal 8089 zcmc(kXHb)0*Y2aDf(WQo=@5Dg9U%~;2@xRzp+gXm-h_YGs^ozR4s(4`B6CS633 z-g^;{-g|E^@0>Z$oH_6O=REJ6Gjl%dxo6+A@AYBd``YVwt@Y`prYhMz`g;HXfDEdp ztPKF%5V{^OiEm!NiM&UYb^W-3)K*mleCuXhxt;c`ZSj00e{vbY1P-_&6e+s?ec$) zIW=mZ0v&U!><^6xklHVxlsP&TKId42iJu7;*yFvjRHt#!ZHb)M(UQFyy~+xAwOd|T z|43=@*{TuSTV(OKnUV38cl|qcwAAerb%gVo_6yjr@>okC0?2JN9D4$mwL;k6J$Rr3 zU}FshC_bgS@$ntcP2w9`L=SGJ6SER2KYU93PYXUssrKb`c*|Oxr~Ar*lqmX^K=dp- zUJ2c;9WyUrs#+;hpw3)(CNm|qYIhWfr7Ld+S-?kNw(3}1K(+Y*mwlfu zkkz<-cPfcbTR6;yCRg)lCp*FpXs7GbFidIPp zpN{i;4H~k*s;aM}qXq~^Y!k$DPoZoir&UdNsfpML38QLoJnmuX@RV~q2T_Lp;h>zB zylka)$JIY^=-c1PHH@if-4(S%jqw*SRDX?BH+aOpu*fXFMWtbZcrVV$W=;g^ zxL<9mZqwJklF!HIIl2VGF@7Ws3O#p6MU5r32_<+Y97F>93tT7)80_%oImL{Z`zkA{ z$2)s?>pzX+)v-e4#<69GJ+6g8C0x@+o_c>KkhZwp%L#WY(<@d!!q?c{bYHZLp{sXw zKKR9D(~x0N6w2_N%olLV3CR zZL*pomv8vFu!(&4i`E$6(q>g>Sm%ixQZ))+vv>APbn1BM)DEZ$soIlGx!)FmAGn`1cnO1<&h+>rU>`CI%PN&B50}cEJh8e9L5RlrSIL5=~psK|^ za0(ob45LvkI>~EWG%zZfM5i#>JW)WrqL-#Q`L!)3=H$l<7Ohsz5X6>_Gml-$CB0@y zItsu6s`D2;Myo_vf(1MJ#L<`BZo{4VW9vM|uTQl68e;K?4n?el@tH!g&H*v_0qXZi zDU*fF+%2Wsv2>+hG@MaAZJ4^FO(0p9Yi*&+#Ll>tW#8hGUv(?bmD7LL11{x>bw;@ zhi^IuwO;QI``g<|exQKBQ$<&4h^ z(i*0}dDEz{>xAM%T$%bXS8$wFr_q;uJ8%d_Tx8N)RH-SWbwNwpYQ>B{GQ{+GiPr4! zsd(Bv*H5@$(Z;#eSWkjYpMft=Vna46G&{&?ayKfUUSr8RrxHSCdGLDbre+C&lyCpQBpDJApmlfPAb~SgxB2w5* zQ@d`dr=t=_%kf{Ddf1N;7OKICh2{l+k;ECZ^cRZ>0q}fXOxtS=e3e|!Mm$@FS=T*a)?_#eOP-6-{yJ_(%w|;6?!c$EHprRW z%hOL27spF@la_9P`D(kM_rt|r`%%|lg@j+n1{LbbZ>sy!2;aW&BuR(c8745XYTUP* zc+Mvv7EW#DzMb0?UR|lbo)g(MxnuPDAd(t8e*W^QuAf}WUmUhoYxpu)G3PDc32&T% z|Gjyx;K{j<%7LYo?1>--W-Jx^0+Y<=2C0!<{35S&$X^{L?rq*c+Rab1I=CfTtf>D- zciZNU8a@O12#IDxR2i~J{xgod2VjX<6rFJ2oCF!uxrIi%W0J9&>+^0s3`4Tebh4u7}Q&Q|H6T_qV z#6;&eKV7OldnSaP77>3aJrq-v#ifb1-yl5PAf5}P(%P(zdE^}qZJF}1roF_MI$EfVQ)%z*m;K~*Fmt%d(Cs!jKkSemVr$F& zROU(ngKB7(KW@ocAo;4X|GxR7^ccFst=<4UW{6b_%=WF_!WsCrZ2j&HNQo89nqT)1 zKu9{(3izdPGU?keF?-Gdb5ncWy}DW}@Z9eBu2^yx59_5ZS>Na>4|)dqtJo9QXd9IM z=we07rpz)f@jPc#4-31T`s9B;(6X_e3sX`t&sxwdaPU61c{NB)qXv|fakp;)j@86( z`mSw1KFs`#ws;5mm~u$t^JF~*0uJa+-BkIn5FYb1_QUiKlcR{E6I69z^NsxR8~ z-XeYK)-_%!HP_;1YTgfAi+}BE&VsA7o^QEd=|CkfMMn-Rt zR+G9=^i*k!Zq4douC5UR5Ph&FPl&3M}iuBUL ze!9I(wn+g?!k*+UM+mCqg3m1*S=#@+DFue?ka ztjcHdIAik9dFU{0*+c{iB~ug1V{>*Fk(sqK=y_JZp2kvWER!>?tCBQS+D2_(XFm}w z=93l2>uJ-Lup3yYo??nKb`}ogm+GLVwrW}IOrYp!yL?aEmw36c=9yCGy+hB?j9OeaGw~}dbezF{ zkH-c%EmOmOvX@ImwbgW0^>WmIHZgd~6P#MCSl=;dTkf7K6vn|nz{u*9j^aB}34YLS z0$+<0lII>as+u}Y;B>Etn>H^^Y_NEdT5i~Mz%Cp*G!Tw{RI2ml3}P}I79+J~N@`vL zXPOlWrH(6Zdb;XBMX*m7Hs7N$&5ckmZPzWm&f-Ppv0YZ#gf9IK0#!gl=hDm>Dxbyl z|7t0Bg-+DG)N0K(NPs5K-Lo)Q!b}Dj(PxtDz}Lb{+bx@vj^juxuJ=+!?2v-;@_05i ztsX-qyjm5Nel@?Uj?P(ryBU%W0Zn5VEA`>u45p2;HQLaydFb{XcHi+9AIPzFqSm{^{43{)@ccUn+m1{H|IsHh(Jy8| z&>P>eiN52{?%PtQVbcQcu@bqzyixn$|75iOQD42;fA^&!BmgGYE#b>3?yB2p54zOY z?ffPHg81KYaQ_(i-}Zq2C4$!miw784kpR0fTJ7Q`oU%%Pt|bKk%`X(D*ZjHq0selJ z_cWh)Ch&iEoQ-6_9BxU_D7-zpi#@Tn!Im+_xpMp#znL6ODcZCa+)^q0;a;RNvx3Lm zH8z~<+Syn;`{y=2+z-*jxlgrJ{kD+V=IZY|NDH1dzXK?1EY&IyG}xP*yuCZp{y_$E z^lNxYk12=qDv>tEuKu04sKaj8?doLIL-jvp%+*idbis8-r@ z6wE}*%Qtd&`4Ppln0a9jSTE+N(*J1#&7Cc1#wX0shKAhX18jpIbomkeb31CdME zuS(ODH!LY@hC3^yzx!)U+)AHY>Vc7hJ_o^}h%A>I<+qLHNf5S>gu;_@h0p^O834Cf z#WRe1;%&EX(cu?&*p~D@>vv}i>GM`EEq+)eHt7M}yR)Jyzhhd*dP>sETQ-Tlayh`c zhChFZdPoKGm{vJEAX{F#qCo9WL%-}Wz}`&p{Ku3mU9*_S`y<|OBQvS2xfR_|eW53< zvw0QM72MHy?yX2?K29)#ma$UE^6P$EzT?+&9kLl_e3(VApF(2ysA;jLwrVo#Z(o^- z3T(_<<4xw$q8G!87;(biaqi4I2EodDz~)RNPh=Rmz?8*f+dijBZOKEnKfIhrp;t4c ztGiNL@zz}9hq6wUg>uobud?!vmed6iB|#C9!_hS+GDOW=b^#v(41p9g5N5^-bGd36 zq?8M`%wVTgglD$ia`(Ip_JOwDDH79FQN$cuom=|c$P%R-N8U!X1&uu_=J6IB+nf2W z0vmL;MAA57Xb6@i1t1slUX>*~z<;}v@~;SWf1|1|>b@So zy2ve+qHo;~0SCPxA;yY1rq||RO{-4#$THeq+j9-@#rFWp?R!(r+QO=np7^+(xoxp{ zAT6mp7?zy*7Y4L@JIj+?6>59w7xZG(|CotK!fJkVX0WLwA`7$H+}F5LRKC?h{4V@9 zTO(f#=lGon=o``33to8*c_;-8dhRpL4FFk~$D=?iISC0^+G`D8+{yDj#i*xrvWeI_ z*N@qLhlty%HK6?#hD>aoWs!O3a6{Kmo8jVC2Mz-@yZXqQGVX}%-K$GiG^#6t2D(a1 zCwG*E(z@ZRwFP`ly3>rwPN!p!tCuMC#?F??SSL|;8r^7&xx??SvLV=D!|J9}yt zvtsnz?yb_E2cp6wyXQw#%O%^>q31fiaK!26Uc=)-{jxxy zU+QLjBpxi-jZ`}y^p!JA>>|~aK$ovo?~DXw%PoVTO3Y~cRQJu~Z(l%bbp7|F>rP4H zVe%S3Qo|B$m&PPEer~v2lY#^LSnRizRlG8XP0Q*U@p? zxC+GR0fb892DI`Nvb=qq3TJ`{Muqn1~gp#YSg)IR!ky1`Nls~?7F)kJU$dU-GY zO@$#$wK7G#RnBj^CRe`-t~MCLaI}hizryB9P;LYUHAJ(gUd4GNy)8C;BNhC zLoMMR28E`ff2i#Br=aCxVI4_ z`8A64>?b>>{NXLu9>yEGBUM%~HS$E46VD%=)cnkw_C2@bCU?1DXJ4|6X?VuP4~2nV zv+C=-v)_Z+*A5-KmNr-!oFj(&dGMooqssblJ}La>;|i1jtI5!B8HnrmS^1tg^ma{A zWef=<%p}?G^pcD93oWBv3wK^tPZ6Vx6|2Iz=-GG|G$5ntm_YtLqam-VDx%&Q*`Yz8 z2YJ01Ihs$T1nW8Tl76o8Hci}O{h{e8_ct3TWwo2>@z96fu5EI(dBV`$E<7xK;)LY= z@UM8sKCBVL{rm8fOELS0peI&2r~C4^w?e9WC|}SZwwk+jBL%xcglV!- zmp{%uq5U5h2+lHvA)UUp1Fy_duvTP$^PEZS={NKREa+)hD%x*?Zo-|^_3#&I2(!xH zUyHY~_BH!y4?J_FF1{3WI6KyxA2n7sLT(Ytd8cBP9=H8yRwqN(-|{;>(9K`zqO0O} zaJCaMsSy!h?%u3DZ61rAm~wic^5JXDVb0BzV&89tOTGp=ZpCTZXlD_N9}nF8kKJ2| zP+C$o{l`e1SSZ>kRqteftB8JmT8ZT@tu@TqtWuTgMlJqbio)%8-~N9kB*dBO6c<%p zTef#ektJeQXXeInhBE-s+F{&`m=M_CZQ5eCrT#~R-H3DH@kV|)_c$;0h72U-;V7SX zoVatFp6(x4zz#5(SL<2BW~AOXl(jz17eA#xZ66WYcW7`Ky5Gaav0WKUbE(%v+S|bv zdhaxBDYM3(vR(Z~h9$;XkEzn3+|j5wEQL7{+lzBMGq{?PJfn#(=vl1YpW@W}DmWXY zT|FMehsyX}>cf7m2gZy0y2&_N- z%5h5fs)0arP;}w3W_u{)cN(yX81HPE@;Qi>h6N!ZpI+mv7CUvMJhCqg9b^anrziwk zbipJWwFlBpnCVY z_tcWqf^|aX=?Zc6O^>a2Pa#%)`dD^uG52=*Pm;|G5lh@;$?PtVL|*Wl4xkA6_vI+G z%4mhX*_?2#`kxOcRUAA^oRaMrn#%fz8pig;&d5our>W1Mo$lriGcD=XNzcY@9(M&9 zK^ST&({o-)@#G~*`lrtBOCapY>e^nb(Hn-_4e%X_ff>^}vR!s_IradL&IpouGw}~p z0((O;*FtMVFKocyu*Slu^JkcL2lwA&_gB4RCinZ2ZUNbsiOE^J-ES^DRjT}yxa~5DuWFE>-SK4~BK%t~@byog>}#HK*r3sqqiG3p z5+4};?817rkb(Q9&vg`<)=%NSxTi6GVF?_ykLc-`K*U`>UyR1~oIyc}oxD$^cuLA2 zrq++gM7S%-z{Tv007;am;!I?OL9QO6t-xvhea*V_?V7u2vxh%O+5V{#ay-&l_ZZLb zO@-&b>BaW{3i!Uy>IX+W1E$>k&XhA`4;hj;9x?}jKK{Fnw145>|E!R}951kq@51o zoYL)dyYhAdtqOd-qr0!1qvN@Ldj|uM-BBtPS||FM6E3pCcx@ED>qhgu?}Pny^I`o&oAvb>&>&~|*h?Wf~6$E!o);Rk1WMa<54sirZ# z8426D;pvf*iDm!bcK3{!7sY3dmq)Ppsp+f!N=~=SAXPcK(fwOcZjeug^Li?N@=9xe z4T-95>GU&|c>{N*>(T3&hJst`l|aqo6=#BVBeN7lc>+$eGa+r_ILy&v$yvIAnV+6a z^{Lh{C8ru_-*!QTcV@@Q?1lV~#dPrMhOK<*O0s1`$xaZ|Be>z9CTZ?;zT1t@iAB&< zf8>iqgW_5}&z*2OAy07OJUI^(DCo;07bfm4y>#?upWJO*_z|PJs&1o*)@$A1p>;)d z2e|cVMQ;Stpokd$WZCen80R}6YqOkVi@I4$yMlb4Sg%`Qw=bfi^NNV!ER#*_{M8DY zFsmm?gUqV^RZX(dB106RYa&$So^`H@-#eqW67hz6O z>ci3nj6b-XDsOJ3`xCgI+|}R*9#N zn<}$rwYi5|hNzHzpGQ5otc#+dib5vmx;cE88esBoC!$8O>%_H;+kOoHzf{5vB39@X a#oK8bojUkO;_G%g0IH&?{7v!IhyMVtc@zl% literal 0 HcmV?d00001 diff --git a/assets/mqtt_nginx_3.png b/assets/mqtt_nginx_3.png new file mode 100755 index 0000000000000000000000000000000000000000..033d1b19d7e4b165cc437f679ebd0da03cd022c3 GIT binary patch literal 4965 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 literal 0 HcmV?d00001 diff --git a/assets/mqtt_nginx_4.png b/assets/mqtt_nginx_4.png new file mode 100755 index 0000000000000000000000000000000000000000..ea1abc4131a4fabed9a9ee9106be041948500c89 GIT binary patch literal 45361 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 KWdC9E=l=p)#iO49 literal 0 HcmV?d00001 diff --git a/assets/mqtt_web_1.png b/assets/mqtt_web_1.png new file mode 100755 index 0000000000000000000000000000000000000000..18a7cdbbf57627235b526fbd48b08c3eb47cab77 GIT binary patch literal 11926 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 literal 0 HcmV?d00001 diff --git a/assets/mqtt_web_2.png b/assets/mqtt_web_2.png new file mode 100755 index 0000000000000000000000000000000000000000..d781ee5a2d4fcc2f9ceef8bf0f34b6e6bf32db50 GIT binary patch literal 5193 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 z zkP3H~6ro+bRv>R6F{_?nT6{IAX1FDitBA1{I@-K{YvC4aXex3jTqEdz@@=hG;`-k{? z5{PSqUOoWn-1&za08oMz7MSTu@#`Q zrW&MKHj*-`Y?MCqLQt$=JG9S{4ZEM8cGv2LIADX?3k_RAxM(xTIaG>m7i&*RphVc! z$${(JKZ7K-7*rQCmm$-#0Kg6c5kvtYrAm)9e*sP*ik|%R+CX!lh2x zSyP{cQ>zbh!b0rI%s7@_zRuCvB-B<|Ej}n3AA1WnyjQutP($=8c>&o{rA6#4nAeH< zX+NEO)bc0^!(xkk=yG>e!dhI3jn~Iru<9D566Rc3*h`A(3Ji%mi6HMHiEQUxvbI4a z0U-75JZRZ>Jv~IAvv~UORe*PGSjA#zF^Gs6%ONtqoy{?`N;ei7*<`5r(od^vlB`^C z>7oqua&N1X#dM^VyeOO_qainv#B3rL|jgn>SoMxYzpHjd2p?X;_1H3Y^t60yz9U@&! zPoBxR54wKsg2n?g)4eD_v!9Z)O{C{oY)_9RE@GA%5I%&OW2EVOWwF=5E{P4lJRXrL z6tuZB75?s}sDRTh= z&z0Qn6b5o7#YHnqd=8O-(#)a063=jn%;J`?AIM$c4?vH!2%!7`|7WB8??BB0<(dpO@Bj9l j;h)!vsQGQ?h;j7X^$B%?*mrpziz!kOLk) literal 0 HcmV?d00001 diff --git a/assets/mqtt_web_4.png b/assets/mqtt_web_4.png new file mode 100755 index 0000000000000000000000000000000000000000..13385c439b9b6e0a03a63d669aaa4d1c97fa5fd6 GIT binary patch literal 27666 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 Date: Tue, 8 Dec 2020 14:50:18 +0530 Subject: [PATCH 48/65] docs update --- README.md | 5 -- SETUP.md | 126 +++++++++++++++++------------ assets/Connection-architecture.png | Bin 106256 -> 46997 bytes assets/mqtt_web_4.png | Bin 27666 -> 38836 bytes 4 files changed, 74 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 5c023d6..d87fddb 100644 --- a/README.md +++ b/README.md @@ -214,11 +214,6 @@ MQTT over TLS/SSL | https://dashboard.example.com:8883 | Username/Password come WebSockets over TLS/SSL | https://dashboard.example.com:8083 | Username/Password come from mosquitto’s configuration (password_file) MQTT over TCP protocol (not secure) | http://dashboard.example.com:1883 |Username/Password come from mosquitto’s configuration (password_file) -- To test the above channels (other than "MQTT over Nginx proxy"), the user also will need a [mosquitto -client](https://mosquitto.org/download/) tool. - -- In order to test the "MQTT over Nginx proxy", the user should use the [mqtt web portal](https://www.eclipse.org/paho/clients/js/utility/) tool. - ## Setup Instructions Please refer to [`SETUP.md`](./SETUP.md) for detailed set-up instructions. diff --git a/SETUP.md b/SETUP.md index 5360cf3..31f0c55 100644 --- a/SETUP.md +++ b/SETUP.md @@ -3,7 +3,29 @@ -autoauto- [Notes](#notes)auto- [Cloud-Provider-Specific Setup](#cloud-provider-specific-setup)auto - [On Digital Ocean](#on-digital-ocean)auto - [Create droplet](#create-droplet)auto - [Configure droplet](#configure-droplet)auto- [After server is set up](#after-server-is-set-up)auto - [Create and edit the .env file](#create-and-edit-the env file)auto - [Set up the Node-RED and InfluxDB API logins](#set-up-the-node-red-and-influxdb-api-logins)auto - [Migrating `htpasswd` from Apache to Nginx (if required)](#migrating-htpasswd-from-apache-to-nginx-if-required)auto - [Creating new `htpasswd` files](#creating-new-htpasswd-files)auto - [MQTT User Credentials setup](#mqtt-user-credentials-setup)auto - [Start the server](#start-the-server)auto - [Restart servers in the background](#restart-servers-in-the-background)auto - [Initial testing](#initial-testing)auto - [Set up first data source](#set-up-first-data-source)auto - [Test Node-RED](#test-node-red)auto - [Creating an InfluxDB database](#creating-an-influxdb-database)autoauto + + +- [Notes](#notes) +- [Cloud-Provider-Specific Setup](#cloud-provider-specific-setup) + - [On Digital Ocean](#on-digital-ocean) + - [Create droplet](#create-droplet) + - [Configure droplet](#configure-droplet) +- [After server is set up](#after-server-is-set-up) + - [Create and edit the .env file](#create-and-edit-the-env-file) + - [Set up the Node-RED and InfluxDB API logins](#set-up-the-node-red-and-influxdb-api-logins) + - [Migrating `htpasswd` from Apache to Nginx (if required)](#migrating-htpasswd-from-apache-to-nginx-if-required) + - [Creating new `htpasswd` files](#creating-new-htpasswd-files) + - [MQTT User Credentials setup](#mqtt-user-credentials-setup) + - [Start the server](#start-the-server) + - [Restart servers in the background](#restart-servers-in-the-background) + - [Initial testing](#initial-testing) + - [Set up first data source](#set-up-first-data-source) + - [Test Node-RED](#test-node-red) + - [Creating an InfluxDB database](#creating-an-influxdb-database) + - [Test MQTT Channels](#Test-MQTT-Channels) + + + @@ -32,19 +54,19 @@ As an initial step, a cloud provider is required and Docker and Docker-Compose m 3. Discover > Marketplace, search for `Docker` 4. This page will be redirected: - + 5. Press "Create" 6. Select the standard 8G GB Starter that is selected. -7. Choose a datacenter; _New York is selected in the example created for this document._ +7. Choose a datacenter; *New York is selected in the example created for this document.* 8. Additional options: none. 9. Add the SSH keys. -10. Choose a host name, _e.g. `passivehouse-ecovillage`._ +10. Choose a host name, *e.g. `passivehouse-ecovillage`.* 11. Select the project. @@ -89,7 +111,7 @@ As an initial step, a cloud provider is required and Docker and Docker-Compose m username@host-name:~$ ``` -8. Drop back to root, and then copy the authorized_keys file to  `~username`: +8. Drop back to root, and then copy the authorized_keys file to  `~username`: ```bash mkdir -m 700 ~username/.ssh @@ -139,15 +161,15 @@ The following instructions are essentially independent of the cloud provider and 1. Clone this repository. - ```bash - git clone git@github.com:mcci-catena/docker-iot-dashboard.git /opt/docker/dashboard.example.com - ``` + ```bash + git clone git@github.com:mcci-catena/docker-iot-dashboard.git /opt/docker/dashboard.example.com + ``` 2. Move to the directory populated in step 1. - ```bash - cd /opt/docker/dashboard.example.com - ``` + ```bash + cd /opt/docker/dashboard.example.com + ``` 3. Get a fully-qualified domain name (FQDN) for the server, for which the DNS can be controlled. Point it to the server. Make sure it works, using "`dig FQDN`" -- get back an `A` record pointing to your server's IP address. @@ -163,39 +185,39 @@ Then, edit the .env file as follows: 1. `IOT_DASHBOARD_NGINX_FQDN=myhost.example.com` - This sets the name of the resulting server. It tells Nginx what it's serving out. It must be a fully-qualified domain name (FQDN) that resolves to the IP address of the container host. + This sets the name of the resulting server. It tells Nginx what it's serving out. It must be a fully-qualified domain name (FQDN) that resolves to the IP address of the container host. 2. `IOT_DASHBOARD_CERTBOT_FQDN=myhost.example.com` - This should be the same as `IOT_DASHBOARD_NGINX_FQDN`. + This should be the same as `IOT_DASHBOARD_NGINX_FQDN`. 3. `IOT_DASHBOARD_CERTBOT_EMAIL=someone@example.com` - This sets the contact email for Let's Encrypt. The script automatically accepts the Let's Encrypt terms of service, and this indicates who is doing the accepting. + This sets the contact email for Let's Encrypt. The script automatically accepts the Let's Encrypt terms of service, and this indicates who is doing the accepting. 4. `IOT_DASHBOARD_DATA=/full/path/to/directory/` - The trailing slash is required! This will put all the data files for this instance as subdirectories of the specified path. If this is undefined, `docker-compose` will print error messages and quit. + The trailing slash is required! This will put all the data files for this instance as subdirectories of the specified path. If this is undefined, `docker-compose` will print error messages and quit. 5. `IOT_DASHBOARD_GRAFANA_ADMIN_PASSWORD=SomethingVerySecretIndeed` - This needs to be confidential. Indeed this sets the *initial* password for the Grafana admin login.This should be changed via the Grafana UI after booting the server. + This needs to be confidential. Indeed this sets the *initial* password for the Grafana admin login.This should be changed via the Grafana UI after booting the server. 6. `IOT_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS` - This sets the Grafana originating mail address. + This sets the Grafana originating mail address. 7. `IOT_DASHBOARD_GRAFANA_INSTALL_PLUGINS=plugin plugin2` - This sets a list of Grafana plugins to install. + This sets a list of Grafana plugins to install. 8. `IOT_DASHBOARD_INFLUXDB_INITIAL_DATABASE_NAME=demo` - Change "demo" to the desired name of the initial database that will be created in InfluxDB. + Change "demo" to the desired name of the initial database that will be created in InfluxDB. 9. `IOT_DASHBOARD_MAIL_HOST_NAME=myhost.example.com` - This sets the name of your mail server. Used by Postfix. + This sets the name of your mail server. Used by Postfix. 10. `IOT_DASHBOARD_MAIL_DOMAIN=example.com` @@ -313,10 +335,10 @@ If migrating from an older version of the dashboard that used Apache, you'll nee - Run the script as below. - ```bash - chmod +x htpasswd_migration.sh - ./htpasswd_migration.sh - ``` + ```bash + chmod +x htpasswd_migration.sh + ./htpasswd_migration.sh + ``` - This script creates one `htpasswd` for each of the controlled services, and then copies them(`node-red_htpasswd`, `query_htpasswd`) to appropriate files as below. @@ -332,43 +354,43 @@ If migrating from an older version of the dashboard that used Apache, you'll nee 1. Log into the Nginx docker container. - ```console - $ docker-compose run nginx /bin/bash - # - ``` + ```console + $ docker-compose run nginx /bin/bash + # + ``` If this fails with the message, `ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?`, then probably the user ID is not in the `docker` group. To fix this, `sudo adduser MYUSER docker`, where "MYUSER" is the login ID. Then (**very important**) log out and log back in. 2. Create `.htpasswd` files for node-red and influxdb queries authentication. - ```bash - touch /etc/nginx/authdata/influxdb/.htpasswd - touch /etc/nginx/authdata/nodered/.htpasswd - chown www-data /etc/nginx/authdata/influxdb/.htpasswd - chown www-data /etc/nginx/authdata/nodered/.htpasswd - ``` + ```bash + touch /etc/nginx/authdata/influxdb/.htpasswd + touch /etc/nginx/authdata/nodered/.htpasswd + chown www-data /etc/nginx/authdata/influxdb/.htpasswd + chown www-data /etc/nginx/authdata/nodered/.htpasswd + ``` 3. Add user logins for node-red and influxdb queries. Make `USERS` be a list of login IDs. - For Node-red authentication: - ```bash - export USERS="tmm amy josh" - for USER in $USERS; do \ - echo "Set password for "$USER; \ - htpasswd /etc/nginx/authdata/nodered/.htpasswd $USER; \ - done - ``` + ```bash + export USERS="tmm amy josh" + for USER in $USERS; do \ + echo "Set password for "$USER; \ + htpasswd /etc/nginx/authdata/nodered/.htpasswd $USER; \ + done + ``` - For Influxdb queries: - ```bash - export USERS="tmm amy josh" - for USER in $USERS; do \ - echo "Set password for "$USER; \ - htpasswd /etc/nginx/authdata/influxdb/.htpasswd $USER; \ - done - ``` + ```bash + export USERS="tmm amy josh" + for USER in $USERS; do \ + echo "Set password for "$USER; \ + htpasswd /etc/nginx/authdata/influxdb/.htpasswd $USER; \ + done + ``` 4. Exit Nginx's container with Control+D. @@ -397,9 +419,9 @@ To access mqtt channel, user needs credentials to access it. 1. Starting things up in "interactive mode" is recommended as a first step. - ```bash - docker-compose up - ``` + ```bash + docker-compose up + ``` This will show the log output from the various services. It will also be pretty clear if there are any issues. @@ -476,7 +498,6 @@ my-new-database # ^D $ ``` - ### Test MQTT Channels - To test the `MQTT over TCP` and `MQTT over TLS/SSL` channels user can use [mosquitto client](https://mosquitto.org/download/) tool. @@ -551,3 +572,4 @@ $ Full window ![mqtt_testing](assets/mqtt_web_4.png) + diff --git a/assets/Connection-architecture.png b/assets/Connection-architecture.png index 7d7d12fbdce87f541cdcbe32ef0c89cc55e8cac6..dd423fe984f7749268368cb816275e0fc174960f 100644 GIT binary patch literal 46997 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 U)QiqWd?-&7!+pE+cDbDUf2Wc-djJ3c literal 106256 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%0D5ipQCpIag7bWcUm)U5$^*LswA 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 literal 27666 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 Date: Tue, 8 Dec 2020 14:55:59 +0530 Subject: [PATCH 49/65] docs update --- SETUP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SETUP.md b/SETUP.md index 31f0c55..e4a4cfa 100644 --- a/SETUP.md +++ b/SETUP.md @@ -11,7 +11,7 @@ - [Create droplet](#create-droplet) - [Configure droplet](#configure-droplet) - [After server is set up](#after-server-is-set-up) - - [Create and edit the .env file](#create-and-edit-the-env-file) + - [Create and edit the .env file](#Create-and-edit-the-.env-file) - [Set up the Node-RED and InfluxDB API logins](#set-up-the-node-red-and-influxdb-api-logins) - [Migrating `htpasswd` from Apache to Nginx (if required)](#migrating-htpasswd-from-apache-to-nginx-if-required) - [Creating new `htpasswd` files](#creating-new-htpasswd-files) From b475c076d5593cbf7b797795f21337177ce75618 Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Tue, 8 Dec 2020 15:00:54 +0530 Subject: [PATCH 50/65] docs update --- SETUP.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SETUP.md b/SETUP.md index e4a4cfa..a559091 100644 --- a/SETUP.md +++ b/SETUP.md @@ -507,7 +507,7 @@ $ `Subscribing` mqtt channel on topic `test` ```bash - mosquitto_sub -h testing-in.mcci.com -t test -p 1883 -u user1 -P pwd123 + mosquitto_sub -h dashboard.example.com -t test -p 1883 -u user1 -P pwd123 hello ``` @@ -515,7 +515,7 @@ $ `publishing` on mqtt channel with topic `test` ```bash - mosquitto_pub -h testing-in.mcci.com -m "hello" -t test -p 1883 -u user1 -P pwd123 + mosquitto_pub -h dashboard.example.com -m "hello" -t test -p 1883 -u user1 -P pwd123 ``` - MQTT over TLS/SSL @@ -523,7 +523,7 @@ $ `Subscribing` mqtt channel on topic `test` ```bash - mosquitto_sub -h testing-in.mcci.com -t test -p 8883 -u user1 -P tmm123 --capath /etc/ssl/certs/ + mosquitto_sub -h dashboard.example.com -t test -p 8883 -u user1 -P tmm123 --capath /etc/ssl/certs/ hello ``` @@ -532,7 +532,7 @@ $ ```bash - mosquitto_pub -h testing-in.mcci.com -m "hello" -t test -p 8883 -u user1 -P tmm123 --capath /etc/ssl/certs/ + mosquitto_pub -h dashboard.example.com -m "hello" -t test -p 8883 -u user1 -P tmm123 --capath /etc/ssl/certs/ ``` - In order to test the "MQTT over Nginx proxy", the user can use the `mqtts web based client` [portal1](http://tools.emqx.io/) or [portal2](https://www.eclipse.org/paho/clients/js/utility/). From 13b65ab9ccfb3545719c3efc2535b4b26f1ed6fc Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Tue, 8 Dec 2020 19:54:48 +0530 Subject: [PATCH 51/65] updating setup.md --- SETUP.md | 70 +++++++++++++++++++++++++++++++++--- assets/graf-mail_test_1.png | Bin 0 -> 13505 bytes assets/graf-mail_test_2.png | Bin 0 -> 38304 bytes assets/graf-mail_test_3.png | Bin 0 -> 30969 bytes assets/postfix_node_1.png | Bin 0 -> 48795 bytes assets/postfix_node_2.png | Bin 0 -> 18541 bytes assets/postfix_node_3.png | Bin 0 -> 14069 bytes 7 files changed, 66 insertions(+), 4 deletions(-) create mode 100755 assets/graf-mail_test_1.png create mode 100755 assets/graf-mail_test_2.png create mode 100755 assets/graf-mail_test_3.png create mode 100755 assets/postfix_node_1.png create mode 100755 assets/postfix_node_2.png create mode 100755 assets/postfix_node_3.png diff --git a/SETUP.md b/SETUP.md index a559091..1e4fb04 100644 --- a/SETUP.md +++ b/SETUP.md @@ -22,7 +22,8 @@ - [Set up first data source](#set-up-first-data-source) - [Test Node-RED](#test-node-red) - [Creating an InfluxDB database](#creating-an-influxdb-database) - - [Test MQTT Channels](#Test-MQTT-Channels) + - [Test Postfix Mail setup](#Test-Postfix-Mail-setup) + - [Test MQTT Channels](#Test-MQTT-Channels) @@ -498,6 +499,68 @@ my-new-database # ^D $ ``` + +### Test Postfix Mail setup + +- Testing Mail setup on `Grafana` + 1. Click on "Bell icon" and click the "Notification channels" option as shown below + + ![grafana_mail_testing](assets/graf-mail_test_1.png) + + 2. Click "Add Channel" as shown below + + ![grafana_mail_testing](assets/graf-mail_test_2.png) + + 3. Input the required info as shown below. *Be sure to select type as `Email`*. Click `Test" button finally to send test mail. + + ![grafana_mail_testing](assets/graf-mail_test_3.png) + +- Testing Mail setup on `Influxdb` and `Postfix` + + Mail setup on `Influxdb` and `Postfix` can be tested using `mail` command, by logging into their container. + + **Influxdb** + 1. Log into the `Influxdb` docker container + + ```bash + docker-compose exec influxdb bash + + root@influxdbbackup:/# mail -s "Testing mail from Influxdb" cmurugan@mcci.com + Cc: + Testing1 + ``` + + **Postfix** + + 1. Log into the `Postfix` docker container + + ```bash + docker-compose exec postfix bash + + root@dashboard:/# mail -s "Testing mail from Postfix" cmurugan@mcci.com + Cc: + Testing1 + ``` + +- Testing Mail setup on Node-red + + Mail setup on Node-red can be tested by deploying a node-red flow on  as shown below. + + ![nodered_mail_testing](assets/postfix_node_1.png) + + *Inject node's configuration* + + ![nodered_mail_testing](assets/postfix_node_2.png) + + here, + - `msg.payload` will be act as `mail body`. + - `msg.topic`will be act as `subject`. + - `msg.from` will be act as `Sender` + + *Email node's configuration* + + ![nodered_mail_testing](assets/postfix_node_3.png) + ### Test MQTT Channels - To test the `MQTT over TCP` and `MQTT over TLS/SSL` channels user can use [mosquitto client](https://mosquitto.org/download/) tool. @@ -523,7 +586,7 @@ $ `Subscribing` mqtt channel on topic `test` ```bash - mosquitto_sub -h dashboard.example.com -t test -p 8883 -u user1 -P tmm123 --capath /etc/ssl/certs/ + mosquitto_sub -h dashboard.example.com -t test -p 8883 -u user1 -P pwd123 --capath /etc/ssl/certs/ hello ``` @@ -532,7 +595,7 @@ $ ```bash - mosquitto_pub -h dashboard.example.com -m "hello" -t test -p 8883 -u user1 -P tmm123 --capath /etc/ssl/certs/ + mosquitto_pub -h dashboard.example.com -m "hello" -t test -p 8883 -u user1 -P pwd123 --capath /etc/ssl/certs/ ``` - In order to test the "MQTT over Nginx proxy", the user can use the `mqtts web based client` [portal1](http://tools.emqx.io/) or [portal2](https://www.eclipse.org/paho/clients/js/utility/). @@ -572,4 +635,3 @@ $ Full window ![mqtt_testing](assets/mqtt_web_4.png) - diff --git a/assets/graf-mail_test_1.png b/assets/graf-mail_test_1.png new file mode 100755 index 0000000000000000000000000000000000000000..f46a915ad4c23cec7d16c24ad4a1eb975d98381d GIT binary patch literal 13505 zcmV;yG(O9TP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>DG*(GOK~#8N?R^Pg zOxOPZ&At&$h?1msEzwru5!#o~hiWOMsG`+aO0~7M)LIlp6|JRDRg0!-d0wfl(yI0$ ze(z7T5>G{1Ya>yFs1VsR|L=0{ojZ5#OlFcvB+SS0o$vXc?>YC}b3W&L&%HC5acLA> zBdgF?syZ+j3?Og(mFWU6E-oxl&_Bfl|0yH%T0!?;C<s*}LQY(zT=8*UnM*M3SC+pijpj>B^aHb8Zv~(_IPmj8`%CGxY%uV!xrn*dH;W zV`J&o(bz#})kJmsM^N{nQBAA4<(~cNq-9}KQp&Cgw!7-!<1OJw#- z-5U)V)~Y6Ixz{fLk#;`)`1hHY5~)Z*_eR5q0sEC&zE7^}*0P$E`qS5&my<(Pfg`6$ znRHivsr&%mE7UJ7pt>ei7z|Qzv7xwF`V_QcJ@emFGgJdwN z<#(SiWXn8~6%U>--DEcuE>#Wom-}o%`{kQ}f55q7(9DX~T)vD&fk7?V;uDHy!>#nj7 z9#mB;J2OjIWQR(fYyz(VPIdr>rV6m%LDZ*4)FZ1-}lvrS;7M_z6Yo{-J#_wn(&SzL{546(Fy z2C7^Taetc!YQT=f&Ba|wF2zL!H#1U`k8E3f;nF$b2q^mHO5*iQ|9Un2Jw05CT@ASz z7mg?FSbR0`$6n0w<&>d~Ex&!zrO4uD2A z9(}mBXYq}*-(0>bOi=N!I1lrDM~oB6Xgu^86gO>x>VNjRnHEvx&|s^ z?6+mRZ%^z;KKuCi-Zc2h#8$CiI0C@P$%#7)+a|&|aR51^nobKwfH8X)?|g9h=mqmW zzP>k${Xj7eE4{kl3nwQk8_cE#XVPq@&}a%H-DSnX0>GWm(I@bBF#M3&JCSz+wms(o zAM=wg5v8c&L{&m+el2!g+6uX{pdfX1p0|i2ZH`Ob$YwI>BQnOnds7UP{yl z1+rj-BDUB8W4|giu= z3X6d*Oc@j!?uab1-^JYkiSuOy1o)U&Ui0?xO-Vi;`}v9mbEeIjHXfAoXHSC>i|o4s znD@%TYasa56&tti_+(Oq$U7bl>IL8DdtXp3rQa|+oJ8JnxaSuYvLD8^m>`$}Qms&8 zgTrJ06CIyo>i=u~7w6BN$<56LBPg+}Kj8(??(ZGgvrKSIX92-oTZF>PeGhhhlno9* z)Z}&Q>&A(dBcB~GXx5J+>x4rghZ061e{&JWe)-E|lr7Wm7!3C zp^Ty0u5PeIfQ#a$+ZsUMLCH`fMwr$`*zQRH($hfT7x$`mK1w^P<_Hds{Z_!cAp4-| z6sxkqA-#R7^Mlo-wBvE%i`GT%Ovr}t?ZkbnN*j<{WMC#0yJ5%>i}e5$(B4NOw_s)6vQm0<3J7CpO_ z1`%>=8W&5gDJana03BBPY#mlSf%1GLpgwhzJWwdEvXP{NV}Cirk)8B?sZ$d_>3rgs z7bR)O|NWNl*{t;-{YO%rUh34q^ZJp+O<8>CFVAM3M=D=9e(Tus;S;9J zTK@6YlYgB*dEyFvCscmMi4&*OVI7zu`oVGi`mACtwZjY^3VOUUa|ak>lS_ZiK3>- z^zg36+-?r`k&{K(-k=`Thk#@+Y_CzGC&YX{4cz;P-YAu1g^Kz*<(5NXgokU~Kd~$8~iB4_K{H@Ivx=J7Z*&l^ zS_g4x*{CTrfeoH`p@b6nr`+@k@Nj4=aqOp5Hnfar4Knug6|<&|x01ktoc~6ZtV8z% z9fF9iEnu5*`PlbydyVP9`E1FrVf#+PM?vEGG`K8;wmf&@z$??236_~qJUb^@t*YvHhc|9t`YmDsw^I@Mr@`vU04)=Gl5 zPfEUwo$b;$EI`Ws{pap$FGJwIJC`nitHBYO;+ z{n@e^v&O#_Day4-OuqtAJha2Bul4_j9iQyDxNh&M{Ayt@Etx)Q*q|Y=jb8k2huWgZ z37er|MhQfrosZ+5`Dix!x=FZ}7G>_JU)QLI{G{v2TfY|u85h?bI+gF)G{Wr3=kKfM z%=zNj_1cdQ8aHF|@XigTKfZr&{D%pmREz8_yAEVX_qTkiYlldDBiUBm-unKWuTNzM zgmvuMtw+}|DgH>BC~?9bSSN@{DSnUV@kuz{EtXbiQ|S;h>^0lp$vS`bbnNO+)YpAI zDCKzBLzQ;{pcxGA9;Nu^UEBAxcLu(`ez$Kc&wL`@T0N^x!GYN$7a4zd!U?NLyZiDX1osSb`1hHQxy{+t@i@_#rP5?Ji zVNlp@0ZO^75b;Sk+3$o7EU=$>&&h=S@B%(n<#RqxIAJq@(G)F3Ru9Pjd-8KWPB`IY ze-#2;tMPJuk3sjW*;wYWaPE969~?2SRR|8@ap~ZU{gn>Pgi6GJ2L;+n2x7m3KH=q^o<$8Kur@LbQ=dOU*fUfBj`>@R=7^a#yPSgL4d zHz9-!wuush(MOqS-C7!`uR<81RfjgVBVGl}9c+ZLhjLAI56w%paFK$m6<<1gJWu3H zhI8LvaX==OYD=T3C}_Y&z2<~XMIFTp{Vmk81?oei_UlMb_jIWw$5r-o!ymF=Y?h)@N+&{g_gd^rhK7% zj>jrgUP8r}8Z}DsnY@abH67^AnZa!P4uDe=&K4Xrb{G)ht{F?U4;3kWP^tiohcmMq zp?5fdQHL(ELa_HhY&UT*ccw!KqiO`WpNezQwSqMKFb{paM?ZlpRED6BO;lC(ySdr- zm&h(IF18%3{2)(|5zrs&M((if6*bVb1JKm6WCv(k(==tN9R-#e)U~tGO3UUBnpyzP zUd!_)irdP5+W9z9{(yPnq=sTtlG?~nvP!aK)P=f8?Qg{nNdt{t$*PTNSSnT9IVnbl zVmCK36kTmBHJt3P2vEQgiBa~MvjX*j?s}BvWS#7<2$U<=t>8`__l}?xC+lQ?1p($p zoyrvza}*m<-aRSH$vWBZ#JvkA`<=LV;bgxP_b#05cjDfKll^7InAQ6Zu6{#gDiEC( z?mYPI0<-Vjb;1rf*>4Y?{V49hzO|$92ZbDse=PcT-@yY)+WGHK-i$7%UkPwRMtQNn z#UtShm#$J0WJN*6V(Qc>V@8hxC2sdF6}Pl$%qW|J_w${?JoECJwjEwi80-MQDFbQj z8jIJ8n}=sbwSOY2>&qkN9n5di^W8-Qbk|u~-rsRT4F|J7xT*{){!Q^HON^g zit13I*XlKE)^7gy*Px6ZJ$CdMi)r(}ZTKk)zu}$3@{_kGT&o{Bw570>0wsUADLeJ# zcMBH9|LN5vva2xN8Qk^D%#rNx_u}AZd-t0pF%LhAzkWV_@>ocqKo*Qp)U)>s zppbh-;1U6p(`U{kCLObsE?q_+>!>y)vPFLKwvRuH|D$e1zc#{Zf@;xkeYTyiC*Q`- zdlrAtK$6~Adtm3{Q+?ZF3@n)g|>ZYN*d;?~XSY2mB-G!(z<8Lx)J*bmfi z6Zv>f4u0uso3{8Xghvwoo12pZ2^7T$4xm)n0_fWHX-J??G<=x(aTSFeR=L-&$go%jCp`ds@JP?>$~~m z#xHwsNc$%?pOU0g|Bh-ud>I#-0j>=J9VgA}R5$PR!R^9k6%V|z{N0{`rxy?G+I`@> z1kcD(i$~$sY|Mnw5z@i&J)d~`#l|y?9=seiK(z9<#sq>BP0Q8BS0xtE1Ja67$K>lu_#$q)JX%iQSGDXiUpw7n?BX^ z?O{)Zf!6%#Svy@=-!~T}gwqJN%seZ5Zw7ZCVv4xjcSSL*= zZ5&ul@`@PE^gVcBbcFG%1q=q<#*`dNZyufvcfHZwRwd_2xBfU7FMh}Z>v2V8juBuZ zbJJRQ;IZPk`^Msd(Q*BRSzn#xpaj{FHp*!cCFazya(B zqQ?w<4R$`Dd;8LlAUzU3_?6ciH+{&*7bgvrk)tQ@0$>MlhAI`X`RVt3Ur3-VU%qtt z@@1A%w{BK{LA7tkufs|64QvB9oq=rzEMNE8 z1ieQ?m$LJvY5@@s)T?KC8=gG>vqSk!yN>UJE~l<%OLbd~iK-V^FKXa|XtSrSiT^$Z z2Oha_KwG%44QTV?(%3a`;lQ?N*K_39$(`^Pn5a^a4<`V8;#A3@kh^SMEh@+rnl2o` zejxh8E%6DDve)MT|Lgw}KUy#c_WGbe_Q|JvfaH4sP@oD_1f^WDZ28BKKAd>U!`q51BKiF{X2#uWI%MGv*tjnq7?`?ajoyAL zE-oRnZl~qzKN@Lm?f*1u{Rz*A!82hXQ$Jq4_s@W?@2%hV<^1OZb?#7--yiwzcek1h zUc7zZ!R-rQ3QXPhMUo^X%$&JA(eU?ox9yAHwyu94PePZv1@bo)88fW-Iyy{%IGT`wNkiPFH{fm3LtrifzHz>?h-lvuY!2XzlEK`BxcOSSs8 zt|jFciHr?!3#jg$S6qr;0WzXXSKQKc?A$dVF!0Rj-wO*1VT&JFvsOSr&5X;J-90?I zb$_mQow}*#&;Fe7{~+r3?)TzLgGI>y;k%uz*b7(uWimTJ&jy_+U)Vmx>}mVjun`CU zcj4FMl>a8CX25h`J+tpXatbJ#1g#3`2=-r0zu@lfUi<#KA))oE``0*eJSit9C%jb~ zVEkiI9ipG;3<|hy-tYx%gkFpp9`QH)m2O*4cvr(Zw=uS9sXW`&)v5oG~`Pbu#u=S4__8Nc0pYiMe5@T0? z0z03^O&Nl95dkR0j6@I7~ z4YmT-y%TpcQZoxEz&pRe{4N7bmYm83#0rNeW1q{l^QDE8{S^d-2THOFihF79UWj~F z681;9mOo4nZA=>2KSZT~ll>I|^+YQ4Eye8O&d)minMs;dZg6DtN>HH0&5CTf!O8xL z18|q=TblT74w)z>sZ=O&O;tR&OQKhrbL8X*IN4wRFrO+~2DlQSP>y++FmGz1x-3~i zor~~QB!=3;iJ>t<(m*jP4oYH}8x;khwy2X8n0vAWsO{E_^7xo0SGzvYO|NBxEOU%bbaiYaNA(LWiWD27>WW=+bu!2|LWE>E$I5|!p+Uy&DF!h-OJt0!_C#* z)zuBwgDBI3ll>J7(^#bdF9q--TQt+J3-&Sh1dC!+vqWvT4tCRZw%&q`?K7+#MGX!0 z&Hce*G#U)x4`T_W2kN`I!AkJ-aQF6b^90@1Y$e=7?Dwx;y=`P`k-1Y)?RgN&+^Ts> zIa7lPxHkJ(anryqXAR8zs|!9viAO0#|Bd{%4i^{tDPL?Awm{T4zPh-&xx2c-HNnfn z$J4{x9WM*W{3^?SHv=Ynu>0F>n>KzmbjZshUt!R66X!hoov-$uJe_jxbjr!2Uyc+7 zCa`jD3S+>>t|72*yb$w$IGwODMjX+W!`b3vz5ffpPdWGfJdu&1R4D-l^yKTP+%mml zym6s7OQGBa_C+3UUfv$QRhIqk#h7fsjCZC^e`m_Z^1lOy5RpX; zS)ZV>SOJWB$bhNKruPq}X$+nH*3fqTi7Ve4J?70N8~5TjUYNm_`No+frTvI`3r9qg zY7MruX$6+5tL;jcY=JG#GKqy}3H~lF9`#y0-M&e%(UV^BG635llCTWW0E?k&#eUVP zyLcENiHv2mYa2OaNX*b7gKN~N@#@GoAgx*ZCD<2zFn{CvSWeU5nH(Ad!&MUe+m2g5 zNa(g<;hvOpd**Ss+js8TW55eT=_Fok-bhM|pRj26uHA8;F8uN^Ia`A2qy^}-U*32$ zC2765jy>6@ci$l|bmvTY!n`x3fc0s!aJ~qo$Z`vYpoXDgVT~RXK2U>RO=3UY8^9ex z75=0HP~QgjCnujgc{1hZ&6~}eH-js{rz`*2w~zQvN7@e}p6c@CjOkO^Xa#wBdH(H2 ze9>EEtpP@tlL{M#MK^5m+-#bSTK-UpYouSy3q&8}FfRZ&gGGyH)egB@1R_@&g^GbG} z272-%Vn1ZS6ZEPU`(+@tJc=QSyk%tFyxFaL&qu>s4;VNI!arC-LqkDMm^h{Xz?V7A zo-^;sCp(k7HRL63+LIR4VdAPj!k|L?DI51EoI8^O>Dd0*>9_}(xA$~P-^P;Exc9l! zyBESv>8pfuM`5Ql2x7Ku$1Sybo7;X`Z2VEY88~0j6`IQaG1y zXLq$_=SrlF!H(=d>R*F4xfch)so?EqONVs%pZvXbpy1f%GMa0Zq(ngY|teXBzP;x97qsDxj z5&F!yIbEgLn3hfE9?Fuk4$W=YDrT*yk7&E#vl-oMo!RhaRFhs4www*>J~eiM{8Iy= z%|nxx_wPPv!mhLa?fQ??e22XL(EJnyLEr%lS6rpyN_6iM5l4f+dH9qvuqet?bpel_;|@Z;?F z<|m*0P2@{~1EZGg&j{`E?x#v%1WfDQ&OdGc#8Dekr1XS!uTG3l^KaW%VS~*W*e5(F zD{0N^>keO(PHq~tWLHw2XGj0>x9y}Pom{mS%%RO?;#xRLR^qAwGq#;fIrza3C$pqlp-;l~_n8P7 zx9Q`zq(~>fnKk=Rntxd5fx?}Tm6s=Z1%-F((b@mdxK(R*B_xXi%b;gI43!E%!ppIr zmO>TZ_ZMTb8H+x6AMSKTrqpnewhUX0{GYQJ_fHJi#Al@+N)S0IAt?hU&0pkf2Y%ss zM!FKnw@m8a`Ss7Gix<7xjaa^muKv80vW8k-UQ*iG4@FLrcBW@YUS2_*k?%Bgp?`Es zNVyu?ed;FO4$&UW2&+diK@bdFXqOG*)HZd&5jB46J7D*S2_M8~HGXE?%5?`%Pwi3b z>Y;B$i6vk}N6y24j{kHW5INrWqkhlD{?O16NFq}vY#Y4ta8~FueZ%CL%F2`cL)zgt zbP*!MgW#Ul#?6!pdGJ3dM0teTe#E?G6M9MAX3iMcJmZJSupw#4TPbU}3ehsO(OV)X zNj*Y>fQ}g=XASyCw}ff)Cv~Zwxbzj+`81?GSZM&`CY}A7&PycCE-q$f-_XOeAB$|( zq*MPnNnY(@W-JgzmVmTIvXjnSM;jLa=~=H*&wRw$7(oU*_x;JqCqqJlpX}VRZDeb8 z3Tyt5@X!Suijx|#F-s0*`9tJl%-wn@E40H09}jFMg+vbe^n>WotixZ=#gYtM82;TO z+qAXef$D}WNg4j(Lstv}=jQ!Co;$X8L})r(Sj1sMqXte`)y{auNrAf+FaOZCk!_j_ z3n1>3181d({#&QP4PvuCvp2mMA)Pt!*)A$Oay&I7BL`A`KL3h^3G|O{3G%u7M|K>! zpm&)47dph+_{6+MUDhrh5*Z=|w;8fxcl=kcsK3@aEi}B#z|oWNTm(vtDHPq|KZbmH z(tzP~1)vu+(Dk88#(sr|_Qw7-YhzEIOj-5micK58Qm1csZST|D>}CqbP<1dftev=A z74X#o`?MbF)pa&W`6c2d%su_A`8-<6aR)Oq=ae~we%Cs@KaBPOg(lG;t%bRcE- zdy#qj7mXNqMA|eJ?lcyy1YO#FP)h83^1 z%}Y~luk66Z4@bWpo9q=mW5bW<4y>EhE^q&axFk`ANS`|j&t)K-%a5C;hvyxNT|hC# z3UFr+8+$QvJcT0OgHEwudFDf_q|*Oguc@EV4HstMx^1z$uz{NK3m_NPBX3FW3ay`vZ1W1ApH1!l>@zX26d+^B?lMk%j)E7j&3m7gxFiaD~Ni zuk8CRVZy{IZ%>?j^X5$vDV(VCz?)j)Iwiak@Mpwft3!`FtJpIiH7OO{&V9c{xJX}b z-S%jN?(gq9QPn_-Fe3J1HHh?aI_bSwPy=vvik)+3>p7HW> z3#{qwMmvP6i$Amdi2BBagy)Bz^ye(NJZKg00&p1n`IqX{$h>y#hwpZP^5oOc2G*>} zMg?z=9bpIi&FFveb9{fM*;}>QWD_U=+_SL6{^H_dPoD?&|L2=7Pxr0r3*b^tbz-#} zKh>cHz*~P>0CYb9lBn+rG;%Qe`FFT-Zs(ji_1ndZ#^3l14t{`sz8AmIpMScvEbNDW z>9P1jtj$K>&nBC2@39|tHFzkjcq`T)p+kxPZiKB$>X3)n$V zJnwD*^;6FuJ@wlW*y0NlZTeYZ>K7H^j~o^j7Pf5J0{pqCih{R2D3LHseOaO)=HR^n z>Ja)J%>HtOivFnE`6;)16A<-52G_kmJ4^fN2H-tYACQ@G5+p1DQC5Wktj4&`bSI*a zj&V}`%!g#vc-}9droZIkZh#~*PFMhJc$z-c=Hj21L7(*YC^iDr)CbbD1c>4)3+1L( z&>sZT2CfI7;kF;|2!J=V?|0lYAKv%d@Z0OwJWIF}P!(t0xQ?fV=ZR;5D*cmz=P6V| z_3Ab9J?hgZJ)jjTGVrAXb&dqokbDT^p-cc)ZknV44kYHOqzO<#vGTFhMy3 zFCblIooAW%^zce_#~WM#-_C+vzS%_uov;B>3X;be9jj36#}n5Bo~0Uc7GL2%j~1OP z?Fe1m_$$6#T-`AmxVpQzg2i2u+(3a+kS-wI&~Bcvu2H(q0~%r%P8@a zCqlv{45i!?S%N1^xdp39LJ2)#NiDd#Qk&SatCx>dY_Ns;M-z`@gV+b?7)xs3RKkJi zSRl#ADB++eDS?ApQqpUUBvho9DdEUaBbcR98Y^svBu*lgQY~BtxDr4jx$&_k&oa`V zsDYAl#CN2=SR}Bzs}%d`Y;?c`7of9N>1-hI;Nk#@VP&%N;JS(FVTpsw)D%)bxlpNz z#5Q3i@G=kq61tAlPLle7Qr(WLw{KKO{A+wG z)CaxapmDCAUc7ANp3_lGCAMjDEY_)%Bqm8uLJJ&Xgrr(1-61kz%am|rz%I82J)w`R zfeuHO=ME+4Y=P+oLSr$7b@2x-pehug%MblsFJE1G-w$n|hvN_ssC}-lL5U6}K<2d; zCU)YxqO-u&4}*wfhodY{Bn~B7n5;0w7{X!DMJ&fF0PqTR^x?Xy#I2b~m?t3>8o|^m z5)Mko5{Zw?WEE1bC0bLr&q-~OrHK8soMb6lc60ZxW+*B?oN&|%^+6Wr=em0OQXk;B zEUA4H%EIB49-8)6rYs%Tq7-eSG+wW$O$zqVrreI)2j~%$vZT6#`cx_;l#0b5b~Gq) z*3lUxmXeJmT_tey<1qH0IfZ{O+qlVtoV5gYVCPbSPeB7dE7oPe*$ay}XBZnCZX9J1 zbzsmj>KF%_VzVsSM?@yfswYNBint~gXa^LM+$KnzT3G^n#FC>#I(CevU-1!=CR^1$ zC$&YE@)>yw z81>nJ*9M2NKl3{NSY3&~LEWe+{w)C}Q(N@g5G0K2~DCI^v=QC3ZvBp`uEP zTIzP>mT@t=d;1%T3SsxJ(4CKM?B?ZzJ*PzDBTHpW|&E`B-qU#RULG4?m3G6u{1IDi{C3#%!3b=m-3H}wfCpgfk~7{O>E z+jzK1;&jRphzTdtP8+>&89*s2vXmn_)umEV3rmfX;ug%Asl>U*J_reI2x%Z6rU>^? zkxHMjhe!)W>cxH}tBANDJ$&yg%F9O96M*n60dPM6TLD)OZ-|Bld=hLZGN7r*U?`Fd zg>biEC_0y?5Ir>Mvyy01j8dhDaR7hF zfdrkX4?`rDAJ}mLfHc4XahXvOR^W*zhC?^#X%EWs_>3n2?r7hfINis`H$5$N<;RP2 zb89sUqya6^l5yj&OgcM0M?O*fM+ypVMIHj|Tdr4_cs36c z1Op*9faFVNQ3z&~Fp07Wr5;qZ^dvSUA`QkPmRP6)xhkGQDt(aKF>P9DM=NzqDCO1+ z`I+g(`Pt&g8n}BER}T=nqd`*xU4RZDfl;6iCbEEu6oyInvF9{B^dc9KGoBJkGLw{D z$Uv{6gy$M#KT=;FTab=qKLGYNF|WKHShHr%?d*STh&^!}|4g~XBjGO$jDe`1dF@*4 z=PNWH0nz}vC^W0E%zk+!xfw2zq`<&hIo>VQqe?o^2;%{Il1)7{vXnETiV0M-mL>X= zqfufDIP@%qr=~4q1*ILco~YXt)yyD@0mT@*Ato0UOBj&>(6aEVe1KCH%K$Zu-?+J< zWrCwYdv!WDq%XWs9T*gnLdWP%qo>*e$*wpu>}ed~a`>xu2=jx7z22DaZV&utFUa=) zz;DTf4bK;=S6GSq3SiEJW*H^1AO2$_^n&@onzeGhAC?KE=9FSFHNy+n7E%wU6-?Yk zn`*jSCcWY*q_IiegDYlH2>TO50aS#22uOH^tq6PG9l(7iY%SpxB<`B{OTdmC~SBTU;H z%`(7J<%LHWH1aPe_5)xS)bFLipltr?3+uZbbI=r9gFWnr|AxStwR626!A2nmTL2m+ z^2H&Nd8L-}017E!V&#E0R?`-P9eor+TOz%&1^srwRs?j1;7&K1u%!{T?@quu>p_^+ zrKrQe@?vnKn`5{@$Ro_2JgSi6? zDS^aiKSl>0VSsU_?iKdetQC~w-4a_A9E81KG5XS&7^!KLJXnepFtIu`_Vf7`7Ux5l zFD!yB&D|Z~?FWpV>cteMMwkxqN{^P|szCP)G|V(3@+?<8#B0DIYAD+pqL1d@@;iK>8#j{Sv2 zg$0Fq1x2{M5luKz3g8@Cf%Q@&VD2kBn9gMewnD@NB4U=93|9cunX<%E73q<;#9z{h z%k*E7yp16rqdy%+kzfF?g2IB_{M$FOGjHZx&n>v^q`s|ynb1uZf%7X=8&CyeKZEI| z!2Z~O|7{<=*e~AeW!96>N;!j7O!@$@68qs_VPSrLaXtil%sEkB;Hk75K!hp~`x($z z;%(_coCIMS`%wkr;${$OZj`c}hX@XhRqO_$} literal 0 HcmV?d00001 diff --git a/assets/graf-mail_test_2.png b/assets/graf-mail_test_2.png new file mode 100755 index 0000000000000000000000000000000000000000..79806e4186bf88416e6753a41b3d67ebc766a343 GIT binary patch literal 38304 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�Lk1D|Qk1M-` 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 literal 0 HcmV?d00001 diff --git a/assets/graf-mail_test_3.png b/assets/graf-mail_test_3.png new file mode 100755 index 0000000000000000000000000000000000000000..72d8d9414745de3ef32e1345f3fad4abd1c89cce GIT binary patch literal 30969 zcmb@tWmH^E)GkO82o@l?LvXj?5=hYC?(XjHfuw2NUDLQV1b26Lhem_DTf^-zRSfF0F#_x!+3CBsD;ykp&%f`R0mou9I5@9pY4LAr zUIr&nL_HjB2-}M(rAPVUVWw+>YvB<8US<;gr{Hj-uM+SaRD?J2lr#|O)mwk{HqT;ruyBM61p=I9NY%~+kY3huO$D*^$`gBf&1St zQM4yf@a!x82y4tsj%-j=?EM#9XL_6w1j;n6+*k%K$r`da@j{#tHA%oL&N8~kg~&OZj~6_^EF85&0(Z7U`fTQ*Mwnw>!N@$ZOegTxm&w`^P22i)Nctd zArA5=jWcdo-#2)7fuAyOd$(ihKI&?#Hk^_@&b&UqxnQ)COjFL%jt@1L(R_W* zHDSxr_@pjfAd{@s<}|Q){wT>n93>KUM2wlYA>Ja!oWzgdc}zBldbNifV6F)3n$X|u zTt4w53s-(=M2ENmbhSE Ob+f+v5kr*EkJq#a*IK?PTc${F0k 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:}@6Tdm~%#8^5Q?5r51`j!(kJA=t-D)mo{g>=gM* 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 dLzH>-h`i+bux-^eISS4f(?{~vk89WDR> literal 0 HcmV?d00001 diff --git a/assets/postfix_node_1.png b/assets/postfix_node_1.png new file mode 100755 index 0000000000000000000000000000000000000000..7e95da56e2de8959787b2e81f8814f1ef70ac4cc GIT binary patch literal 48795 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 literal 0 HcmV?d00001 diff --git a/assets/postfix_node_2.png b/assets/postfix_node_2.png new file mode 100755 index 0000000000000000000000000000000000000000..114c76b7b9da7f0a0386f539546d02982ffacb97 GIT binary patch literal 18541 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 Nloiz#a^>$m{Xfao#1;Sm literal 0 HcmV?d00001 diff --git a/assets/postfix_node_3.png b/assets/postfix_node_3.png new file mode 100755 index 0000000000000000000000000000000000000000..97d4034c2a01c7a68e3029b64f92d38452820ec7 GIT binary patch literal 14069 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 hOZ!wRF1mxmLknsu& Date: Tue, 8 Dec 2020 20:03:25 +0530 Subject: [PATCH 52/65] updating setup.md --- SETUP.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SETUP.md b/SETUP.md index 1e4fb04..914a014 100644 --- a/SETUP.md +++ b/SETUP.md @@ -519,7 +519,7 @@ $ Mail setup on `Influxdb` and `Postfix` can be tested using `mail` command, by logging into their container. - **Influxdb** + `Influxdb` 1. Log into the `Influxdb` docker container ```bash @@ -530,7 +530,7 @@ $ Testing1 ``` - **Postfix** + `Postfix` 1. Log into the `Postfix` docker container @@ -548,7 +548,7 @@ $ ![nodered_mail_testing](assets/postfix_node_1.png) - *Inject node's configuration* + `Inject node's configuration` ![nodered_mail_testing](assets/postfix_node_2.png) @@ -557,7 +557,7 @@ $ - `msg.topic`will be act as `subject`. - `msg.from` will be act as `Sender` - *Email node's configuration* + `Email node's configuration` ![nodered_mail_testing](assets/postfix_node_3.png) From 2036e98c04645f5768b187f5030df49c5d472c6d Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Tue, 8 Dec 2020 20:08:12 +0530 Subject: [PATCH 53/65] updating setup.md --- SETUP.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SETUP.md b/SETUP.md index 914a014..b176436 100644 --- a/SETUP.md +++ b/SETUP.md @@ -519,7 +519,7 @@ $ Mail setup on `Influxdb` and `Postfix` can be tested using `mail` command, by logging into their container. - `Influxdb` + Influxdb 1. Log into the `Influxdb` docker container ```bash @@ -530,7 +530,7 @@ $ Testing1 ``` - `Postfix` + Postfix 1. Log into the `Postfix` docker container @@ -548,7 +548,7 @@ $ ![nodered_mail_testing](assets/postfix_node_1.png) - `Inject node's configuration` + Inject node's configuration ![nodered_mail_testing](assets/postfix_node_2.png) @@ -557,7 +557,7 @@ $ - `msg.topic`will be act as `subject`. - `msg.from` will be act as `Sender` - `Email node's configuration` + Email node's configuration ![nodered_mail_testing](assets/postfix_node_3.png) From b2e4ac31d0cf033a07517c57f3a4a02aaab3185a Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Tue, 8 Dec 2020 20:11:38 +0530 Subject: [PATCH 54/65] updating setup.md --- SETUP.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SETUP.md b/SETUP.md index b176436..97126de 100644 --- a/SETUP.md +++ b/SETUP.md @@ -519,7 +519,7 @@ $ Mail setup on `Influxdb` and `Postfix` can be tested using `mail` command, by logging into their container. - Influxdb + ***Influxdb*** 1. Log into the `Influxdb` docker container ```bash @@ -530,7 +530,7 @@ $ Testing1 ``` - Postfix + ***Postfix*** 1. Log into the `Postfix` docker container @@ -548,7 +548,7 @@ $ ![nodered_mail_testing](assets/postfix_node_1.png) - Inject node's configuration + ***Inject node's configuration*** ![nodered_mail_testing](assets/postfix_node_2.png) @@ -557,7 +557,7 @@ $ - `msg.topic`will be act as `subject`. - `msg.from` will be act as `Sender` - Email node's configuration + ***Email node's configuration*** ![nodered_mail_testing](assets/postfix_node_3.png) From fd52b542de3ef1dbd803f2c12d7094c76c701066 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 11 Dec 2020 04:25:27 +0000 Subject: [PATCH 55/65] comment mqtts on port 1883 --- docker-compose.yml | 2 +- mqtts/mosquitto.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 35873fd..f1db9de 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -202,7 +202,7 @@ services: args: ssl_cert: "${IOT_DASHBOARD_NGINX_FQDN:-.}" ports: - - "${IOT_DASHBOARD_PORT_MQTT_TCP:-1883}:1883" +# - "${IOT_DASHBOARD_PORT_MQTT_TCP:-1883}:1883" #-----> can bee added if needed - "${IOT_DASHBOARD_PORT_MQTT_SSL:-8883}:8883" - "${IOT_DASHBOARD_PORT_MQTT_WSS:-8083}:8083" volumes: diff --git a/mqtts/mosquitto.conf b/mqtts/mosquitto.conf index 75c4aae..9ef570b 100644 --- a/mqtts/mosquitto.conf +++ b/mqtts/mosquitto.conf @@ -1,5 +1,5 @@ # Plain MQTT protocol -listener 1883 +#listener 1883 # username/password authentication; the password file should be present else mosquitto service fail. allow_anonymous false From 53e80b44e16e33d10dd4977d687e86ba1da13954 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 11 Dec 2020 04:34:05 +0000 Subject: [PATCH 56/65] comment mqtts on port 1883 --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index f1db9de..49e7b98 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -202,7 +202,7 @@ services: args: ssl_cert: "${IOT_DASHBOARD_NGINX_FQDN:-.}" ports: -# - "${IOT_DASHBOARD_PORT_MQTT_TCP:-1883}:1883" #-----> can bee added if needed +# - "${IOT_DASHBOARD_PORT_MQTT_TCP:-1883}:1883" #-----> Connection on this TCP port is insecure. can be added if needed - "${IOT_DASHBOARD_PORT_MQTT_SSL:-8883}:8883" - "${IOT_DASHBOARD_PORT_MQTT_WSS:-8083}:8083" volumes: From 6bee4627a298f67736438e78e558029bb9a4503b Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Fri, 18 Dec 2020 14:23:50 +0530 Subject: [PATCH 57/65] Update Dockerfile updating postfix with smtp auth support --- postfix/Dockerfile | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/postfix/Dockerfile b/postfix/Dockerfile index 8d9abf5..4013f48 100644 --- a/postfix/Dockerfile +++ b/postfix/Dockerfile @@ -14,22 +14,34 @@ RUN apt-get update && apt-get install -y \ ARG hostname ARG relay_ip ARG domain +ARG smtp_login +ARG smtp_password # Install Postfix -run echo "postfix postfix/mailname string $host_name" | debconf-set-selections -run echo "postfix postfix/main_mailer_type string 'Internet Site'" | debconf-set-selections -run apt-get update && apt-get install -y postfix -run postconf -e relayhost=$relay_ip +run echo "postfix postfix/mailname string $hostname" | debconf-set-selections && \ + echo "postfix postfix/main_mailer_type string 'Internet Site'" | debconf-set-selections && \ + echo "postfix postfix/relayhost string $relay_ip" | debconf-set-selections + +run apt-get update && apt-get install -y postfix libsasl2-modules run postconf -e myhostname=$hostname run postconf -e mydomain=$domain -run postconf -e masquerade_domains=$domain +run postconf -e myorigin=\$mydomain +run postconf -e masquerade_domains=\$mydomain run postconf -e mydestination="\$myhostname, $hostname, localhost, localhost.localdomain, localhost" run postconf -e mynetworks="127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 172.0.0.0/8" -run postconf -e smtpd_use_tls=no run echo $domain > /etc/mailname +# set up the credentials for SMTP authentication using username and password +run echo "$relay_ip $smtp_login:$smtp_password" >/etc/postfix/sasl_passwd && chmod 600 /etc/postfix/sasl_passwd && postmap /etc/postfix/sasl_passwd && \ + printf '%s\n' '# set up login for SMTP' \ + 'smtp_sasl_auth_enable=yes' \ + 'smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd' \ + 'smtp_sasl_security_options=noanonymous' \ + 'smtp_sasl_tls_security_options=noanonymous' \ + 'smtp_sasl_mechanism_filter=AUTH LOGIN' >> /etc/postfix/main.cf + # This will replace local mail addresses by valid Internet addresses when mail leaves the machine via SMTP. -run echo "root@${hostname} iotmail@${domain}" > /etc/postfix/generic +run echo "root@${domain} iotmail@${domain}" > /etc/postfix/generic run postconf -e smtp_generic_maps=hash:/etc/postfix/generic run postmap /etc/postfix/generic @@ -40,5 +52,3 @@ run apt-get install -y mailutils RUN mkdir -p /etc/my_init.d COPY postfix.sh /etc/my_init.d/postfix.sh RUN chmod +x /etc/my_init.d/postfix.sh - - From c7f54b8f8dc0397aa026513eff16954398c8d4db Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Fri, 18 Dec 2020 14:27:13 +0530 Subject: [PATCH 58/65] Update Dockerfile updating influxdb-postfix setup to relay mails via local postfix --- influxdb/Dockerfile | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/influxdb/Dockerfile b/influxdb/Dockerfile index e3d5397..aa45a53 100644 --- a/influxdb/Dockerfile +++ b/influxdb/Dockerfile @@ -30,19 +30,12 @@ ARG domain # Install Postfix run echo "postfix postfix/mailname string $host_name" | debconf-set-selections -run echo "postfix postfix/main_mailer_type string 'Internet Site'" | debconf-set-selections +run echo "postfix postfix/main_mailer_type select Satellite system" | debconf-set-selections run apt-get update && apt-get install -y postfix run postconf -e relayhost=$relay_ip -run postconf -e myhostname=$hostname -run postconf -e mydomain=$domain -run postconf -e masquerade_domains=$domain -run postconf -e mydestination="\$myhostname, $hostname, localhost, localhost.localdomain, localhost" -run postconf -e mynetworks="127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 172.0.0.0/8" -run postconf -e smtpd_use_tls=no -run echo $domain > /etc/mailname # This will replace local mail addresses by valid Internet addresses when mail leaves the machine via SMTP. -run echo "root@${domain} influxdbbackup@${domain}" > /etc/postfix/generic +run echo "root@${hostname} influxdbbackup@${domain}" > /etc/postfix/generic run postconf -e smtp_generic_maps=hash:/etc/postfix/generic run postmap /etc/postfix/generic From 38b6c49c29526a023e8959eb8af7e290e768e644 Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Fri, 18 Dec 2020 14:33:21 +0530 Subject: [PATCH 59/65] Update docker-compose.yml updating docker-compose.yml file for smtp auth in postfix --- docker-compose.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 49e7b98..92dc303 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -219,7 +219,7 @@ services: distrib_id: "${IOT_DASHBOARD_OS_DISTRIB_ID:-ubuntu}" distrib_codename: "${IOT_DASHBOARD_OS_DISTRIB_CODENAME:-xenial}" hostname: "${IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME:-.}" - relay_ip: "${IOT_DASHBOARD_MAIL_RELAY_IP:-.}" + relay_ip: "postfix:25" domain: "${IOT_DASHBOARD_MAIL_DOMAIN:-.}" hostname: "${IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME:-.}" expose: @@ -251,8 +251,8 @@ services: GF_SECURITY_ADMIN_PASSWORD: "${IOT_DASHBOARD_GRAFANA_ADMIN_PASSWORD:-!notset}" GF_SERVER_DOMAIN: "${IOT_DASHBOARD_NGINX_FQDN}" GF_SERVER_ROOT_URL: "https://%(domain)s/grafana/" - GF_SMTP_ENABLED: "${IOT_DASHBOARD_GRAFANA_SMTP_ENABLED:-false}" - GF_SMTP_SKIP_VERIFY: "${IOT_DASHBOARD_GRAFANA_SMTP_SKIP_VERIFY:-false}" + GF_SMTP_ENABLED: "${IOT_DASHBOARD_GRAFANA_SMTP_ENABLED:-true}" + GF_SMTP_SKIP_VERIFY: "${IOT_DASHBOARD_GRAFANA_SMTP_SKIP_VERIFY:-true}" GF_SMTP_HOST: "postfix:25" GF_SMTP_FROM_ADDRESS: "${IOT_DASHBOARD_GRAFANA_SMTP_FROM_ADDRESS:-grafana@localhost}" GF_SMTP_FROM_NAME: "${IOT_DASHBOARD_GRAFANA_PROJECT_NAME:-Default} grafana admin" @@ -274,6 +274,8 @@ services: hostname: "${IOT_DASHBOARD_MAIL_HOST_NAME:-.}" relay_ip: "${IOT_DASHBOARD_MAIL_RELAY_IP:-.}" domain: "${IOT_DASHBOARD_MAIL_DOMAIN:-.}" + smtp_login: "${IOT_DASHBOARD_MAIL_SMTP_LOGIN:-.}" + smtp_password: "${IOT_DASHBOARD_MAIL_SMTP_PASSWORD:-.}" expose: - "25" hostname: "${IOT_DASHBOARD_MAIL_HOST_NAME:-.}" From 349119061ebf17b121d733bb37f039b6c13faa80 Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Fri, 18 Dec 2020 14:47:21 +0530 Subject: [PATCH 60/65] Update docker-compose.yml Adding SMTP Auth variables --- docker-compose.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 92dc303..601c266 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -107,6 +107,13 @@ # IOT_DASHBOARD_MAIL_RELAY_IP # the mail relay machine, assuming that the real mailer is upstream from us. # +# IOT_DASHBOARD_MAIL_SMTP_LOGIN +# the mail relay login: name@example.com -- it will come from your upstream +# provider. +# +# IOT_DASHBOARD_MAIL_SMTP_PASSWORD +# the mail relay password +# # IOT_DASHBOARD_PORT_HTTP # The port to listen to for HTTP. Primarily for test purposes. Defaults to # 80. From 0cdc79f698a776dbc939f2a74754b549db48bf4d Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Fri, 18 Dec 2020 16:09:49 +0530 Subject: [PATCH 61/65] Update docker-compose.yml grafana: smtp variable changes --- docker-compose.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 601c266..d75d256 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -75,11 +75,12 @@ # Set the grafana log level (e.g. debug) # # IOT_DASHBOARD_GRAFANA_SMTP_ENABLED -# Set to true to enable SMTP. +# Set to false to disable SMTP. +# Defaults to true # # IOT_DASHBOARD_GRAFANA_SMTP_SKIP_VERIFY -# Set to true to disable SSL verification. -# Defaults to false. +# Set to false to enable SSL verification. +# Defaults to true. # # IOT_DASHBOARD_GRAFANA_INSTALL_PLUGINS # A list of grafana plugins to install. Use (comma and space) ", " to delimit plugins. From 369e5928ef05f99738383b57912959bc5294d214 Mon Sep 17 00:00:00 2001 From: Terry Moore Date: Fri, 18 Dec 2020 22:46:02 +0000 Subject: [PATCH 62/65] Always install the influxdb node-red module --- node-red/Dockerfile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/node-red/Dockerfile b/node-red/Dockerfile index 9c7bf92..bad9fb1 100644 --- a/node-red/Dockerfile +++ b/node-red/Dockerfile @@ -13,9 +13,13 @@ ENV NODE_TLS_REJECT_UNAUTHORIZED=0 # Install required modules ARG node_red_install_modules RUN npm install ${node_red_install_modules} +# we always want the influxdb plug-in. +RUN npm install node-red-contrib-influxdb +# fix any dependency issues RUN npm audit fix -# add The Things Network connector +# add The Things Network connector -- this must be after npm audit fix becuase +# it uses a deprecated API. ARG node_red_contrib_ttn_version RUN npm install node-red-contrib-ttn@${node_red_contrib_ttn_version} From e5e4e9973364f592aaeb61709ca1adb61b4d7a44 Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Mon, 28 Dec 2020 16:36:57 +0530 Subject: [PATCH 63/65] Update SETUP.md Changes in creating .env file( TTN to IOT ) --- SETUP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SETUP.md b/SETUP.md index 97126de..a86b4d0 100644 --- a/SETUP.md +++ b/SETUP.md @@ -179,7 +179,7 @@ The following instructions are essentially independent of the cloud provider and First, create a .env file. The following comand sequence can be cut and paste to generate an empty template: ```bash -sed -ne '/^#+++/,/^#---/p' docker-compose.yml | sed -e '/^#[^ \t]/d' -e '/^# TTN/s/$/=/' > .env +sed -ne '/^#+++/,/^#---/p' docker-compose.yml | sed -e '/^#[^ \t]/d' -e '/^# IOT/s/$/=/' > .env ``` Then, edit the .env file as follows: From 4b8b227e447b7b57c4502dbbba5602615a44a6bc Mon Sep 17 00:00:00 2001 From: Murugan Chandrasekar Date: Wed, 30 Dec 2020 05:51:06 +0000 Subject: [PATCH 64/65] removing unwanted spaces at the end --- docker-compose.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index d75d256..7e5704a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -126,7 +126,7 @@ # IOT_DASHBOARD_TIMEZONE # The timezone to use. Defaults to GMT. # -# IOT_DASHBOARD_NODE_RED_VERSION +# IOT_DASHBOARD_NODE_RED_VERSION # To Install specific version of node-red version. Defaults to latest. # # IOT_DASHBOARD_NODE_RED_INSTALL_MODULES @@ -138,7 +138,7 @@ # IOT_DASHBOARD_PORT_MQTT_SSL # Accessing mqtt channel over TLS/SSL. Defaults to 8883. # -# IOT_DASHBOARD_PORT_MQTT_WSS +# IOT_DASHBOARD_PORT_MQTT_WSS # Accessing mqtt channel over WSS. Defaults to 8083. # # IOT_DASHBOARD_INFLUXDB_MAIL_HOST_NAME @@ -185,7 +185,7 @@ services: node-red: restart: unless-stopped - build: + build: context: ./node-red dockerfile: Dockerfile args: @@ -201,10 +201,10 @@ services: links: - influxdb - postfix - + mqtts: restart: unless-stopped - build: + build: context: ./mqtts dockerfile: Dockerfile args: @@ -220,7 +220,7 @@ services: influxdb: restart: unless-stopped - build: + build: context: ./influxdb dockerfile: Dockerfile args: @@ -234,7 +234,7 @@ services: - "8086" volumes: - "${IOT_DASHBOARD_DATA}influxdb:/var/lib/influxdb" - # Dircectory for influxdb metadata and database backup inside "./data" + # Dircectory for influxdb metadata and database backup inside "./data" - "${IOT_DASHBOARD_DATA}influx-backup:/var/lib/influxdb-backup" - "${IOT_DASHBOARD_DATA}influxdb-S3-bucket:/var/lib/influxdb-S3-bucket" environment: From d9c2323369e823abf8dfba9a909a172c2a7ef30e Mon Sep 17 00:00:00 2001 From: MuruganChandrasekar Date: Fri, 22 Jan 2021 16:33:07 +0530 Subject: [PATCH 65/65] Release History --- README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/README.md b/README.md index d87fddb..297a2c5 100644 --- a/README.md +++ b/README.md @@ -222,4 +222,30 @@ Please refer to [`SETUP.md`](./SETUP.md) for detailed set-up instructions. Please refer to [`influxdb/README.md`](./influxdb/README.md). +## Release History + +- HEAD includes the following changes + + - Influxdb: + 1. Backup script is updated for backing up online (live) databases and to push the backup to Amazon bucket. + 2. Crontab was set for automatic backup. + 3. supports sending email for backup alerting. + - Nginx: + 1. The Apache setup is migrated to Nginx. + 2. Proxy-ing the services like ( influxdb, grafana, node-red, mqtts over proxy) was updated. + - Node-red: + 1. supports data flowing via MQTT channel and HTTPS Endpoint + 2. supports sending email. + + - MQTTS: + 1. supports different connections as below: + 1. Mqtt Over Nginx proxy. + 2. Mqtt over TCP( disabled by default ) + 3. Mqtt over TLS/SSL + 4. Mqtt over Websockets(WSS) + + - Postfix: + 1. Configured to Relay mails via External SMTP Auth( Tested with Gmail and Mailgun ). + 2. Mails generated from Containers like Grafana,Influxdb and Node-red will be relayed through Postfix container. + ## Meta