diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..5171c540 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +node_modules +npm-debug.log \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..2912e86b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM node:16 + +# Create app directory +WORKDIR /usr/src/app + +# Install app dependencies +# A wildcard is used to ensure both package.json AND package-lock.json are copied +# where available (npm@5+) +COPY package*.json ./ + +RUN npm install +# If you are building your code for production +# RUN npm ci --only=production + +# Bundle app source (see .dockerignore for skipped files) +COPY . . + +EXPOSE 8091 + +CMD [ "node", "index.js" ] + + diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 00000000..e91cfff7 --- /dev/null +++ b/docker/README.md @@ -0,0 +1,35 @@ +```text +Developed and tested with: + pi4 running Raspbian bullseye + docker version: 20.10.12 (community) + docker-compose version: 1.29.2 + +``` + +## Instructions: + +### Build the docker image: + > docker-compose build + +### Deploy the server in your docker environment: + > IPADDRESS=192.168.X.X ./start.sh + + +Replace 192.168.X.X with the IP Address that is used to reach the docker host from your Hub. + +Since the docker-compose file uses the default bridge networking and the server needs to be able to tell +the Hub how to contact it, IPAddressOverride is used to set the address reported by the server. + + +### Stop the server: + > docker-compose down + +### View server logs: + > docker-compose logs + + +### Additional Notes: + +After building the image, you can move/copy the files from this directory to any location you wish. +The data directory will be mounted in the container and used to persist data between restarts. + diff --git a/docker/data/README.md b/docker/data/README.md new file mode 100644 index 00000000..79da1687 --- /dev/null +++ b/docker/data/README.md @@ -0,0 +1 @@ +# Echo speaks server will use this directory for persistent data \ No newline at end of file diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml new file mode 100644 index 00000000..32f4203d --- /dev/null +++ b/docker/docker-compose.yaml @@ -0,0 +1,16 @@ +services: + echo-speaks-server: + image: echo-speaks-server:2.7.2 + build: + context: ../ + container_name: echo-speaks-server + restart: always + + ports: + - "8091:8091" + env_file: + - './env.echo-speaks-server' + volumes: + # Data persistency + - ./data:/mnt/es-data + diff --git a/docker/env.echo-speaks-server b/docker/env.echo-speaks-server new file mode 100644 index 00000000..e69de29b diff --git a/docker/env.echo-speaks-server.dist b/docker/env.echo-speaks-server.dist new file mode 100644 index 00000000..750a5352 --- /dev/null +++ b/docker/env.echo-speaks-server.dist @@ -0,0 +1,3 @@ +hubPlatform=Hubitat +IPAddressOverride=IPADDRESS_TO_CHANGE +HOME=/mnt/es-data \ No newline at end of file diff --git a/docker/start.sh b/docker/start.sh new file mode 100755 index 00000000..dbd13db2 --- /dev/null +++ b/docker/start.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +if [[ (-z "${IPADDRESS}") ]]; then + echo "Please set IPADDRESS environment variables" + echo "example: IPADDRESS=192.168.1.100 ./start.sh" + exit 1 +fi + +if [ $(grep -c "IPADDRESS_TO_CHANGE" env.echo-speaks-server.dist) -ne 0 ]; then + sed "s/IPADDRESS_TO_CHANGE/$IPADDRESS/g" env.echo-speaks-server.dist > env.echo-speaks-server +fi + +echo "Starting docker-compose" +docker-compose up -d diff --git a/index.js b/index.js index de271f25..e8dd4c74 100644 --- a/index.js +++ b/index.js @@ -750,6 +750,10 @@ function getCookiesFromEndpoint(url) { ********************************************************************************/ function getIPAddress() { + if (process.env.IPAddressOverride) { + return process.env.IPAddressOverride; + } + let interfaces = os.networkInterfaces(); for (const devName in interfaces) { let iface = interfaces[devName];