diff --git a/docker/README.md b/docker/README.md index 5544fa3e9..a832d0f76 100644 --- a/docker/README.md +++ b/docker/README.md @@ -4,49 +4,42 @@ hawkBit Docker # Setup ## A: Docker Container - -Start the hawkBit Update Server as a single container +Start the hawkBit Update Server as a single container (requires Docker to be installed and all dependencies to be available) ```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 +Start the hawkBit Update Server together with an MySQL and RabbitMQ instance as containers (Requires Docker Compose to be installed) ```bash -# Requires Docker Compose to be installed -$ docker-compose up -d +$ docker compose -f docker-compose-monolith-mysql.yml up ``` +You could, also start it in different flavours, with UI or in microservices mode. -## C: Docker Stack - -Start the hawkBit Update Server and Device Simulator together with an MySQL and RabbitMQ instance as services within a -swarm - +Note: Whit the upper command CTRL+C shuts down all services. Add '-d' at the end to start all into detached mode: ```bash -$ docker swarm init -$ docker stack deploy -c docker-compose-deps-mysql.yml hawkbit +$ docker compose -f docker-compose-monolith-mysql.yml up -d +``` +Then stop all services with: +```bash +$ docker compose -f docker-compose-monolith-mysql.yml down ``` # 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 | | ✓ | ✓ | # Configuration - -You can override application.properties by setting an environment variable SPRING_APPLICATION_JSON for hawkbit -container. +You can override application.properties by setting an environment variable SPRING_APPLICATION_JSON for hawkbit container. ``` hawkbit: - image: "hawkbit/hawkbit-update-server:latest-mysql" + image: "hawkbit/hawkbit-update-server:latest" environment: SPRING_APPLICATION_JSON: '{ "spring.datasource.url": "jdbc:mariadb://mysql:3306/hawkbit", diff --git a/docker/docker-compose-micro-services-mysql-with-simple-ui.yml b/docker/docker-compose-micro-services-mysql-with-simple-ui.yml deleted file mode 100644 index 16a775e9c..000000000 --- a/docker/docker-compose-micro-services-mysql-with-simple-ui.yml +++ /dev/null @@ -1,93 +0,0 @@ -# -# Copyright (c) 2018 Bosch Software Innovations GmbH and others -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -version: '3.7' - -include: - - docker-compose-deps-mysql.yml - -# EXPERIMENTAL! -services: - - # --------------------- - # HawkBit DDI - # --------------------- - hawkbit-ddi: - image: "hawkbit/hawkbit-ddi-server:latest-mysql" - environment: - - 'SPRING_DATASOURCE_URL=jdbc:mariadb://mysql:3306/hawkbit' - - 'SPRING_RABBITMQ_HOST=rabbitmq' - - 'SPRING_RABBITMQ_USERNAME=guest' - - 'SPRING_RABBITMQ_PASSWORD=guest' - - 'SPRING_DATASOURCE_USERNAME=root' - restart: always - ports: - - "8081:8081" - depends_on: - mysql: - condition: service_healthy - labels: - NAME: "hawkbit-ddi" - - # --------------------- - # HawkBit DMF - # --------------------- - hawkbit-dmf: - image: "hawkbit/hawkbit-dmf-server:latest-mysql" - environment: - - 'SPRING_DATASOURCE_URL=jdbc:mariadb://mysql:3306/hawkbit' - - 'SPRING_RABBITMQ_HOST=rabbitmq' - - 'SPRING_RABBITMQ_USERNAME=guest' - - 'SPRING_RABBITMQ_PASSWORD=guest' - - 'SPRING_DATASOURCE_USERNAME=root' - restart: always - depends_on: - mysql: - condition: service_healthy - labels: - NAME: "hawkbit-dmf" - - # --------------------- - # HawkBit MGMT - # --------------------- - hawkbit-mgmt: - image: "hawkbit/hawkbit-mgmt-server:latest-mysql" - environment: - - 'SPRING_DATASOURCE_URL=jdbc:mariadb://mysql:3306/hawkbit' - - 'SPRING_RABBITMQ_HOST=rabbitmq' - - 'SPRING_RABBITMQ_USERNAME=guest' - - 'SPRING_RABBITMQ_PASSWORD=guest' - - 'SPRING_DATASOURCE_USERNAME=root' - volumes: - - artifactrepo:/artifactrepo - restart: always - ports: - - "8080:8080" - depends_on: - mysql: - condition: service_healthy - labels: - NAME: "hawkbit-mgmt" - - # --------------------- - # HawkBit Simple UI - # --------------------- - hawkbit-simple-ui: - image: "hawkbit/hawkbit-simple-ui:latest-mysql" - environment: - - 'SPRING_APPLICATION_JSON={"hawkbit.server.mgmtUrl": "http://hawkbit-mgmt:8080"}' - restart: always - ports: - - 8088:8088 - labels: - NAME: "hawkbit-simple-ui" - -volumes: - artifactrepo: - driver: local diff --git a/docker/docker-compose-micro-services-mysql.yml b/docker/docker-compose-micro-services-mysql.yml index d8586b8a0..396e236d4 100644 --- a/docker/docker-compose-micro-services-mysql.yml +++ b/docker/docker-compose-micro-services-mysql.yml @@ -12,7 +12,6 @@ version: '3.7' include: - docker-compose-deps-mysql.yml -# EXPERIMENTAL! services: # --------------------- @@ -21,6 +20,7 @@ services: hawkbit-ddi: image: "hawkbit/hawkbit-ddi-server:latest-mysql" environment: + - 'PROFILES=mysql' - 'SPRING_DATASOURCE_URL=jdbc:mariadb://mysql:3306/hawkbit' - 'SPRING_RABBITMQ_HOST=rabbitmq' - 'SPRING_RABBITMQ_USERNAME=guest' diff --git a/docker/docker-compose-micro-services-with-simple-ui-mysql.yml b/docker/docker-compose-micro-services-with-simple-ui-mysql.yml new file mode 100644 index 000000000..9e0e10b6f --- /dev/null +++ b/docker/docker-compose-micro-services-with-simple-ui-mysql.yml @@ -0,0 +1,32 @@ +# +# Copyright (c) 2018 Bosch Software Innovations GmbH and others +# +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +version: '3.7' + +include: + - docker-compose-micro-services-mysql.yml + +services: + + # --------------------- + # HawkBit Simple UI + # --------------------- + hawkbit-simple-ui: + image: "hawkbit/hawkbit-simple-ui:latest-mysql" + environment: + - 'SPRING_APPLICATION_JSON={"hawkbit.server.mgmtUrl": "http://hawkbit-mgmt:8080"}' + restart: always + ports: + - 8088:8088 + labels: + NAME: "hawkbit-simple-ui" + +volumes: + artifactrepo: + driver: local diff --git a/docker/docker-compose-monolith-mysql-with-simple-ui.yml b/docker/docker-compose-monolith-mysql-with-simple-ui.yml deleted file mode 100644 index a02dc6914..000000000 --- a/docker/docker-compose-monolith-mysql-with-simple-ui.yml +++ /dev/null @@ -1,82 +0,0 @@ -# -# Copyright (c) 2018 Bosch Software Innovations GmbH and others -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# -version: '3' - -services: - - # --------------------- - # RabbitMQ service - # --------------------- - rabbitmq: - image: "rabbitmq:3-management" - restart: always - ports: - - "15672:15672" - - "5672:5672" - labels: - NAME: "rabbitmq" - - # --------------------- - # MySQL service - # --------------------- - mysql: - image: "mysql:8.0" - environment: - MYSQL_DATABASE: "hawkbit" - # MYSQL_USER: "root" is created by default in the container for mysql 8.0+ - MYSQL_ALLOW_EMPTY_PASSWORD: "true" - restart: always - ports: - - "3306:3306" - healthcheck: - test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ] - timeout: 20s - retries: 10 - labels: - NAME: "mysql" - - # --------------------- - # HawkBit service - # --------------------- - hawkbit: - image: "hawkbit/hawkbit-update-server:latest-mysql" - environment: - - 'SPRING_DATASOURCE_URL=jdbc:mariadb://mysql:3306/hawkbit' - - 'SPRING_RABBITMQ_HOST=rabbitmq' - - 'SPRING_RABBITMQ_USERNAME=guest' - - 'SPRING_RABBITMQ_PASSWORD=guest' - - 'SPRING_DATASOURCE_USERNAME=root' - volumes: - - artifactrepo:/artifactrepo - restart: always - ports: - - "8080:8080" - depends_on: - mysql: - condition: service_healthy - labels: - NAME: "hawkbit" - - # --------------------- - # HawkBit Simple UI service - # --------------------- - hawkbit-simple-ui: - image: "hawkbit/hawkbit-simple-ui:latest-mysql" - environment: - - 'SPRING_APPLICATION_JSON={"hawkbit.server.mgmtUrl": "http://hawkbit:8080"}' - restart: always - ports: - - 8088:8088 - labels: - NAME: "hawkbit-simple-ui" - -volumes: - artifactrepo: - driver: local diff --git a/docker/docker-compose-monolith-mysql.yml b/docker/docker-compose-monolith-mysql.yml index dcb0603f8..b155d7e8f 100644 --- a/docker/docker-compose-monolith-mysql.yml +++ b/docker/docker-compose-monolith-mysql.yml @@ -9,45 +9,18 @@ # version: '3' +include: + - docker-compose-deps-mysql.yml + services: - # --------------------- - # RabbitMQ service - # --------------------- - rabbitmq: - image: "rabbitmq:3-management" - restart: always - ports: - - "15672:15672" - - "5672:5672" - labels: - NAME: "rabbitmq" - - # --------------------- - # MySQL service - # --------------------- - mysql: - image: "mysql:8.0" - environment: - MYSQL_DATABASE: "hawkbit" - # MYSQL_USER: "root" is created by default in the container for mysql 8.0+ - MYSQL_ALLOW_EMPTY_PASSWORD: "true" - restart: always - ports: - - "3306:3306" - healthcheck: - test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ] - timeout: 20s - retries: 10 - labels: - NAME: "mysql" - # --------------------- # HawkBit service # --------------------- hawkbit: image: "hawkbit/hawkbit-update-server:latest-mysql" environment: + - 'PROFILES=mysql' - 'SPRING_DATASOURCE_URL=jdbc:mariadb://mysql:3306/hawkbit' - 'SPRING_RABBITMQ_HOST=rabbitmq' - 'SPRING_RABBITMQ_USERNAME=guest' diff --git a/docker/docker-compose-monolith-with-simple-ui-mysql.yml b/docker/docker-compose-monolith-with-simple-ui-mysql.yml new file mode 100644 index 000000000..0315b893e --- /dev/null +++ b/docker/docker-compose-monolith-with-simple-ui-mysql.yml @@ -0,0 +1,32 @@ +# +# Copyright (c) 2018 Bosch Software Innovations GmbH and others +# +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +version: '3' + +include: + - docker-compose-monolith-mysql.yml + +services: + + # --------------------- + # HawkBit Simple UI service + # --------------------- + hawkbit-simple-ui: + image: "hawkbit/hawkbit-simple-ui:latest-mysql" + environment: + - 'SPRING_APPLICATION_JSON={"hawkbit.server.mgmtUrl": "http://hawkbit:8080"}' + restart: always + ports: + - 8088:8088 + labels: + NAME: "hawkbit-simple-ui" + +volumes: + artifactrepo: + driver: local diff --git a/docker/docker_build/Dockerfile b/docker/docker_build/Dockerfile index 17dd3d1dd..db788dc3f 100644 --- a/docker/docker_build/Dockerfile +++ b/docker/docker_build/Dockerfile @@ -37,9 +37,24 @@ COPY --from=build ${BUILD_DIR}/spring-boot-loader/ ./ COPY --from=build ${BUILD_DIR}/snapshot-dependencies/ ./ COPY --from=build ${BUILD_DIR}/application/ ./ -ARG CONTAINER_PORT=8080 -ENV JAVA_OPTS="-Xms768m -Xmx768m -XX:MaxMetaspaceSize=250m -XX:MetaspaceSize=250m -Xss300K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError" - VOLUME "/artifactrepo" + +ARG CONTAINER_PORT=8080 EXPOSE ${CONTAINER_PORT} -ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} org.springframework.boot.loader.launch.JarLauncher ${@}"] + +ARG PROFILES=h2 +ENV PROFILES=${PROFILES} +ARG X_MS=768m +ENV X_MS=${X_MS} +ARG X_MX=768m +ENV X_MX=${X_MX} +ARG XX_MAX_METASPACE_SIZE=250m +ENV XX_MAX_METASPACE_SIZE=${XX_MAX_METASPACE_SIZE} +ARG XX_METASPACE_SIZE=250m +ENV XX_METASPACE_SIZE=${XX_METASPACE_SIZE} +ARG XSS=300K +ENV XSS=${XSS} +ARG GC=G1 +ENV GC=${GC} + +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -Dspring.profiles.active=${PROFILES} -Xms${X_MS} -Xmx${X_MX} -XX:MaxMetaspaceSize=${XX_MAX_METASPACE_SIZE} -XX:MetaspaceSize=${XX_METASPACE_SIZE} -Xss${XSS} -XX:+Use${GC}GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError org.springframework.boot.loader.launch.JarLauncher ${@}"] diff --git a/docker/docker_build/Dockerfile-mysql b/docker/docker_build/Dockerfile-mysql index f7812ab98..f7ae02630 100644 --- a/docker/docker_build/Dockerfile-mysql +++ b/docker/docker_build/Dockerfile-mysql @@ -49,9 +49,24 @@ COPY --from=build ${BUILD_DIR}/application/ ./ ARG MARIADB_DRIVER_VERSION=3.1.4 COPY --from=build ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar ./BOOT-INF/lib/ -ARG CONTAINER_PORT=8080 -ENV JAVA_OPTS="-Dspring.profiles.active=mysql -Xms768m -Xmx768m -XX:MaxMetaspaceSize=250m -XX:MetaspaceSize=250m -Xss300K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError" - VOLUME "/artifactrepo" + +ARG CONTAINER_PORT=8080 EXPOSE ${CONTAINER_PORT} -ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} org.springframework.boot.loader.launch.JarLauncher ${@}"] + +ARG PROFILES=mysql +ENV PROFILES=${PROFILES} +ARG X_MS=768m +ENV X_MS=${X_MS} +ARG X_MX=768m +ENV X_MX=${X_MX} +ARG XX_MAX_METASPACE_SIZE=250m +ENV XX_MAX_METASPACE_SIZE=${XX_MAX_METASPACE_SIZE} +ARG XX_METASPACE_SIZE=250m +ENV XX_METASPACE_SIZE=${XX_METASPACE_SIZE} +ARG XSS=300K +ENV XSS=${XSS} +ARG GC=G1 +ENV GC=${GC} + +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -Dspring.profiles.active=${PROFILES} -Xms${X_MS} -Xmx${X_MX} -XX:MaxMetaspaceSize=${XX_MAX_METASPACE_SIZE} -XX:MetaspaceSize=${XX_METASPACE_SIZE} -Xss${XSS} -XX:+Use${GC}GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError org.springframework.boot.loader.launch.JarLauncher ${@}"] diff --git a/docker/docker_build/Dockerfile_dev b/docker/docker_build/Dockerfile_dev index 0f84f1cff..215929fb0 100644 --- a/docker/docker_build/Dockerfile_dev +++ b/docker/docker_build/Dockerfile_dev @@ -30,9 +30,24 @@ COPY --from=build ${BUILD_DIR}/spring-boot-loader/ ./ COPY --from=build ${BUILD_DIR}/snapshot-dependencies/ ./ COPY --from=build ${BUILD_DIR}/application/ ./ -ARG CONTAINER_PORT=8080 -ENV JAVA_OPTS="-Xms768m -Xmx768m -XX:MaxMetaspaceSize=250m -XX:MetaspaceSize=250m -Xss300K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError" - VOLUME "/artifactrepo" + +ARG CONTAINER_PORT=8080 EXPOSE ${CONTAINER_PORT} -ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} org.springframework.boot.loader.launch.JarLauncher ${@}"] + +ARG PROFILES=h2 +ENV PROFILES=${PROFILES} +ARG X_MS=768m +ENV X_MS=${X_MS} +ARG X_MX=768m +ENV X_MX=${X_MX} +ARG XX_MAX_METASPACE_SIZE=250m +ENV XX_MAX_METASPACE_SIZE=${XX_MAX_METASPACE_SIZE} +ARG XX_METASPACE_SIZE=250m +ENV XX_METASPACE_SIZE=${XX_METASPACE_SIZE} +ARG XSS=300K +ENV XSS=${XSS} +ARG GC=G1 +ENV GC=${GC} + +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -Dspring.profiles.active=${PROFILES} -Xms${X_MS} -Xmx${X_MX} -XX:MaxMetaspaceSize=${XX_MAX_METASPACE_SIZE} -XX:MetaspaceSize=${XX_METASPACE_SIZE} -Xss${XSS} -XX:+Use${GC}GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError org.springframework.boot.loader.launch.JarLauncher ${@}"] diff --git a/docker/docker_build/Dockerfile_dev-mysql b/docker/docker_build/Dockerfile_dev-mysql index e9000f154..773ebf6cf 100644 --- a/docker/docker_build/Dockerfile_dev-mysql +++ b/docker/docker_build/Dockerfile_dev-mysql @@ -32,9 +32,25 @@ COPY --from=build ${BUILD_DIR}/application/ ./ ARG MARIADB_DRIVER_VERSION=3.1.4 COPY org/mariadb/jdbc/mariadb-java-client/${MARIADB_DRIVER_VERSION}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar ./BOOT-INF/lib/ -ARG CONTAINER_PORT=8080 -ENV JAVA_OPTS="-Dspring.profiles.active=mysql -Xms768m -Xmx768m -XX:MaxMetaspaceSize=250m -XX:MetaspaceSize=250m -Xss300K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError" - VOLUME "/artifactrepo" + +ARG CONTAINER_PORT=8080 EXPOSE ${CONTAINER_PORT} -ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} org.springframework.boot.loader.launch.JarLauncher ${@}"] + +ARG PROFILES=mysql +ENV PROFILES=${PROFILES} +ARG X_MS=768m +ENV X_MS=${X_MS} +ARG X_MX=768m +ENV X_MX=${X_MX} +ARG XX_MAX_METASPACE_SIZE=250m +ENV XX_MAX_METASPACE_SIZE=${XX_MAX_METASPACE_SIZE} +ARG XX_METASPACE_SIZE=250m +ENV XX_METASPACE_SIZE=${XX_METASPACE_SIZE} +ARG XSS=300K +ENV XSS=${XSS} +ARG GC=G1 +ENV GC=${GC} + +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -Dspring.profiles.active=${PROFILES} -Xms${X_MS} -Xmx${X_MX} -XX:MaxMetaspaceSize=${XX_MAX_METASPACE_SIZE} -XX:MetaspaceSize=${XX_METASPACE_SIZE} -Xss${XSS} -XX:+Use${GC}GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError org.springframework.boot.loader.launch.JarLauncher ${@}"] +