bartbutenaers / node-red-contrib-letsencrypt

A Node-RED node to request and renew LetsEncrypt certificates.
Apache License 2.0
7 stars 2 forks source link

acme-client node doesn't show up after npm install. #1

Open lu4t opened 3 years ago

lu4t commented 3 years ago

first of all, congrats on all your nodes... your repo is amazing!!!.

After testing the letsencrypt node following your instructions, I managed to install and start it locally without a problem. But when I tried to install, following the same steps, on a hosted node-red instance, the acme-client node didn't show up. After doing some tests, deleted and re-installed, stoping and re-starting nodered,... nothing happened. The solution I found was to remove the node-red container and creating a new one. Then the new container (which was mapped to the same /data volume as the one I deleted) found the acme-client node all the sudden. I found this node very useful, and I believe this might prevent others to use it cause the installation might fail. Should you need logs or something to debug what happened, I can try to repeate the process I followed and send it to you. Thanks again for all your contribution.

bartbutenaers commented 3 years ago

Hi @lu4t, Thanks for the constructive feedback!!!

on a hosted node-red instance, the acme-client node didn't show up

Can you share some more detail about the hosted node-red?
And what do you mean that it doesn't show up? In the panel on the left side of your editor, or in the flow editor? I know for example on IBM cloud this can result in headache, as e.g. in this discussion.

Can I assume that you run Docker containers? And is this the only contrib node that has this kind of troubles?

If you should see errors in the logs, please share those! Bart

lu4t commented 3 years ago

Hi @lu4t, Thanks for the constructive feedback!!!

on a hosted node-red instance, the acme-client node didn't show up

Can you share some more detail about the hosted node-red? And what do you mean that it doesn't show up? In the panel on the left side of your editor, or in the flow editor? I know for example on IBM cloud this can result in headache, as e.g. in this discussion.

Can I assume that you run Docker containers? And is this the only contrib node that has this kind of troubles?

If you should see errors in the logs, please share those! Bart

hi @bartbutenaers you nailed it. This happened when deploying a node-red docker on a kubernetes cluster at IBMCloud. I had a look at the discussion you mention, but it is not applicable to this case, you had this problem on a cloudfoundry environment (which kind of sucks, to be all honest). We are using a regular k8s cluster, which is no different of any other you would find at any other cloud provider. When I say it doesn't show up, the node is not showing on the left... and if I import a flow which contains this node, a warning saying "the node XXXXX is not known" pops on the screen.

imagen

By the way, when I do the exact same process (following your guide on this repo) on a NR docker running on my local desktop, none of this happened, the flows are working and the node shows up.

There's no log on NR editor that I can show (nothing there).

This is the console right after installing the node:

bash-5.0# npm install bartbutenaers/node-red-contrib-letsencrypt

> @root/acme@3.1.0 postinstall /usr/src/node-red/node_modules/@root/acme
> node scripts/postinstall

npm notice created a lockfile as package-lock.json. You should commit this file.
+ node-red-contrib-letsencrypt@1.0.0
added 46 packages from 26 contributors and audited 408 packages in 11.367s

6 packages are looking for funding
  run `npm fund` for details

found 3 moderate severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details
bash-5.0# 

something that looks strange to me is, when I enter the nodes folder, I cannot see any module called acme-client. This is what I get if I dols into node-red/node_modules folder:

abbrev                                 denque                                 jsbn                                   proxy-addr
accepts                                depd                                   json-schema                            pseudomap
acme-dns-01-cloudflare                 destroy                                json-schema-traverse                   psl
acme-dns-01-digitalocean               detect-libc                            json-stable-stringify-without-jsonify  pump
acme-dns-01-dnsimple                   dicer                                  json-stringify-safe                    pumpify
acme-dns-01-duckdns                    dom-serializer                         jsonata                                punycode
acme-dns-01-gandi                      domelementtype                         jsonfile                               qs
acme-dns-01-godaddy                    domhandler                             jsprim                                 random-bytes
acme-dns-01-namecheap                  domutils                               leven                                  range-parser
acme-dns-01-namedotcom                 duplexer3                              lodash.assignin                        raw-body
acme-dns-01-route53                    duplexify                              lodash.bind                            rc
acme-dns-01-vultr                      ecc-jsbn                               lodash.clonedeep                       read
acme-dns-01-zeit                       ee-first                               lodash.defaults                        readable-stream
acme-v2                                emoji-regex                            lodash.filter                          regenerator-runtime
agent-base                             encodeurl                              lodash.flatten                         reinterval
ajv                                    end-of-stream                          lodash.foreach                         remove-trailing-separator
ansi-regex                             entities                               lodash.map                             request
ansi-styles                            es-class                               lodash.merge                           retry
append-field                           es6-promise                            lodash.pick                            rimraf
aproba                                 es6-promisify                          lodash.reduce                          safe-buffer
are-we-there-yet                       escape-html                            lodash.reject                          safer-buffer
argparse                               escape-string-regexp                   lodash.some                            sax
array-flatten                          esprima                                lowercase-keys                         semver
asn1                                   etag                                   lru-cache                              send

it might be normal, but I was expecting to see: Lets encrypt and acme-client modules.... I hope this helps, and let me know if I can help on debugging.

best regards!

lu4t commented 3 years ago

part 2: I tried to install Let's encrypt node using the palette, and this is the log I got after installing:

-----------------------------------------------------------
2021-02-12T01:32:16.578Z Install : node-red-contrib-lets-encrypt 0.0.3

2021-02-12T01:32:16.877Z npm install --no-audit --no-update-notifier --no-fund --save --save-prefix=~ --production node-red-contrib-lets-encrypt@0.0.3
2021-02-12T01:32:20.084Z [err] npm
2021-02-12T01:32:20.085Z [err]  WARN deprecated greenlock-challenge-dns@3.0.7: Please use acme-dns-01-cli. See https://www.npmjs.com/package/acme-dns-01-cli
2021-02-12T01:32:22.822Z [out] 
2021-02-12T01:32:22.822Z [out] > acme-v2@1.8.6 postinstall /data/node_modules/acme/node_modules/acme-v2
2021-02-12T01:32:22.822Z [out] > node scripts/postinstall
2021-02-12T01:32:22.822Z [out] 
2021-02-12T01:32:23.214Z [out] 
2021-02-12T01:32:23.215Z [out] Greenlock and ACME.js v3 are on the way!
2021-02-12T01:32:23.215Z [out] Watch for updates at https://indiegogo.com/at/greenlock
2021-02-12T01:32:23.215Z [out] 
2021-02-12T01:32:24.424Z [out] 
2021-02-12T01:32:24.424Z [out] > acme-v2@1.8.6 postinstall /data/node_modules/greenlock/node_modules/acme-v2
2021-02-12T01:32:24.424Z [out] > node scripts/postinstall
2021-02-12T01:32:24.424Z [out] 
2021-02-12T01:32:24.835Z [out] 
2021-02-12T01:32:24.838Z [out] Greenlock and ACME.js v3 are on the way!
2021-02-12T01:32:24.838Z [out] Watch for updates at https://indiegogo.com/at/greenlock
2021-02-12T01:32:24.838Z [out] 
2021-02-12T01:32:26.162Z [out] + node-red-contrib-lets-encrypt@0.0.3
2021-02-12T01:32:26.162Z [out] added 43 packages from 21 contributors in 8.77s
2021-02-12T01:32:26.187Z rc=0

just in case it helps... after adding Let's encrypt node using the palette I get it listed on the left, but I still get the message saying the acme-client node is missing.

lu4t commented 3 years ago

part 3: this is the most interesting one. I added a let's encrypt input node from the left navigation, then I clicked deploy flows... nothing happened. Right after that I killed the pod, recreated a new one and there you have it. The acme-client node showed up.

I am happy, cause I get it working... but I am pretty sure this is not the install method you'd like the users of your nodes to follow.... :)

Let me know if I can help on something.

imagen

bartbutenaers commented 3 years ago

something that looks strange to me is, when I enter the nodes folder, I cannot see any module called acme-client.

I have now installed the node on my Windows portable and this is what has been added to .node-red\node_modules folder:

12/02/2021  12:41    <DIR>          .bin
12/02/2021  12:41    <DIR>          cert-info
12/02/2021  12:41    <DIR>          node-red-contrib-letsencrypt
12/02/2021  12:41    <DIR>          acme-dns-01-zeit
12/02/2021  12:41    <DIR>          acme-v2
12/02/2021  12:41    <DIR>          bcryptjs
12/02/2021  12:41    <DIR>          check-password-strength
12/02/2021  12:41    <DIR>          acme-dns-01-route53
12/02/2021  12:41    <DIR>          acme-dns-01-namedotcom
12/02/2021  12:41    <DIR>          acme-dns-01-cloudflare
12/02/2021  12:41    <DIR>          acme-dns-01-dnsimple
12/02/2021  12:41    <DIR>          acme-dns-01-namecheap
12/02/2021  12:41    <DIR>          acme-dns-01-gandi
12/02/2021  12:41    <DIR>          acme-dns-01-vultr
12/02/2021  12:41    <DIR>          acme-dns-01-godaddy
12/02/2021  12:41    <DIR>          url-parse-lax
12/02/2021  12:41    <DIR>          got
12/02/2021  12:41    <DIR>          acme-dns-01-duckdns
12/02/2021  12:41    <DIR>          cloudflare
12/02/2021  12:41    <DIR>          unzip-response
12/02/2021  12:41    <DIR>          timed-out
12/02/2021  12:41    <DIR>          should-proxy
12/02/2021  12:41    <DIR>          url-pattern
12/02/2021  12:41    <DIR>          acme-dns-01-digitalocean
12/02/2021  12:41    <DIR>          lowercase-keys
12/02/2021  12:41    <DIR>          prepend-http
12/02/2021  12:41    <DIR>          duplexer3
12/02/2021  12:41    <DIR>          is-retry-allowed
12/02/2021  12:41    <DIR>          es-class
12/02/2021  12:41    <DIR>          is-redirect
12/02/2021  12:41    <DIR>          is-stream
12/02/2021  12:41    <DIR>          autocreate
12/02/2021  12:41    <DIR>          create-error-class
12/02/2021  12:41    <DIR>          capture-stack-trace
12/02/2021  12:41    <DIR>          get-stream
12/02/2021  12:41    <DIR>          @root

The node-red-contrib-letsencrypt folder is my node, the others are dependencies. In the early days my node called node-red-contrib-acme-client, but after a discussion on Discourse we decided to change the name (because nobody knows what acme is ...).

The weird thing is that it looks like you don't get a node-red-contrib-letsencrypt folder?

after adding Let's encrypt node using the palette I get it listed on the left

Did you install a node (which is not published on NPM) via the Node-RED flow editor menu? Have not used that yet ...

I tried to install Let's encrypt node using the palette, and this is the log I got after installing

Have not seen the v3 messages before, because at the time being there was only the v2 version of the acme library...

Right after that I killed the pod, recreated a new one and there you have it. The acme-client node showed up.

Well to be honest this is way above my paygrade. Have not used Kubernetes, and my spare time is way too limited to start with it unfortunately. If I were you, I would start a discussion on Discourse. Hopefully somebody from the community has some experience with this kind of stuff ...

lu4t commented 3 years ago

something that looks strange to me is, when I enter the nodes folder, I cannot see any module called acme-client.

I have now installed the node on my Windows portable and this is what has been added to .node-red\node_modules folder:

12/02/2021  12:41    <DIR>          .bin
12/02/2021  12:41    <DIR>          cert-info
12/02/2021  12:41    <DIR>          node-red-contrib-letsencrypt
12/02/2021  12:41    <DIR>          acme-dns-01-zeit
12/02/2021  12:41    <DIR>          acme-v2
12/02/2021  12:41    <DIR>          bcryptjs
12/02/2021  12:41    <DIR>          check-password-strength
12/02/2021  12:41    <DIR>          acme-dns-01-route53
12/02/2021  12:41    <DIR>          acme-dns-01-namedotcom
12/02/2021  12:41    <DIR>          acme-dns-01-cloudflare
12/02/2021  12:41    <DIR>          acme-dns-01-dnsimple
12/02/2021  12:41    <DIR>          acme-dns-01-namecheap
12/02/2021  12:41    <DIR>          acme-dns-01-gandi
12/02/2021  12:41    <DIR>          acme-dns-01-vultr
12/02/2021  12:41    <DIR>          acme-dns-01-godaddy
12/02/2021  12:41    <DIR>          url-parse-lax
12/02/2021  12:41    <DIR>          got
12/02/2021  12:41    <DIR>          acme-dns-01-duckdns
12/02/2021  12:41    <DIR>          cloudflare
12/02/2021  12:41    <DIR>          unzip-response
12/02/2021  12:41    <DIR>          timed-out
12/02/2021  12:41    <DIR>          should-proxy
12/02/2021  12:41    <DIR>          url-pattern
12/02/2021  12:41    <DIR>          acme-dns-01-digitalocean
12/02/2021  12:41    <DIR>          lowercase-keys
12/02/2021  12:41    <DIR>          prepend-http
12/02/2021  12:41    <DIR>          duplexer3
12/02/2021  12:41    <DIR>          is-retry-allowed
12/02/2021  12:41    <DIR>          es-class
12/02/2021  12:41    <DIR>          is-redirect
12/02/2021  12:41    <DIR>          is-stream
12/02/2021  12:41    <DIR>          autocreate
12/02/2021  12:41    <DIR>          create-error-class
12/02/2021  12:41    <DIR>          capture-stack-trace
12/02/2021  12:41    <DIR>          get-stream
12/02/2021  12:41    <DIR>          @root

The node-red-contrib-letsencrypt folder is my node, the others are dependencies. In the early days my node called node-red-contrib-acme-client, but after a discussion on Discourse we decided to change the name (because nobody knows what acme is ...).

The weird thing is that it looks like you don't get a node-red-contrib-letsencrypt folder?

after adding Let's encrypt node using the palette I get it listed on the left

Did you install a node (which is not published on NPM) via the Node-RED flow editor menu? Have not used that yet ...

I tried to install Let's encrypt node using the palette, and this is the log I got after installing

Have not seen the v3 messages before, because at the time being there was only the v2 version of the acme library...

Right after that I killed the pod, recreated a new one and there you have it. The acme-client node showed up.

Well to be honest this is way above my paygrade. Have not used Kubernetes, and my spare time is way too limited to start with it unfortunately. If I were you, I would start a discussion on Discourse. Hopefully somebody from the community has some experience with this kind of stuff ...

it's okay, now it seems to work properly. The fact this is installed on a kubernetes cluster has no effect on the install process of a node. At the end of the day, it is just a docker install from the same image you would use on a localhost. There's a node-red-contrib-letsencrypt folder. Actually, there are two. One with a dash:


bash-5.0# ls -lsa
total 332
     4 drwxr-xr-x   83 root     root          4096 Feb 12 02:37 .
     4 drwxr-xr-x    5 root     root          4096 Feb 12 08:58 ..
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:32 .bin
     4 drwxr-xr-x   11 root     root          4096 Feb 12 02:32 @root
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:32 acme
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 acme-dns-01-cloudflare
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 acme-dns-01-digitalocean
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 acme-dns-01-dnsimple
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 acme-dns-01-duckdns
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 acme-dns-01-gandi
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 acme-dns-01-godaddy
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 acme-dns-01-namecheap
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 acme-dns-01-namedotcom
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 acme-dns-01-route53
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 acme-dns-01-vultr
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 acme-dns-01-zeit
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 acme-v2
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 agent-base
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 autocreate
     4 drwxr-xr-x    9 root     root          4096 Feb 12 02:27 bcryptjs
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 capture-stack-trace
     4 drwxr-xr-x    4 root     root          4096 Feb 12 02:27 cert-info
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 check-password-strength
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 cloudflare
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:32 core-util-is
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 create-error-class
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 debug
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:32 detect-node
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 duplexer3
     4 drwxr-xr-x    5 root     root          4096 Feb 12 02:32 eckles
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 es-class
     4 drwxr-xr-x    4 root     root          4096 Feb 12 02:27 es6-promise
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 es6-promisify
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 get-stream
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 got
     4 drwxr-xr-x    4 root     root          4096 Feb 12 02:32 greenlock
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:32 greenlock-challenge-dns
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:32 greenlock-store-fs
     4 drwxr-xr-x    4 root     root          4096 Feb 12 02:32 handle-thing
     4 drwxr-xr-x    7 root     root          4096 Feb 12 02:32 hpack.js
     4 drwxr-xr-x    4 root     root          4096 Feb 12 02:32 http-deceiver
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 https-proxy-agent
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:32 inherits
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 is-redirect
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 is-retry-allowed
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 is-stream
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:32 isarray
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:32 keypairs
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:32 le-challenge-fs
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:32 le-sni-auto
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:32 le-store-certbot
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 lowercase-keys
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:32 minimalistic-assert
     4 drwxr-xr-x    4 root     root          4096 Feb 12 02:32 minimist
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:32 mkdirp
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 ms
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:32 node-red-contrib-lets-encrypt
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:37 node-red-contrib-letsencrypt
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 safe-buffer
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:32 safe-replace
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 sax
     4 drwxr-xr-x    4 root     root          4096 Feb 12 02:32 select-hose
     4 drwxr-xr-x    4 root     root          4096 Feb 12 02:27 should-proxy
     4 drwxr-xr-x    5 root     root          4096 Feb 12 02:32 spdy
     4 drwxr-xr-x    4 root     root          4096 Feb 12 02:32 spdy-transport
     4 drwxr-xr-x    4 root     root          4096 Feb 12 02:32 string_decoder
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 timed-out
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 unzip-response
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:27 url-parse-lax
     4 drwxr-xr-x    5 root     root          4096 Feb 12 02:27 url-pattern
     4 drwxr-xr-x    2 root     root          4096 Feb 12 02:32 util-deprecate
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:32 wbuf
     4 drwxr-xr-x    3 root     root          4096 Feb 12 02:27 xml2js
     4 drwxr-xr-x    4 root     root          4096 Feb 12 02:27 xmlbuilder

I believe the first one (node-red-contrib-lets-encrypt) is the one installed with the npm install command on your guide, and the second one (node-red-contrib-letsencrypt) is the one installed when using the palette. I don't know if the problem happens cause one is referenced as a dependency or something; the truth is the "acme-client" showed up after I installed the one on the palette and, right after I killed the pod (i.e. restarted the node-red docker).