Vai al contenuto principale

docker-linux


Docker su Linux/macOS

In questa guida, imparerai a distribuire MyEMS con Docker su Linux (o macOS).

Prerequisiti

  • Docker e npm installati sul host.
  • Server MySQL installato.
  • Il database MySQL deve essere accessibile dall'host su cui è in esecuzione Docker Engine.
  • Requisiti hardware: almeno 4GB di RAM, 20GB di spazio di archiviazione (database e container Docker).

Clona il codice sorgente:

cd ~
git clone https://github.com/myems/myems

Passaggio 1 Database

Vedi Database

Passaggio 2 myems-api

In questa sezione, installerai myems-api su Docker.

  • Copia il codice sorgente nella directory root
cp -r myems/myems-api /
cd /myems-api
  • Crea il file .env basato sul file example.env
Attenzione

Sostituisci manualmente 127.0.0.1 con il vero indirizzo IP dell'HOST.

cp example.env .env
  • Costruisci l'immagine dal codice sorgente
docker build -t myems/myems-api .

Per costruire per più piattaforme e non solo per l'architettura e il sistema operativo su cui viene eseguita la build da parte dell'utente, puoi utilizzare buildx e impostare il flag --platform per specificare la piattaforma target per l'output della build (ad esempio, linux/amd64, linux/arm64 o darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-api .
  • Esegui un container Docker

Sull'host, crea una cartella condivisa per i file di upload:

mkdir /myems-upload

Crea un container, monta in bind la cartella condivisa nel container e monta anche il file .env nel container:

docker run -d -p 8000:8000 -v /myems-upload:/var/www/myems-admin/upload -v /myems-api/.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-api myems/myems-api
  • -d Esegue il container in background e stampa l'ID del container

  • -p Pubblica la/le porta/e del container sull'host, 8000:8000 (Host:Container) associa la porta 8000 (destra) del container alla porta TCP 8000 (sinistra) della macchina host.

  • -v Se utilizzi -v o --volume per montare in bind un file o una directory che non esiste ancora sull'host Docker, -v crea l'endpoint per te. Viene sempre creato come directory. L'opzione ro, se presente, fa sì che il mount in bind venga montato nel container come sola lettura. Per le versioni v4.7.0 o precedenti, utilizza '/code/.env' invece di '/app/.env'.

  • --log-opt max-size=2m La dimensione massima del log prima che venga ruotato. Un numero intero positivo più un modificatore che rappresenta l'unità di misura (k, m o g).

  • --log-opt max-file=2 Il numero massimo di file di log che possono essere presenti. Se la rotazione dei log crea file in eccesso, il file più vecchio viene rimosso. Un numero intero positivo.

  • --restart Politica di riavvio da applicare quando un container termina

  • --name Assegna un nome al container

Il percorso assoluto prima dei due punti si riferisce al percorso sull'host e può variare nel tuo sistema. Il percorso assoluto dopo i due punti si riferisce al percorso nel container e NON può essere modificato. Trasmettendo .env come parametro di mount in bind, puoi modificare successivamente i valori di configurazione. Se modifichi il file .env, riavvia il container per rendere effettiva la modifica.

Se vuoi migrare l'immagine su un altro computer:

  • Esporta l'immagine in un file tar
docker save --output myems-api.tar myems/myems-api
  • Copia il file tar su un altro computer, quindi carica l'immagine dal file tar
docker load --input .\myems-api.tar

Passaggio 3 myems-admin

In questa sezione, installerai myems-admin su Docker.

  • Copia il codice sorgente nella directory root
cp -r myems/myems-admin /
cd /myems-admin
Attenzione

Sostituisci manualmente 127.0.0.1:8000 in nginx.conf con il vero indirizzo IP dell'HOST e la porta di myems-api

nano nginx.conf
      proxy_pass http://127.0.0.1:8000/;
  • Costruisci l'immagine dal codice sorgente
docker build -t myems/myems-admin .

Per costruire per più piattaforme e non solo per l'architettura e il sistema operativo su cui viene eseguita la build da parte dell'utente, puoi utilizzare buildx e impostare il flag --platform per specificare la piattaforma target per l'output della build (ad esempio, linux/amd64, linux/arm64 o darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-admin .
  • Esegui un container Docker

Sull'host, crea una cartella condivisa per i file di upload:

mkdir /myems-upload

Crea un container, monta in bind la cartella condivisa per i file di upload nel container e monta anche nginx.conf in bind:

docker run -d -p 8001:8001 -v /myems-upload:/var/www/myems-admin/upload -v /myems-admin/nginx.conf:/etc/nginx/nginx.conf:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-admin myems/myems-admin
  • -d Esegue il container in background e stampa l'ID del container

  • -p Pubblica la/le porta/e del container sull'host, 8001:8001 (Host:Container) associa la porta 8001 (destra) del container alla porta TCP 8001 (sinistra) della macchina host.

  • -v Se utilizzi -v o --volume per montare in bind un file o una directory che non esiste ancora sull'host Docker, -v crea l'endpoint per te. Viene sempre creato come directory. L'opzione ro, se presente, fa sì che il mount in bind venga montato nel container come sola lettura. Per le versioni v4.7.0 o precedenti, utilizza '/code/.env' invece di '/app/.env'.

  • --log-opt max-size=2m La dimensione massima del log prima che venga ruotato. Un numero intero positivo più un modificatore che rappresenta l'unità di misura (k, m o g).

  • --log-opt max-file=2 Il numero massimo di file di log che possono essere presenti. Se la rotazione dei log crea file in eccesso, il file più vecchio viene rimosso. Un numero intero positivo.

  • --restart Politica di riavvio da applicare quando un container termina

  • --name Assegna un nome al container

Se vuoi migrare l'immagine su un altro computer:

  • Esporta l'immagine in un file tar
docker save --output myems-admin.tar myems/myems-admin
  • Copia il file tar su un altro computer, quindi carica l'immagine dal file tar
docker load --input .\myems-admin.tar

Passaggio 4 myems-modbus-tcp

In questa sezione, installerai myems-modbus-tcp su Docker.

  • Copia il codice sorgente nella directory root
cp -r myems/myems-modbus-tcp /
cd /myems-modbus-tcp
  • Crea il file .env basato sul file example.env
Attenzione

Sostituisci manualmente 127.0.0.1 con il vero indirizzo IP dell'HOST.

cp example.env .env
  • Costruisci l'immagine dal codice sorgente
docker build -t myems/myems-modbus-tcp .

Per costruire per più piattaforme e non solo per l'architettura e il sistema operativo su cui viene eseguita la build da parte dell'utente, puoi utilizzare buildx e impostare il flag --platform per specificare la piattaforma target per l'output della build (ad esempio, linux/amd64, linux/arm64 o darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-modbus-tcp .
  • Esegui un container Docker (esegui come superutente)
docker run -d -v /myems-modbus-tcp/.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-modbus-tcp myems/myems-modbus-tcp
  • -d Esegue il container in background e stampa l'ID del container

  • -v Se utilizzi -v o --volume per montare in bind un file o una directory che non esiste ancora sull'host Docker, -v crea l'endpoint per te. Viene sempre creato come directory. L'opzione ro, se presente, fa sì che il mount in bind venga montato nel container come sola lettura. Per le versioni v4.7.0 o precedenti, utilizza '/code/.env' invece di '/app/.env'.

  • --log-opt max-size=2m La dimensione massima del log prima che venga ruotato. Un numero intero positivo più un modificatore che rappresenta l'unità di misura (k, m o g).

  • --log-opt max-file=2 Il numero massimo di file di log che possono essere presenti. Se la rotazione dei log crea file in eccesso, il file più vecchio viene rimosso. Un numero intero positivo.

  • --restart Politica di riavvio da applicare quando un container termina

  • --name Assegna un nome al container

Il percorso assoluto prima dei due punti si riferisce al percorso sull'host e può variare nel tuo sistema. Il percorso assoluto dopo i due punti si riferisce al percorso nel container e NON può essere modificato. Trasmettendo .env come parametro di mount in bind, puoi modificare successivamente i valori di configurazione. Se modifichi il file .env, riavvia il container per rendere effettiva la modifica.

  • Migra il container Docker

Per migrare il container su un altro computer:

  • Esporta l'immagine in un file tar
docker save --output myems-modbus-tcp.tar myems/myems-modbus-tcp
  • Copia il file tar su un altro computer, quindi carica l'immagine dal file tar
docker load --input .\myems-modbus-tcp.tar

Passaggio 5 myems-cleaning

In questa sezione, installerai myems-cleaning su Docker.

  • Copia il codice sorgente nella directory root
cp -r myems/myems-cleaning /
cd /myems-cleaning
  • Crea il file .env basato sul file example.env
Attenzione

Sostituisci manualmente 127.0.0.1 con il vero indirizzo IP dell'HOST.

cp example.env .env
  • Costruisci l'immagine dal codice sorgente
docker build -t myems/myems-cleaning .

Per costruire per più piattaforme e non solo per l'architettura e il sistema operativo su cui viene eseguita la build da parte dell'utente, puoi utilizzare buildx e impostare il flag --platform per specificare la piattaforma target per l'output della build (ad esempio, linux/amd64, linux/arm64 o darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-cleaning .
  • Esegui un container Docker (esegui come superutente)
docker run -d -v /myems-cleaning/.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-cleaning myems/myems-cleaning
  • -d Esegue il container in background e stampa l'ID del container

  • -v Se utilizzi -v o --volume per montare in bind un file o una directory che non esiste ancora sull'host Docker, -v crea l'endpoint per te. Viene sempre creato come directory. L'opzione ro, se presente, fa sì che il mount in bind venga montato nel container come sola lettura. Per le versioni v4.7.0 o precedenti, utilizza '/code/.env' invece di '/app/.env'.

  • --log-opt max-size=2m La dimensione massima del log prima che venga ruotato. Un numero intero positivo più un modificatore che rappresenta l'unità di misura (k, m o g).

  • --log-opt max-file=2 Il numero massimo di file di log che possono essere presenti. Se la rotazione dei log crea file in eccesso, il file più vecchio viene rimosso. Un numero intero positivo.

  • --restart Politica di riavvio da applicare quando un container termina

  • --name Assegna un nome al container

Il percorso assoluto prima dei due punti si riferisce al percorso sull'host e può variare nel tuo sistema. Il percorso assoluto dopo i due punti si riferisce al percorso nel container e NON può essere modificato. Trasmettendo .env come parametro di mount in bind, puoi modificare successivamente i valori di configurazione. Se modifichi il file .env, riavvia il container per rendere effettiva la modifica.

  • Migra il container Docker

Per migrare il container su un altro computer:

  • Esporta l'immagine in un file tar
docker save --output myems-cleaning.tar myems/myems-cleaning
  • Copia il file tar su un altro computer, quindi carica l'immagine dal file tar
docker load --input .\myems-cleaning.tar

Passaggio 6 myems-normalization

In questa sezione, installerai myems-normalization su Docker.

  • Copia il codice sorgente nella directory root
cp -r myems/myems-normalization /
cd /myems-normalization
  • Crea il file .env basato sul file example.env
Attenzione

Sostituisci manualmente 127.0.0.1 con il vero indirizzo IP dell'HOST.

cp example.env .env
  • Costruisci l'immagine dal codice sorgente
docker build -t myems/myems-normalization .

Per costruire per più piattaforme e non solo per l'architettura e il sistema operativo su cui viene eseguita la build da parte dell'utente, puoi utilizzare buildx e impostare il flag --platform per specificare la piattaforma target per l'output della build (ad esempio, linux/amd64, linux/arm64 o darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-normalization .
  • Esegui un container Docker (esegui come superutente)
docker run -d -v /myems-normalization/.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-normalization myems/myems-normalization
  • -d Esegue il container in background e stampa l'ID del container

  • -v Se utilizzi -v o --volume per montare in bind un file o una directory che non esiste ancora sull'host Docker, -v crea l'endpoint per te. Viene sempre creato come directory. L'opzione ro, se presente, fa sì che il mount in bind venga montato nel container come sola lettura. Per le versioni v4.7.0 o precedenti, utilizza '/code/.env' invece di '/app/.env'.

  • --log-opt max-size=2m La dimensione massima del log prima che venga ruotato. Un numero intero positivo più un modificatore che rappresenta l'unità di misura (k, m o g).

  • --log-opt max-file=2 Il numero massimo di file di log che possono essere presenti. Se la rotazione dei log crea file in eccesso, il file più vecchio viene rimosso. Un numero intero positivo.

  • --restart Politica di riavvio da applicare quando un container termina

  • --name Assegna un nome al container

Il percorso assoluto prima dei due punti si riferisce al percorso sull'host e può variare nel tuo sistema. Il percorso assoluto dopo i due punti si riferisce al percorso nel container e NON può essere modificato. Trasmettendo .env come parametro di mount in bind, puoi modificare successivamente i valori di configurazione. Se modifichi il file .env, riavvia il container per rendere effettiva la modifica.

  • Migra il container Docker

Per migrare il container su un altro computer:

  • Esporta l'immagine in un file tar
docker save --output myems-normalization.tar myems/myems-normalization
  • Copia il file tar su un altro computer, quindi carica l'immagine dal file tar
docker load --input .\myems-normalization.tar

Passaggio 7 myems-aggregation

In questa sezione, installerai myems-aggregation su Docker.

  • Copia il codice sorgente nella directory root
cp -r myems/myems-aggregation /
cd /myems-aggregation
  • Crea il file .env basato sul file example.env
cp example.env .env
Attenzione

Sostituisci manualmente 127.0.0.1 con il vero indirizzo IP dell'HOST.

  • Costruisci l'immagine dal codice sorgente
docker build -t myems/myems-aggregation .

Per costruire per più piattaforme e non solo per l'architettura e il sistema operativo su cui viene eseguita la build da parte dell'utente, puoi utilizzare buildx e impostare il flag --platform per specificare la piattaforma target per l'output della build (ad esempio, linux/amd64, linux/arm64 o darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-aggregation .
  • Esegui un container Docker (esegui come superutente)
docker run -d -v /myems-aggregation/.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-aggregation myems/myems-aggregation
  • -d Esegue il container in background e stampa l'ID del container

  • -v Se utilizzi -v o --volume per montare in bind un file o una directory che non esiste ancora sull'host Docker, -v crea l'endpoint per te. Viene sempre creato come directory. L'opzione ro, se presente, fa sì che il mount in bind venga montato nel container come sola lettura. Per le versioni v4.7.0 o precedenti, utilizza '/code/.env' invece di '/app/.env'.

  • --log-opt max-size=2m La dimensione massima del log prima che venga ruotato. Un numero intero positivo più un modificatore che rappresenta l'unità di misura (k, m o g).

  • --log-opt max-file=2 Il numero massimo di file di log che possono essere presenti. Se la rotazione dei log crea file in eccesso, il file più vecchio viene rimosso. Un numero intero positivo.

  • --restart Politica di riavvio da applicare quando un container termina

  • --name Assegna un nome al container

Il percorso assoluto prima dei due punti si riferisce al percorso sull'host e può variare nel tuo sistema. Il percorso assoluto dopo i due punti si riferisce al percorso nel container e NON può essere modificato. Trasmettendo .env come parametro di mount in bind, puoi modificare successivamente i valori di configurazione. Se modifichi il file .env, riavvia il container per rendere effettiva la modifica.

  • Migra il container Docker

  • Esporta l'immagine in un file tar

docker save --output myems-aggregation.tar myems/myems-aggregation
  • Copia il file tar su un altro computer, quindi carica l'immagine dal file tar
docker load --input .\myems-aggregation.tar

Passaggio 8 myems-web

In questa sezione, installerai myems-web su Docker.

  • Modifica il file config.js:
Nota

Ottieni il mapboxToken su https://mapbox.com e imposta showOnlineMap su true. Se vuoi disabilitare la funzione di mappa online, imposta showOnlineMap su false

cd myems/myems-web
nano src/config.js
  • Modifica il file nginx.conf:
Attenzione

Sostituisci 127.0.0.1:8000 in nginx.conf con il vero IP dell'HOST e la porta di myems-api

cd myems/myems-web
nano nginx.conf
  • Copia il codice sorgente nella directory root
cp -r myems/myems-web /
cd /myems-web
Informazioni

Puoi ignorare tranquillamente il comando 'npm run build' in questa sezione, perché è incluso nella Dockerfile

  • Costruisci l'immagine dal codice sorgente
docker build -t myems/myems-web .
docker image prune -f

Per costruire per più piattaforme e non solo per l'architettura e il sistema operativo su cui viene eseguita la build da parte dell'utente, puoi utilizzare buildx e impostare il flag --platform per specificare la piattaforma target per l'output della build (ad esempio, linux/amd64, linux/arm64 o darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-web .
docker image prune -f
  • Esegui un container Docker

Sull'host, monta nginx.conf in bind:

docker run -d -p 80:80 -v /myems-web/nginx.conf:/etc/nginx/nginx.conf:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-web myems/myems-web
  • -d Esegue il container in background e stampa l'ID del container

  • -p Pubblica la/le porta/e del container sull'host, 80:80 (Host:Container) associa la porta 80 (destra) del container alla porta TCP 80 (sinistra) della macchina host.

  • -v Se utilizzi -v o --volume per montare in bind un file o una directory che non esiste ancora sull'host Docker, -v crea l'endpoint per te. Viene sempre creato come directory. L'opzione ro, se presente, fa sì che il mount in bind venga montato nel container come sola lettura. Per le versioni v4.7.0 o precedenti, utilizza '/code/.env' invece di '/app/.env'.

  • --log-opt max-size=2m La dimensione massima del log prima che venga ruotato. Un numero intero positivo più un modificatore che rappresenta l'unità di misura (k, m o g).

  • --log-opt max-file=2 Il numero massimo di file di log che possono essere presenti. Se la rotazione dei log crea file in eccesso, il file più vecchio viene rimosso. Un numero intero positivo.

  • --restart Politica di riavvio da applicare quando un container termina

  • --name Assegna un nome al container

Se vuoi migrare l'immagine su un altro computer:

  • Esporta l'immagine in un file tar
docker save --output myems-web.tar myems/myems-web
  • Copia il file tar su un altro computer, quindi carica l'immagine dal file tar
docker load --input .\myems-web.tar

Dopo l'installazione

Complimenti! Ora puoi accedere all'UI Amministrativa e all'UI Web di MyEMS.

Porte predefinite

UI Web di MyEMS: 80

API di MyEMS: 8000

UI Amministrativa di MyEMS: 8001

Assumendo che l'indirizzo del server sia 192.168.1.8 (sostituisci con l'indirizzo effettivo del server) Accedi all'UI Web di MyEMS all'indirizzo http://192.168.1.8 (la porta 80 può essere omessa) Accedi all'UI Amministrativa di MyEMS all'indirizzo http://192.168.1.8:8001

Password predefinite

UI Amministrativa di MyEMS

Nome utente:

administrator

Password:

!MyEMS1

UI Web di MyEMS

Nome utente:

administrator@myems.io

Password:

!MyEMS1

Risoluzione dei problemi

Come risolvere i problemi di timeout nel pull delle immagini

A causa di problemi di rete dell'ISP, potresti riscontrare lento download delle immagini. Puoi utilizzare servizi di accelerazione di terze parti.