Đi đến nội dung chính

Hướng dẫn Triển khai MyEMS với Docker trên Linux/macOS (Bản tiếng Việt)


Trong hướng dẫn này, bạn sẽ triển khai MyEMS bằng Docker trên Linux (hoặc macOS).

Yêu cầu tiên quyết

  • Đã cài đặt docker, npm trên máy chủ (host).
  • Đã cài đặt máy chủ MySQL.
  • Cơ sở dữ liệu MySQL có thể được kết nối từ máy chủ chạy Docker Engine.
  • Yêu cầu phần cứng: Ít nhất 4GB RAM, 20GB dung lượng lưu trữ (cho cơ sở dữ liệu và container Docker).

Clone mã nguồn:

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

Bước 1: Cài đặt Cơ sở dữ liệu

Xem mục Cơ sở dữ liệu

Bước 2: Cài đặt myems-api

Trong phần này, bạn sẽ cài đặt myems-api trên Docker.

  • Sao chép mã nguồn vào thư mục gốc
cp -r myems/myems-api /
cd /myems-api
  • Tạo tệp .env dựa trên tệp example.env
Cảnh báo

Hãy thủ công thay thế 127.0.0.1 bằng địa chỉ IP THỰC TẾ của máy chủ (HOST).

cp example.env .env
  • Xây dựng (Build) Hình ảnh (Image) từ Mã nguồn
docker build -t myems/myems-api .

Để xây dựng cho nhiều nền tảng (không chỉ kiến trúc và hệ điều hành mà người dùng thực hiện build đang chạy), bạn có thể sử dụng buildx và đặt cờ --platform để chỉ định nền tảng mục tiêu cho đầu ra build (ví dụ: linux/amd64, linux/arm64, hoặc darwin/amd64):

docker buildx build --platform=linux/amd64 -t myems/myems-api .
  • Chạy container Docker

Trên máy chủ (host), tạo thư mục chia sẻ tệp upload:

mkdir /myems-upload

Tạo container, gắn (bind-mount) thư mục chia sẻ vào container, đồng thời gắn tệp .env vào 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: Chạy container ở chế độ nền và in ra ID container

  • -p: Xuất (Publish) cổng(s) của container ra máy chủ, 8000:8000 (Host:Container) gắn cổng 8000 (phải) của container vào cổng TCP 8000 (trái) của máy chủ.

  • -v: Nếu bạn sử dụng -v hoặc --volume để bind-mount một tệp/thư mục chưa tồn tại trên máy chủ Docker, -v sẽ tạo endpoint cho bạn (luôn tạo dưới dạng thư mục). Tùy chọn ro (nếu có) khiến bind mount được gắn vào container ở chế độ chỉ đọc. Đối với phiên bản v4.7.0 hoặc cũ hơn, hãy sử dụng '/code/.env' thay vì '/app/.env'.

  • --log-opt max-size=2m: Kích thước tối đa của log trước khi được luồng (rolled). Một số nguyên dương cộng với bộ định danh đơn vị đo lường (k, m, hoặc g).

  • --log-opt max-file=2: Số lượng tối đa của các tệp log có thể tồn tại. Nếu luồng log tạo ra nhiều tệp hơn quy định, tệp cũ nhất sẽ bị xóa. Một số nguyên dương.

  • --restart: Chính sách khởi động lại áp dụng khi container thoát.

  • --name: Gán tên cho container.

Đường dẫn tuyệt đối trước dấu hai chấm là đường dẫn trên máy chủ (host) và có thể khác nhau trên hệ thống của bạn. Đường dẫn tuyệt đối sau dấu hai chấm là đường dẫn trên container và KHÔNG thể thay đổi. Bằng cách truyền .env như tham số bind-mount, bạn có thể thay đổi giá trị cấu hình sau này. Nếu bạn thay đổi tệp .env, hãy khởi động lại container để thay đổi có hiệu lực.

Nếu bạn muốn di chuyển hình ảnh (image) sang máy tính khác:

  • Xuất (Export) hình ảnh thành tệp tar
docker save --output myems-api.tar myems/myems-api
  • Sao chép tệp tar sang máy tính khác, sau đó tải (load) hình ảnh từ tệp tar
docker load --input .\myems-api.tar

Bước 3: Cài đặt myems-admin

Trong phần này, bạn sẽ cài đặt myems-admin trên Docker.

  • Sao chép mã nguồn vào thư mục gốc
cp -r myems/myems-admin /
cd /myems-admin
Cảnh báo

Hãy thủ công thay thế 127.0.0.1:8000 trong nginx.conf bằng địa chỉ IP và cổng THỰC TẾ của myems-api trên máy chủ (HOST).

nano nginx.conf
      proxy_pass http://127.0.0.1:8000/;
  • Xây dựng (Build) Hình ảnh (Image) từ Mã nguồn
docker build -t myems/myems-admin .

Để xây dựng cho nhiều nền tảng (không chỉ kiến trúc và hệ điều hành mà người dùng thực hiện build đang chạy), bạn có thể sử dụng buildx và đặt cờ --platform để chỉ định nền tảng mục tiêu cho đầu ra build (ví dụ: linux/amd64, linux/arm64, hoặc darwin/amd64):

docker buildx build --platform=linux/amd64 -t myems/myems-admin .
  • Chạy container Docker

Trên máy chủ (host), tạo thư mục chia sẻ tệp upload:

mkdir /myems-upload

Tạo container, gắn (bind-mount) thư mục chia sẻ tệp upload vào container và cũng gắn 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: Chạy container ở chế độ nền và in ra ID container

  • -p: Xuất (Publish) cổng(s) của container ra máy chủ, 8001:8001 (Host:Container) gắn cổng 8001 (phải) của container vào cổng TCP 8001 (trái) của máy chủ.

  • -v: Nếu bạn sử dụng -v hoặc --volume để bind-mount một tệp/thư mục chưa tồn tại trên máy chủ Docker, -v sẽ tạo endpoint cho bạn (luôn tạo dưới dạng thư mục). Tùy chọn ro (nếu có) khiến bind mount được gắn vào container ở chế độ chỉ đọc. Đối với phiên bản v4.7.0 hoặc cũ hơn, hãy sử dụng '/code/.env' thay vì '/app/.env'.

  • --log-opt max-size=2m: Kích thước tối đa của log trước khi được luồng (rolled). Một số nguyên dương cộng với bộ định danh đơn vị đo lường (k, m, hoặc g).

  • --log-opt max-file=2: Số lượng tối đa của các tệp log có thể tồn tại. Nếu luồng log tạo ra nhiều tệp hơn quy định, tệp cũ nhất sẽ bị xóa. Một số nguyên dương.

  • --restart: Chính sách khởi động lại áp dụng khi container thoát.

  • --name: Gán tên cho container.

Nếu bạn muốn di chuyển hình ảnh (image) sang máy tính khác:

  • Xuất (Export) hình ảnh thành tệp tar
docker save --output myems-admin.tar myems/myems-admin
  • Sao chép tệp tar sang máy tính khác, sau đó tải (load) hình ảnh từ tệp tar
docker load --input .\myems-admin.tar

Bước 4: Cài đặt myems-modbus-tcp

Trong phần này, bạn sẽ cài đặt myems-modbus-tcp trên Docker.

  • Sao chép mã nguồn vào thư mục gốc
cp -r myems/myems-modbus-tcp /
cd /myems-modbus-tcp
  • Tạo tệp .env dựa trên tệp example.env
Cảnh báo

Hãy thủ công thay thế 127.0.0.1 bằng địa chỉ IP THỰC TẾ của máy chủ (HOST).

cp example.env .env
  • Xây dựng (Build) Hình ảnh (Image) từ Mã nguồn
docker build -t myems/myems-modbus-tcp .

Để xây dựng cho nhiều nền tảng (không chỉ kiến trúc và hệ điều hành mà người dùng thực hiện build đang chạy), bạn có thể sử dụng buildx và đặt cờ --platform để chỉ định nền tảng mục tiêu cho đầu ra build (ví dụ: linux/amd64, linux/arm64, hoặc darwin/amd64):

docker buildx build --platform=linux/amd64 -t myems/myems-modbus-tcp .
  • Chạy container Docker (chạy với quyền superuser)
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: Chạy container ở chế độ nền và in ra ID container

  • -v: Nếu bạn sử dụng -v hoặc --volume để bind-mount một tệp/thư mục chưa tồn tại trên máy chủ Docker, -v sẽ tạo endpoint cho bạn (luôn tạo dưới dạng thư mục). Tùy chọn ro (nếu có) khiến bind mount được gắn vào container ở chế độ chỉ đọc. Đối với phiên bản v4.7.0 hoặc cũ hơn, hãy sử dụng '/code/.env' thay vì '/app/.env'.

  • --log-opt max-size=2m: Kích thước tối đa của log trước khi được luồng (rolled). Một số nguyên dương cộng với bộ định danh đơn vị đo lường (k, m, hoặc g).

  • --log-opt max-file=2: Số lượng tối đa của các tệp log có thể tồn tại. Nếu luồng log tạo ra nhiều tệp hơn quy định, tệp cũ nhất sẽ bị xóa. Một số nguyên dương.

  • --restart: Chính sách khởi động lại áp dụng khi container thoát.

  • --name: Gán tên cho container.

Đường dẫn tuyệt đối trước dấu hai chấm là đường dẫn trên máy chủ (host) và có thể khác nhau trên hệ thống của bạn. Đường dẫn tuyệt đối sau dấu hai chấm là đường dẫn trên container và KHÔNG thể thay đổi. Bằng cách truyền .env như tham số bind-mount, bạn có thể thay đổi giá trị cấu hình sau này. Nếu bạn thay đổi tệp .env, hãy khởi động lại container để thay đổi có hiệu lực.

  • Di chuyển container Docker

Để di chuyển container sang máy tính khác:

  • Xuất (Export) hình ảnh thành tệp tar
docker save --output myems-modbus-tcp.tar myems/myems-modbus-tcp
  • Sao chép tệp tar sang máy tính khác, sau đó tải (load) hình ảnh từ tệp tar
docker load --input .\myems-modbus-tcp.tar

Bước 5: Cài đặt myems-cleaning

Trong phần này, bạn sẽ cài đặt myems-cleaning trên Docker.

  • Sao chép mã nguồn vào thư mục gốc
cp -r myems/myems-cleaning /
cd /myems-cleaning
  • Tạo tệp .env dựa trên tệp example.env
Cảnh báo

Hãy thủ công thay thế 127.0.0.1 bằng địa chỉ IP THỰC TẾ của máy chủ (HOST).

cp example.env .env
  • Xây dựng (Build) Hình ảnh (Image) từ Mã nguồn
docker build -t myems/myems-cleaning .

Để xây dựng cho nhiều nền tảng (không chỉ kiến trúc và hệ điều hành mà người dùng thực hiện build đang chạy), bạn có thể sử dụng buildx và đặt cờ --platform để chỉ định nền tảng mục tiêu cho đầu ra build (ví dụ: linux/amd64, linux/arm64, hoặc darwin/amd64):

docker buildx build --platform=linux/amd64 -t myems/myems-cleaning .
  • Chạy container Docker (chạy với quyền superuser)
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: Chạy container ở chế độ nền và in ra ID container

  • -v: Nếu bạn sử dụng -v hoặc --volume để bind-mount một tệp/thư mục chưa tồn tại trên máy chủ Docker, -v sẽ tạo endpoint cho bạn (luôn tạo dưới dạng thư mục). Tùy chọn ro (nếu có) khiến bind mount được gắn vào container ở chế độ chỉ đọc. Đối với phiên bản v4.7.0 hoặc cũ hơn, hãy sử dụng '/code/.env' thay vì '/app/.env'.

  • --log-opt max-size=2m: Kích thước tối đa của log trước khi được luồng (rolled). Một số nguyên dương cộng với bộ định danh đơn vị đo lường (k, m, hoặc g).

  • --log-opt max-file=2: Số lượng tối đa của các tệp log có thể tồn tại. Nếu luồng log tạo ra nhiều tệp hơn quy định, tệp cũ nhất sẽ bị xóa. Một số nguyên dương.

  • --restart: Chính sách khởi động lại áp dụng khi container thoát.

  • --name: Gán tên cho container.

Đường dẫn tuyệt đối trước dấu hai chấm là đường dẫn trên máy chủ (host) và có thể khác nhau trên hệ thống của bạn. Đường dẫn tuyệt đối sau dấu hai chấm là đường dẫn trên container và KHÔNG thể thay đổi. Bằng cách truyền .env như tham số bind-mount, bạn có thể thay đổi giá trị cấu hình sau này. Nếu bạn thay đổi tệp .env, hãy khởi động lại container để thay đổi có hiệu lực.

  • Di chuyển container Docker

Để di chuyển container sang máy tính khác:

  • Xuất (Export) hình ảnh thành tệp tar
docker save --output myems-cleaning.tar myems/myems-cleaning
  • Sao chép tệp tar sang máy tính khác, sau đó tải (load) hình ảnh từ tệp tar
docker load --input .\myems-cleaning.tar

Bước 6: Cài đặt myems-normalization

Trong phần này, bạn sẽ cài đặt myems-normalization trên Docker.

  • Sao chép mã nguồn vào thư mục gốc
cp -r myems/myems-normalization /
cd /myems-normalization
  • Tạo tệp .env dựa trên tệp example.env
Cảnh báo

Hãy thủ công thay thế 127.0.0.1 bằng địa chỉ IP THỰC TẾ của máy chủ (HOST).

cp example.env .env
  • Xây dựng (Build) Hình ảnh (Image) từ Mã nguồn
docker build -t myems/myems-normalization .

Để xây dựng cho nhiều nền tảng (không chỉ kiến trúc và hệ điều hành mà người dùng thực hiện build đang chạy), bạn có thể sử dụng buildx và đặt cờ --platform để chỉ định nền tảng mục tiêu cho đầu ra build (ví dụ: linux/amd64, linux/arm64, hoặc darwin/amd64):

docker buildx build --platform=linux/amd64 -t myems/myems-normalization .
  • Chạy container Docker (chạy với quyền superuser)
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: Chạy container ở chế độ nền và in ra ID container

  • -v: Nếu bạn sử dụng -v hoặc --volume để bind-mount một tệp/thư mục chưa tồn tại trên máy chủ Docker, -v sẽ tạo endpoint cho bạn (luôn tạo dưới dạng thư mục). Tùy chọn ro (nếu có) khiến bind mount được gắn vào container ở chế độ chỉ đọc. Đối với phiên bản v4.7.0 hoặc cũ hơn, hãy sử dụng '/code/.env' thay vì '/app/.env'.

  • --log-opt max-size=2m: Kích thước tối đa của log trước khi được luồng (rolled). Một số nguyên dương cộng với bộ định danh đơn vị đo lường (k, m, hoặc g).

  • --log-opt max-file=2: Số lượng tối đa của các tệp log có thể tồn tại. Nếu luồng log tạo ra nhiều tệp hơn quy định, tệp cũ nhất sẽ bị xóa. Một số nguyên dương.

  • --restart: Chính sách khởi động lại áp dụng khi container thoát.

  • --name: Gán tên cho container.

Đường dẫn tuyệt đối trước dấu hai chấm là đường dẫn trên máy chủ (host) và có thể khác nhau trên hệ thống của bạn. Đường dẫn tuyệt đối sau dấu hai chấm là đường dẫn trên container và KHÔNG thể thay đổi. Bằng cách truyền .env như tham số bind-mount, bạn có thể thay đổi giá trị cấu hình sau này. Nếu bạn thay đổi tệp .env, hãy khởi động lại container để thay đổi có hiệu lực.

  • Di chuyển container Docker

Để di chuyển container sang máy tính khác:

  • Xuất (Export) hình ảnh thành tệp tar
docker save --output myems-normalization.tar myems/myems-normalization
  • Sao chép tệp tar sang máy tính khác, sau đó tải (load) hình ảnh từ tệp tar
docker load --input .\myems-normalization.tar

Bước 7: Cài đặt myems-aggregation

Trong phần này, bạn sẽ cài đặt myems-aggregation trên Docker.

  • Sao chép mã nguồn vào thư mục gốc
cp -r myems/myems-aggregation /
cd /myems-aggregation
  • Tạo tệp .env dựa trên tệp example.env
cp example.env .env
Cảnh báo

Hãy thủ công thay thế 127.0.0.1 bằng địa chỉ IP THỰC TẾ của máy chủ (HOST).

  • Xây dựng (Build) Hình ảnh (Image) từ Mã nguồn
docker build -t myems/myems-aggregation .

Để xây dựng cho nhiều nền tảng (không chỉ kiến trúc và hệ điều hành mà người dùng thực hiện build đang chạy), bạn có thể sử dụng buildx và đặt cờ --platform để chỉ định nền tảng mục tiêu cho đầu ra build (ví dụ: linux/amd64, linux/arm64, hoặc darwin/amd64):

docker buildx build --platform=linux/amd64 -t myems/myems-aggregation .
  • Chạy container Docker (chạy với quyền superuser)
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: Chạy container ở chế độ nền và in ra ID container

  • -v: Nếu bạn sử dụng -v hoặc --volume để bind-mount một tệp/thư mục chưa tồn tại trên máy chủ Docker, -v sẽ tạo endpoint cho bạn (luôn tạo dưới dạng thư mục). Tùy chọn ro (nếu có) khiến bind mount được gắn vào container ở chế độ chỉ đọc. Đối với phiên bản v4.7.0 hoặc cũ hơn, hãy sử dụng '/code/.env' thay vì '/app/.env'.

  • --log-opt max-size=2m: Kích thước tối đa của log trước khi được luồng (rolled). Một số nguyên dương cộng với bộ định danh đơn vị đo lường (k, m, hoặc g).

  • --log-opt max-file=2: Số lượng tối đa của các tệp log có thể tồn tại. Nếu luồng log tạo ra nhiều tệp hơn quy định, tệp cũ nhất sẽ bị xóa. Một số nguyên dương.

  • --restart: Chính sách khởi động lại áp dụng khi container thoát.

  • --name: Gán tên cho container.

Đường dẫn tuyệt đối trước dấu hai chấm là đường dẫn trên máy chủ (host) và có thể khác nhau trên hệ thống của bạn. Đường dẫn tuyệt đối sau dấu hai chấm là đường dẫn trên container và KHÔNG thể thay đổi. Bằng cách truyền .env như tham số bind-mount, bạn có thể thay đổi giá trị cấu hình sau này. Nếu bạn thay đổi tệp .env, hãy khởi động lại container để thay đổi có hiệu lực.

  • Di chuyển container Docker

  • Xuất (Export) hình ảnh thành tệp tar

docker save --output myems-aggregation.tar myems/myems-aggregation
  • Sao chép tệp tar sang máy tính khác, sau đó tải (load) hình ảnh từ tệp tar
docker load --input .\myems-aggregation.tar

Bước 8: Cài đặt myems-web

Trong phần này, bạn sẽ cài đặt myems-web trên Docker.

  • Chỉnh sửa tệp config.js:
Lưu ý

Lấy mapboxToken tại https://mapbox.com và sau đó đặt showOnlineMap thành true. Nếu bạn muốn tắt tính năng bản đồ trực tuyến, đặt showOnlineMap thành false.

cd myems/myems-web
nano src/config.js
  • Chỉnh sửa tệp nginx.conf:
Cảnh báo

Thay thế 127.0.0.1:8000 trong nginx.conf bằng địa chỉ IP và cổng THỰC TẾ của myems-api trên máy chủ (HOST).

cd myems/myems-web
nano nginx.conf
  • Sao chép mã nguồn vào thư mục gốc
cp -r myems/myems-web /
cd /myems-web
Thông tin

Bạn có thể an toàn bỏ qua lệnh 'npm run build' trong phần này, vì nó đã được xây dựng (built) trong Dockerfile.

  • Xây dựng (Build) Hình ảnh (Image) từ Mã nguồn
docker build -t myems/myems-web .
docker image prune -f

Để xây dựng cho nhiều nền tảng (không chỉ kiến trúc và hệ điều hành mà người dùng thực hiện build đang chạy), bạn có thể sử dụng buildx và đặt cờ --platform để chỉ định nền tảng mục tiêu cho đầu ra build (ví dụ: linux/amd64, linux/arm64, hoặc darwin/amd64):

docker buildx build --platform=linux/amd64 -t myems/myems-web .
docker image prune -f
  • Chạy container Docker

Trên máy chủ (host), gắn (bind-mount) 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: Chạy container ở chế độ nền và in ra ID container

  • -p: Xuất (Publish) cổng(s) của container ra máy chủ, 80:80 (Host:Container) gắn cổng 80 (phải) của container vào cổng TCP 80 (trái) của máy chủ.

  • -v: Nếu bạn sử dụng -v hoặc --volume để bind-mount một tệp/thư mục chưa tồn tại trên máy chủ Docker, -v sẽ tạo endpoint cho bạn (luôn tạo dưới dạng thư mục). Tùy chọn ro (nếu có) khiến bind mount được gắn vào container ở chế độ chỉ đọc. Đối với phiên bản v4.7.0 hoặc cũ hơn, hãy sử dụng '/code/.env' thay vì '/app/.env'.

  • --log-opt max-size=2m: Kích thước tối đa của log trước khi được luồng (rolled). Một số nguyên dương cộng với bộ định danh đơn vị đo lường (k, m, hoặc g).

  • --log-opt max-file=2: Số lượng tối đa của các tệp log có thể tồn tại. Nếu luồng log tạo ra nhiều tệp hơn quy định, tệp cũ nhất sẽ bị xóa. Một số nguyên dương.

  • --restart: Chính sách khởi động lại áp dụng khi container thoát.

  • --name: Gán tên cho container.

Nếu bạn muốn di chuyển hình ảnh (image) sang máy tính khác:

  • Xuất (Export) hình ảnh thành tệp tar
docker save --output myems-web.tar myems/myems-web
  • Sao chép tệp tar sang máy tính khác, sau đó tải (load) hình ảnh từ tệp tar
docker load --input .\myems-web.tar

Sau khi cài đặt

Chúc mừng! Bạn đã có thể đăng nhập vào Giao diện quản trị MyEMS Admin UI và Web UI.

Cổng mặc định

MyEMS Web UI: 80

MyEMS API: 8000

MyEMS Admin UI: 8001

Giả sử địa chỉ máy chủ là 192.168.1.8 (thay bằng địa chỉ máy chủ thực tế) Truy cập MyEMS Web UI tại http://192.168.1.8 (có thể bỏ qua cổng 80) Truy cập MyEMS Admin UI tại http://192.168.1.8:8001

Mật khẩu mặc định

MyEMS Admin UI

Tên người dùng:

administrator

Mật khẩu:

!MyEMS1

MyEMS Web UI

Tên người dùng:

administrator@myems.io

Mật khẩu:

!MyEMS1

Khắc phục sự cố

Cách giải quyết vấn đề timeout khi pull image

Do vấn đề mạng của nhà cung cấp dịch vụ internet (ISP), bạn có thể gặp sự cố pull image chậm. Bạn có thể sử dụng các dịch vụ tăng tốc từ bên thứ ba.