diff --git a/docker-setup/Dockerfile b/docker-setup/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..2fc46ac50f52de38a61aa9a60c55d96f7dea76c9
--- /dev/null
+++ b/docker-setup/Dockerfile
@@ -0,0 +1,30 @@
+FROM alpine:3.8
+
+# Build arguments
+## The database user name
+ARG DBUSER
+## The user's password
+ARG DBPASS
+## The database name
+ARG DBNAME
+
+
+# Forward the args to the container
+ENV DBUSER=${DBUSER}
+ENV DBPASS=${DBPASS}
+ENV DBNAME=${DBNAME}
+
+ENV PGDATA "/var/lib/postgresql"
+
+RUN apk update && \
+    apk add postgresql postgresql-contrib
+
+RUN mkdir -p /run/postgresql && chmod a+w /run/postgresql
+
+ADD entrypoint.sh /entrypoint.sh
+RUN chmod +x /entrypoint.sh
+USER postgres
+
+VOLUME $PGDATA
+CMD ["/entrypoint.sh"]
+EXPOSE 5432
diff --git a/docker-setup/config/grafana.ini b/docker-setup/config/grafana.ini
new file mode 100644
index 0000000000000000000000000000000000000000..68694ff76167204004b4176d6b029e98ebf36900
--- /dev/null
+++ b/docker-setup/config/grafana.ini
@@ -0,0 +1,239 @@
+##################### Grafana Configuration Example #####################
+#
+# Everything has defaults so you only need to uncomment things you want to
+# change
+
+# possible values : production, development
+; app_mode = production
+
+#################################### Paths ####################################
+[paths]
+# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
+#
+data = /home/git/grafana
+#
+# Directory where grafana can store logs
+#
+logs = /var/log/grafana
+
+#################################### Server ####################################
+[server]
+# Protocol (http or https)
+protocol = http
+
+# The ip address to bind to, empty will bind to all interfaces
+http_addr = 
+
+# The http port  to use
+http_port = 3000
+
+# The public facing domain name used to access grafana from a browser
+;domain = localhost
+
+# Redirect to correct domain if host header does not match domain
+# Prevents DNS rebinding attacks
+;enforce_domain = false
+
+# The full public facing url
+;root_url = %(protocol)s://%(domain)s:%(http_port)s/
+
+# Log web requests
+;router_logging = false
+
+# the path relative working path
+static_root_path = public
+
+# enable gzip
+;enable_gzip = false
+
+# https certs & key file
+;cert_file =
+;cert_key =
+
+#################################### Database ####################################
+[dataproxy]
+logging = true
+
+
+[database]
+# Either "mysql", "postgres" or "sqlite3", it's your choice
+type = postgres
+host = postgres
+name = grafana
+user = grafana
+password = grafana
+
+# For "postgres" only, either "disable", "require" or "verify-full"
+;ssl_mode = disable
+
+# For "sqlite3" only, path relative to data_path setting
+path = grafana.db
+
+
+#################################### Analytics ####################################
+[analytics]
+# Server reporting, sends usage counters to stats.grafana.org every 24 hours.
+# No ip addresses are being tracked, only simple counters to track
+# running instances, dashboard and error counts. It is very helpful to us.
+# Change this option to false to disable reporting.
+reporting_enabled = false
+
+# Google Analytics universal tracking code, only enabled if you specify an id here
+;google_analytics_ua_id =
+
+#################################### Security ####################################
+[security]
+# default admin user, created on startup
+admin_user = admin
+
+# default admin password, can be changed before first start of grafana,  or in profile settings
+admin_password = admin
+
+# used for signing
+;secret_key = SW2YcwTIb9zpOOhoPsMm
+
+# Auto-login remember days
+;login_remember_days = 7
+;cookie_username = grafana_user
+;cookie_remember_name = grafana_remember
+
+# disable gravatar profile images
+;disable_gravatar = false
+
+# data source proxy whitelist (ip_or_domain:port separated by spaces)
+;data_source_proxy_whitelist =
+
+#################################### Users ####################################
+[users]
+# disable user signup / registration
+allow_sign_up = false
+
+# Allow non admin users to create organizations
+;allow_org_create = true
+
+# Set to true to automatically assign new users to the default organization (id 1)
+; auto_assign_org = true
+
+# Default role new users will be automatically assigned (if disabled above is set to true)
+auto_assign_org_role = Viewer
+
+#################################### Anonymous Auth ##########################
+[auth.anonymous]
+# enable anonymous access
+enabled = true
+
+# specify organization name that should be used for unauthenticated users
+org_name = Public
+
+# specify role for unauthenticated users
+org_role = Viewer
+
+#################################### Github Auth ##########################
+[auth.github]
+;enabled = false
+;allow_sign_up = false
+;client_id = some_id
+;client_secret = some_secret
+;scopes = user:email,read:org
+;auth_url = https://github.com/login/oauth/authorize
+;token_url = https://github.com/login/oauth/access_token
+;api_url = https://api.github.com/user
+;team_ids =
+;allowed_organizations =
+
+#################################### Google Auth ##########################
+[auth.google]
+;enabled = false
+;allow_sign_up = false
+;client_id = some_client_id
+;client_secret = some_client_secret
+;scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
+;auth_url = https://accounts.google.com/o/oauth2/auth
+;token_url = https://accounts.google.com/o/oauth2/token
+;api_url = https://www.googleapis.com/oauth2/v1/userinfo
+;allowed_domains =
+
+#################################### Auth Proxy ##########################
+[auth.proxy]
+;enabled = false
+;header_name = X-WEBAUTH-USER
+;header_property = username
+;auto_sign_up = true
+
+#################################### Basic Auth ##########################
+[auth.basic]
+enabled = true
+
+#################################### Auth LDAP ##########################
+[auth.ldap]
+;enabled = false
+;config_file = /etc/grafana/ldap.toml
+
+#################################### SMTP / Emailing ##########################
+[smtp]
+;enabled = false
+;host = localhost:25
+;user =
+;password =
+;cert_file =
+;key_file =
+;skip_verify = false
+;from_address = admin@grafana.localhost
+
+[emails]
+;welcome_email_on_sign_up = false
+
+#################################### Logging ##########################
+[log]
+# Either "console", "file", default is "console"
+# Use comma to separate multiple modes, e.g. "console, file"
+mode = console
+
+# Buffer length of channel, keep it as it is if you don't know what it is.
+;buffer_len = 10000
+
+# Either "Trace", "Debug", "Info", "Warn", "Error", "Critical", default is "Trace"
+;level = Info
+
+# For "console" mode only
+[log.console]
+;level =
+
+# For "file" mode only
+[log.file]
+;level =
+# This enables automated log rotate(switch of following options), default is true
+;log_rotate = true
+
+# Max line number of single file, default is 1000000
+;max_lines = 1000000
+
+# Max size shift of single file, default is 28 means 1 << 28, 256MB
+;max_lines_shift = 28
+
+# Segment log daily, default is true
+;daily_rotate = true
+
+# Expired days of log file(delete after max days), default is 7
+;max_days = 7
+
+#################################### AMPQ Event Publisher ##########################
+[event_publisher]
+;enabled = false
+;rabbitmq_url = amqp://localhost/
+;exchange = grafana_events
+
+;#################################### Dashboard JSON files ##########################
+[dashboards.json]
+enabled = false
+path = /home/git/grafana/grafana-dashboards/dashboards
+
+[date_formats]
+full_date = MMM Do, YYYY @ hh:mm:ss a
+interval_second = hh:mm:ss a
+interval_minute = hh:mm a
+interval_hour = DD/MM hh:mm a
+interval_day = DD/MM
+interval_month = YYYY-MM
+interval_year = YYYY
+
diff --git a/docker-setup/docker-compose.yaml b/docker-setup/docker-compose.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..5847a3c0bc31faabd55368a991a41d2ca5eb565e
--- /dev/null
+++ b/docker-setup/docker-compose.yaml
@@ -0,0 +1,26 @@
+version: '3'
+services:
+    grafana:
+      restart: always
+      image: grafana/grafana:7.2.1
+      ports:
+        - 3000:3000
+      user: "427"
+      volumes: 
+        - ./config:/etc/grafana/
+      environment: 
+        - GF_INSTALL_PLUGINS=grafana-simple-json-datasource
+    postgres:
+      restart: always
+      build:
+          context: .
+          args:
+              DBUSER: grafana
+              DBPASS: grafana
+              DBNAME: grafana
+      hostname: postgres
+      ports:
+          - "5432:5432"
+      volumes:
+          - ./postgresdata:/var/lib/postgresql:z
+
diff --git a/docker-setup/entrypoint.sh b/docker-setup/entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e85d1e5e753e8bf2d83f74c71d77073d15330c75
--- /dev/null
+++ b/docker-setup/entrypoint.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# Entrypoint for the containerized database
+# Ensures the required setup is performed on the share before
+# starting the database
+
+if [ "$PGDATA" = "" ]
+then
+    echo "Environment variable PGDATA is not set"
+    exit 1
+fi
+
+if [ ! -d "$PGDATA" ]
+then
+    echo "Directory $PGDATA does not exist - no volume mounted?"
+    exit 2
+fi
+
+# Postgres will refuse to work on a non-empty folder when initializing and the
+# mount point might have a dotfile
+PGDATA="$PGDATA/9.6"
+
+echo $PGDATA
+echo $DBNAME
+echo $DBUSER
+
+if [ ! -d "$PGDATA" ]
+then
+    echo "Database seems to be uninitialized - doing so"
+    mkdir $PGDATA
+    initdb --pgdata=$PGDATA && \
+        pg_ctl start && \
+        sleep 4 && \
+        createuser -d -l -s $DBUSER && \
+        createdb -O $DBUSER $DBNAME && \
+        psql -c "ALTER ROLE $DBUSER WITH PASSWORD '$DBPASS'" && \
+        psql -a $DBNAME -c 'CREATE EXTENSION "uuid-ossp" WITH SCHEMA pg_catalog' && \
+        echo "host all all all md5" >> $PGDATA/pg_hba.conf && \
+        echo "listen_addresses = '0.0.0.0'" >> $PGDATA/postgresql.conf && \
+        pg_ctl stop
+fi
+
+exec /usr/bin/postgres