From d930468d07a77b0e6739412ec1b23845cbde08d3 Mon Sep 17 00:00:00 2001 From: "kebler.net" Date: Sat, 30 Jul 2022 07:06:57 -0700 Subject: [PATCH] first commit, working docker based node-red app instance --- .gitignore | 1 + apps/example.cfg | 13 ++++++++++++ docker-compose.yml | 21 +++++++++++++++++++ logs | 3 +++ make-env-file | 51 ++++++++++++++++++++++++++++++++++++++++++++++ restart | 5 +++++ start | 9 ++++++++ stop | 6 ++++++ term | 3 +++ upgrade | 11 ++++++++++ 10 files changed, 123 insertions(+) create mode 100644 .gitignore create mode 100644 apps/example.cfg create mode 100644 docker-compose.yml create mode 100755 logs create mode 100755 make-env-file create mode 100755 restart create mode 100755 start create mode 100755 stop create mode 100755 term create mode 100755 upgrade diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..03bd412 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.env diff --git a/apps/example.cfg b/apps/example.cfg new file mode 100644 index 0000000..4c8df0b --- /dev/null +++ b/apps/example.cfg @@ -0,0 +1,13 @@ +#!/bin/bash +# customer container name, default is -nodered-app +# Name=containername +# Custom user, default is current user (must be in docker group) +# USER=jim # not needed if current host user is 1000 +# TZ=America/Los_Angles # default +Parent_Folder=/data +# "extra-host" set broker and home assistant ips on host inside container +Broker=broker.kebler.net # will lookup ip +HomeAssistant=ha.kebler.net # will look up ip +# https://hub.docker.com/r/nodered/node-red/tags +# Tag=latest-18 # default see +Port=1881 # must be changed to avoid conflict with other node red app containers diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f4c1a10 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +version: "3.7" + +services: + node-red: + image: nodered/node-red:${Tag} + container_name: ${Name} + user: ${PUID} + environment: + - TZ=${TZ} + ports: + - ${Port}:1880 + volumes: + - ${Data}:/data + restart: unless-stopped + extra_hosts: + - "broker:${Broker}" + - "homeassistant:${HomeAssistant}" + +# networks: +# default: +# name: ${Name} diff --git a/logs b/logs new file mode 100755 index 0000000..a2f44c9 --- /dev/null +++ b/logs @@ -0,0 +1,3 @@ +#!/bin/bash +[[ ! $1 ]] && echo "no app set, usage term " && exit +docker attach $1-nodered-app diff --git a/make-env-file b/make-env-file new file mode 100755 index 0000000..38093d7 --- /dev/null +++ b/make-env-file @@ -0,0 +1,51 @@ +#!/bin/bash + +is_p_int() { [ "$1" ] && [ -z "${1//[0-9]/}" ]; } + +getip () +{ + dig +short $1 | tail -1 +} + + +declare -A settings + +# echo env $1 + +[[ ! $(getent group docker) ]] && echo no docker group on machine, exiting && exit +[[ ! $1 ]] && echo "no app set, usage make-env-file " && exit +SDIR=$( + cd $(dirname $(readlink -f "$0")) >/dev/null 2>&1 + pwd -P +) +ENV_FILE=$SDIR/apps/${1}.cfg +echo processing config file $ENV_FILE +# source any environment for particular site +# shopt -s extglob +# ENV_FILE=$(ls ${FILE}* 2> /dev/null | grep -v '.off$\|.example$\|.tmpl$\|.template$') +[[ -f $ENV_FILE ]] && source $ENV_FILE || echo WARNING no settings file $ENV_FILE, using defaults +PUID=$(id -u $USER 2>/dev/null) +[[ ! $PUID ]] && echo no user $USER, exiting && exit +[[ ! $(getent group docker | grep ${USER}) ]] && echo $USER not in docker group, exiting && exit +__ce_PUID=${PUID:-$([[ ! $(is_p_int PUID) ]] && echo $(id -u))} +__ce_PGID=${PGID:-$(getent group docker | cut -d: -f3)} +ename=${2:-$(basename "${1%.*}")} +__ce_Name=${Name:-$ename-nodered-app} +__ce_Tag=${Tag:-latest-18} +__ce_Broker=$(getip "${Broker}") +__ce_HomeAssistant=$(getip "${HomeAssistant}") +__ce_TZ=${TZ:-"America/Los_Angeles"} +Parent_Folder=${Parent_Folder:-${HOME}/.local/share} +__ce_Data=${Data:-${Parent_Folder}/node-red-apps/$ename} +mkdir -p ${__ce_Data} +# __ce_Config=${Config:-${Parent_Folder}/$ename/config} +# mkdir -p ${__ce_Config} +__ce_Port=${Port:-1880} + +echo "$( + set -o posix + set | grep __ce_ | sed 's/__ce_//' +)" >$SDIR/apps/docker.$1.env + +echo created $SDIR/apps/docker.$1.env +cat $SDIR/apps/docker.$1.env \ No newline at end of file diff --git a/restart b/restart new file mode 100755 index 0000000..349981d --- /dev/null +++ b/restart @@ -0,0 +1,5 @@ +#!/bin/bash +[[ ! $1 ]] && echo "no app set, usage restart " && exit +SDIR=$(cd $(dirname $(readlink -f "$0")) >/dev/null 2>&1 ; pwd -P) +source $SDIR/stop $editor +source $SDIR/start $editor diff --git a/start b/start new file mode 100755 index 0000000..31d3c55 --- /dev/null +++ b/start @@ -0,0 +1,9 @@ +#!/bin/bash +[[ ! $1 ]] && echo "no eapp set, usage start " && exit +SDIR=$(cd $(dirname $(readlink -f "$0")) >/dev/null 2>&1 ; pwd -P) +env_file=$SDIR/apps/docker.${1}.env +echo $env_file +[[ ! -f "$env_file" ]] && echo file does not exist && $SDIR/make-env-file $1 && echo making env file from cfg +cat $env_file +# -p for separate container instances +docker-compose -p $1 --env-file $env_file up -d diff --git a/stop b/stop new file mode 100755 index 0000000..d08fd72 --- /dev/null +++ b/stop @@ -0,0 +1,6 @@ +#!/bin/bash +[[ ! $1 ]] && echo "no app set, usage start " && exit +SDIR=$(cd $(dirname $(readlink -f "$0")) >/dev/null 2>&1 ; pwd -P) +env_file=$SDIR/apps/docker.${1}.env +[[ ! -f $env_file ]] && $($SDIR/make-env-file $1) +docker-compose --env-file $SDIR/apps/docker.${1}.env down diff --git a/term b/term new file mode 100755 index 0000000..504c9ee --- /dev/null +++ b/term @@ -0,0 +1,3 @@ +#!/bin/bash +[[ ! $1 ]] && echo "no app set, usage term " && exit +docker exec -it $1-nodered-app /bin/bash diff --git a/upgrade b/upgrade new file mode 100755 index 0000000..d788eb5 --- /dev/null +++ b/upgrade @@ -0,0 +1,11 @@ +#!/bin/bash +[[ ! $1 ]] && echo "no app set, usage upgrade " && exit +SDIR=$(cd $(dirname $(readlink -f "$0")) >/dev/null 2>&1 ; pwd -P) +env_file=$SDIR/apps/docker.${1}.env +echo $env_file +[[ ! -f "$env_file" ]] && echo file does not exist && $SDIR/make-env-file $1 && echo making env file from cfg +cat $env_file +# -p for separate container instances +docker-compose -p $1 --env-file $env_file pull +source $SDIR/restart $1 +