diff --git a/.dockerignore b/.dockerignore index 4a9fb4f..26c6d6c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -7,3 +7,9 @@ mocks test node_modules doc +.env* +*.md +deploy.sh +generate-apikey.js +test_influx_sql.js + diff --git a/databases/mongo.js b/databases/mongo.js index b41f81e..ad38106 100644 --- a/databases/mongo.js +++ b/databases/mongo.js @@ -72,7 +72,7 @@ export const readChipData = async (sid) => { let ret = { err: null, chipdata: null} let client = await connectMongo() try { - ret.chipdata = await client.db(MONGOBASE).collection('prop_flux').findOne({_id: sid},{projection: {chip: 1, _id: 0}}) + ret.chipdata = await client.db(MONGOBASE).collection('properties').findOne({_id: sid},{projection: {chip: 1, _id: 0}}) } catch (e) { ret.err = e } diff --git a/doc/2DomainsfuerContainer.rtf b/doc/2DomainsfuerContainer.rtf new file mode 100644 index 0000000..7c89531 --- /dev/null +++ b/doc/2DomainsfuerContainer.rtf @@ -0,0 +1,210 @@ +{\rtf1\ansi\ansicpg1252\cocoartf2867 +\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fnil\fcharset0 .SFNS-Regular;\f1\fnil\fcharset0 HelveticaNeue-Bold;\f2\fswiss\fcharset0 Helvetica; +\f3\fnil\fcharset0 .SFNS-Semibold;\f4\fnil\fcharset0 .AppleSystemUIFontMonospaced-Regular;\f5\fmodern\fcharset0 Courier; +\f6\fnil\fcharset0 .SFNS-Bold;} +{\colortbl;\red255\green255\blue255;\red14\green14\blue14;\red111\green90\blue30;\red0\green0\blue0; +\red181\green0\blue19;\red20\green0\blue196;\red13\green100\blue1;\red151\green0\blue126;\red135\green5\blue129; +\red0\green0\blue0;} +{\*\expandedcolortbl;;\cssrgb\c6700\c6700\c6700;\cssrgb\c51373\c42353\c15686;\csgray\c0; +\cssrgb\c76863\c10196\c8627;\cssrgb\c10980\c0\c81176;\cssrgb\c0\c45490\c0;\cssrgb\c66667\c5098\c56863;\cssrgb\c60784\c13725\c57647; +\cssrgb\c0\c0\c0;} +\paperw11900\paperh16840\margl1440\margr1440\vieww29020\viewh16240\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f0\fs42 \cf2 Ja, das ist absolut m\'f6glich \uc0\u9989 \'97 du kannst +\f1\b denselben Docker-Container \'fcber mehrere Domains oder Subdomains +\f0\b0 via +\f1\b Traefik +\f0\b0 erreichbar machen, und +\f1\b im Container selbst unterscheiden +\f0\b0 , \'fcber welche Domain der Aufruf kam.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\f2\fs24 \cf0 \ +\uc0\u11835 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f0\fs42 \cf2 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f3\b\fs44 \cf2 \uc0\u55357 \u56615 \'dcberblick +\f0\b0\fs42 \ +\ +Traefik ist ein Reverse Proxy, der anhand von Regeln Anfragen an Container weiterleitet.\ +Du kannst mehrere +\f1\b Router-Regeln +\f0\b0 definieren, die alle auf denselben +\f1\b Service +\f0\b0 (also denselben Container) zeigen.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\f2\fs24 \cf0 \ +\uc0\u11835 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f0\fs42 \cf2 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f3\b\fs44 \cf2 \uc0\u55358 \u56809 Beispiel: Zwei Domains auf denselben Container +\f0\b0\fs42 \ +\ +Angenommen, du hast zwei Domains:\ +\pard\tqr\tx100\tx260\li260\fi-260\sl324\slmult1\sb240\partightenfactor0 +\cf2 \'95 +\f4 app.example.com +\f0 \ + \'95 +\f4 test.example.org +\f0 \ +\ +Und einen Container +\f4 myapp +\f0 , der auf Port 8080 lauscht.\ +\ +Dann kannst du in deinen +\f1\b Traefik-Labels +\f0\b0 Folgendes setzen: +\f2\fs24 \cf0 \ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\f5\fs28 \cf3 version:\cf4 \cf5 '3.8'\cf4 \ +\ +\cf3 services:\cf4 \ + \cf3 myapp:\cf4 \ + \cf3 image:\cf4 \cf5 myapp:latest\cf4 \ + \cf3 labels:\cf4 \ + \cf6 -\cf4 \cf5 "traefik.enable=true"\cf4 \ +\ + \cf7 # Router 1\cf4 \ + \cf6 -\cf4 \cf5 "traefik.http.routers.myapp1.rule=Host(`app.example.com`)"\cf4 \ + \cf6 -\cf4 \cf5 "traefik.http.routers.myapp1.entrypoints=websecure"\cf4 \ + \cf6 -\cf4 \cf5 "traefik.http.routers.myapp1.tls.certresolver=myresolver"\cf4 \ + \cf6 -\cf4 \cf5 "traefik.http.routers.myapp1.service=myapp-service"\cf4 \ +\ + \cf7 # Router 2\cf4 \ + \cf6 -\cf4 \cf5 "traefik.http.routers.myapp2.rule=Host(`test.example.org`)"\cf4 \ + \cf6 -\cf4 \cf5 "traefik.http.routers.myapp2.entrypoints=websecure"\cf4 \ + \cf6 -\cf4 \cf5 "traefik.http.routers.myapp2.tls.certresolver=myresolver"\cf4 \ + \cf6 -\cf4 \cf5 "traefik.http.routers.myapp2.service=myapp-service"\cf4 \ +\ + \cf7 # Gemeinsamer Service\cf4 \ + \cf6 -\cf4 \cf5 "traefik.http.services.myapp-service.loadbalancer.server.port=8080" +\f2\fs24 \cf0 \ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f0\fs42 \cf2 Beide Router ( +\f4 myapp1 +\f0 , +\f4 myapp2 +\f0 ) leiten an denselben Service ( +\f4 myapp-service +\f0 ) weiter, der den Container auf Port 8080 anspricht.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\f2\fs24 \cf0 \ +\uc0\u11835 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f0\fs42 \cf2 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f3\b\fs44 \cf2 \uc0\u55358 \u56800 Im Container unterscheiden, welche Domain aufgerufen wurde +\f0\b0\fs42 \ +\ +Sobald eine Anfrage im Container landet, kannst du anhand des +\f1\b HTTP-Headers Host +\f0\b0 erkennen, \'fcber welche Domain sie kam.\ +\ +Beispiel (z. B. in einer Node.js-, PHP-, Python- oder Go-App): +\f2\fs24 \cf0 \ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\f5\fs28 \cf7 # Beispiel Flask / Python\cf4 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 +\cf8 from\cf4 flask \cf8 import\cf4 Flask, request\ +\ +app = Flask(__name__)\ +\ +\cf9 @app.route(\cf5 '/'\cf9 )\cf4 \ +\cf8 def\cf4 index():\ + host = request.headers.get(\cf5 'Host'\cf4 )\ + \cf8 return\cf4 \cf5 f"Aufgerufen \'fcber: \cf10 \{host\}\cf5 "\cf4 \ +\ +app.run(host=\cf5 '0.0.0.0'\cf4 , port=\cf6 8080\cf4 ) +\f2\fs24 \cf0 \ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f0\fs42 \cf2 Oder in Node.js: +\f2\fs24 \cf0 \ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\f5\fs28 \cf4 app.get(\cf5 '/'\cf4 , (req, res) => \{\ + res.send(\cf5 `Aufgerufen \'fcber: \cf10 $\{req.headers.host\}\cf5 `\cf4 );\ +\}); +\f2\fs24 \cf0 \ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f0\fs42 \cf2 Das Feld +\f4 req.headers.host +\f0 enth\'e4lt genau den Hostnamen, den Traefik aus der Anfrage durchreicht ( +\f4 app.example.com +\f0 oder +\f4 test.example.org +\f0 ).\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\f2\fs24 \cf0 \ +\uc0\u11835 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f0\fs42 \cf2 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f3\b\fs44 \cf2 \uc0\u9989 Zusammengefasst +\f2\b0\fs24 \cf0 \ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f6\b\fs40 \cf2 Ziel +\f2\b0\fs24 \cf0 +\f6\b\fs40 \cf2 Vorgehen +\f2\b0\fs24 \cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f0\fs40 \cf2 Mehrere Domains/Subdomains auf denselben Container routen +\f2\fs24 \cf0 +\f0\fs40 \cf2 Mehrere Traefik-Router mit unterschiedlichen +\f4 Host() +\f0 -Regeln, aber demselben Service +\f2\fs24 \cf0 \ + +\f0\fs40 \cf2 Domain im Container unterscheiden +\f2\fs24 \cf0 +\f0\fs40 \cf2 Den +\f4 Host +\f0 -Header der Anfrage auslesen +\f2\fs24 \cf0 \ + +\f0\fs40 \cf2 SSL-Zertifikate +\f2\fs24 \cf0 +\f0\fs40 \cf2 F\'fcr jede Domain einen Router mit +\f4 tls.certresolver +\f0 definieren (Traefik k\'fcmmert sich um Let\'92s Encrypt automatisch) +\f2\fs24 \cf0 \ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 +\cf0 \ +\uc0\u11835 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\sl324\slmult1\pardirnatural\partightenfactor0 + +\f0\fs42 \cf2 \ +Wenn du magst, kann ich dir ein vollst\'e4ndiges +\f4 docker-compose.yml +\f0 -Beispiel mit Traefik + deinem App-Container (inkl. HTTPS via Let\'92s Encrypt) zusammenstellen.\ +\uc0\u55357 \u56393 Soll ich das machen?} \ No newline at end of file diff --git a/doc/ToDo.md b/doc/ToDo.md new file mode 100644 index 0000000..a7e574a --- /dev/null +++ b/doc/ToDo.md @@ -0,0 +1,9 @@ +# ToDos + +2025-11-09 rxf + +### Allgemain + +* Daten, die via Mongo geholt werden (insbesondere die properties) cachen + * Vergleich auf die sensorid. Wenn die sich geƤndert hat, dann neu holen. Ansonsten aus dem Cache nehmen. + \ No newline at end of file