diff --git a/Dockerfile b/Dockerfile index c2823fe..86d2c03 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,20 @@ FROM openjdk:17-jdk-slim +RUN apt-get -y update +RUN apt-get -y install netcat +RUN apt-get -y install curl + WORKDIR /app +ARG API_PORT=9000 +EXPOSE ${API_PORT} + COPY .mvn/ .mvn COPY mvnw pom.xml ./ COPY src ./src COPY bot.properties.example bot.properties ./ +COPY startup.sh ./ -RUN ./mvnw -q -Dmaven.test.skip=true package +RUN ./mvnw install -CMD ["java", "-jar", "target/netneutrality-jar-with-dependencies.jar"] \ No newline at end of file +CMD ["./startup.sh"] \ No newline at end of file diff --git a/docker-compose-webapp.yml b/docker-compose-webapp.yml new file mode 100644 index 0000000..ffec0e2 --- /dev/null +++ b/docker-compose-webapp.yml @@ -0,0 +1,60 @@ +version: '3.3' + +services: + db: + image: mariadb:10.7 + restart: always + volumes: + - netneutrality-db:/var/lib/mysql + - ./sql:/docker-entrypoint-initdb.d + environment: + MYSQL_USER: 'java' + MYSQL_PASSWORD: 'password' + MYSQL_DATABASE: 'netneutrality' + MYSQL_ROOT_PASSWORD: 'password' + ports: + - "3306" + networks: + - internal + + bot: + image: netneutrality:dev + build: ./ + restart: always + depends_on: + - db + environment: + MYSQL_HOST: 'db' + MYSQL_USER: 'java' + MYSQL_PASSWORD: 'password' + MYSQL_DATABASE: 'netneutrality' + ports: + - "9000:9000" + networks: + - internal + + webapp: + image: bot-webapp:dev + build: ../netneutrality-webapp + restart: always + depends_on: + - db + - bot + environment: + DB_CONNECTION: 'mysql' + DB_HOST: 'db' + DB_PORT: '3306' + DB_DATABASE: 'netneutrality' + DB_USERNAME: 'java' + DB_PASSWORD: 'password' + BOT_URL: 'http://bot:9000' + ports: + - '8080:80' + networks: + - internal + +volumes: + netneutrality-db: + +networks: + internal: \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 4a56fe0..2a8d877 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,22 +2,24 @@ version: '3.3' services: db: - image: mysql:5.7 + image: mariadb:10.7 restart: always volumes: - netneutrality-db:/var/lib/mysql - - ./sql/netneutrality_jpa.sql:/docker-entrypoint-initdb.d/dump.sql + - ./sql:/docker-entrypoint-initdb.d environment: - MYSQL_DATABASE: 'netneutrality' MYSQL_USER: 'java' MYSQL_PASSWORD: 'password' + MYSQL_DATABASE: 'netneutrality' MYSQL_ROOT_PASSWORD: 'password' ports: - "3306" networks: - internal - app: + + bot: image: netneutrality:dev + build: ./ restart: always depends_on: - db diff --git a/src/main/java/netneutrality/http/server/ActionHandler.java b/src/main/java/netneutrality/http/server/ActionHandler.java index 85bdb30..4cdb784 100644 --- a/src/main/java/netneutrality/http/server/ActionHandler.java +++ b/src/main/java/netneutrality/http/server/ActionHandler.java @@ -25,8 +25,8 @@ public class ActionHandler extends AbstractHandler { if (path.equals("/actions/shutdown")) { LoggerFactory.getLogger(NetNeutrality.class).info("Request to shutdown received"); - sendStringResponse(exchange, "Shutting down.."); NetNeutrality.shutdown(); + sendStringResponse(exchange, "Shutting down.."); System.exit(0); return; diff --git a/startup.sh b/startup.sh new file mode 100644 index 0000000..ae06536 --- /dev/null +++ b/startup.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +function prop { + grep "${1}" bot.properties | cut -d'=' -f2 +} + +function _term() { + echo "Caught SIGTERM/SIGINT signal, graceful shutdown of bot.." + if [ -z "$pid" ]; then + echo "Bot isn't running, exiting." + exit 0 + else + /usr/bin/curl --no-progress-meter http://localhost:"$API_PORT"/actions/shutdown + echo "Waiting 2 seconds for bot shutdown" + sleep 2 + fi +} + +trap _term SIGTERM +trap _term SIGINT + +if [ ! -f /bin/nc ]; then + echo "nc not found. Exiting." + exit 1 +fi + +if [ -z "$API_PORT" ]; then + API_PORT=9000; +fi + +if [ -z "$MYSQL_HOST" ]; then + MYSQL_HOST="$(prop 'MYSQL_HOST')" +fi + +if [ -z "$MYSQL_PORT" ]; then + MYSQL_PORT=$(prop 'MYSQL_PORT') +fi + +echo "Waiting 10 seconds for database to start.." +sleep 10 + +echo "Checking if MySQL / MariaDB is started.." +if /bin/nc -z "$MYSQL_HOST" "$MYSQL_PORT"; then + echo "Database OK. Starting bot.."; + /usr/local/openjdk-17/bin/java -jar target/netneutrality-jar-with-dependencies.jar & + + pid=$! + wait "$pid" +else + echo "No connection to database, shutting down.." + exit 1 +fi + + +