メインコンテンツへスキップ

Linux/macOS on Docker

このガイドでは、Linux(またはmacOS)上でDockerを使用してMyEMSをデプロイします。

前提条件

  • ホストにdocker、npmがインストールされていること。
  • MySQLサーバーがインストールされていること。
  • MySQLデータベースがDocker Engineを実行しているホストから接続できること。
  • ハードウェア要件:少なくとも8GB RAM、20GBのストレージ容量(データベースとDockerコンテナ用)。

ソースコードをクローン:

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

ステップ1 データベース

データベース を参照してください。

ステップ2 myems-api

このセクションでは、Docker上にmyems-apiをインストールします。

  • ソースコードをルートディレクトリにコピー
cp -r myems/myems-api /
cd /myems-api
  • example.envファイルに基づいて.envファイルを作成
注意

127.0.0.1 を実際のホストIPアドレスに手動で置き換えてください。

cp example.env .env
  • ソースコードからイメージをビルド
docker build -t myems/myems-api .

複数のプラットフォーム用にビルドする場合(ビルドを実行するユーザーが実行しているアーキテクチャとオペレーティングシステムだけでなく)。 buildxを使用し、--platformフラグを設定してビルド出力のターゲットプラットフォームを指定できます(例:linux/amd64、linux/arm64、darwin/amd64)。

docker buildx build --platform=linux/amd64 -t myems/myems-api .
  • Dockerコンテナを実行

ホスト上で共有アップロードファイルフォルダを作成:

mkdir /myems-upload

コンテナを作成し、共有フォルダをコンテナにバインドマウントし、.envもコンテナにバインドマウント:

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 コンテナをバックグラウンドで実行し、コンテナIDを出力

  • -p コンテナのポートをホストに公開します。8000:8000(ホスト:コンテナ)は、コンテナのポート8000(右)をホストマシンのTCPポート8000(左)にバインドします。

  • -v -vまたは--volumeを使用してDockerホスト上にまだ存在しないファイルまたはディレクトリをバインドマウントする場合、-vはエンドポイントを作成します。常にディレクトリとして作成されます。 roオプションが存在する場合、バインドマウントは読み取り専用としてコンテナにマウントされます。 v4.7.0以前のバージョンの場合は、'/app/.env'の代わりに'/code/.env'を使用してください。

  • --log-opt max-size=2m ログがローテーションされる前の最大サイズ。正の整数と単位を表す修飾子(k、m、またはg)を組み合わせます。

  • --log-opt max-file=2 存在できるログファイルの最大数。ログのローテーションによって余分なファイルが作成された場合、最も古いファイルが削除されます。正の整数です。

  • --restart コンテナが終了したときに適用する再起動ポリシー

  • --name コンテナに名前を割り当てます

コロンの前の絶対パスはホスト上のパスであり、システムによって異なる場合があります。 コロンの後の絶対パスはコンテナ上のパスであり、変更できません。 .envをバインドマウントパラメータとして渡すことで、後で設定値を変更できます。 .envファイルを変更した場合は、変更を有効にするためにコンテナを再起動してください。

イメージを別のコンピュータに移行する場合:

  • イメージをtarファイルにエクスポート
docker save --output myems-api.tar myems/myems-api
  • tarファイルを別のコンピュータにコピーし、tarファイルからイメージをロード
docker load --input .\myems-api.tar

ステップ3 myems-admin

このセクションでは、Docker上にmyems-adminをインストールします。

  • ソースコードをルートディレクトリにコピー
cp -r myems/myems-admin /
cd /myems-admin
注意

nginx.conf内の127.0.0.1:8000をmyems-apiの実際のホストIPアドレスとポートに手動で置き換えてください。

nano nginx.conf
      proxy_pass http://127.0.0.1:8000/;
  • ソースコードからイメージをビルド
docker build -t myems/myems-admin .

複数のプラットフォーム用にビルドする場合(ビルドを実行するユーザーが実行しているアーキテクチャとオペレーティングシステムだけでなく)。 buildxを使用し、--platformフラグを設定してビルド出力のターゲットプラットフォームを指定できます(例:linux/amd64、linux/arm64、darwin/amd64)。

docker buildx build --platform=linux/amd64 -t myems/myems-admin .
  • Dockerコンテナを実行

ホスト上で共有アップロードファイルフォルダを作成:

mkdir /myems-upload

コンテナを作成し、共有アップロードファイルフォルダをコンテナにバインドマウントし、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 コンテナをバックグラウンドで実行し、コンテナIDを出力

  • -p コンテナのポートをホストに公開します。8001:8001(ホスト:コンテナ)は、コンテナのポート8001(右)をホストマシンのTCPポート8001(左)にバインドします。

  • -v -vまたは--volumeを使用してDockerホスト上にまだ存在しないファイルまたはディレクトリをバインドマウントする場合、-vはエンドポイントを作成します。常にディレクトリとして作成されます。 roオプションが存在する場合、バインドマウントは読み取り専用としてコンテナにマウントされます。 v4.7.0以前のバージョンの場合は、'/code/.env'の代わりに'/app/.env'を使用してください。

  • --log-opt max-size=2m ログがローテーションされる前の最大サイズ。正の整数と単位を表す修飾子(k、m、またはg)を組み合わせます。

  • --log-opt max-file=2 存在できるログファイルの最大数。ログのローテーションによって余分なファイルが作成された場合、最も古いファイルが削除されます。正の整数です。

  • --restart コンテナが終了したときに適用する再起動ポリシー

  • --name コンテナに名前を割り当てます

イメージを別のコンピュータに移行する場合:

  • イメージをtarファイルにエクスポート
docker save --output myems-admin.tar myems/myems-admin
  • tarファイルを別のコンピュータにコピーし、tarファイルからイメージをロード
docker load --input .\myems-admin.tar

ステップ4 myems-modbus-tcp

このセクションでは、Docker上にmyems-modbus-tcpをインストールします。

  • ソースコードをルートディレクトリにコピー
cp -r myems/myems-modbus-tcp /
cd /myems-modbus-tcp
  • example.envファイルに基づいて.envファイルを作成
注意

127.0.0.1 を実際のホストIPアドレスに手動で置き換えてください。

cp example.env .env
  • ソースコードからイメージをビルド
docker build -t myems/myems-modbus-tcp .

複数のプラットフォーム用にビルドする場合(ビルドを実行するユーザーが実行しているアーキテクチャとオペレーティングシステムだけでなく)。 buildxを使用し、--platformフラグを設定してビルド出力のターゲットプラットフォームを指定できます(例:linux/amd64、linux/arm64、darwin/amd64)。

docker buildx build --platform=linux/amd64 -t myems/myems-modbus-tcp .
  • Dockerコンテナを実行(スーパーユーザーとして実行)
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 コンテナをバックグラウンドで実行し、コンテナIDを出力

  • -v -vまたは--volumeを使用してDockerホスト上にまだ存在しないファイルまたはディレクトリをバインドマウントする場合、-vはエンドポイントを作成します。常にディレクトリとして作成されます。 roオプションが存在する場合、バインドマウントは読み取り専用としてコンテナにマウントされます。 v4.7.0以前のバージョンの場合は、'/code/.env'の代わりに'/app/.env'を使用してください。

  • --log-opt max-size=2m ログがローテーションされる前の最大サイズ。正の整数と単位を表す修飾子(k、m、またはg)を組み合わせます。

  • --log-opt max-file=2 存在できるログファイルの最大数。ログのローテーションによって余分なファイルが作成された場合、最も古いファイルが削除されます。正の整数です。

  • --restart コンテナが終了したときに適用する再起動ポリシー

  • --name コンテナに名前を割り当てます

コロンの前の絶対パスはホスト上のパスであり、システムによって異なる場合があります。 コロンの後の絶対パスはコンテナ上のパスであり、変更できません。 .envをバインドマウントパラメータとして渡すことで、後で設定値を変更できます。 .envファイルを変更した場合は、変更を有効にするためにコンテナを再起動してください。

  • Dockerコンテナを移行

コンテナを別のコンピュータに移行する場合:

  • イメージをtarファイルにエクスポート
docker save --output myems-modbus-tcp.tar myems/myems-modbus-tcp
  • tarファイルを別のコンピュータにコピーし、tarファイルからイメージをロード
docker load --input .\myems-modbus-tcp.tar

ステップ5 myems-cleaning

このセクションでは、Docker上にmyems-cleaningをインストールします。

  • ソースコードをルートディレクトリにコピー
cp -r myems/myems-cleaning /
cd /myems-cleaning
  • example.envファイルに基づいて.envファイルを作成
注意

127.0.0.1 を実際のホストIPアドレスに手動で置き換えてください。

cp example.env .env
  • ソースコードからイメージをビルド
docker build -t myems/myems-cleaning .

複数のプラットフォーム用にビルドする場合(ビルドを実行するユーザーが実行しているアーキテクチャとオペレーティングシステムだけでなく)。 buildxを使用し、--platformフラグを設定してビルド出力のターゲットプラットフォームを指定できます(例:linux/amd64、linux/arm64、darwin/amd64)。

docker buildx build --platform=linux/amd64 -t myems/myems-cleaning .
  • Dockerコンテナを実行(スーパーユーザーとして実行)
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 コンテナをバックグラウンドで実行し、コンテナIDを出力

  • -v -vまたは--volumeを使用してDockerホスト上にまだ存在しないファイルまたはディレクトリをバインドマウントする場合、-vはエンドポイントを作成します。常にディレクトリとして作成されます。 roオプションが存在する場合、バインドマウントは読み取り専用としてコンテナにマウントされます。 v4.7.0以前のバージョンの場合は、'/code/.env'の代わりに'/app/.env'を使用してください。

  • --log-opt max-size=2m ログがローテーションされる前の最大サイズ。正の整数と単位を表す修飾子(k、m、またはg)を組み合わせます。

  • --log-opt max-file=2 存在できるログファイルの最大数。ログのローテーションによって余分なファイルが作成された場合、最も古いファイルが削除されます。正の整数です。

  • --restart コンテナが終了したときに適用する再起動ポリシー

  • --name コンテナに名前を割り当てます

コロンの前の絶対パスはホスト上のパスであり、システムによって異なる場合があります。 コロンの後の絶対パスはコンテナ上のパスであり、変更できません。 .envをバインドマウントパラメータとして渡すことで、後で設定値を変更できます。 .envファイルを変更した場合は、変更を有効にするためにコンテナを再起動してください。

  • Dockerコンテナを移行

コンテナを別のコンピュータに移行する場合:

  • イメージをtarファイルにエクスポート
docker save --output myems-cleaning.tar myems/myems-cleaning
  • tarファイルを別のコンピュータにコピーし、tarファイルからイメージをロード
docker load --input .\myems-cleaning.tar

ステップ6 myems-normalization

このセクションでは、Docker上にmyems-normalizationをインストールします。

  • ソースコードをルートディレクトリにコピー
cp -r myems/myems-normalization /
cd /myems-normalization
  • example.envファイルに基づいて.envファイルを作成
注意

127.0.0.1 を実際のホストIPアドレスに手動で置き換えてください。

cp example.env .env
  • ソースコードからイメージをビルド
docker build -t myems/myems-normalization .

複数のプラットフォーム用にビルドする場合(ビルドを実行するユーザーが実行しているアーキテクチャとオペレーティングシステムだけでなく)。 buildxを使用し、--platformフラグを設定してビルド出力のターゲットプラットフォームを指定できます(例:linux/amd64、linux/arm64、darwin/amd64)。

docker buildx build --platform=linux/amd64 -t myems/myems-normalization .
  • Dockerコンテナを実行(スーパーユーザーとして実行)
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 コンテナをバックグラウンドで実行し、コンテナIDを出力

  • -v -vまたは--volumeを使用してDockerホスト上にまだ存在しないファイルまたはディレクトリをバインドマウントする場合、-vはエンドポイントを作成します。常にディレクトリとして作成されます。 roオプションが存在する場合、バインドマウントは読み取り専用としてコンテナにマウントされます。 v4.7.0以前のバージョンの場合は、'/code/.env'の代わりに'/app/.env'を使用してください。

  • --log-opt max-size=2m ログがローテーションされる前の最大サイズ。正の整数と単位を表す修飾子(k、m、またはg)を組み合わせます。

  • --log-opt max-file=2 存在できるログファイルの最大数。ログのローテーションによって余分なファイルが作成された場合、最も古いファイルが削除されます。正の整数です。

  • --restart コンテナが終了したときに適用する再起動ポリシー

  • --name コンテナに名前を割り当てます

コロンの前の絶対パスはホスト上のパスであり、システムによって異なる場合があります。 コロンの後の絶対パスはコンテナ上のパスであり、変更できません。 .envをバインドマウントパラメータとして渡すことで、後で設定値を変更できます。 .envファイルを変更した場合は、変更を有効にするためにコンテナを再起動してください。

  • Dockerコンテナを移行

コンテナを別のコンピュータに移行する場合:

  • イメージをtarファイルにエクスポート
docker save --output myems-normalization.tar myems/myems-normalization
  • tarファイルを別のコンピュータにコピーし、tarファイルからイメージをロード
docker load --input .\myems-normalization.tar

ステップ7 myems-aggregation

このセクションでは、Docker上にmyems-aggregationをインストールします。

  • ソースコードをルートディレクトリにコピー
cp -r myems/myems-aggregation /
cd /myems-aggregation
  • example.envファイルに基づいて.envファイルを作成
cp example.env .env
注意

127.0.0.1 を実際のホストIPアドレスに手動で置き換えてください。

  • ソースコードからイメージをビルド
docker build -t myems/myems-aggregation .

複数のプラットフォーム用にビルドする場合(ビルドを実行するユーザーが実行しているアーキテクチャとオペレーティングシステムだけでなく)。 buildxを使用し、--platformフラグを設定してビルド出力のターゲットプラットフォームを指定できます(例:linux/amd64、linux/arm64、darwin/amd64)。

docker buildx build --platform=linux/amd64 -t myems/myems-aggregation .
  • Dockerコンテナを実行(スーパーユーザーとして実行)
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 コンテナをバックグラウンドで実行し、コンテナIDを出力

  • -v -vまたは--volumeを使用してDockerホスト上にまだ存在しないファイルまたはディレクトリをバインドマウントする場合、-vはエンドポイントを作成します。常にディレクトリとして作成されます。 roオプションが存在する場合、バインドマウントは読み取り専用としてコンテナにマウントされます。 v4.7.0以前のバージョンの場合は、'/code/.env'の代わりに'/app/.env'を使用してください。

  • --log-opt max-size=2m ログがローテーションされる前の最大サイズ。正の整数と単位を表す修飾子(k、m、またはg)を組み合わせます。

  • --log-opt max-file=2 存在できるログファイルの最大数。ログのローテーションによって余分なファイルが作成された場合、最も古いファイルが削除されます。正の整数です。

  • --restart コンテナが終了したときに適用する再起動ポリシー

  • --name コンテナに名前を割り当てます

コロンの前の絶対パスはホスト上のパスであり、システムによって異なる場合があります。 コロンの後の絶対パスはコンテナ上のパスであり、変更できません。 .envをバインドマウントパラメータとして渡すことで、後で設定値を変更できます。 .envファイルを変更した場合は、変更を有効にするためにコンテナを再起動してください。

  • Dockerコンテナを移行

  • イメージをtarファイルにエクスポート

docker save --output myems-aggregation.tar myems/myems-aggregation
  • tarファイルを別のコンピュータにコピーし、tarファイルからイメージをロード
docker load --input .\myems-aggregation.tar

ステップ8 myems-web

このセクションでは、Docker上にmyems-webをインストールします。

  • config.jsファイルを変更:
注釈

https://mapbox.com でmapboxTokenを取得し、showOnlineMapをtrueに設定してください。オンライン地図機能をオフにしたい場合は、showOnlineMapをfalseに設定してください。

cd myems/myems-web
nano src/config.js
  • nginx.confファイルを変更:
注意

nginx.conf内の127.0.0.1:8000をmyems-apiの実際のホストIPアドレスとポートに置き換えてください。

cd myems/myems-web
nano nginx.conf
  • ソースコードをルートディレクトリにコピー
cp -r myems/myems-web /
cd /myems-web
情報

このセクションのコマンド'npm run build'は無視しても安全です。Dockerfileに組み込まれているためです。

  • ソースコードからイメージをビルド
docker build -t myems/myems-web .
docker image prune -f

複数のプラットフォーム用にビルドする場合(ビルドを実行するユーザーが実行しているアーキテクチャとオペレーティングシステムだけでなく)。 buildxを使用し、--platformフラグを設定してビルド出力のターゲットプラットフォームを指定できます(例:linux/amd64、linux/arm64、darwin/amd64)。

docker buildx build --platform=linux/amd64 -t myems/myems-web .
docker image prune -f
  • Dockerコンテナを実行

ホスト上で、nginx.confをバインドマウント:

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 コンテナをバックグラウンドで実行し、コンテナIDを出力

  • -p コンテナのポートをホストに公開します。80:80(ホスト:コンテナ)は、コンテナのポート80(右)をホストマシンのTCPポート80(左)にバインドします。

  • -v -vまたは--volumeを使用してDockerホスト上にまだ存在しないファイルまたはディレクトリをバインドマウントする場合、-vはエンドポイントを作成します。常にディレクトリとして作成されます。 roオプションが存在する場合、バインドマウントは読み取り専用としてコンテナにマウントされます。 v4.7.0以前のバージョンの場合は、'/code/.env'の代わりに'/app/.env'を使用してください。

  • --log-opt max-size=2m ログがローテーションされる前の最大サイズ。正の整数と単位を表す修飾子(k、m、またはg)を組み合わせます。

  • --log-opt max-file=2 存在できるログファイルの最大数。ログのローテーションによって余分なファイルが作成された場合、最も古いファイルが削除されます。正の整数です。

  • --restart コンテナが終了したときに適用する再起動ポリシー

  • --name コンテナに名前を割り当てます

イメージを別のコンピュータに移行する場合:

  • イメージをtarファイルにエクスポート
docker save --output myems-web.tar myems/myems-web
  • tarファイルを別のコンピュータにコピーし、tarファイルからイメージをロード
docker load --input .\myems-web.tar

インストール後

おめでとうございます!これでMyEMS Admin UIとWeb UIにログインできるようになりました。

デフォルトポート

MyEMS Web UI: 80

MyEMS API: 8000

MyEMS Admin UI: 8001

サーバーアドレスが192.168.1.8(実際のサーバーアドレスに置き換えてください)だと仮定します。 MyEMS Web UIは http://192.168.1.8 (80は省略可能) でアクセスできます。 MyEMS Admin UIは http://192.168.1.8:8001 でアクセスできます。

デフォルトパスワード

MyEMS Admin UI

ユーザー名:

administrator

パスワード:

!MyEMS1

MyEMS Web UI

ユーザー名:

administrator@myems.io

パスワード:

!MyEMS1

トラブルシューティング

イメージプルタイムアウト問題の解決方法

ISPネットワークの問題により、イメージのプルが遅くなる場合があります。サードパーティの高速化サービスを利用できます。