diff --git a/README.md b/README.md
index 98556d986..b835a89b0 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ Eclipse [hawkBit](http://www.eclipse.org/hawkbit/index.html) is an domain indepe
Build: [](https://circleci.com/gh/eclipse/hawkbit)
[](https://maven-badges.herokuapp.com/maven-central/org.eclipse.hawkbit/hawkbit-parent)
-Docker images: [](https://hub.docker.com/r/hawkbit/hawkbit-update-server) [](https://hub.docker.com/r/hawkbit/hawkbit-update-server)
+Docker images: [](https://hub.docker.com/r/hawkbit/hawkbit-update-server) [](https://hub.docker.com/r/hawkbit/hawkbit-update-server)
# Documentation
@@ -27,7 +27,7 @@ Next to the hawkBit core hosted here the project maintains as well [examples](ht
We offer a sandbox installation that is free for everyone to try out hawkBit. However, keep in mind that the sandbox database will be reset from time to time. It is also not possible to upload any artifacts into the sandbox. But you can use it to try out the Management UI, Management API and DDI API. Keep in mind as well that you are not permitted to store any kind of personal data in the sandbox.
-_NOTE: The sandbox is currently unavailable. We will be back soon!_
+[https://hawkbit.eclipse.org](https://hawkbit.eclipse.org)
In addition the following vendors offer free trial accounts for their hawkBit compatible products:
diff --git a/deployHawkBitSandbox.sh b/deployHawkBitSandbox.sh
deleted file mode 100644
index 9b965e797..000000000
--- a/deployHawkBitSandbox.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# Copyright (c) 2015 Bosch Software Innovations GmbH and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-
-# This script allows the deployment of the complete hawkBit sandbox including
-# data example to a cloud foundry enviroment. Expects existing CF CLI
-# installation and login to be existing already.
-
-cf api https://api.eu-gb.bluemix.net
-cf login
-cf stop hawkbit-simulator
-cd hawkbit-runtime/hawkbit-update-server/target/
-cf push
-cd ../../../../hawkbit-examples/
-java -jar hawkbit-example-mgmt-simulator/target/hawkbit-example-mgmt-simulator-0.3.0-SNAPSHOT-exec.jar --hawkbit.url=https://hawkbit-demo-sandbox.eu-gb.mybluemix.net --hawkbit.username=demo --hawkbit.password=demo
-cd hawkbit-device-simulator/target/
-cf push
-cd ../../..
diff --git a/docs/content/gettingstarted.md b/docs/content/gettingstarted.md
index ec215cd48..a4d835878 100755
--- a/docs/content/gettingstarted.md
+++ b/docs/content/gettingstarted.md
@@ -6,10 +6,12 @@ weight: 20
## On Sandbox
We offer a sandbox installation that is free for everyone to try out hawkBit's [Management UI](/hawkbit/ui/),
-[Management API](/hawkbit/apis/management_api/), and [Direct Device Integration API](/hawkbit/apis/ddi_api/).
+[Management API](/hawkbit/apis/management_api/), and [Direct Device Integration API](/hawkbit/apis/ddi_api/):
+**[ https://hawkbit.eclipse.org](https://hawkbit.eclipse.org)**
{{% warning %}}
-The hawkBit sandbox is currently unavailable. [More infos ...](/hawkbit/sandbox/sandboxunavailable/)
+The sandbox is a shared installation that will be reset from time to time. Therefore, it is not allowed to upload
+any personal data.
{{% /warning %}}
In addition, the following vendors offer free trial accounts for their Eclipse hawkBit compatible products:
@@ -19,22 +21,43 @@ In addition, the following vendors offer free trial accounts for their Eclipse h
## From Docker Image
-### Update server only
+### Overview
-```sh
-$ docker run -d -p 8080:8080 hawkbit/hawkbit-update-server
+| Service / Container | A | B | C |
+|---|---|---|---|
+| hawkBit Update Server | ✓ | ✓ | ✓ |
+| hawkBit Device Simulator | | | ✓ |
+| MySQL | | ✓ | ✓ |
+| RabbitMQ | | ✓ | ✓ |
+
+### A: Run hawkBit Update Server as Docker Container
+
+Start the hawkBit Update Server as a single container
+
+```bash
+$ docker run -p 8080:8080 hawkbit/hawkbit-update-server:latest
```
-### Updates server + MySql + RabbitMq
+### B: Run hawkBit Update Server with services as Docker Compose
-```sh
+Start the hawkBit Update Server together with an MySQL and RabbitMQ instance as containers
+
+```bash
$ git clone https://github.com/eclipse/hawkbit.git
$ cd hawkbit/hawkbit-runtime/hawkbit-update-server/docker
$ docker-compose up -d
```
-{{% note %}}
-Requires Docker-Compose installed.
-{{% /note %}}
+
+### C: Run hawkBit Update Server with services as Docker Stack
+
+Start the hawkBit Update Server and Device Simulator together with an MySQL and RabbitMQ instance as services within a swarm
+
+```bash
+$ git clone https://github.com/eclipse/hawkbit.git
+$ cd hawkbit/hawkbit-runtime/hawkbit-update-server/docker
+$ docker stack init
+$ docker stack deploy -c docker-compose-stack.yml hawkbit
+```
## From Sources
diff --git a/docs/content/release-notes.md b/docs/content/release-notes.md
index 56b152f0b..0d82d66e9 100755
--- a/docs/content/release-notes.md
+++ b/docs/content/release-notes.md
@@ -3,6 +3,12 @@ title: Release Notes
weight: 100
---
+## 0.2.2
+
+**Release Date:** Thursday, September 21, 2018
+[Tag](https://github.com/eclipse/hawkbit/releases/tag/0.2.2) /
+[Release](https://github.com/eclipse/hawkbit/milestone/10?closed=1)
+
## 0.2.1
**Release Date:** Friday, July 6, 2018
diff --git a/docs/content/sandbox.md b/docs/content/sandbox.md
new file mode 100644
index 000000000..36c776638
--- /dev/null
+++ b/docs/content/sandbox.md
@@ -0,0 +1,4 @@
+---
+title: Sandbox
+redirectURL: https://hawkbit.eclipse.org
+---
\ No newline at end of file
diff --git a/docs/content/sandbox/_index.md b/docs/content/sandbox/_index.md
deleted file mode 100644
index e69de29bb..000000000
diff --git a/docs/content/sandbox/sandboxunavailable.md b/docs/content/sandbox/sandboxunavailable.md
deleted file mode 100644
index 8ef6e6d35..000000000
--- a/docs/content/sandbox/sandboxunavailable.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: Sandbox
-weight: -201
----
-
-## We are sorry, but the sandbox is currently unavailable
-
-{{% warning %}}
-We are migrating the hawkBit Sandbox to be hosted by the Eclipse Foundation. Therefore, it is currently unavailable.
-We will be back soon.
-{{% /warning %}}
\ No newline at end of file
diff --git a/docs/layouts/partials/drawer.html b/docs/layouts/partials/drawer.html
index f142b2671..f017e41b1 100755
--- a/docs/layouts/partials/drawer.html
+++ b/docs/layouts/partials/drawer.html
@@ -21,7 +21,7 @@
{{ if (eq (trim .Site.Params.provider " " | lower) "github") | and (isset .Site.Params "repo_url") }}
-
+
Sandbox
diff --git a/docs/layouts/partials/head.html b/docs/layouts/partials/head.html
index 8e513d9c8..d39ab315f 100755
--- a/docs/layouts/partials/head.html
+++ b/docs/layouts/partials/head.html
@@ -27,6 +27,8 @@
+ {{ if .Params.redirectURL }} {{ end }}
+
diff --git a/hawkbit-runtime/.sandbox/README.md b/hawkbit-runtime/.sandbox/README.md
new file mode 100644
index 000000000..d102bb3d0
--- /dev/null
+++ b/hawkbit-runtime/.sandbox/README.md
@@ -0,0 +1,55 @@
+hawkBit Sandbox
+===
+
+## Try out the update server in our hawkBit sandbox
+
+- try out Management UI https://hawkbit.eclipse.org (username: demo, passwd: demo)
+- try out Management API https://hawkbit.eclipse.org/rest/v1/targets (don't forget basic auth header; username: demo, passwd: demo)
+- try out DDI API https://hawkbit.eclipse.org/DEFAULT/controller/v1/MYTESTDEVICE
+
+
+## Sandbox Setup
+
+**1. File Structure**
+
+Copy the files to the respective location on the VM.
+
+```
+/
++.sandbox
+ |
+ +-stacks
+ | +-sandbox
+ | | +-docker-compose-stack.yml
+ | +-proxy
+ | +-docker-compose-stack.yml
+ +- scripts
+ +-intialize-cronjobs.sh
+ +-sandbox-cleanup.sh
+```
+
+**2. Initialize Cronjobs**
+
+Reset the Sandbox once a week with a cron-job and log its output.
+
+```
+$ sudo /.sandbox/scripts/initialize-cronjobs.sh
+```
+
+
+**3. Nginx Reverse Proxy**
+
+Start the stack for the Nginx reverse proxy with Let's Encrypt support. Thanks to JrCs for providing the Docker container
+ and instructions with his [Docker-Letsencrypt-Nginx-Companion](https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion).
+
+```
+$ docker stack deploy -c /.sandbox/stacks/sandbox/docker-compose-stack.yml proxy
+```
+
+**4. hawkBit**
+
+Start the hawkBit stack.
+
+```
+$ docker stack deploy -c /.sandbox/stacks/sandbox/docker-compose-stack.yml hawkbit
+```
\ No newline at end of file
diff --git a/hawkbit-runtime/.sandbox/scripts/initialize-cronjobs.sh b/hawkbit-runtime/.sandbox/scripts/initialize-cronjobs.sh
new file mode 100644
index 000000000..8766a86aa
--- /dev/null
+++ b/hawkbit-runtime/.sandbox/scripts/initialize-cronjobs.sh
@@ -0,0 +1,28 @@
+#
+# Copyright (c) 2018 Bosch Software Innovations GmbH and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+SCRIPT_DIR="/.sandbox/scripts"
+LOGFILE_DIR="/.sandbox/logs"
+
+# m h dom mon dow user command
+SANDBOX_CLEANUP_JOB="0 0 * * 0 root ${SCRIPT_DIR}/sandbox-cleanup.sh >> ${LOGFILE_DIR}/\$(date +\%F)-hawkbit 2>&1"
+LOGFILE_CLEANUP_JOB="0 0 0 * * root find ${LOGFILE_DIR}* -mtime +182 -exec rm {} \; >/dev/null 2>&1"
+
+CRONTAB_FILE="/etc/crontab"
+
+
+# Create directory for log files
+mkdir -p ${LOGFILE_DIR}
+
+
+echo "# Reset hawkBit stack once a week to delete all data" >> "${CRONTAB_FILE}"
+echo "${SANDBOX_CLEANUP_JOB}" >> "${CRONTAB_FILE}"
+
+echo "# Remove log files documenting reset, that are older than 6 months" >> "${CRONTAB_FILE}"
+echo "${LOGFILE_CLEANUP_JOB}" >> "${CRONTAB_FILE}"
\ No newline at end of file
diff --git a/hawkbit-runtime/.sandbox/scripts/sandbox-cleanup.sh b/hawkbit-runtime/.sandbox/scripts/sandbox-cleanup.sh
new file mode 100644
index 000000000..cdc372f4d
--- /dev/null
+++ b/hawkbit-runtime/.sandbox/scripts/sandbox-cleanup.sh
@@ -0,0 +1,51 @@
+#
+# Copyright (c) 2018 Bosch Software Innovations GmbH and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+STACK_NAME=hawkbit
+
+echo "/------------------------------------------------------------------------------"
+echo "| Data Clean Up START: $(date -u) "
+echo "+------------------------------------------------------------------------------"
+echo "|"
+echo "+-- Remove Docker Stack:"
+docker stack rm $STACK_NAME
+sleep 15
+echo "|"
+echo "+-- Remove Docker Container:"
+docker container prune --force
+sleep 5
+echo "|"
+echo "+-- Remove Docker Volumes:"
+docker volume prune --force
+echo "|"
+echo "+-- Verify Docker Container:"
+docker container ls --all
+echo "|"
+echo "+-- Verify Docker Volumes:"
+docker volume ls
+echo "|"
+echo "+-- Restart Docker Stack:"
+docker stack deploy -c /.sandbox/stacks/sandbox/docker-compose-stack.yml $STACK_NAME
+echo "|"
+# Value is based on trial and error
+echo "+-- Wait for hawkBit to start (320s):"
+sleep 320
+echo "|"
+# Device Simulator has to be restarted, since hawkBit takes too long to start
+echo "+-- Restart Device Simulator:"
+docker service update --force hawkbit_simulator
+echo "|"
+# Images used by a container are not deleted. Therefore, we run this after the stacks
+# are started. Only unused images will be deleted.
+echo "+-- Clean up Docker:"
+docker system prune --force
+echo "+------------------------------------------------------------------------------"
+echo "| END: $(date -u) "
+echo "\------------------------------------------------------------------------------"
+echo ""
\ No newline at end of file
diff --git a/hawkbit-runtime/.sandbox/stacks/proxy/docker-compose-stack.yml b/hawkbit-runtime/.sandbox/stacks/proxy/docker-compose-stack.yml
new file mode 100644
index 000000000..e7d9d99a8
--- /dev/null
+++ b/hawkbit-runtime/.sandbox/stacks/proxy/docker-compose-stack.yml
@@ -0,0 +1,60 @@
+#
+# Copyright (c) 2018 Bosch Software Innovations GmbH and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+version: '3.7'
+
+volumes:
+ vhost:
+ challange:
+ certificates:
+
+networks:
+ proxy:
+ driver: overlay
+
+services:
+
+ # ---------------------
+ # nginx reverse proxy
+ # ---------------------
+ nginx:
+ image: "jwilder/nginx-proxy"
+ ports:
+ - 80:80
+ - 443:443
+ networks:
+ - proxy
+ volumes:
+ - certificates:/etc/nginx/certs:ro
+ - vhost:/etc/nginx/vhost.d
+ - challange:/usr/share/nginx/html
+ - /var/run/docker.sock:/tmp/docker.sock:ro
+ deploy:
+ replicas: 1
+ restart_policy:
+ condition: on-failure
+ labels:
+ - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
+
+ # ---------------------
+ # lets encrypt nginx-proxy companion
+ # ---------------------
+ letsencrypt:
+ image: "jrcs/letsencrypt-nginx-proxy-companion"
+ networks:
+ - proxy
+ volumes:
+ - certificates:/etc/nginx/certs:rw
+ - /var/run/docker.sock:/var/run/docker.sock:ro
+ - vhost:/etc/nginx/vhost.d
+ - challange:/usr/share/nginx/html
+ deploy:
+ replicas: 1
+ restart_policy:
+ condition: on-failure
diff --git a/hawkbit-runtime/.sandbox/stacks/sandbox/docker-compose-stack.yml b/hawkbit-runtime/.sandbox/stacks/sandbox/docker-compose-stack.yml
new file mode 100644
index 000000000..cf76271ad
--- /dev/null
+++ b/hawkbit-runtime/.sandbox/stacks/sandbox/docker-compose-stack.yml
@@ -0,0 +1,76 @@
+#
+# Copyright (c) 2018 Bosch Software Innovations GmbH and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+version: '3.7'
+
+volumes:
+ vhost:
+ challange:
+
+networks:
+ proxy_proxy:
+ external: true
+ sandbox:
+ driver: overlay
+
+services:
+
+ # ---------------------
+ # hawkBit service
+ # ---------------------
+ hawkbit:
+ image: "hawkbit/hawkbit-update-server:latest"
+ networks:
+ - proxy_proxy
+ - sandbox
+ deploy:
+ restart_policy:
+ condition: on-failure
+ environment:
+ - 'SPRING_PROFILES_ACTIVE=cloudsandbox'
+ - 'SPRING_RABBITMQ_HOST=rabbitmq'
+ - 'SPRING_RABBITMQ_USERNAME=guest'
+ - 'SPRING_RABBITMQ_PASSWORD=guest'
+ - 'VIRTUAL_HOST=hawkbit.eclipse.org'
+ - 'LETSENCRYPT_HOST=hawkbit.eclipse.org'
+
+ # ---------------------
+ # hawkBit simulator
+ # ---------------------
+ simulator:
+ image: "hawkbit/hawkbit-device-simulator:latest"
+ networks:
+ - sandbox
+ deploy:
+ restart_policy:
+ condition: on-failure
+ environment:
+ - 'SPRING_RABBITMQ_VIRTUALHOST=/'
+ - 'SPRING_RABBITMQ_HOST=rabbitmq'
+ - 'SPRING_RABBITMQ_PORT=5672'
+ - 'SPRING_RABBITMQ_USERNAME=guest'
+ - 'SPRING_RABBITMQ_PASSWORD=guest'
+ - 'SPRING_RABBITMQ_SSL_ENABLED=false'
+ - 'HAWKBIT_DEVICES_SIMULATOR_AMQP_RECEIVERCONNECTORQUEUEFROMSP=sp_direct_queue'
+ - 'HAWKBIT_DEVICES_SIMULATOR_AMQP_SENDERFORSPEXCHANGE=sp.direct.exchange'
+ - 'HAWKBIT_DEVICES_SIMULATOR_AMQP_DEADLETTERQUEUE=sp_direct_queue_deadletter_ttl'
+ - 'HAWKBIT_DEVICES_SIMULATOR_AMQP_DEADLETTEREXCHANGE=sp.direct.exchange.deadletter'
+
+ # ---------------------
+ # RabbitMQ service
+ # ---------------------
+ rabbitmq:
+ image: "rabbitmq:3-management"
+ networks:
+ - sandbox
+ deploy:
+ restart_policy:
+ condition: on-failure
+ environment:
+ RABBITMQ_DEFAULT_VHOST: "/"
\ No newline at end of file
diff --git a/hawkbit-runtime/README.md b/hawkbit-runtime/README.md
new file mode 100644
index 000000000..2aefc23d2
--- /dev/null
+++ b/hawkbit-runtime/README.md
@@ -0,0 +1,9 @@
+hawkBit Runtime
+===
+
+
+| Folder | Description |
+|--------|-------------|
+| `.sandbox/` | Content of the hawkBit sandbox installation running on [hawkbit.eclipse.org](https://hawkbit.eclipse.org/UI/). |
+| `docker/` | Docker related files, such es Dockerfiles, compose and stack files to quickly start up an hawkBit. |
+| `hawkbit-update-server/` | Spring-Boot application of hawkBit. |
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.0-mysql/Dockerfile b/hawkbit-runtime/docker/0.2.0-mysql/Dockerfile
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.0-mysql/Dockerfile
rename to hawkbit-runtime/docker/0.2.0-mysql/Dockerfile
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.0-mysql/KEYS b/hawkbit-runtime/docker/0.2.0-mysql/KEYS
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.0-mysql/KEYS
rename to hawkbit-runtime/docker/0.2.0-mysql/KEYS
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.0/Dockerfile b/hawkbit-runtime/docker/0.2.0/Dockerfile
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.0/Dockerfile
rename to hawkbit-runtime/docker/0.2.0/Dockerfile
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.0/KEY b/hawkbit-runtime/docker/0.2.0/KEY
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.0/KEY
rename to hawkbit-runtime/docker/0.2.0/KEY
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.0M4-mysql/Dockerfile b/hawkbit-runtime/docker/0.2.0M4-mysql/Dockerfile
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.0M4-mysql/Dockerfile
rename to hawkbit-runtime/docker/0.2.0M4-mysql/Dockerfile
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.0M4-mysql/KEYS b/hawkbit-runtime/docker/0.2.0M4-mysql/KEYS
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.0M4-mysql/KEYS
rename to hawkbit-runtime/docker/0.2.0M4-mysql/KEYS
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.0M4/Dockerfile b/hawkbit-runtime/docker/0.2.0M4/Dockerfile
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.0M4/Dockerfile
rename to hawkbit-runtime/docker/0.2.0M4/Dockerfile
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.0M4/KEY b/hawkbit-runtime/docker/0.2.0M4/KEY
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.0M4/KEY
rename to hawkbit-runtime/docker/0.2.0M4/KEY
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.0M9-mysql/Dockerfile b/hawkbit-runtime/docker/0.2.0M9-mysql/Dockerfile
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.0M9-mysql/Dockerfile
rename to hawkbit-runtime/docker/0.2.0M9-mysql/Dockerfile
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.0M9-mysql/KEYS b/hawkbit-runtime/docker/0.2.0M9-mysql/KEYS
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.0M9-mysql/KEYS
rename to hawkbit-runtime/docker/0.2.0M9-mysql/KEYS
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.0M9/Dockerfile b/hawkbit-runtime/docker/0.2.0M9/Dockerfile
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.0M9/Dockerfile
rename to hawkbit-runtime/docker/0.2.0M9/Dockerfile
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.0M9/KEY b/hawkbit-runtime/docker/0.2.0M9/KEY
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.0M9/KEY
rename to hawkbit-runtime/docker/0.2.0M9/KEY
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.1-mysql/Dockerfile b/hawkbit-runtime/docker/0.2.1-mysql/Dockerfile
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.1-mysql/Dockerfile
rename to hawkbit-runtime/docker/0.2.1-mysql/Dockerfile
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.1-mysql/KEYS b/hawkbit-runtime/docker/0.2.1-mysql/KEYS
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.1-mysql/KEYS
rename to hawkbit-runtime/docker/0.2.1-mysql/KEYS
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.1/Dockerfile b/hawkbit-runtime/docker/0.2.1/Dockerfile
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.1/Dockerfile
rename to hawkbit-runtime/docker/0.2.1/Dockerfile
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/0.2.1/KEY b/hawkbit-runtime/docker/0.2.1/KEY
similarity index 100%
rename from hawkbit-runtime/hawkbit-update-server/docker/0.2.1/KEY
rename to hawkbit-runtime/docker/0.2.1/KEY
diff --git a/hawkbit-runtime/docker/0.2.2-mysql/Dockerfile b/hawkbit-runtime/docker/0.2.2-mysql/Dockerfile
new file mode 100644
index 000000000..e6cf91dc0
--- /dev/null
+++ b/hawkbit-runtime/docker/0.2.2-mysql/Dockerfile
@@ -0,0 +1,15 @@
+FROM hawkbit/hawkbit-update-server:0.2.2
+
+ENV MARIADB_DRIVER_VERSION=2.2.6
+
+COPY KEYS .
+
+RUN set -x \
+ && apk add --no-cache --virtual build-dependencies gnupg unzip libressl wget \
+ && gpg --import KEYS \
+ && wget -O $JAVA_HOME/lib/ext/mariadb-java-client.jar --no-verbose http://downloads.mariadb.com/Connectors/java/connector-java-$MARIADB_DRIVER_VERSION/mariadb-java-client-$MARIADB_DRIVER_VERSION.jar \
+ && wget -O $JAVA_HOME/lib/ext/mariadb-java-client.jar.asc --no-verbose http://downloads.mariadb.com/Connectors/java/connector-java-$MARIADB_DRIVER_VERSION/mariadb-java-client-$MARIADB_DRIVER_VERSION.jar.asc \
+ && gpg --verify --batch $JAVA_HOME/lib/ext/mariadb-java-client.jar.asc $JAVA_HOME/lib/ext/mariadb-java-client.jar \
+ && apk del build-dependencies
+
+ENTRYPOINT ["java","-jar","hawkbit-update-server.jar","--spring.profiles.active=mysql","-Xms768m -Xmx768m -XX:MaxMetaspaceSize=250m -XX:MetaspaceSize=250m -Xss300K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError"]
diff --git a/hawkbit-runtime/docker/0.2.2-mysql/KEYS b/hawkbit-runtime/docker/0.2.2-mysql/KEYS
new file mode 100644
index 000000000..4c602ae04
--- /dev/null
+++ b/hawkbit-runtime/docker/0.2.2-mysql/KEYS
@@ -0,0 +1,40 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: SKS 1.1.6
+Comment: Hostname: pgp.mit.edu
+
+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
+FsnHsQksxFhCqGYdUKyfRsobs/Ns
+=ovQp
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/hawkbit-runtime/docker/0.2.2/Dockerfile b/hawkbit-runtime/docker/0.2.2/Dockerfile
new file mode 100644
index 000000000..295f47998
--- /dev/null
+++ b/hawkbit-runtime/docker/0.2.2/Dockerfile
@@ -0,0 +1,23 @@
+FROM openjdk:8u171-jre-alpine
+
+ENV HAWKBIT_VERSION=0.2.2 \
+ HAWKBIT_HOME=/opt/hawkbit
+
+EXPOSE 8080
+
+COPY KEY .
+
+RUN set -x \
+ && apk add --no-cache --virtual build-dependencies gnupg unzip libressl wget \
+ && gpg --import KEY \
+ && mkdir -p $HAWKBIT_HOME \
+ && cd $HAWKBIT_HOME \
+ && wget -O hawkbit-update-server.jar --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/hawkbit-update-server/$HAWKBIT_VERSION/hawkbit-update-server-$HAWKBIT_VERSION.jar \
+ && wget -O hawkbit-update-server.jar.asc --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/hawkbit-update-server/$HAWKBIT_VERSION/hawkbit-update-server-$HAWKBIT_VERSION.jar.asc \
+ && gpg --batch --verify hawkbit-update-server.jar.asc hawkbit-update-server.jar \
+ && apk del build-dependencies
+
+VOLUME "$HAWKBIT_HOME/data"
+
+WORKDIR $HAWKBIT_HOME
+ENTRYPOINT ["java","-jar","hawkbit-update-server.jar","-Xms768m -Xmx768m -XX:MaxMetaspaceSize=250m -XX:MetaspaceSize=250m -Xss300K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError"]
diff --git a/hawkbit-runtime/docker/0.2.2/KEY b/hawkbit-runtime/docker/0.2.2/KEY
new file mode 100644
index 000000000..7a959f646
--- /dev/null
+++ b/hawkbit-runtime/docker/0.2.2/KEY
@@ -0,0 +1,79 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: SKS 1.1.6
+Comment: Hostname: pgp.mit.edu
+
+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
+LrdPYOGtAA==
+=a0Oj
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/hawkbit-runtime/docker/README.md b/hawkbit-runtime/docker/README.md
new file mode 100644
index 000000000..5986d5aa8
--- /dev/null
+++ b/hawkbit-runtime/docker/README.md
@@ -0,0 +1,40 @@
+hawkBit Docker
+===
+
+# Setup
+
+## A: Docker Container
+
+Start the hawkBit Update Server as a single container
+
+```bash
+$ docker run -d -p 8080:8080 hawkbit/hawkbit-update-server:latest
+```
+
+## B: Docker Compose
+
+Start the hawkBit Update Server together with an MySQL and RabbitMQ instance as containers
+
+```bash
+# Requires Docker Compose to be installed
+$ docker-compose up -d
+```
+
+
+## C: Docker Stack
+
+Start the hawkBit Update Server and Device Simulator together with an MySQL and RabbitMQ instance as services within a swarm
+
+```bash
+$ docker stack init
+$ docker stack deploy -c docker-compose-stack.yml hawkbit
+```
+
+# Access
+
+| Service / Container | URL | Login | A | B | C |
+|---|---|---|---|---|---|
+| hawkBit Update Server | [http://localhost:8080/](http://localhost:8080/) | admin:admin | ✓ | ✓ | ✓ |
+| hawkBit Device Simulator | [http://localhost:8083/](http://localhost:8083/) | - | | | ✓ |
+| MySQL | localhost:3306/hawkbit | root | | ✓ | ✓ |
+| RabbitMQ | [http://localhost:15672](http://localhost:15672) | guest:guest | | ✓ | ✓ |
\ No newline at end of file
diff --git a/hawkbit-runtime/docker/docker-compose-stack.yml b/hawkbit-runtime/docker/docker-compose-stack.yml
new file mode 100644
index 000000000..52514ecf8
--- /dev/null
+++ b/hawkbit-runtime/docker/docker-compose-stack.yml
@@ -0,0 +1,93 @@
+#
+# Copyright (c) 2018 Bosch Software Innovations GmbH and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+version: '3.7'
+
+services:
+
+ # ---------------------
+ # hawkBit service
+ # ---------------------
+ hawkbit:
+ image: "hawkbit/hawkbit-update-server:0.2.2-mysql"
+ networks:
+ - hawknet
+ ports:
+ - "8080:8080"
+ deploy:
+ restart_policy:
+ condition: on-failure
+ environment:
+ - 'SPRING_PROFILES_ACTIVE=cloudsandbox'
+ - 'SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/hawkbit'
+ - 'SPRING_RABBITMQ_HOST=rabbitmq'
+ - 'SPRING_RABBITMQ_USERNAME=guest'
+ - 'SPRING_RABBITMQ_PASSWORD=guest'
+ - 'SPRING_DATASOURCE_USERNAME=root'
+
+ # ---------------------
+ # hawkBit simulator
+ # ---------------------
+ simulator:
+ image: "hawkbit/hawkbit-device-simulator:latest"
+ networks:
+ - hawknet
+ ports:
+ - "8083:8083"
+ deploy:
+ restart_policy:
+ condition: on-failure
+ environment:
+ - 'SPRING_RABBITMQ_VIRTUALHOST=/'
+ - 'SPRING_RABBITMQ_HOST=rabbitmq'
+ - 'SPRING_RABBITMQ_PORT=5672'
+ - 'SPRING_RABBITMQ_USERNAME=guest'
+ - 'SPRING_RABBITMQ_PASSWORD=guest'
+ - 'SPRING_RABBITMQ_SSL_ENABLED=false'
+ - 'HAWKBIT_DEVICES_SIMULATOR_AMQP_RECEIVERCONNECTORQUEUEFROMSP=sp_direct_queue'
+ - 'HAWKBIT_DEVICES_SIMULATOR_AMQP_SENDERFORSPEXCHANGE=sp.direct.exchange'
+ - 'HAWKBIT_DEVICES_SIMULATOR_AMQP_DEADLETTERQUEUE=sp_direct_queue_deadletter_ttl'
+ - 'HAWKBIT_DEVICES_SIMULATOR_AMQP_DEADLETTEREXCHANGE=sp.direct.exchange.deadletter'
+
+ # ---------------------
+ # RabbitMQ service
+ # ---------------------
+ rabbitmq:
+ image: "rabbitmq:3-management"
+ networks:
+ - hawknet
+ ports:
+ - "15672:15672"
+ - "5672:5672"
+ deploy:
+ restart_policy:
+ condition: on-failure
+ environment:
+ RABBITMQ_DEFAULT_VHOST: "/"
+
+ # ---------------------
+ # MySQL service
+ # ---------------------
+ mysql:
+ image: "mysql:5.7"
+ networks:
+ - hawknet
+ ports:
+ - "3306:3306"
+ deploy:
+ restart_policy:
+ condition: on-failure
+ environment:
+ MYSQL_DATABASE: "hawkbit"
+ MYSQL_USER: "root"
+ MYSQL_ALLOW_EMPTY_PASSWORD: "true"
+
+
+networks:
+ hawknet:
+ driver: overlay
\ No newline at end of file
diff --git a/hawkbit-runtime/hawkbit-update-server/docker/docker-compose.yml b/hawkbit-runtime/docker/docker-compose.yml
similarity index 73%
rename from hawkbit-runtime/hawkbit-update-server/docker/docker-compose.yml
rename to hawkbit-runtime/docker/docker-compose.yml
index 7a392d155..81553ddc9 100644
--- a/hawkbit-runtime/hawkbit-update-server/docker/docker-compose.yml
+++ b/hawkbit-runtime/docker/docker-compose.yml
@@ -1,3 +1,11 @@
+#
+# Copyright (c) 2018 Bosch Software Innovations GmbH and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
version: '3'
services:
@@ -35,7 +43,7 @@ services:
# HawkBit service
# ---------------------
hawkbit:
- image: "hawkbit/hawkbit-update-server:0.2.1-mysql"
+ image: "hawkbit/hawkbit-update-server:0.2.2-mysql"
environment:
- 'SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/hawkbit'
- 'SPRING_RABBITMQ_HOST=rabbitmq'
diff --git a/hawkbit-runtime/hawkbit-update-server/README.md b/hawkbit-runtime/hawkbit-update-server/README.md
index b8b0994b6..e150f31c9 100644
--- a/hawkbit-runtime/hawkbit-update-server/README.md
+++ b/hawkbit-runtime/hawkbit-update-server/README.md
@@ -2,12 +2,6 @@
The hawkBit Update Server is a standalone spring-boot application with an embedded servlet container .
-## Try out the update server in our hawkBit sandbox on Bluemix
-
-- try out Management UI https://hawkbit-demo-sandbox.eu-gb.mybluemix.net/UI (username: admin, passwd: admin)
-- try out Management API https://hawkbit-demo-sandbox.eu-gb.mybluemix.net/rest/v1/targets (don't forget basic auth header; username: admin, passwd: admin)
-- try out DDI API https://hawkbit-demo-sandbox.eu-gb.mybluemix.net/DEFAULT/controller/v1/MYTESTDEVICE (authentication disabled)
-
## On your own workstation
### Run
@@ -29,14 +23,6 @@ run org.eclipse.hawkbit.app.Start
The Management UI can be accessed via http://localhost:8080/UI
The Management API can be accessed via http://localhost:8080/rest/v1
-## Deploy example app to Cloud Foundry
-
-- Go to ```target``` subfolder.
-- Select one of the two manifests
- - **manifest-simple.yml** for a standalone hawkBit installation with embedded H2.
- - **manifest.yml** for a standalone hawkBit installation with embedded H2 and RabbitMQ service binding for DMF integration (note: this manifest is used for the sandbox above).
-- Run ```cf push``` against you cloud foundry environment.
-
## Enable Clustering (experimental)
Clustering in hawkBit is based on _Spring Cloud Bus_. It is not enabled in the example app by default.
diff --git a/hawkbit-runtime/hawkbit-update-server/cf/manifest-simple.yml b/hawkbit-runtime/hawkbit-update-server/cf/manifest-simple.yml
deleted file mode 100644
index e367742aa..000000000
--- a/hawkbit-runtime/hawkbit-update-server/cf/manifest-simple.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Copyright (c) 2015 Bosch Software Innovations GmbH and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-
----
-applications:
-- name: hawkbit-simple
- memory: 1024M
- instances: 1
- buildpack: https://github.com/cloudfoundry/java-buildpack
- path: @project.build.finalName@.jar
- env:
- SPRING_PROFILES_ACTIVE: cloudsandbox
- CF_STAGING_TIMEOUT: 15
- CF_STARTUP_TIMEOUT: 15
diff --git a/hawkbit-runtime/hawkbit-update-server/cf/manifest.yml b/hawkbit-runtime/hawkbit-update-server/cf/manifest.yml
deleted file mode 100644
index b091baf4e..000000000
--- a/hawkbit-runtime/hawkbit-update-server/cf/manifest.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Copyright (c) 2015 Bosch Software Innovations GmbH and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-
----
-applications:
-- name: hawkbit-demo-sandbox
- memory: 2048M
- disk_quota: 2048M
- instances: 1
- buildpack: https://github.com/cloudfoundry/java-buildpack
- path: @project.build.finalName@.jar
- services:
- - dmf-rabbit
- env:
- SPRING_PROFILES_ACTIVE: cloudsandbox,amqp
- CF_STAGING_TIMEOUT: 15
- CF_STARTUP_TIMEOUT: 15
- JBP_CONFIG_JAVA_MAIN: '{ arguments: "-XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+ExitOnOutOfMemoryError" }'
- timeout: 180
diff --git a/hawkbit-runtime/hawkbit-update-server/pom.xml b/hawkbit-runtime/hawkbit-update-server/pom.xml
index 901b5cbc0..c1ed2b68d 100644
--- a/hawkbit-runtime/hawkbit-update-server/pom.xml
+++ b/hawkbit-runtime/hawkbit-update-server/pom.xml
@@ -31,7 +31,6 @@
${baseDir}
- false
org.eclipse.hawkbit.app.Start
JAR
@@ -43,15 +42,6 @@
src/main/resources
-
- cf
- true
- ${project.build.directory}
-
- manifest.yml
- manifest-simple.yml
-
-
@@ -73,7 +63,6 @@
com.microsoft.sqlserver
mssql-jdbc
-
diff --git a/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-cloudsandbox.properties b/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-cloudsandbox.properties
index 4bd524c5b..aaf000e03 100644
--- a/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-cloudsandbox.properties
+++ b/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-cloudsandbox.properties
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2015 Bosch Software Innovations GmbH and others.
+# Copyright (c) 2018 Bosch Software Innovations GmbH and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
@@ -7,9 +7,7 @@
# http://www.eclipse.org/legal/epl-v10.html
#
-security.require-ssl=true
server.tomcat.protocol-header=X-Forwarded-Proto
-# IBM Adresses unpredictable
server.tomcat.internal-proxies=.*
# Sandbox, small files only
@@ -20,7 +18,7 @@ spring.http.multipart.max-request-size=-1
hawkbit.artifact.url.protocols.download-http.rel=download-http
hawkbit.artifact.url.protocols.download-http.protocol=https
hawkbit.artifact.url.protocols.download-http.supports=DMF,DDI
-hawkbit.artifact.url.protocols.download-http.hostname=hawkbit-demo-sandbox.eu-gb.mybluemix.net
+hawkbit.artifact.url.protocols.download-http.hostname=hawkbit.eclipse.org
hawkbit.artifact.url.protocols.download-http.ref={protocol}://{hostname}/{tenant}/controller/v1/{controllerId}/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}
hawkbit.artifact.url.protocols.md5sum-http.rel=md5sum-http
hawkbit.artifact.url.protocols.md5sum-http.protocol=${hawkbit.artifact.url.protocols.download-http.protocol}
diff --git a/hawkbit-runtime/hawkbit-update-server/src/main/resources/application.properties b/hawkbit-runtime/hawkbit-update-server/src/main/resources/application.properties
index 59ac6a169..a25cd0250 100644
--- a/hawkbit-runtime/hawkbit-update-server/src/main/resources/application.properties
+++ b/hawkbit-runtime/hawkbit-update-server/src/main/resources/application.properties
@@ -20,7 +20,6 @@ hawkbit.server.ddi.security.authentication.gatewaytoken.enabled=true
hawkbit.server.repository.publish-target-poll-event=false
## Configuration for DMF/RabbitMQ integration
-spring.profiles.active=amqp
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtualHost=/
@@ -39,6 +38,9 @@ hawkbit.server.ui.demo.tenant=DEFAULT
spring.http.multipart.max-file-size=1024MB
spring.http.multipart.max-request-size=-1
+# UI Favicon
+spring.mvc.favicon.enabled=false
+
# UI help links
hawkbit.server.ui.links.documentation.root=https://www.eclipse.org/hawkbit/
hawkbit.server.ui.links.documentation.security=https://www.eclipse.org/hawkbit/concepts/authentication/
diff --git a/hawkbit-runtime/hawkbit-update-server/src/main/resources/public/favicon.ico b/hawkbit-runtime/hawkbit-update-server/src/main/resources/public/favicon.ico
index 12c8777d5..743ee5ac1 100644
Binary files a/hawkbit-runtime/hawkbit-update-server/src/main/resources/public/favicon.ico and b/hawkbit-runtime/hawkbit-update-server/src/main/resources/public/favicon.ico differ
diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/favicon.ico b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/favicon.ico
new file mode 100644
index 000000000..743ee5ac1
Binary files /dev/null and b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/favicon.ico differ
diff --git a/pom.xml b/pom.xml
index 4eb159b2e..66a139f8b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -343,6 +343,7 @@
.sonar
**/Dockerfile
**/docker-compose.yml
+ **/docker-compose-stack.yml
**/.sonar/**
docs/content/**
docs/layouts/**