본문으로 바로 가기

Podman on Linux

본 가이드에서는 리눅스 환경에서 Podman을 사용해 MyEMS를 배포하는 방법을 설명합니다.

선행 조건

  • 호스트에 Podman, npm이 설치되어 있어야 합니다.
  • MySQL 서버가 설치되어 있어야 합니다.
  • Podman 엔진이 실행 중인 호스트에서 MySQL 데이터베이스에 접근할 수 있어야 합니다.
주의
  • Podman 명령어 실행에는 root 권한을 사용하는 것을 권장합니다.

  • Podman 설치 후 systemctl status podman-restart.service 명령으로 컨테이너 자동 시작 및 정책 설정 여부를 확인하십시오. Unit not found가 표시되면 컨테이너가 자동 시작되지 않는다는 의미입니다.

1단계: 데이터베이스

데이터베이스 문서를 참조하십시오.

2단계: myems-api

이 섹션에서는 Podman에 myems-api를 설치합니다.

  • 소스 코드를 루트 디렉토리에 복사
cp -r myems/myems-api /
cd /myems-api
  • example.env 파일을 기반으로 .env 파일 생성
주의

수동으로 127.0.0.1을 실제 호스트(HOST) IP 주소로 교체하십시오.

cp example.env .env
  • 소스 코드에서 이미지 빌드
podman build -t myems/myems-api .

빌드를 실행하는 사용자의 아키텍처 및 운영 체제가 아닌 여러 플랫폼을 대상으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

podman buildx build --platform=linux/amd64 -t myems/myems-api .
  • Podman 컨테이너 실행

호스트에서 공유 업로드 파일 폴더 생성:

mkdir /myems-upload

컨테이너를 생성하고 공유 폴더를 컨테이너에 바인드 마운트하며, .env 파일도 컨테이너에 바인드 마운트합니다:

podman 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을 사용하여 Podman 호스트에 아직 존재하지 않는 파일 또는 디렉토리를 바인드 마운트하면, -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 파일을 변경한 경우 변경 내용을 적용하려면 컨테이너를 재시작해야 합니다.

이미지를 다른 컴퓨터로 이전하려면,

  • 이미지를 tarball 파일로 내보내기
podman save --output myems-api.tar myems/myems-api
  • tarball 파일을 다른 컴퓨터로 복사한 후 tarball 파일에서 이미지 로드하기
podman load --input .\myems-api.tar

3단계: myems-admin

이 섹션에서는 Podman에 myems-admin을 설치합니다.

  • 소스 코드를 루트 디렉토리에 복사
cp -r myems/myems-admin /
cd /myems-admin
주의

nginx.conf에서 127.0.0.1:8000을 myems-api의 실제 호스트(HOST) IP와 포트로 수동으로 교체하십시오.

nano nginx.conf
      proxy_pass http://127.0.0.1:8000/;
  • 소스 코드에서 이미지 빌드
podman build -t myems/myems-admin .

빌드를 실행하는 사용자의 아키텍처 및 운영 체제가 아닌 여러 플랫폼을 대상으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

podman buildx build --platform=linux/amd64 -t myems/myems-admin .
  • Podman 컨테이너 실행

호스트에서 공유 업로드 파일 폴더 생성:

mkdir /myems-upload

컨테이너를 생성하고 공유 업로드 파일 폴더를 컨테이너에 바인드 마운트하며 nginx.conf도 바인드 마운트합니다:

podman 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을 사용하여 Podman 호스트에 아직 존재하지 않는 파일 또는 디렉토리를 바인드 마운트하면, -v가 자동으로 엔드포인트를 생성합니다. 항상 디렉토리로 생성됩니다. ro 옵션이 있으면 바인드 마운트가 컨테이너에 읽기 전용으로 마운트됩니다. v4.7.0 이전 버전의 경우 '/app/.env' 대신 '/code/.env'를 사용하십시오.

  • --log-opt max-size=2m: 로그가 롤링되기 전의 최대 크기입니다. 양의 정수에 단위를 나타내는 수식어(k, m, g)를 붙입니다.

  • --log-opt max-file=2: 존재할 수 있는 최대 로그 파일 수입니다. 로그 롤링으로 인해 파일이 너무 많아지면 가장 오래된 파일이 삭제됩니다. 양의 정수 값을 사용합니다.

  • --restart: 컨테이너가 종료될 때 적용할 재시작 정책입니다.

  • --name: 컨테이너에 이름을 할당합니다.

이미지를 다른 컴퓨터로 이전하려면,

  • 이미지를 tarball 파일로 내보내기
podman save --output myems-admin.tar myems/myems-admin
  • tarball 파일을 다른 컴퓨터로 복사한 후 tarball 파일에서 이미지 로드하기
podman load --input .\myems-admin.tar

4단계: myems-modbus-tcp

이 섹션에서는 Podman에 myems-modbus-tcp를 설치합니다.

  • 소스 코드를 루트 디렉토리에 복사
cp -r myems/myems-modbus-tcp /
cd /myems-modbus-tcp
  • example.env 파일을 기반으로 .env 파일 생성
주의

수동으로 127.0.0.1을 실제 호스트(HOST) IP 주소로 교체하십시오.

cp example.env .env
  • 소스 코드에서 이미지 빌드
podman build -t myems/myems-modbus-tcp .

빌드를 실행하는 사용자의 아키텍처 및 운영 체제가 아닌 여러 플랫폼을 대상으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

podman buildx build --platform=linux/amd64 -t myems/myems-modbus-tcp .
  • Podman 컨테이너 실행 (슈퍼유저로 실행)
podman 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을 사용하여 Podman 호스트에 아직 존재하지 않는 파일 또는 디렉토리를 바인드 마운트하면, -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 파일을 변경한 경우 변경 내용을 적용하려면 컨테이너를 재시작해야 합니다.

  • Podman 컨테이너 이전

컨테이너를 다른 컴퓨터로 이전하려면,

  • 이미지를 tarball 파일로 내보내기
podman save --output myems-modbus-tcp.tar myems/myems-modbus-tcp
  • tarball 파일을 다른 컴퓨터로 복사한 후 tarball 파일에서 이미지 로드하기
podman load --input .\myems-modbus-tcp.tar

5단계: myems-cleaning

이 섹션에서는 Podman에 myems-cleaning을 설치합니다.

  • 소스 코드를 루트 디렉토리에 복사
cp -r myems/myems-cleaning /
cd /myems-cleaning
  • example.env 파일을 기반으로 .env 파일 생성
주의

수동으로 127.0.0.1을 실제 호스트(HOST) IP 주소로 교체하십시오.

cp example.env .env
  • 소스 코드에서 이미지 빌드
podman build -t myems/myems-cleaning .

빌드를 실행하는 사용자의 아키텍처 및 운영 체제가 아닌 여러 플랫폼을 대상으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

podman buildx build --platform=linux/amd64 -t myems/myems-cleaning .
  • Podman 컨테이너 실행 (슈퍼유저로 실행)
podman 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을 사용하여 Podman 호스트에 아직 존재하지 않는 파일 또는 디렉토리를 바인드 마운트하면, -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 파일을 변경한 경우 변경 내용을 적용하려면 컨테이너를 재시작해야 합니다.

  • Podman 컨테이너 이전

컨테이너를 다른 컴퓨터로 이전하려면,

  • 이미지를 tarball 파일로 내보내기
podman save --output myems-cleaning.tar myems/myems-cleaning
  • tarball 파일을 다른 컴퓨터로 복사한 후 tarball 파일에서 이미지 로드하기
podman load --input .\myems-cleaning.tar

6단계: myems-normalization

이 섹션에서는 Podman에 myems-normalization을 설치합니다.

  • 소스 코드를 루트 디렉토리에 복사
cp -r myems/myems-normalization /
cd /myems-normalization
  • example.env 파일을 기반으로 .env 파일 생성
주의

수동으로 127.0.0.1을 실제 호스트(HOST) IP 주소로 교체하십시오.

cp example.env .env
  • 소스 코드에서 이미지 빌드
podman build -t myems/myems-normalization .

빌드를 실행하는 사용자의 아키텍처 및 운영 체제가 아닌 여러 플랫폼을 대상으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

podman buildx build --platform=linux/amd64 -t myems/myems-normalization .
  • Podman 컨테이너 실행 (슈퍼유저로 실행)
podman 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을 사용하여 Podman 호스트에 아직 존재하지 않는 파일 또는 디렉토리를 바인드 마운트하면, -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 파일을 변경한 경우 변경 내용을 적용하려면 컨테이너를 재시작해야 합니다.

  • Podman 컨테이너 이전

컨테이너를 다른 컴퓨터로 이전하려면,

  • 이미지를 tarball 파일로 내보내기
podman save --output myems-normalization.tar myems/myems-normalization
  • tarball 파일을 다른 컴퓨터로 복사한 후 tarball 파일에서 이미지 로드하기
podman load --input .\myems-normalization.tar

7단계: myems-aggregation

이 섹션에서는 Podman에 myems-aggregation을 설치합니다.

  • 소스 코드를 루트 디렉토리에 복사
cp -r myems/myems-aggregation /
cd /myems-aggregation
  • example.env 파일을 기반으로 .env 파일 생성
cp example.env .env
주의

수동으로 127.0.0.1을 실제 호스트(HOST) IP 주소로 교체하십시오.

  • 소스 코드에서 이미지 빌드
podman build -t myems/myems-aggregation .

빌드를 실행하는 사용자의 아키텍처 및 운영 체제가 아닌 여러 플랫폼을 대상으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

podman buildx build --platform=linux/amd64 -t myems/myems-aggregation .
  • Podman 컨테이너 실행 (슈퍼유저로 실행)
podman 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을 사용하여 Podman 호스트에 아직 존재하지 않는 파일 또는 디렉토리를 바인드 마운트하면, -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 파일을 변경한 경우 변경 내용을 적용하려면 컨테이너를 재시작해야 합니다.

  • Podman 컨테이너 이전

  • 이미지를 tarball 파일로 내보내기

podman save --output myems-aggregation.tar myems/myems-aggregation
  • tarball 파일을 다른 컴퓨터로 복사한 후 tarball 파일에서 이미지 로드하기
podman load --input .\myems-aggregation.tar

8단계: myems-web

이 섹션에서는 Podman에 myems-web을 설치합니다.

  • 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을 myems-api의 실제 호스트(HOST) IP와 포트로 교체하십시오.

cd myems/myems-web
nano nginx.conf
  • 소스 코드를 루트 디렉토리에 복사
cp -r myems/myems-web /
cd /myems-web
정보

이 섹션의 'npm run build' 명령은 Podmanfile에 빌드 과정이 포함되어 있으므로 안전하게 무시할 수 있습니다.

  • 소스 코드에서 이미지 빌드
podman build -t myems/myems-web .

빌드를 실행하는 사용자의 아키텍처 및 운영 체제가 아닌 여러 플랫폼을 대상으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

podman buildx build --platform=linux/amd64 -t myems/myems-web .
  • Podman 컨테이너 실행

호스트에서 nginx.conf를 바인드 마운트합니다:

podman 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을 사용하여 Podman 호스트에 아직 존재하지 않는 파일 또는 디렉토리를 바인드 마운트하면, -v가 자동으로 엔드포인트를 생성합니다. 항상 디렉토리로 생성됩니다. ro 옵션이 있으면 바인드 마운트가 컨테이너에 읽기 전용으로 마운트됩니다. v4.7.0 이전 버전의 경우 '/app/.env' 대신 '/code/.env'를 사용하십시오.

  • --log-opt max-size=2m: 로그가 롤링되기 전의 최대 크기입니다. 양의 정수에 단위를 나타내는 수식어(k, m, g)를 붙입니다.

  • --log-opt max-file=2: 존재할 수 있는 최대 로그 파일 수입니다. 로그 롤링으로 인해 파일이 너무 많아지면 가장 오래된 파일이 삭제됩니다. 양의 정수 값을 사용합니다.

  • --restart: 컨테이너가 종료될 때 적용할 재시작 정책입니다.

  • --name: 컨테이너에 이름을 할당합니다.

이미지를 다른 컴퓨터로 이전하려면,

  • 이미지를 tarball 파일로 내보내기
podman save --output myems-web.tar myems/myems-web
  • tarball 파일을 다른 컴퓨터로 복사한 후 tarball 파일에서 이미지 로드하기
podman 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