Ir para o conteúdo principal

docker-linux


Docker no Linux/macOS

Neste guia, você irá implantar o MyEMS com o Docker no Linux (ou macOS).

Pré-requisitos

  • Docker e npm instalados no host.
  • Servidor MySQL instalado.
  • O banco de dados MySQL pode ser acessado a partir do host onde o Docker Engine está em execução.
  • Requisitos de hardware: Pelo menos 4GB de RAM, 20GB de espaço de armazenamento (para banco de dados e contêineres Docker).

Clonar o código-fonte:

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

Passo 1: Banco de Dados

Consulte Banco de Dados

Passo 2: myems-api

Nesta seção, você irá instalar o myems-api no Docker.

  • Copiar o código-fonte para o diretório raiz
cp -r myems/myems-api /
cd /myems-api
  • Criar o arquivo .env com base no arquivo example.env
Cuidado

Substitua manualmente 127.0.0.1 pelo endereço IP real do HOST.

cp example.env .env
  • Construir a Imagem a partir do Código-Fonte
docker build -t myems/myems-api .

Para construir para múltiplas plataformas (não apenas para a arquitetura e sistema operacional onde o build está sendo invocado), você pode usar o buildx e definir a flag --platform para especificar a plataforma alvo da saída do build (por exemplo, linux/amd64, linux/arm64 ou darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-api .
  • Executar um Contêiner Docker

No host, criar uma pasta compartilhada para arquivos de upload:

mkdir /myems-upload

Criar um contêiner, montar a pasta compartilhada no contêiner e também montar o arquivo .env no contêiner:

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: Executa o contêiner em segundo plano e imprime o ID do contêiner.

  • -p: Publica a(s) porta(s) do contêiner no host. A configuração 8000:8000 (Host:Contêiner) vincula a porta 8000 (direita) do contêiner à porta TCP 8000 (esquerda) da máquina host.

  • -v: Se você usar -v ou --volume para montar um arquivo ou diretório que ainda não existe no host Docker, o -v cria o endpoint para você (sempre como um diretório). A opção ro, se presente, faz com que o bind mount seja montado no contêiner como somente leitura. Para versões v4.7.0 ou anteriores, use '/code/.env' em vez de '/app/.env'.

  • --log-opt max-size=1m: Tamanho máximo do log antes de ser rotacionado. Um inteiro positivo acompanhado de um modificador que representa a unidade de medida (k, m ou g).

  • --log-opt max-file=2: Número máximo de arquivos de log que podem existir. Se a rotação de logs criar arquivos extras, o arquivo mais antigo é removido. Um inteiro positivo.

  • --restart: Política de reinicialização a ser aplicada quando um contêiner é encerrado.

  • --name: Atribui um nome ao contêiner.

O caminho absoluto antes do dois pontos refere-se ao caminho no host e pode variar em seu sistema. O caminho absoluto após o dois pontos refere-se ao caminho no contêiner e NÃO PODE SER ALTERADO. Ao passar o .env como parâmetro de bind mount, você pode alterar os valores de configuração posteriormente. Se você alterar o arquivo .env, reinicie o contêiner para que a alteração entre em vigor.

Se você quiser migrar a imagem para outro computador:

  • Exportar a imagem para um arquivo tar
docker save --output myems-api.tar myems/myems-api
  • Copiar o arquivo tar para outro computador e, em seguida, carregar a imagem a partir do arquivo tar
docker load --input .\myems-api.tar

Passo 3: myems-admin

Nesta seção, você irá instalar o myems-admin no Docker.

  • Copiar o código-fonte para o diretório raiz
cp -r myems/myems-admin /
cd /myems-admin
Cuidado

Substitua manualmente 127.0.0.1:8000 no nginx.conf pelo endereço IP real e porta do myems-api no HOST.

nano nginx.conf
      proxy_pass http://127.0.0.1:8000/;
  • Construir a Imagem a partir do Código-Fonte
docker build -t myems/myems-admin .

Para construir para múltiplas plataformas (não apenas para a arquitetura e sistema operacional onde o build está sendo invocado), você pode usar o buildx e definir a flag --platform para especificar a plataforma alvo da saída do build (por exemplo, linux/amd64, linux/arm64 ou darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-admin .
  • Executar um Contêiner Docker

No host, criar uma pasta compartilhada para arquivos de upload:

mkdir /myems-upload

Criar um contêiner, montar a pasta compartilhada de upload no contêiner e também montar o nginx.conf:

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: Executa o contêiner em segundo plano e imprime o ID do contêiner.

  • -p: Publica a(s) porta(s) do contêiner no host. A configuração 8001:8001 (Host:Contêiner) vincula a porta 8001 (direita) do contêiner à porta TCP 8001 (esquerda) da máquina host.

  • -v: Se você usar -v ou --volume para montar um arquivo ou diretório que ainda não existe no host Docker, o -v cria o endpoint para você (sempre como um diretório). A opção ro, se presente, faz com que o bind mount seja montado no contêiner como somente leitura. Para versões v4.7.0 ou anteriores, use '/code/.env' em vez de '/app/.env'.

  • --log-opt max-size=1m: Tamanho máximo do log antes de ser rotacionado. Um inteiro positivo acompanhado de um modificador que representa a unidade de medida (k, m ou g).

  • --log-opt max-file=2: Número máximo de arquivos de log que podem existir. Se a rotação de logs criar arquivos extras, o arquivo mais antigo é removido. Um inteiro positivo.

  • --restart: Política de reinicialização a ser aplicada quando um contêiner é encerrado.

  • --name: Atribui um nome ao contêiner.

Se você quiser migrar a imagem para outro computador:

  • Exportar a imagem para um arquivo tar
docker save --output myems-admin.tar myems/myems-admin
  • Copiar o arquivo tar para outro computador e, em seguida, carregar a imagem a partir do arquivo tar
docker load --input .\myems-admin.tar

Passo 4: myems-modbus-tcp

Nesta seção, você irá instalar o myems-modbus-tcp no Docker.

  • Copiar o código-fonte para o diretório raiz
cp -r myems/myems-modbus-tcp /
cd /myems-modbus-tcp
  • Criar o arquivo .env com base no arquivo example.env
Cuidado

Substitua manualmente 127.0.0.1 pelo endereço IP real do HOST.

cp example.env .env
  • Construir a Imagem a partir do Código-Fonte
docker build -t myems/myems-modbus-tcp .

Para construir para múltiplas plataformas (não apenas para a arquitetura e sistema operacional onde o build está sendo invocado), você pode usar o buildx e definir a flag --platform para especificar a plataforma alvo da saída do build (por exemplo, linux/amd64, linux/arm64 ou darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-modbus-tcp .
  • Executar um Contêiner Docker (executar como superusuário)
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: Executa o contêiner em segundo plano e imprime o ID do contêiner.

  • -v: Se você usar -v ou --volume para montar um arquivo ou diretório que ainda não existe no host Docker, o -v cria o endpoint para você (sempre como um diretório). A opção ro, se presente, faz com que o bind mount seja montado no contêiner como somente leitura. Para versões v4.7.0 ou anteriores, use '/code/.env' em vez de '/app/.env'.

  • --log-opt max-size=1m: Tamanho máximo do log antes de ser rotacionado. Um inteiro positivo acompanhado de um modificador que representa a unidade de medida (k, m ou g).

  • --log-opt max-file=2: Número máximo de arquivos de log que podem existir. Se a rotação de logs criar arquivos extras, o arquivo mais antigo é removido. Um inteiro positivo.

  • --restart: Política de reinicialização a ser aplicada quando um contêiner é encerrado.

  • --name: Atribui um nome ao contêiner.

O caminho absoluto antes do dois pontos refere-se ao caminho no host e pode variar em seu sistema. O caminho absoluto após o dois pontos refere-se ao caminho no contêiner e NÃO PODE SER ALTERADO. Ao passar o .env como parâmetro de bind mount, você pode alterar os valores de configuração posteriormente. Se você alterar o arquivo .env, reinicie o contêiner para que a alteração entre em vigor.

  • Migrar o Contêiner Docker

Para migrar o contêiner para outro computador:

  • Exportar a imagem para um arquivo tar
docker save --output myems-modbus-tcp.tar myems/myems-modbus-tcp
  • Copiar o arquivo tar para outro computador e, em seguida, carregar a imagem a partir do arquivo tar
docker load --input .\myems-modbus-tcp.tar

Passo 5: myems-cleaning

Nesta seção, você irá instalar o myems-cleaning no Docker.

  • Copiar o código-fonte para o diretório raiz
cp -r myems/myems-cleaning /
cd /myems-cleaning
  • Criar o arquivo .env com base no arquivo example.env
Cuidado

Substitua manualmente 127.0.0.1 pelo endereço IP real do HOST.

cp example.env .env
  • Construir a Imagem a partir do Código-Fonte
docker build -t myems/myems-cleaning .

Para construir para múltiplas plataformas (não apenas para a arquitetura e sistema operacional onde o build está sendo invocado), você pode usar o buildx e definir a flag --platform para especificar a plataforma alvo da saída do build (por exemplo, linux/amd64, linux/arm64 ou darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-cleaning .
  • Executar um Contêiner Docker (executar como superusuário)
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: Executa o contêiner em segundo plano e imprime o ID do contêiner.

  • -v: Se você usar -v ou --volume para montar um arquivo ou diretório que ainda não existe no host Docker, o -v cria o endpoint para você (sempre como um diretório). A opção ro, se presente, faz com que o bind mount seja montado no contêiner como somente leitura. Para versões v4.7.0 ou anteriores, use '/code/.env' em vez de '/app/.env'.

  • --log-opt max-size=1m: Tamanho máximo do log antes de ser rotacionado. Um inteiro positivo acompanhado de um modificador que representa a unidade de medida (k, m ou g).

  • --log-opt max-file=2: Número máximo de arquivos de log que podem existir. Se a rotação de logs criar arquivos extras, o arquivo mais antigo é removido. Um inteiro positivo.

  • --restart: Política de reinicialização a ser aplicada quando um contêiner é encerrado.

  • --name: Atribui um nome ao contêiner.

O caminho absoluto antes do dois pontos refere-se ao caminho no host e pode variar em seu sistema. O caminho absoluto após o dois pontos refere-se ao caminho no contêiner e NÃO PODE SER ALTERADO. Ao passar o .env como parâmetro de bind mount, você pode alterar os valores de configuração posteriormente. Se você alterar o arquivo .env, reinicie o contêiner para que a alteração entre em vigor.

  • Migrar o Contêiner Docker

Para migrar o contêiner para outro computador:

  • Exportar a imagem para um arquivo tar
docker save --output myems-cleaning.tar myems/myems-cleaning
  • Copiar o arquivo tar para outro computador e, em seguida, carregar a imagem a partir do arquivo tar
docker load --input .\myems-cleaning.tar

Passo 6: myems-normalization

Nesta seção, você irá instalar o myems-normalization no Docker.

  • Copiar o código-fonte para o diretório raiz
cp -r myems/myems-normalization /
cd /myems-normalization
  • Criar o arquivo .env com base no arquivo example.env
Cuidado

Substitua manualmente 127.0.0.1 pelo endereço IP real do HOST.

cp example.env .env
  • Construir a Imagem a partir do Código-Fonte
docker build -t myems/myems-normalization .

Para construir para múltiplas plataformas (não apenas para a arquitetura e sistema operacional onde o build está sendo invocado), você pode usar o buildx e definir a flag --platform para especificar a plataforma alvo da saída do build (por exemplo, linux/amd64, linux/arm64 ou darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-normalization .
  • Executar um Contêiner Docker (executar como superusuário)
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: Executa o contêiner em segundo plano e imprime o ID do contêiner.

  • -v: Se você usar -v ou --volume para montar um arquivo ou diretório que ainda não existe no host Docker, o -v cria o endpoint para você (sempre como um diretório). A opção ro, se presente, faz com que o bind mount seja montado no contêiner como somente leitura. Para versões v4.7.0 ou anteriores, use '/code/.env' em vez de '/app/.env'.

  • --log-opt max-size=1m: Tamanho máximo do log antes de ser rotacionado. Um inteiro positivo acompanhado de um modificador que representa a unidade de medida (k, m ou g).

  • --log-opt max-file=2: Número máximo de arquivos de log que podem existir. Se a rotação de logs criar arquivos extras, o arquivo mais antigo é removido. Um inteiro positivo.

  • --restart: Política de reinicialização a ser aplicada quando um contêiner é encerrado.

  • --name: Atribui um nome ao contêiner.

O caminho absoluto antes do dois pontos refere-se ao caminho no host e pode variar em seu sistema. O caminho absoluto após o dois pontos refere-se ao caminho no contêiner e NÃO PODE SER ALTERADO. Ao passar o .env como parâmetro de bind mount, você pode alterar os valores de configuração posteriormente. Se você alterar o arquivo .env, reinicie o contêiner para que a alteração entre em vigor.

  • Migrar o Contêiner Docker

Para migrar o contêiner para outro computador:

  • Exportar a imagem para um arquivo tar
docker save --output myems-normalization.tar myems/myems-normalization
  • Copiar o arquivo tar para outro computador e, em seguida, carregar a imagem a partir do arquivo tar
docker load --input .\myems-normalization.tar

Passo 7: myems-aggregation

Nesta seção, você irá instalar o myems-aggregation no Docker.

  • Copiar o código-fonte para o diretório raiz
cp -r myems/myems-aggregation /
cd /myems-aggregation
  • Criar o arquivo .env com base no arquivo example.env
cp example.env .env
Cuidado

Substitua manualmente 127.0.0.1 pelo endereço IP real do HOST.

  • Construir a Imagem a partir do Código-Fonte
docker build -t myems/myems-aggregation .

Para construir para múltiplas plataformas (não apenas para a arquitetura e sistema operacional onde o build está sendo invocado), você pode usar o buildx e definir a flag --platform para especificar a plataforma alvo da saída do build (por exemplo, linux/amd64, linux/arm64 ou darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-aggregation .
  • Executar um Contêiner Docker (executar como superusuário)
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: Executa o contêiner em segundo plano e imprime o ID do contêiner.

  • -v: Se você usar -v ou --volume para montar um arquivo ou diretório que ainda não existe no host Docker, o -v cria o endpoint para você (sempre como um diretório). A opção ro, se presente, faz com que o bind mount seja montado no contêiner como somente leitura. Para versões v4.7.0 ou anteriores, use '/code/.env' em vez de '/app/.env'.

  • --log-opt max-size=1m: Tamanho máximo do log antes de ser rotacionado. Um inteiro positivo acompanhado de um modificador que representa a unidade de medida (k, m ou g).

  • --log-opt max-file=2: Número máximo de arquivos de log que podem existir. Se a rotação de logs criar arquivos extras, o arquivo mais antigo é removido. Um inteiro positivo.

  • --restart: Política de reinicialização a ser aplicada quando um contêiner é encerrado.

  • --name: Atribui um nome ao contêiner.

O caminho absoluto antes do dois pontos refere-se ao caminho no host e pode variar em seu sistema. O caminho absoluto após o dois pontos refere-se ao caminho no contêiner e NÃO PODE SER ALTERADO. Ao passar o .env como parâmetro de bind mount, você pode alterar os valores de configuração posteriormente. Se você alterar o arquivo .env, reinicie o contêiner para que a alteração entre em vigor.

  • Migrar o Contêiner Docker

  • Exportar a imagem para um arquivo tar

docker save --output myems-aggregation.tar myems/myems-aggregation
  • Copiar o arquivo tar para outro computador e, em seguida, carregar a imagem a partir do arquivo tar
docker load --input .\myems-aggregation.tar

Passo 8: myems-web

Nesta seção, você irá instalar o myems-web no Docker.

  • Modificar o arquivo config.js:
Nota

Obtenha o mapboxToken em https://mapbox.com e, em seguida, defina showOnlineMap como true. Se você quiser desativar o recurso de mapa online, defina showOnlineMap como false.

cd myems/myems-web
nano src/config.js
  • Modificar o arquivo nginx.conf:
Cuidado

Substitua 127.0.0.1:8000 no nginx.conf pelo endereço IP real e porta do myems-api no HOST.

cd myems/myems-web
nano nginx.conf
  • Copiar o código-fonte para o diretório raiz
cp -r myems/myems-web /
cd /myems-web
Informações

Você pode ignorar com segurança o comando 'npm run build' nesta seção, pois ele é integrado ao Dockerfile.

  • Construir a Imagem a partir do Código-Fonte
docker build -t myems/myems-web .
docker image prune -f

Para construir para múltiplas plataformas (não apenas para a arquitetura e sistema operacional onde o build está sendo invocado), você pode usar o buildx e definir a flag --platform para especificar a plataforma alvo da saída do build (por exemplo, linux/amd64, linux/arm64 ou darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-web .
docker image prune -f
  • Executar um Contêiner Docker

No host, montar o nginx.conf via bind mount:

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: Executa o contêiner em segundo plano e imprime o ID do contêiner.

  • -p: Publica a(s) porta(s) do contêiner no host. A configuração 80:80 (Host:Contêiner) vincula a porta 80 (direita) do contêiner à porta TCP 80 (esquerda) da máquina host.

  • -v: Se você usar -v ou --volume para montar um arquivo ou diretório que ainda não existe no host Docker, o -v cria o endpoint para você (sempre como um diretório). A opção ro, se presente, faz com que o bind mount seja montado no contêiner como somente leitura. Para versões v4.7.0 ou anteriores, use '/code/.env' em vez de '/app/.env'.

  • --log-opt max-size=1m: Tamanho máximo do log antes de ser rotacionado. Um inteiro positivo acompanhado de um modificador que representa a unidade de medida (k, m ou g).

  • --log-opt max-file=2: Número máximo de arquivos de log que podem existir. Se a rotação de logs criar arquivos extras, o arquivo mais antigo é removido. Um inteiro positivo.

  • --restart: Política de reinicialização a ser aplicada quando um contêiner é encerrado.

  • --name: Atribui um nome ao contêiner.

Se você quiser migrar a imagem para outro computador:

  • Exportar a imagem para um arquivo tar
docker save --output myems-web.tar myems/myems-web
  • Copiar o arquivo tar para outro computador e, em seguida, carregar a imagem a partir do arquivo tar
docker load --input .\myems-web.tar

Pós-instalação

Parabéns! Agora você pode fazer login na UI Admin e na UI Web do MyEMS.

Portas Padrão

MyEMS Web UI: 80

MyEMS API: 8000

MyEMS Admin UI: 8001

Supondo que o endereço do servidor seja 192.168.1.8 (substitua pelo endereço real do servidor) Acesse a MyEMS Web UI em http://192.168.1.8 (a porta 80 pode ser omitida) Acesse a MyEMS Admin UI em http://192.168.1.8:8001

Senhas Padrão

MyEMS Admin UI

Nome de usuário:

administrator

Senha:

!MyEMS1

MyEMS Web UI

Nome de usuário:

administrator@myems.io

Senha:

!MyEMS1

Solução de Problemas

Como resolver problemas de timeout ao baixar imagens

Devido a problemas de rede da ISP, você pode enfrentar lentidão ao baixar imagens. Você pode usar serviços de aceleração de terceiros.