diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0fe2442 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +compose.yml +README.md +database \ No newline at end of file diff --git a/.env.sample b/.env.sample index ce32924..30dd97f 100644 --- a/.env.sample +++ b/.env.sample @@ -1,8 +1,11 @@ -DB_HOST="172.0.0.1" +DB_HOST="db" +DB_ROOT_PASSWORD="root_password" DB_USER="openunitstate" DB_PASSWORD="" DB_NAME="openunitstate" +MQTT_URL="mqtt://broker.example.com:1883" MQTT_CLIENT_ID="njs_1" MQTT_USERNAME="ousbackendmaster" MQTT_PASSWORD="" -MQTT_PUB_CLIENT_ID="njs_publisher" \ No newline at end of file +MQTT_PUB_CLIENT_ID="njs_publisher" +ROOT_TOPIC="openunitstate" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9f86808 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM node:25 +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY . . +CMD ["npm", "start"] \ No newline at end of file diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..c6dd951 --- /dev/null +++ b/compose.yml @@ -0,0 +1,39 @@ +name: openunitstate-backend +services: + db: + image: mariadb:latest + environment: + MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} + MYSQL_DATABASE: ${DB_NAME} + MYSQL_USER: ${DB_USER} + MYSQL_PASSWORD: ${DB_PASSWORD} + volumes: + - ./database:/var/lib/mysql + - ./sql_structure_openunitstate.sql:/docker-entrypoint-initdb.d/init.sql + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + timeout: 20s + retries: 10 + restart: unless-stopped + + app: + build: . + depends_on: + db: + condition: service_healthy + environment: + DB_HOST: db + DB_USER: ${DB_USER} + DB_PASSWORD: ${DB_PASSWORD} + DB_NAME: ${DB_NAME} + MQTT_URL: ${MQTT_URL} + MQTT_CLIENT_ID: ${MQTT_CLIENT_ID} + MQTT_USERNAME: ${MQTT_USERNAME} + MQTT_PASSWORD: ${MQTT_PASSWORD} + ROOT_TOPIC: ${ROOT_TOPIC} + restart: unless-stopped + +networks: + default: + driver: bridge + name: openunitstate \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..4adfa11 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "openunitstate-backend", + "version": "1.0.0", + "description": "Backend service for OpenUnitState", + "main": "app.js", + "scripts": { + "start": "node app.js", + "dev": "node app.js" + }, + "dependencies": { + "mqtt": "^4.3.7", + "mysql": "^2.18.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "keywords": [ + "mqtt", + "mysql", + "iot", + "unit-state" + ], + "author": "", + "license": "GPL-3.0-only" +}