diff --git a/.drone/build.sh b/.drone/build.sh
new file mode 100644
index 0000000..9a85a48
--- /dev/null
+++ b/.drone/build.sh
@@ -0,0 +1 @@
+echo 'nothing to build'
\ No newline at end of file
diff --git a/.drone/deploy.sh b/.drone/deploy.sh
new file mode 100644
index 0000000..e729791
--- /dev/null
+++ b/.drone/deploy.sh
@@ -0,0 +1,4 @@
+docker stack rm zabbix
+echo 'sleeping...60'
+sleep 60
+docker stack deploy -c docker-compose.yml zabbix
diff --git a/.drone/drone-home.jsonnet b/.drone/drone-home.jsonnet
new file mode 100644
index 0000000..143906d
--- /dev/null
+++ b/.drone/drone-home.jsonnet
@@ -0,0 +1,17 @@
+
+local secretSecrets = import 'lib/secret-secrets.libsonnet';
+local publicSecrets = import 'lib/public-secrets.libsonnet';
+
+local deploy = import 'node_modules/@sigyl/jsonnet-drone/deploy.libsonnet';
+[
+  deploy(
+    'zabbix',
+    '/stack/',
+    [
+      'LOCAL_DOCKER_REGISTRY',
+      'REGISTRY_PASSWORD',
+    ],
+    publicSecrets,
+    secretSecrets
+  ),
+]
diff --git a/.drone/drone-home.yml b/.drone/drone-home.yml
new file mode 100644
index 0000000..7e789de
--- /dev/null
+++ b/.drone/drone-home.yml
@@ -0,0 +1,156 @@
+---
+kind: pipeline
+type: docker
+name: deploy
+
+platform:
+  os: linux
+  arch: amd64
+
+steps:
+- name: print env
+  image: appleboy/drone-ssh:1.6.2
+  settings:
+    envs:
+    - drone_tag
+    - drone_commit
+    - drone_build_number
+    - drone_repo_name
+    - drone_repo_namespace
+    - local_docker_registry
+    - registry_password
+    - local_docker_registry
+    - guacamole_postgres_db
+    - guacamole_postgres_user
+    - guacamole_postgres_password
+    - registry_password
+    host:
+      from_secret: ssh-host
+    key:
+      from_secret: ssh-key
+    port:
+      from_secret: ssh-port
+    script:
+    - rm -f env-zabbix
+    - "echo \"export LOCAL_DOCKER_REGISTRY='$${LOCAL_DOCKER_REGISTRY}'\" >> env-zabbix # \"local-docker-registry\""
+    - "echo \"export REGISTRY_PASSWORD='$${REGISTRY_PASSWORD}'\" >> env-zabbix # \"registry-password\""
+    - "echo \"export LOCAL_DOCKER_REGISTRY='$${LOCAL_DOCKER_REGISTRY}'\" >> env-zabbix # \"local-docker-registry\""
+    - "echo \"export GUACAMOLE_POSTGRES_DB='$${GUACAMOLE_POSTGRES_DB}'\" >> env-zabbix # \"guacamole-postgres-db\""
+    - "echo \"export GUACAMOLE_POSTGRES_USER='$${GUACAMOLE_POSTGRES_USER}'\" >> env-zabbix # \"guacamole-postgres-user\""
+    - "echo \"export GUACAMOLE_POSTGRES_PASSWORD='$${GUACAMOLE_POSTGRES_PASSWORD}'\" >> env-zabbix # \"guacamole-postgres-password\""
+    - "echo \"export REGISTRY_PASSWORD='$${REGISTRY_PASSWORD}'\" >> env-zabbix # \"registry-password\""
+    username:
+      from_secret: ssh-user
+  environment:
+    GUACAMOLE_POSTGRES_DB:
+      from_secret: guacamole-postgres-db
+    GUACAMOLE_POSTGRES_PASSWORD:
+      from_secret: guacamole-postgres-password
+    GUACAMOLE_POSTGRES_USER:
+      from_secret: guacamole-postgres-user
+    LOCAL_DOCKER_REGISTRY:
+      from_secret: local-docker-registry
+    REGISTRY_PASSWORD:
+      from_secret: registry-password
+
+- name: scp
+  image: appleboy/drone-scp:1.6.2
+  settings:
+    command_timeout: 2m
+    host:
+      from_secret: ssh-host
+    key:
+      from_secret: ssh-key
+    port:
+      from_secret: ssh-port
+    source:
+    - .
+    target: /stack/zabbix
+    username:
+      from_secret: ssh-user
+
+- name: wait
+  image: alpine
+  commands:
+  - sleep 15
+
+- name: "dockerbuild:"
+  image: docker:dind
+  commands:
+  - set -e
+  - sh .drone/login.sh
+  - sh .drone/build.sh
+  - sh .drone/push.sh
+  - sh .drone/logout.sh
+  environment:
+    LOCAL_DOCKER_REGISTRY:
+      from_secret: local-docker-registry
+    REGISTRY_PASSWORD:
+      from_secret: registry-password
+  volumes:
+  - name: dockersock
+    path: /var/run
+
+- name: deploy
+  image: appleboy/drone-ssh:1.6.2
+  settings:
+    envs:
+    - drone_tag
+    - drone_commit
+    - drone_build_number
+    - drone_repo_name
+    - drone_repo_namespace
+    - local_docker_registry
+    - guacamole_postgres_db
+    - guacamole_postgres_user
+    - guacamole_postgres_password
+    - registry_password
+    host:
+      from_secret: ssh-host
+    key:
+      from_secret: ssh-key
+    port:
+      from_secret: ssh-port
+    script:
+    - export GUACAMOLE_POSTGRES_PASSWORD=$${GUACAMOLE_POSTGRES_PASSWORD}
+    - export REGISTRY_PASSWORD=$${REGISTRY_PASSWORD}
+    - export LOCAL_DOCKER_REGISTRY=$${LOCAL_DOCKER_REGISTRY}
+    - export GUACAMOLE_POSTGRES_DB=$${GUACAMOLE_POSTGRES_DB}
+    - export GUACAMOLE_POSTGRES_USER=$${GUACAMOLE_POSTGRES_USER}
+    - set -e
+    - cd /stack/zabbix
+    - sh .drone/login.sh
+    - sh .drone/pull.sh
+    - sh .drone/deploy.sh
+    username:
+      from_secret: ssh-user
+  environment:
+    GUACAMOLE_POSTGRES_DB:
+      from_secret: guacamole-postgres-db
+    GUACAMOLE_POSTGRES_PASSWORD:
+      from_secret: guacamole-postgres-password
+    GUACAMOLE_POSTGRES_USER:
+      from_secret: guacamole-postgres-user
+    LOCAL_DOCKER_REGISTRY:
+      from_secret: local-docker-registry
+    REGISTRY_PASSWORD:
+      from_secret: registry-password
+
+services:
+- name: docker
+  image: docker:dind
+  privileged: true
+  volumes:
+  - name: dockersock
+    path: /var/run
+  - name: ca
+    path: /etc/docker/certs.d
+
+volumes:
+- name: dockersock
+  temp: {}
+- name: ca
+  host:
+    path: /etc/docker/certs.d
+
+...
diff --git a/.drone/lib/public-secrets.libsonnet b/.drone/lib/public-secrets.libsonnet
new file mode 100644
index 0000000..eadc906
--- /dev/null
+++ b/.drone/lib/public-secrets.libsonnet
@@ -0,0 +1,5 @@
+[
+  'local-docker-registry',
+  'guacamole-postgres-db',
+  'guacamole-postgres-user',
+]
diff --git a/.drone/lib/secret-secrets.libsonnet b/.drone/lib/secret-secrets.libsonnet
new file mode 100644
index 0000000..859a4af
--- /dev/null
+++ b/.drone/lib/secret-secrets.libsonnet
@@ -0,0 +1,4 @@
+[
+  "guacamole-postgres-password",
+  "registry-password",
+]
diff --git a/.drone/login.sh b/.drone/login.sh
new file mode 100644
index 0000000..c8ffffc
--- /dev/null
+++ b/.drone/login.sh
@@ -0,0 +1 @@
+docker login ${LOCAL_DOCKER_REGISTRY} --username client --password "${REGISTRY_PASSWORD}"
\ No newline at end of file
diff --git a/.drone/logout.sh b/.drone/logout.sh
new file mode 100644
index 0000000..4bcacf0
--- /dev/null
+++ b/.drone/logout.sh
@@ -0,0 +1 @@
+docker logout ${LOCAL_DOCKER_REGISTRY}
\ No newline at end of file
diff --git a/.drone/package.json b/.drone/package.json
new file mode 100644
index 0000000..434953f
--- /dev/null
+++ b/.drone/package.json
@@ -0,0 +1,9 @@
+{
+  "private": true,
+  "scripts": {
+    "build": "drone jsonnet --source drone-home.jsonnet --target drone-home.yml --stream"
+  },
+  "dependencies": {
+    "@sigyl/jsonnet-drone": "^0.0.5"
+  }
+}
diff --git a/.drone/pull.sh b/.drone/pull.sh
new file mode 100644
index 0000000..a3c2118
--- /dev/null
+++ b/.drone/pull.sh
@@ -0,0 +1 @@
+echo 'nothing to pull'
diff --git a/.drone/push.sh b/.drone/push.sh
new file mode 100644
index 0000000..8aa5b36
--- /dev/null
+++ b/.drone/push.sh
@@ -0,0 +1 @@
+echo 'nothing to push'
diff --git a/.drone/yarn.lock b/.drone/yarn.lock
new file mode 100644
index 0000000..2ad11f0
--- /dev/null
+++ b/.drone/yarn.lock
@@ -0,0 +1,21 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@sigyl/jsonnet-compose@^0.0.2":
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/@sigyl/jsonnet-compose/-/jsonnet-compose-0.0.2.tgz#8900a21e8cd8109929b6042703f8645aacb9bcda"
+  integrity sha512-wWS3CgPeNi/o1pcS6n/4pafxlMD0KC9/RKMZr/ySmzeGNRW++sPuKuxajYse2TNd47uNDdeUSnk4aEeEIKL0zA==
+
+"@sigyl/jsonnet-drone-environment@0.0.5":
+  version "0.0.5"
+  resolved "https://registry.yarnpkg.com/@sigyl/jsonnet-drone-environment/-/jsonnet-drone-environment-0.0.5.tgz#9ea85e08904777bd21a3e4b30b0b91461d0285ff"
+  integrity sha512-xVGmdMO1pOyozAWUbJm6mzKBgsLPJ+1hWnGCK3AxPkr7kkDh18hu30+TLzlcQtqq76s5jUfvJUztezsGj/mIcw==
+
+"@sigyl/jsonnet-drone@^0.0.5":
+  version "0.0.5"
+  resolved "https://registry.yarnpkg.com/@sigyl/jsonnet-drone/-/jsonnet-drone-0.0.5.tgz#1017714cfcdb637d36faa4206b29fd4277bfb37f"
+  integrity sha512-6npYDgXWGblimBYDIRNeNZX20qZmuhQYhSj9hWucXm9i+IKIrxX/3B0gf9JDNXgbK4s4QY95WBrnimeAeMfddg==
+  dependencies:
+    "@sigyl/jsonnet-compose" "^0.0.2"
+    "@sigyl/jsonnet-drone-environment" "0.0.5"
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1db64ac
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+node_modules
+.log
diff --git a/.versionrc b/.versionrc
new file mode 100644
index 0000000..37b4bcc
--- /dev/null
+++ b/.versionrc
@@ -0,0 +1,3 @@
+{
+  "tagMessageInChangeLog": true
+}
\ No newline at end of file
diff --git a/git-hooks/pre-commit b/git-hooks/pre-commit
new file mode 100755
index 0000000..7161ae2
--- /dev/null
+++ b/git-hooks/pre-commit
@@ -0,0 +1,3 @@
+drone jsonnet --source .drone/drone-home.jsonnet --target .drone/drone-home.yml --stream \
+&& git add .drone/drone-home.yml \
+&& echo "jsonnet built"
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..ef03ce4
--- /dev/null
+++ b/package.json
@@ -0,0 +1,18 @@
+{
+  "private": true,
+  "name": "zabbix",
+  "version": "0.0.1",
+  "scripts": {
+    "release": "standard-version",
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://sigyl.com/git/stack/zabbix"
+  },
+  "author": "Giles Bradshaw",
+  "license": "ISC",
+  "devDependencies": {
+    "standard-version": "git+https://github.com/gilesbradshaw/standard-version.git"
+  }
+}