From e7824de7e84adf3ab25214e759f5184688ac51fc Mon Sep 17 00:00:00 2001 From: Ketan Padegaonkar Date: Tue, 11 Jun 2024 18:42:01 +0530 Subject: [PATCH 1/5] Add support for docker & docker compose --- .dockerignore | 2 ++ docker/Dockerfile | 8 +++++++ docker/docker-compose.yml | 47 +++++++++++++++++++++++++++++++++++++++ docker/mqtt.sh | 10 +++++++++ docker/webapp.sh | 10 +++++++++ 5 files changed, 77 insertions(+) create mode 100644 .dockerignore create mode 100644 docker/Dockerfile create mode 100644 docker/docker-compose.yml create mode 100755 docker/mqtt.sh create mode 100755 docker/webapp.sh 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/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..e5d35de --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,8 @@ +FROM node:lts-alpine + +COPY --from=ghcr.io/ufoscout/docker-compose-wait:latest /wait /wait + +ADD ./ /app +WORKDIR /app +RUN npm install +EXPOSE 8080 diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..f4417ca --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,47 @@ +services: + meshtastic-mqtt: + container_name: meshtastic-mqtt + depends_on: + - mariadb + build: + context: .. + dockerfile: docker/Dockerfile + command: /app/docker/mqtt.sh + links: + - mariadb + env_file: + - ../.env + + meshmap: + container_name: meshmap + depends_on: + - mariadb + build: + context: .. + dockerfile: docker/Dockerfile + command: /app/docker/webapp.sh + ports: + - 8080:8080/tcp + links: + - mariadb + env_file: + - ../.env + + mariadb: + container_name: mariadb + image: bitnami/mariadb + ports: + - 3306:3306/tcp + env_file: + - ../.env + volumes: + - mariadb_data:/bitnami/mariadb + healthcheck: + test: ['CMD', '/opt/bitnami/scripts/mariadb/healthcheck.sh'] + interval: 15s + timeout: 5s + retries: 6 + start_interval: 5s + +volumes: + mariadb_data: diff --git a/docker/mqtt.sh b/docker/mqtt.sh new file mode 100755 index 0000000..34eb1bb --- /dev/null +++ b/docker/mqtt.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +echo "Waiting for mysql" +/wait || exit 111 + +echo "Running migrations" +npx prisma migrate dev + +echo "Starting mqtt listener" +exec node src/mqtt.js ${MESHMAP_MQTT_OPTS} diff --git a/docker/webapp.sh b/docker/webapp.sh new file mode 100755 index 0000000..87af090 --- /dev/null +++ b/docker/webapp.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +echo "Waiting for mysql" +/wait || exit 111 + +echo "Running migrations" +npx prisma migrate dev + +echo "Starting webapp" +exec node src/index.js From 059de3711172e711ecd013e68fcad35e6bfea69d Mon Sep 17 00:00:00 2001 From: liamcottle Date: Fri, 14 Jun 2024 17:26:02 +1200 Subject: [PATCH 2/5] refactor docker compose --- docker/docker-compose.yml | 43 ++++++++++++++++++++---------------- docker/{webapp.sh => map.sh} | 4 ++-- docker/mqtt.sh | 2 +- 3 files changed, 27 insertions(+), 22 deletions(-) rename docker/{webapp.sh => map.sh} (64%) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index f4417ca..f0294c7 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,41 +1,46 @@ services: + + # listens to mqtt packets and saves to database meshtastic-mqtt: container_name: meshtastic-mqtt depends_on: - - mariadb + - database build: context: .. dockerfile: docker/Dockerfile command: /app/docker/mqtt.sh - links: - - mariadb - env_file: - - ../.env + environment: + DATABASE_URL: "mysql://root:password@database:3306/meshtastic-map?connection_limit=100" + WAIT_HOSTS: "database:3306" + MQTT_OPTS: "" # add any custom mqtt.js options here - meshmap: - container_name: meshmap + # runs the web map ui + meshtastic-map: + container_name: meshtastic-map depends_on: - - mariadb + - database build: context: .. dockerfile: docker/Dockerfile - command: /app/docker/webapp.sh + command: /app/docker/map.sh ports: - 8080:8080/tcp - links: - - mariadb - env_file: - - ../.env + environment: + DATABASE_URL: "mysql://root:password@database:3306/meshtastic-map?connection_limit=100" + WAIT_HOSTS: "database:3306" + MAP_OPTS: "" # add any custom index.js options here - mariadb: - container_name: mariadb + # runs the database to store everything from mqtt + database: + container_name: database image: bitnami/mariadb ports: - 3306:3306/tcp - env_file: - - ../.env + environment: + MARIADB_DATABASE: "meshtastic-map" + MARIADB_ROOT_PASSWORD: "password" volumes: - - mariadb_data:/bitnami/mariadb + - database_data:/bitnami/mariadb healthcheck: test: ['CMD', '/opt/bitnami/scripts/mariadb/healthcheck.sh'] interval: 15s @@ -44,4 +49,4 @@ services: start_interval: 5s volumes: - mariadb_data: + database_data: diff --git a/docker/webapp.sh b/docker/map.sh similarity index 64% rename from docker/webapp.sh rename to docker/map.sh index 87af090..9d061d5 100755 --- a/docker/webapp.sh +++ b/docker/map.sh @@ -6,5 +6,5 @@ echo "Waiting for mysql" echo "Running migrations" npx prisma migrate dev -echo "Starting webapp" -exec node src/index.js +echo "Starting map ui" +exec node src/index.js ${MAP_OPTS} diff --git a/docker/mqtt.sh b/docker/mqtt.sh index 34eb1bb..454435b 100755 --- a/docker/mqtt.sh +++ b/docker/mqtt.sh @@ -7,4 +7,4 @@ echo "Running migrations" npx prisma migrate dev echo "Starting mqtt listener" -exec node src/mqtt.js ${MESHMAP_MQTT_OPTS} +exec node src/mqtt.js ${MQTT_OPTS} From 2329fd9ac8548f2966cbcd90662c8fa87e2a012b Mon Sep 17 00:00:00 2001 From: liamcottle Date: Sat, 15 Jun 2024 14:39:49 +1200 Subject: [PATCH 3/5] use docker service healthy condition instead of external docker-compose-wait dependency --- docker/Dockerfile | 2 -- docker/docker-compose.yml | 8 ++++---- docker/map.sh | 3 --- docker/mqtt.sh | 3 --- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index e5d35de..80ca899 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,7 +1,5 @@ FROM node:lts-alpine -COPY --from=ghcr.io/ufoscout/docker-compose-wait:latest /wait /wait - ADD ./ /app WORKDIR /app RUN npm install diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index f0294c7..3418851 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -4,21 +4,22 @@ services: meshtastic-mqtt: container_name: meshtastic-mqtt depends_on: - - database + database: + condition: service_healthy build: context: .. dockerfile: docker/Dockerfile command: /app/docker/mqtt.sh environment: DATABASE_URL: "mysql://root:password@database:3306/meshtastic-map?connection_limit=100" - WAIT_HOSTS: "database:3306" MQTT_OPTS: "" # add any custom mqtt.js options here # runs the web map ui meshtastic-map: container_name: meshtastic-map depends_on: - - database + database: + condition: service_healthy build: context: .. dockerfile: docker/Dockerfile @@ -27,7 +28,6 @@ services: - 8080:8080/tcp environment: DATABASE_URL: "mysql://root:password@database:3306/meshtastic-map?connection_limit=100" - WAIT_HOSTS: "database:3306" MAP_OPTS: "" # add any custom index.js options here # runs the database to store everything from mqtt diff --git a/docker/map.sh b/docker/map.sh index 9d061d5..d23111f 100755 --- a/docker/map.sh +++ b/docker/map.sh @@ -1,8 +1,5 @@ #!/bin/sh -echo "Waiting for mysql" -/wait || exit 111 - echo "Running migrations" npx prisma migrate dev diff --git a/docker/mqtt.sh b/docker/mqtt.sh index 454435b..815cd88 100755 --- a/docker/mqtt.sh +++ b/docker/mqtt.sh @@ -1,8 +1,5 @@ #!/bin/sh -echo "Waiting for mysql" -/wait || exit 111 - echo "Running migrations" npx prisma migrate dev From f777f4575e7f9aa35cf9db7b4ca7f10ccef84f2e Mon Sep 17 00:00:00 2001 From: liamcottle Date: Sat, 15 Jun 2024 14:48:42 +1200 Subject: [PATCH 4/5] move docker files to root directory --- docker/Dockerfile => Dockerfile | 0 docker/docker-compose.yml => docker-compose.yml | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) rename docker/Dockerfile => Dockerfile (100%) rename docker/docker-compose.yml => docker-compose.yml (92%) diff --git a/docker/Dockerfile b/Dockerfile similarity index 100% rename from docker/Dockerfile rename to Dockerfile diff --git a/docker/docker-compose.yml b/docker-compose.yml similarity index 92% rename from docker/docker-compose.yml rename to docker-compose.yml index 3418851..85d17e6 100644 --- a/docker/docker-compose.yml +++ b/docker-compose.yml @@ -7,8 +7,8 @@ services: database: condition: service_healthy build: - context: .. - dockerfile: docker/Dockerfile + context: . + dockerfile: ./Dockerfile command: /app/docker/mqtt.sh environment: DATABASE_URL: "mysql://root:password@database:3306/meshtastic-map?connection_limit=100" @@ -21,8 +21,8 @@ services: database: condition: service_healthy build: - context: .. - dockerfile: docker/Dockerfile + context: . + dockerfile: ./Dockerfile command: /app/docker/map.sh ports: - 8080:8080/tcp From efa33d900b475012e51e9149b920aa52aef57980 Mon Sep 17 00:00:00 2001 From: liamcottle Date: Sat, 15 Jun 2024 14:50:45 +1200 Subject: [PATCH 5/5] add docs to dockerfile --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index 80ca899..7595149 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,10 @@ FROM node:lts-alpine +# add project files to /app ADD ./ /app WORKDIR /app + +# install node dependencies RUN npm install + EXPOSE 8080