Docker на Linux/macOS
В этом руководстве описано, как развернуть MyEMS с использованием Docker на Linux (или macOS).
Предварительные требования
- Установленные docker и npm на хост-машине.
- Установленный сервер MySQL.
- Возможность подключения к базе данных MySQL с хост-машины, на которой запущен Docker Engine.
- Требования к аппаратному обеспечению: как минимум 4 ГБ ОЗУ, 20 ГБ свободного места на диске (для базы данных и Docker-контейнеров).
Клонирование исходного кода:
cd ~
git clone https://github.com/myems/myems
Шаг 1: База данных
См. раздел База данных
Шаг 2: myems-api
В этом разделе вы установите myems-api в Docker.
- Копирование исходного кода в корневой каталог
cp -r myems/myems-api /
cd /myems-api
- Создание файла .env на основе example.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 (read-only) делает подмонтированный ресурс доступным в контейнере только для чтения. Для версий v4.7.0 и старше используйте путь '/code/.env' вместо '/app/.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-архива на другой компьютер и загрузка образа из архива
docker load --input .\myems-api.tar
Шаг 3: myems-admin
В этом разделе вы установите myems-admin в Docker.
- Копирование исходного кода в корневой каталог
cp -r myems/myems-admin /
cd /myems-admin
Вручную замените 127.0.0.1:8000 в nginx.conf на реальный IP-адрес и порт myems-api на хост-машине.
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 (read-only) делает подмонтированный ресурс доступным в контейнере только для чтения. Для версий 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-архива на другой компьютер и загрузка образа из архива
docker load --input .\myems-admin.tar
Шаг 4: myems-modbus-tcp
В этом разделе вы установите myems-modbus-tcp в Docker.
- Копирование исходного кода в корневой каталог
cp -r myems/myems-modbus-tcp /
cd /myems-modbus-tcp
- Создание файла .env на основе example.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 (read-only) делает подмонтированный ресурс доступным в контейнере только для чтения. Для версий 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-архива на другой компьютер и загрузка образа из архива
docker load --input .\myems-modbus-tcp.tar
Шаг 5: myems-cleaning
В этом разделе вы установите myems-cleaning в Docker.
- Копирование исходного кода в корневой каталог
cp -r myems/myems-cleaning /
cd /myems-cleaning
- Создание файла .env на основе example.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 (read-only) делает подмонтированный ресурс доступным в контейнере только для чтения. Для версий 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-архива на другой компьютер и загрузка образа из архива
docker load --input .\myems-cleaning.tar
Шаг 6: myems-normalization
В этом разделе вы установите myems-normalization в Docker.
- Копирование исходного кода в корневой каталог
cp -r myems/myems-normalization /
cd /myems-normalization
- Создание файла .env на основе example.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 (read-only) делает подмонтированный ресурс доступным в контейнере только для чтения. Для версий 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-архива на другой компьютер и загрузка образа из архива
docker load --input .\myems-normalization.tar
Шаг 7: myems-aggregation
В этом разделе вы установите myems-aggregation в Docker.
- Копирование исходного кода в корневой каталог
cp -r myems/myems-aggregation /
cd /myems-aggregation
- Создание файла .env на основе example.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 (read-only) делает подмонтированный ресурс доступным в контейнере только для чтения. Для версий 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-архива на другой компьютер и загрузка образа из архива
docker load --input .\myems-aggregation.tar
Шаг 8: myems-web
В этом разделе вы установите myems-web в Docker.
- Редактирование файла config.js:
Получите mapboxToken на сайте https://mapbox.com, затем установите showOnlineMap в true. Если вы хотите отключить функцию онлайн-карты, установите showOnlineMap в false.
cd myems/myems-web
nano src/config.js
- Редактирование файла nginx.conf:
Замените 127.0.0.1:8000 в nginx.conf на реальный IP-адрес и порт myems-api на хост-машине.
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 (read-only) делает подмонтированный ресурс доступным в контейнере только для чтения. Для версий 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-архива на другой компьютер и загрузка образа из архива
docker load --input .\myems-web.tar
После установки
Поздравляем! Теперь вы можете войти в административный интерфейс MyEMS Admin UI и веб-интерфейс MyEMS 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
Пароль:
!MyEMS1
Устранение неполадок
Из-за проблем с сетью интернет-провайдера скачивание образов может происходить медленно. Вы можете использовать сторонние сервисы ускорения.