diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6ed48a9 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.env +node_modules diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7595149 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM node:lts-alpine + +# add project files to /app +ADD ./ /app +WORKDIR /app + +# install node dependencies +RUN npm install + +EXPOSE 8080 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..85d17e6 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,52 @@ +services: + + # listens to mqtt packets and saves to database + meshtastic-mqtt: + container_name: meshtastic-mqtt + depends_on: + database: + condition: service_healthy + build: + context: . + dockerfile: ./Dockerfile + command: /app/docker/mqtt.sh + environment: + DATABASE_URL: "mysql://root:password@database:3306/meshtastic-map?connection_limit=100" + MQTT_OPTS: "" # add any custom mqtt.js options here + + # runs the web map ui + meshtastic-map: + container_name: meshtastic-map + depends_on: + database: + condition: service_healthy + build: + context: . + dockerfile: ./Dockerfile + command: /app/docker/map.sh + ports: + - 8080:8080/tcp + environment: + DATABASE_URL: "mysql://root:password@database:3306/meshtastic-map?connection_limit=100" + MAP_OPTS: "" # add any custom index.js options here + + # runs the database to store everything from mqtt + database: + container_name: database + image: bitnami/mariadb + ports: + - 3306:3306/tcp + environment: + MARIADB_DATABASE: "meshtastic-map" + MARIADB_ROOT_PASSWORD: "password" + volumes: + - database_data:/bitnami/mariadb + healthcheck: + test: ['CMD', '/opt/bitnami/scripts/mariadb/healthcheck.sh'] + interval: 15s + timeout: 5s + retries: 6 + start_interval: 5s + +volumes: + database_data: diff --git a/docker/map.sh b/docker/map.sh new file mode 100755 index 0000000..d23111f --- /dev/null +++ b/docker/map.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +echo "Running migrations" +npx prisma migrate dev + +echo "Starting map ui" +exec node src/index.js ${MAP_OPTS} diff --git a/docker/mqtt.sh b/docker/mqtt.sh new file mode 100755 index 0000000..815cd88 --- /dev/null +++ b/docker/mqtt.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +echo "Running migrations" +npx prisma migrate dev + +echo "Starting mqtt listener" +exec node src/mqtt.js ${MQTT_OPTS}