แž€แžถแžšแžŠแžถแž€แŸ‹แž–แž„แŸ’แžšแžถแž™ แž“แžทแž„แž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แž€แžถแžšแž•แŸ’แž‘แŸ€แž„แž•แŸ’แž‘แžถแžแŸ‹แžแŸ’แž“แžถแŸ†แž„แž€แŸ’แžšแž แž˜แž“แŸ…แž›แžพ docker-compose

แž€แžถแžšแžŠแžถแž€แŸ‹แž–แž„แŸ’แžšแžถแž™ แž“แžทแž„แž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แž€แžถแžšแž•แŸ’แž‘แŸ€แž„แž•แŸ’แž‘แžถแžแŸ‹แžแŸ’แž“แžถแŸ†แž„แž€แŸ’แžšแž แž˜แž“แŸ…แž›แžพ docker-compose

แž€แžถแžšแžŠแžถแž€แŸ‹แž–แž„แŸ’แžšแžถแž™ node-red แž“แŸ…แž›แžพ docker-compose แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแžขแž“แžปแž‰แŸ’แž‰แžถแžแžขแž“แžปแž‰แŸ’แž‰แžถแž แž“แžทแž„แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹ docker volumeแŸ”

แž”แž„แŸ’แž€แžพแžแžฏแž€แžŸแžถแžš docker-compose.ymlแŸ–

version: "3.7"

services:
  node-red:
    image: nodered/node-red
    environment:
      - TZ=Europe/Moscow
    ports:
      - "11880:1880" # 11880 - ะฟะพั€ั‚ ะดะปั ะฟะพะดะบะปัŽั‡ะตะฝะธั ะบ ะบะพะฝั‚ะตะนะฝะตั€ัƒ, 1880 - ะฟะพั€ั‚ ะฝะฐ ะบะพั‚ะพั€ะพะผ ั€ะฐะฑะพั‚ะฐะตั‚ node-red ะฒะฝัƒั‚ั€ะธ ะบะพะฝั‚ะตะนะฝะตั€ะฐ.
    volumes:
      - "node-red:/data" # node-red - ะบะฐั‚ะฐะปะพะณ ะบะพั‚ะพั€ั‹ะน ะฒั‹ะดะตะปะธั‚ docker ะดะปั ั…ั€ะฐะฝะตะฝะธั ะดะฐะฝะฝั‹ั…, /data - ะบะฐั‚ะฐะปะพะณ ะฒะฝัƒั‚ั€ะธ ะบะพะฝั‚ะตะนะฝะตั€ะฐ.
    restart: always
volumes:
  node-red: # ัะพะทะดะฐะฝะธะต ะบะฐั‚ะฐะปะพะณะฐ node-red ะฝะฐ ั…ะพัั‚ะต.


แž™แžพแž„แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž€แžปแž„แžแžบแž“แŸแžšแž€แŸ’แž“แžปแž„แžšแž”แŸ€แž”แž”แŸ†แž”แžถแžแŸ‹แž€แŸ†แž แžปแžŸ (แž€แžถแžšแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แžŠแŸ†แž”แžผแž„แž‚แžฝแžšแžแŸ‚แžŠแŸ„แž™แž‚แŸ’แž˜แžถแž“แž‚แŸ’แžšแžถแž”แŸ‹แž…แžปแž… `-d` แžŠแžพแž˜แŸ’แž”แžธแž˜แžพแž›แž€แŸ†แž แžปแžŸแž“แŸ…แž–แŸแž›แžœแžถแž›แŸแž…แžกแžพแž„)แŸ–

$ docker-compose up node-red
Creating node-red_node-red_1_3e3e59f5e044 ... done
Attaching to node-red_node-red_1_bca4cb987984
node-red_1_bca4cb987984 |
node-red_1_bca4cb987984 | > [email protected] start /usr/src/node-red
node-red_1_bca4cb987984 | > node $NODE_OPTIONS node_modules/node-red/red.js $FLOWS "--userDir" "/data"
...

แž”แž‰แŸ’แžˆแž”แŸ‹แž€แžปแž„แžแžบแž“แŸแžš แž แžพแž™แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแžŠแžพแž˜แŸ’แž”แžธแž˜แžพแž›แž€แž˜แŸ’แžšแžทแžแžŸแŸ†แžกแŸแž„แŸ–

$ docker volume ls
DRIVER              VOLUME NAME
local               node-red_node-red

แž™แžพแž„แž˜แžพแž›แž–แŸแžแŸŒแž˜แžถแž“แž›แž˜แŸ’แžขแžทแžแžขแŸ†แž–แžธแž”แžšแžทแž˜แžถแžŽแŸ–

$ docker volume inspect node-red_node-red
[
    {
        "CreatedAt": "2020-05-02T18:37:33Z",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "node-red",
            "com.docker.compose.version": "1.23.0",
            "com.docker.compose.volume": "node-red"
        },
        "Mountpoint": "/var/lib/docker/volumes/node-red_node-red/_data", # ั€ะฐัะพะปะพะถะตะฝะธะต ะฝะฐัˆะตะณะพ ะบะฐั‚ะฐะปะพะณะฐ
        "Name": "node-red_node-red",
        "Options": null,
        "Scope": "local"
    }
]

แž…แžผแž›แž‘แŸ…แž€แžถแž“แŸ‹แžแžแžŸแŸ†แžกแŸแž„แŸ” แžแžแž“แŸแŸ‡แž˜แžถแž“แžฏแž€แžŸแžถแžšแžŠแŸ‚แž› docker แž”แžถแž“แž”แž„แŸ’แž€แžพแžแž“แŸ…แž–แŸแž›แžŠแžถแž€แŸ‹แž–แž„แŸ’แžšแžถแž™แž€แžปแž„แžแžบแž“แŸแžšแŸ”

$ sudo ls /var/lib/docker/volumes/node-red_node-red/_data
lib  package.json  settings.js

แž™แžพแž„แž…แžถแž”แŸ‹แžขแžถแžšแž˜แŸ’แž˜แžŽแŸแž›แžพแžฏแž€แžŸแžถแžš settings.js. แž”แžพแž€แžœแžถแž แžพแž™แžšแž€แž˜แžพแž›แž”แŸ†แžŽแŸ‚แž€แž“แŸƒแž›แŸแžแž€แžผแžŠ adminAuth. แž…แžผแžšแž™แžพแž„แž”แž‰แŸ’แž…แŸแž‰แž˜แžแžทแŸ”

 // Securing Node-RED
    // -----------------
    // To password protect the Node-RED editor and admin API, the following
    // property can be used. See http://nodered.org/docs/security.html for details.
    adminAuth: {
        type: "credentials",
        users: [{
            username: "admin",
            password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
            permissions: "*"
        }]
    },

แž“แŸ…แž€แŸ’แž“แžปแž„แž‚แž“แŸ’แž›แžนแŸ‡ แž–แžถแž€แŸ’แž™แžŸแž˜แŸ’แž„แžถแžแŸ‹แŸ– แžขแŸ’แž“แž€โ€‹แžแŸ’แžšแžผแžœโ€‹แž”แž‰แŸ’แž…แžผแž›โ€‹แž›แŸแžโ€‹แžŸแž˜แŸ’แž„แžถแžแŸ‹โ€‹แžแŸ’แž“แžถแŸ†แž„โ€‹แž€แŸ’แžšแž แž˜โ€‹แŸ”

แž‘แž‘แžฝแž›แž”แžถแž“แž›แŸแžแžŸแŸ†แž„แžถแžแŸ‹แž›แŸแžแžŸแŸ†แž„แžถแžแŸ‹แž€แŸ’แžšแž แž˜
แžŠแŸ†แžกแžพแž„แž€แž‰แŸ’แž…แž”แŸ‹ node-red-admin แž“แŸ…แž›แžพแž˜แŸ‰แžถแžŸแŸŠแžธแž“แžŽแžถแžŠแŸ‚แž›แžŠแŸ†แžŽแžพแžšแž€แžถแžš node.js แŸ”

npm i node-red-admin -g

แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž€แž‰แŸ’แž…แž”แŸ‹ แž แžพแž™แž€แŸ†แžŽแžแŸ‹แž–แžถแž€แŸ’แž™แžŸแž˜แŸ’แž„แžถแžแŸ‹แŸ–

node-red-admin hash-pw

แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž€แžปแž„แžแžบแž“แŸแžšแž แžพแž™แž—แŸ’แž‡แžถแž”แŸ‹แž‘แŸ…แž…แŸ’แžšแž€ 11880.

http://192.168.0.100:11880/

แž”แž„แŸ’แžขแžฝแž…แžขแž“แžปแž‰แŸ’แž‰แžถแžแž‚แžฝแžšแžแŸ‚แž›แŸแž…แžกแžพแž„แŸ”

แž€แžถแžšแžŠแžถแž€แŸ‹แž–แž„แŸ’แžšแžถแž™ แž“แžทแž„แž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แž€แžถแžšแž•แŸ’แž‘แŸ€แž„แž•แŸ’แž‘แžถแžแŸ‹แžแŸ’แž“แžถแŸ†แž„แž€แŸ’แžšแž แž˜แž“แŸ…แž›แžพ docker-compose

แž”แž‰แŸ’แž…แžผแž›แž–แžถแž€แŸ’แž™แžŸแž˜แŸ’แž„แžถแžแŸ‹แž…แžผแž›แžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แŸ”

แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แžœแžธแŸ—แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž”แžถแž“ แžŸแžผแž˜แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž€แžปแž„แžแžบแž“แŸแžšแžกแžพแž„แžœแžทแž‰แžŠแŸ„แž™แž”แŸ’แžšแžพแžŸแŸ„ -d.

$ docker-compose up -d node-red

แžขแŸ’แžœแžธแž˜แžฝแž™โ€‹แžŠแžผแž…แž“แŸแŸ‡แŸ”

แž”แŸ’แžšแž—แž–: www.habr.com

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹