- Jelina 개요
- JelinaCloud
- 구성 예제
장치 애플리케이션 배포 사례
이 문서에서는 JelinaCloud에서 장치의 애플리케이션을 배포하는 방법을 소개합니다.
아래 스크린샷은 기존의 실제 제품 자료를 사용하여 구성과 작업 진입점을 보여 줍니다. 화면의 장치, 버전과 서비스 이름은 예제 정보이므로 실제 프로젝트에 맞게 입력하세요.
애플리케이션을 배포하기 전에 장치에 JelinaOS를 설치하고 JelinaCloud 플릿에 추가해야 합니다. 자세한 절차는 장치 추가를 참조하세요.
사용 장치 정보
섹션 제목: “사용 장치 정보”| 장치 | JelinaOS 버전 | Jelinvisor 버전 | 커널 버전 |
|---|---|---|---|
| I.MX8MP EBC-RS08-A2 | imx8mmebcrs08a2 Debian-10 1.0.4 | 1.0.9 | 5.4.70-g62c07ec2f origin |
기본 작업 절차
섹션 제목: “기본 작업 절차”
버전 게시
섹션 제목: “버전 게시”장치가 속한 조직의 플릿으로 이동하여 【버전】 - 【새 버전】을 차례로 클릭합니다. 버전 생성 편집 모드를 선택하고 다음을 클릭하여 compose.yml 편집 페이지로 이동합니다.

편집 모드 선택:
개발자 모드에서는 compose 구성을 편집하고, 비개발자 모드에서는 양식으로 서비스를 입력할 수 있습니다. 두 모드의 화면 예제는 아래에 있습니다.
개발자 편집 모드 예제
compose.yml 편집 페이지에서 애플리케이션 서비스 구성을 작성합니다. 새 버전의 compose.yml 구성 파일에 컨테이너 서비스와 로컬 서비스 정보를 함께 작성할 수 있습니다. 설명을 쉽게 하기 위해 이 문서에서는 컨테이너 서비스와 로컬 서비스 배포를 나누어 설명합니다.
컨테이너 서비스 배포
섹션 제목: “컨테이너 서비스 배포”사용자는 Docker Hub 이미지 저장소(https://hub.docker.com/search?q=)에서 필요한 서비스 이미지를 찾을 수 있습니다. 구체적인 서비스 배포 방법은 해당 웹페이지의 문서를 참조하세요.
Mysql 컨테이너 서비스를 배포하는 예제입니다.
- 구성 파일을 작성합니다.

version: 2services: #서비스 이름 db: # mysql: 이미지 이름, latest: 최신 이미지 버전(생략 가능하며 생략하면 기본적으로 dockerhub에서 최신 이미지를 가져옴). mysql:5.7과 같이 특정 버전의 이미지를 지정할 수도 있습니다. image: mysql:latest #환경 변수 environment: # mysql 최고 관리자 로그인 암호 MYSQL_ROOT_PASSWORD: '123456' #호스트와 컨테이너 간 매핑 포트 ports: - '3306:3306'-
【다음】-【저장】을 클릭하여 편집 중인 버전을 저장합니다.
-
서비스 목록의 파일 아이콘을 클릭하여 패키징한 서비스 프로그램 파일을 업로드합니다. 공개 Image 서비스는 Docker에서 이미지 이름으로 직접 가져올 수 있으므로 파일을 업로드하지 않아도 됩니다.

- 업로드가 완료되면 버전을 게시할 수 있습니다. 오른쪽 위의 【operation】-【게시】를 클릭하여 새 버전 게시를 완료합니다.
로컬 서비스 배포
섹션 제목: “로컬 서비스 배포”- 테스트용으로 간단한 helloworld.sh 스크립트 파일을 작성합니다.
기능: 1-100을 순회하면서 숫자를 10으로 나눈 나머지가 0이면 콘솔에 hello world를 한 번 출력하고 10s 동안 대기합니다. 순회가 끝나면 장치 변수 name의 값을 가져와 콘솔에 출력합니다.
#!/bin/bash#1~100을 순회하면서 숫자를 10으로 나눈 나머지가 0일 때마다 콘솔에 hello world를 한 번 출력하고 10s 동안 대기합니다.for((i=1;i<=100;i++));do if [ $(expr $i % 10) == 0 ] then echo "hello world $i" sleep 10done#장치 변수 name의 값(name은 jack으로 설정됨)을 가져와 콘솔에 출력합니다. 참고: name은 사용자가 플릿 공용 변수 또는 장치 전용 변수 페이지에서 설정합니다. 장치 변수에 관한 내용은 아래의 ##장치 설정 및 서비스 변수## 절을 참조하세요.echo "name:$name"작성한 helloworld.sh 스크립트 파일을 helloworld.tar.gz로 패키징합니다.
- 구성 파일을 작성하고 저장합니다.
version: 2programs: #서비스 이름 helloworld: program: helloworld #서비스 재시작 로직 지정: 서비스 실패 시 재시작 restart: on-failure #서비스 시작 명령 command: /usr/bin/bash helloworld.sh- 서비스 목록의 파일 아이콘을 클릭하여 패키징한 서비스 프로그램 파일을 업로드합니다.

- 업로드가 완료되면 오른쪽 위의 【operation】-【게시】를 클릭하여 새 버전을 게시합니다.
비개발자 편집 모드
이 모드는 비개발자를 위해 설계되었습니다. 기본 서비스 이름과 시작 명령만 입력하면 서비스 구성을 작성할 수 있습니다. 편집 방법은 다음과 같습니다.
【데이터 추가】를 클릭하고 【–】를 두 번 클릭하여 편집 상태로 전환한 뒤 서비스 구성 정보를 입력합니다.
편집이 끝나면 【다음】을 클릭하여 저장합니다. 이후 프로그램 패키지 업로드와 버전 게시 절차는 【개발자 편집 모드】와 같습니다.

장치 버전 지정
섹션 제목: “장치 버전 지정”기본적으로 플릿은 최신 버전을 자동으로 따르지만, 장치가 최신 버전으로 전환되기까지 약 15분이 걸립니다. 더 빠르게 전환하려면 수동으로 버전을 지정할 수 있습니다.
장치 개요 페이지의 오른쪽 위에서 【operation】 -> 【버전 지정】을 클릭합니다. 대화상자에서 방금 게시한 새 버전을 선택하고 【버전 지정】을 클릭하여 현재 장치의 버전을 지정합니다.
버전의 애플리케이션 배포 상태 확인
섹션 제목: “버전의 애플리케이션 배포 상태 확인”참고: 장치가 네트워크에 연결되어 정상적으로 통신하는 상태여야 합니다.
JelinaCloud 웹 화면에서 확인
섹션 제목: “JelinaCloud 웹 화면에서 확인”서비스가 정상 실행되면 장치 대시보드의 서비스 목록에서 현재 실행 상태를 확인할 수 있습니다.

대표적인 네 가지 상태는 다음과 같습니다.
- Running: 실행 중
- Failed: 서비스 실행 실패
- Restarting: 서비스 재시작 중
- Exited: 서비스 종료됨
장치에서 확인
섹션 제목: “장치에서 확인”- JelinaCloud 장치 상세 페이지의 원격 접속 기능으로 SSH 터미널에 연결하거나 기존 SSH 클라이언트로 장치에 연결합니다.

컨테이너 배포 상태 확인
섹션 제목: “컨테이너 배포 상태 확인”연결 후 콘솔에서 docker ps 명령을 입력하여 현재 실행 중인 컨테이너 서비스를 확인합니다.
대상 컨테이너가 목록에 있으며 STATUS가 Up로 표시되는지 확인합니다. 표시되지 않으면 Release 대상 버전, 이미지 다운로드 상태와 컨테이너 로그를 함께 확인하여 문제를 진단합니다.
참고: 컨테이너 이름은 서비스_이름 _ 이미지_ID _ 버전_ID _ 버전_Commit로 지정됩니다.
컨테이너 목록에서 이 예제의 db 서비스가 실행 중인지 확인합니다.
로컬 서비스 배포 상태 확인
섹션 제목: “로컬 서비스 배포 상태 확인” journalctl -u jelina-jelinvisor -f 명령으로 장치 로그를 확인하여 현재 애플리케이션의 실행 상태를 점검할 수도 있습니다.
장치 에이전트 로그의 서비스 시작·종료 기록을 확인하고 클라우드 대시보드의 서비스 상태와 대조합니다.
장치는 주기적으로 상태를 보고합니다. 현재 장치의 보고 주기와 실제 서비스 상태를 기준으로 대상 서비스가 정상 실행되는지 확인하세요.
서비스 동작 확인
섹션 제목: “서비스 동작 확인”MySQL 컨테이너 서비스의 실제 동작 확인
섹션 제목: “MySQL 컨테이너 서비스의 실제 동작 확인”Navicat을 열어 장치에 배포된 mysql 애플리케이션에 원격 연결을 시도합니다. 주소, 최고 관리자 계정, compose.yml에 구성한 mysql 최고 관리자 암호와 포트를 입력합니다.
| 연결 항목 | 이 예제의 입력 방법 |
|---|---|
| 주소 | 접근 가능한 장치 IP 주소 |
| 포트 | compose에서 매핑한 호스트 포트. 이 예제에서는 3306 |
| 사용자 이름 | root 또는 생성한 업무용 사용자 |
| 암호 | 현재 애플리케이션 구성의 데이터베이스 암호 |
【연결 테스트】를 클릭하여 연결 성공이 표시되면 장치 애플리케이션이 배포되었으며 정상적으로 연결하여 사용할 수 있음을 의미합니다.
또한 JelinaCloud의 장치 전용 변수 또는 플릿 공용 변수에서 mysql 사용 계정 등 다른 환경 설정을 구성할 수 있습니다.
로컬 서비스 helloworld 스크립트의 실제 동작 확인
섹션 제목: “로컬 서비스 helloworld 스크립트의 실제 동작 확인”로컬 서비스가 실행되면 JelinaCloud 장치 대시보드의 로그와 원격 소프트웨어 콘솔의 장치 출력에서 helloworld 관련 정보를 확인할 수 있습니다.
JelinaCloud 장치 대시보드:

원격 콘솔:
다음은 이 예제 스크립트의 예시 출력입니다. 구체적인 숫자는 실행 진행 상황에 따라 달라집니다.
hello world 10hello world 20...name:jack스크립트가 끝날 때 name:jack가 출력되면 서비스에 설정한 변수 name를 읽었음을 의미합니다. 예상값이 출력되지 않으면 변수의 적용 범위와 실제 값을 확인하세요.
장치 구성과 서비스 변수
섹션 제목: “장치 구성과 서비스 변수”우선순위: 장치 구성 > 플릿 구성
- 플릿 구성: 기본적으로 플릿 내 모든 장치는 이 구성에 따라 실행됩니다.

적용 장치: 현재 플릿에서 이 구성에 따라 동작하는 장치를 의미합니다.
- 장치 구성: 플릿의 개별 장치는 자체 구성 변수 값을 독립적으로 설정할 수 있습니다.

서비스 변수
섹션 제목: “서비스 변수”-
플릿 공용 서비스 변수: 기본적으로 플릿 내 모든 장치의 서비스 환경 변수는 이 구성을 따릅니다.
예를 들어 플릿 공용 서비스 변수에서 모든 서비스에 a, b, name 세 변수를 설정하면 플릿 내 모든 장치에 이 세 변수가 존재합니다.

특정 이미지 서비스를 선택하여 환경 변수를 구성할 수도 있습니다.

-
장치 전용 서비스 변수: 플릿의 개별 장치는 자체 서비스 환경 변수 값을 독립적으로 설정할 수 있습니다. 작업 페이지에서 【override】를 클릭하여 플릿 변수 값을 재정의하면 플릿과 다른 장치 전용 서비스 변수를 사용할 수 있습니다.
예를 들어 페이지에서 【override】를 클릭하면 플릿 변수 name, a, b의 값을 다시 설정할 수 있습니다. 재설정한 값은 해당 장치에만 적용되며 플릿의 다른 장치에는 영향을 주지 않습니다.

기타 안내
섹션 제목: “기타 안내”-
장치는 현재 버전에 포함된 서비스만 실행합니다.
-
플릿 공용 변수 또는 장치 전용 변수를 수정하면 현재 장치에서 실행 중인 서비스가 재시작됩니다.
-
로컬 서비스가 실행을 마치면 상태가
Exited로 바뀝니다. -
로컬 서비스의 기본 재시작 정책은
restart: always입니다. 정책이always인 경우 서비스가 비정상 중단되면 시스템이 재시작을 시도합니다. 일정 시간 내에 서비스가 계속 재시작되면 상태를Failed로 판단합니다. 다양한 재시작 정책을 제공하므로 사용 요구에 맞게 지정할 수 있습니다.
restart: 선택 가능 값: no,on-success,on-failure,on-abnormal,on-watchdog,on-abort,always, 기본값은 always-
비공개 이미지의 컨테이너 서비스와 로컬 서비스는 애플리케이션 패키지 파일을 업로드해야 합니다. 그렇지 않으면 연결된 버전을 게시할 수 없습니다.
-
새 버전의 로컬 서비스 이름이 이전 버전과 같아야 새 서비스가 이전 서비스의 데이터를 보존합니다.
-
컨테이너 서비스 데이터를 영구 저장하려면 버전을 생성하며
compose.yml파일을 편집할 때 데이터 볼륨 마운트를 지정하세요. 【지정 경로 마운트는 지원하지 않습니다】. -
컨테이너 이름은
서비스_이름 _ 이미지_ID _ 버전_ID _ 버전_Commit로 지정되므로 사용자는compose.yml파일에서container_name로 컨테이너 이름을 다시 지정할 수 없습니다. -
【개발자 편집 모드】는 【비개발자 편집 모드】보다 더 다양한 구성을 작성할 수 있습니다.
-
compose.yml의 Volumes 값이 비어 있으면 데이터 볼륨 마운트를 지정하지 않았다는 뜻이며, 정상적인 컨테이너 배포에는 영향을 주지 않습니다.