빠른 설치 — 2026.05+ 컨테이너 표준
이 페이지는 현장에서 게이트웨이 1대를 설치할 때 쓰는 표준 절차입니다.
PlantPulse Edge 는 2026.05부터 단일 Docker 컨테이너 이미지로 배포하며,
install.sh 가 OS 의존성부터 systemd 등록까지 한 번에 처리합니다.
설치가 끝나면 plantpulse-edge.service 가 컨테이너를 관리합니다.
legacy native 서비스인 plantpulse.service 와 동시에 사용하지 않습니다.
0. 한눈에
sudo -i
curl -fsSL https://product.kopens.io/plantpulse-edge/install.sh | bash
설치 중 image pull 을 포함해 보통 5-15분 걸립니다. 느린 회선이나 첫 Docker 설치가 필요한 박스에서는 더 오래 걸릴 수 있습니다.
1. 설치 전 1분 확인
# Linux / 권한
uname -a
id
# 외부 다운로드 도달성
curl -I https://product.kopens.io/plantpulse-edge/install.sh
# 디스크 / 메모리
df -h /opt /data1 2>/dev/null || df -h /opt
free -h
| 항목 | 기준 |
|---|---|
| 권한 | root (sudo -i) |
| 네트워크 | product.kopens.io 로 HTTPS 도달 |
| 디스크 | /opt/kopens 3GB+, /data1 데이터용 100GB+ 권장 |
| 메모리 | 8GB 최소, 16GB 이상 권장 |
| 기존 서비스 | plantpulse.service / plantpulse-edge.service 동시 active 금지 |
설치 전 운영팀 승인 값은 프로덕션 인수 기준에 맞춰 정리합니다.
install.sh 가 Docker, OS 패키지, sysctl, firewall, chrony 를 설치/정렬합니다.
사내 정책상 패키지 설치가 막혀 있으면 보안팀/IT 에 허용을 요청하거나
오프라인 설치로 전환하세요.
2. 설치 실행
권장: 설치 bundle 을 받은 뒤 실행
sudo -i
curl -fsSLO https://product.kopens.io/plantpulse-edge/plantpulse-edge-docker.tar.gz
mkdir -p /opt/kopens/plantpulse-edge-docker
tar xzf plantpulse-edge-docker.tar.gz -C /opt/kopens/plantpulse-edge-docker --strip-components=1
cd /opt/kopens/plantpulse-edge-docker/bin
bash install.sh
bundle 방식은 설치 파일을 남기므로 장애 분석과 재실행이 쉽습니다.
번들을 어디에 풀었든, install.sh 는 status.sh · health.sh · upgrade.sh 같은
운영 스크립트를 /opt/kopens/install/bin/ 에 복사합니다.
이후 문서에서 /opt/kopens/install/bin/… 로 안내하는 것은 그 때문입니다 —
번들을 푼 위치를 기억하지 않아도 됩니다.
대체: 원라인 실행
sudo -i
bash < <(curl -fsSL https://product.kopens.io/plantpulse-edge/install.sh)
3. 사이트 값 / 네트워크 값 지정
기본값으로도 설치할 수 있지만, 현장 납품에서는 보통 아래 env 를 명시합니다.
sudo -i
cd /opt/kopens/install
EDGE_ID=EDGE_00303 \
SITE_ID=SITE_00001 \
SERVER_HOST=192.168.0.41 \
SERVER_API_KEY='<platform-api-key>' \
LAN1_IFACE=enp1s0 \
LAN1_IP=192.168.100.10/24 \
LAN2_IFACE=enp2s0 \
LAN2_IP=192.168.0.10/24 \
LAN2_GATEWAY=192.168.0.1 \
LAN2_DNS=192.168.0.1 \
bash install.sh
자주 쓰는 env:
| 변수 | 의미 |
|---|---|
EDGE_ID | 게이트웨이 ID. 예: EDGE_00303 |
SITE_ID | 사이트 ID. 예: SITE_00001 |
SERVER_HOST / SERVER_API_KEY | 플랫폼 API 연동 정보 |
LAN1_IFACE / LAN1_IP | PLC 망 NIC 와 static IP |
LAN2_IFACE / LAN2_IP / LAN2_GATEWAY / LAN2_DNS | WAN/외부망 NIC 와 routing |
ADMIN_PASS / API_KEY / MQTT_PASS / OPCUA_PASS | 운영팀이 정한 초기 자격증명으로 override |
CERT_PASS | TLS keystore 비밀번호. 공식 cert password key 는 이것 하나만 사용 |
IMAGE_TAG | 특정 container image tag 고정 |
SKIP_PULL=1 | 이미 image 를 local load 한 폐쇄망/재실행 케이스 |
비밀번호/API key 를 shell history 에 남기지 않으려면 secret-safe 설치 env
패턴을 사용합니다. 운영팀이 지정한 비밀번호도 root 0600 파일에 넣고 source 한 뒤 install.sh 를 실행하세요.
4. 설치 중 보이는 정상 출력
예시는 버전에 따라 조금 다르지만 흐름은 같습니다.
[install] prepare directories ... OK
[install] install packages / docker ... OK
[install] configure sysctl / firewall / chrony ... OK
[install] generate TLS material ... OK
[install] write /etc/kopens/app.properties ... OK
[install] docker pull docker.kopens.io/pe/plantpulse-edge:<tag> ... OK
[install] install systemd unit plantpulse-edge.service ... OK
[install] start service ... OK
[install] health probe /api/v1/system/health ... OK
INSTALL COMPLETED.
첫 설치 시 admin/MQTT/OPC-UA/API key 는 박스별 random 으로 생성되고
/etc/kopens/credentials.txt 에 저장됩니다. 이 파일은 chmod 0600 root 로 관리하세요.
5. 설치 후 검증
# service 상태
systemctl is-active plantpulse-edge.service
systemctl status plantpulse-edge.service --no-pager
# 설치 도구의 한 줄 점검
sudo bash /opt/kopens/install/bin/status.sh
# version: container_mode=true 여야 함
curl -ks https://127.0.0.1/api/v1/system/version | python3 -m json.tool
# health: HTTP 200 + components UP
curl -ks https://127.0.0.1/api/v1/system/health | python3 -m json.tool
브라우저:
| 화면 | URL |
|---|---|
| 웹 UI | https://<게이트웨이-IP>/ui/main |
| Node-RED | https://<게이트웨이-IP>/ui/flow/ |
| Swagger UI | https://<게이트웨이-IP>/public/swagger-ui/index.html |
초기 로그인 비밀번호는 /etc/kopens/credentials.txt 의 admin 항목을 확인합니다.
설치 직후에는 설치 직후 체크리스트와 프로덕션 인수 기준을 이어서 진행하세요.
인수 증거 남기기
현장 인수 전에는 health 화면 캡처보다 재현 가능한 텍스트 증거가 더 중요합니다.
sudo bash /opt/kopens/install/bin/health.sh
sudo bash /opt/kopens/install/bin/status.sh > /root/pp-edge-status-$(date +%Y%m%d-%H%M%S).txt
전체 acceptance log 는 인수 증거 수집 명령을 사용합니다.
6. 자주 빠지는 함정
| 증상 | 원인 / 대응 |
|---|---|
Could not resolve host: product.kopens.io | DNS 또는 사내 방화벽. DNS, proxy, allow-list 확인. 안 되면 오프라인 설치 |
curl: (7) Failed to connect | outbound 443 차단 또는 proxy 필요. HTTPS_PROXY 설정 후 재시도 |
No space left on device | /opt 또는 /data1 여유 부족. df -h 확인 후 공간 확보 |
docker pull 이 오래 걸림 | 첫 image pull 은 수 GB 입니다. 회선이 느리면 폐쇄망 절차의 image tar.zst 반입도 고려 |
plantpulse.service 도 active | legacy native 와 충돌. 신규 컨테이너 운영에서는 native 서비스를 중지/비활성화 |
| 설치 완료 후 웹 접속 불가 | 먼저 게이트웨이 내부에서 curl -ks https://127.0.0.1/api/v1/system/health 확인. 내부 OK 면 외부 firewall/NAT 문제 |
| 인증서 경고 | self-signed 인증서면 최초 접속 시 브라우저 경고가 정상. 운영 CA 인증서 배포 정책은 현장 보안 기준에 따름 |
| health 가 503 | journalctl -u plantpulse-edge.service -n 100, docker logs plantpulse-edge 확인 |
더 자세한 증상별 조치는 설치 트러블슈팅을 봅니다.
7. 다음 단계
- 설치 직후 체크리스트 — health, 첫 로그인, site/edge ID 확인
- 프로덕션 인수 기준 — 재시작, 백업, 증거 파일, 보안 잠금
- 새 PLC 연결 추가
- 태그 등록
- 운영 — 컨테이너 모드
- 백업 / 복구