One-Line Installation (Recommended)
Overview
This is the fastest way to install the PlantPulse Platform with a single command. It retrieves the installation script from the download server and automatically performs OS setup, Docker installation, firewall configuration, and Docker Compose stack startup.
When to use? This is ideal for quick installations with default settings in standard environments (Oracle Linux 8 / RHEL 9 / Ubuntu 20.04+ / Amazon Linux 2023). For production environments where detailed settings must be reviewed step-by-step, we recommend the manual installation procedure on the Docker Installation page.
Select Installation Mode
Decide on the installation configuration before proceeding.
| Configuration | Number of Servers | Recommended Scenario | Guide |
|---|---|---|---|
| Single Box (FULL) — Default | 1 unit (Rec. 256GB, Min 128GB) | Standard configuration. Follow this page's procedure | This page |
| Air-gapped Network (Airgap) | — | Environments without internet connection | Air-gapped Installation |
The following procedure is based on the Single Box (FULL) configuration. If executed without environment variables, it will install as FULL.
Supported Environments
| OS | Version |
|---|---|
| Oracle Linux | 8.x |
| RHEL / Rocky Linux | 8.x, 9.x |
| Ubuntu | 20.04+ (20 / 22 / 24) |
| Amazon Linux | 2, 2023 |
Prerequisites
- Server with internet access (access to download server
product.kopens.iorequired) rootprivileges- Minimum 16 vCPU / 128GB RAM / 1TB SSD (Production Rec. 32 vCPU / 256GB RAM) — At least 96GB must be allocatable to the Data Lake Master; 64GB is not a supported specification (System Requirements)
One-line installation cannot be used in air-gapped network environments. Please refer to the procedure on the Air-gapped Installation page.
Execute Installation
Connect to the server via SSH and execute the following command.
sudo -i
curl -fsSL https://product.kopens.io/plantpulse-platform/install.sh | bash
Tasks automatically performed by the script:
- Automatic OS detection (RHEL/Rocky/Oracle 8·9, Ubuntu 20+, Amazon Linux)
- Docker Engine + Compose v2 installation and daemon configuration (data-root)
- Kernel / Resource tuning (
limits.conf,sysctl.conf,chrony.conf,tmpfiles.d) - Transitioning SELinux to permissive and disabling swap
- Automatic firewall port opening — Public ports (80/443/4949/4950) and private network restricted ports
- Creation of service credential sidecar (
/etc/kopens/plantpulse-platform.env) - Container registry (
docker.kopens.io) login - Docker network / volume creation and compose stack startup
Once installation is complete, nine containers will be running continuously — Certificate (plantpulse-certs), Infrastructure (plantpulse-datalake), six Apps (plantpulse-server-web · plantpulse-batch-web · plantpulse-warehouse-web · plantpulse-plugin-opcua-server · plantpulse-plugin-aasx-server · plantpulse-ha), and Edge (plantpulse-proxy).
For detailed configuration, refer to Docker Installation — Installation Layout.
The installation script polls until the stack is ready after startup. While the process startup itself takes 3 to 5 minutes (JVM warmup), a clean installation takes 15 to 18 minutes for all components to stabilize due to Aster TSDB schema migration and stabilization. Restarts are significantly faster as the schema already exists.
Installation Options
# Docker가 이미 설치된 경우 OS 셋업 단계 생략
curl -fsSL https://product.kopens.io/plantpulse-platform/install.sh | bash -s -- --skip-os
| Option | Effect |
|---|---|
--skip-os | Skips OS setup and Docker installation (if Docker is already installed) |
Note: One-line installation automatically configures registry authentication, so separate
docker loginis not required. Firewall omission (SKIP_FW=1), registry login omission (SKIP_LOGIN=1), and Docker data-root path changes (DOCKER_DATA_DIR, default/data1/docker-data) are specified as environment variables when manually executingbin/install.shdownloaded to the node → Docker Installation
Verify Installation
After installation is complete, verify the status with the following command.
cd /opt/kopens/plantpulse-platform-docker/bin
./status.sh # 0 = 정상 / 2 = 비정상
./ops-check.sh
curl -kfsS https://<server-ip>:4950/api/health | jq # "status":"OK" 또는 "WARN" 이면 정상
docker ps # 아홉 개가 모두 (healthy)
plantpulse-platform in docker psThe single container configuration by that name has been deprecated. The nine items below appear in a default installation.
plantpulse-certs · plantpulse-datalake · plantpulse-server-web ·
plantpulse-batch-web · plantpulse-warehouse-web · plantpulse-plugin-opcua ·
plantpulse-plugin-aasx · plantpulse-ha · plantpulse-proxy
The tenth item, plantpulse-mirror-maker, does not appear by default — it only appears when activated via the compose mirror profile. It is normal for it to be invisible → Utility Modules
The docker logs plantpulse-platform from the old runbook does not work. View logs using ./logs.sh.
If all items are normal, access the web console via a browser.
https://[서버IP] # 웹 콘솔 (80/443, plantpulse-proxy 가 받습니다)
https://[서버IP] # 관리 UI (웹 콘솔과 같은 주소)
https://[서버IP]:4950 # 모니터 UI
- Default Admin Account: admin / admin123!
- Please ensure you change the password after logging in. → Initial Password
Post-Installation Environment Variable Adjustment
Since one-line installation automatically calculates resource values based on the host, no adjustments are needed for most servers. You only need to adjust values that cannot be determined automatically, such as locales.
The place to modify is the sidecar file.
vi /etc/kopens/plantpulse-platform.env
cd /opt/kopens/plantpulse-platform-docker/bin && ./restart.sh
Write each entry as 이름=값 per line.
PP_LANG=ko
DOCKER_PP_EXTERNAL_IP=203.0.113.10
bin/env.sh — it will be deleted during re-installationThe installation script deletes the entire installation tree and re-downloads it. /opt/kopens/plantpulse-platform-docker
Any manually written values below will be lost during re-installation or upgrade.
The sidecar /etc/kopens/plantpulse-platform.env exists outside the installation tree and survives.
It is created during installation and its permission is 0600.
The order of value precedence is as follows:
| Order | Location | Remarks |
|---|---|---|
| 1 | Sidecar /etc/kopens/plantpulse-platform.env | Overrides the default values below. Modify here |
| 2 | Default value of bin/env.sh | Product-defined value |
| 3 | Explicit export line at the bottom of bin/env.sh | Read last and overrides others, but lost during re-installation |
Frequently adjusted items:
| Variable | Description | Default Value |
|---|---|---|
PP_LANG | Platform locale (ko / en) | en — Use ko for Korean operations |
PP_TZ | Platform timezone | Asia/Seoul |
DOCKER_PP_CPUS | Number of vCPUs allocated to containers | Result of nproc (Automatic) |
DOCKER_PP_MEMORY | Memory limit | 90% of host RAM (Automatic) |
DOCKER_DATALAKE_MEMORY | Data Lake memory limit | 96G (Minimum), not exceeding 90% of host RAM — Below 107G host is underspec |
DOCKER_PP_DATA_DISK_NAME | Data disk name | Automatic traceback (If failed, sda) |
DOCKER_PP_EXTERNAL_IP | External advertise IP in NAT environment | Empty — Leave empty if not behind NAT |
DOCKER_PP_EXTERNAL_IP carelesslyThis value is entered into the SAN list of the TLS certificate. Entering an invalid IP will prevent any certificates from being generated, meaning the stack will fail to start.
The default locale is en. To operate in Korean, enter PP_LANG=ko in the sidecar and apply it as ./restart.sh. Since time series data is loaded based on KST, maintain PP_TZ as Asia/Seoul for Korean operations.
For the full list of environment variables, refer to the Environment Variable Reference.
Common Operational Commands
cd /opt/kopens/plantpulse-platform-docker/bin
./preflight.sh # 설치 전 비파괴 사전 점검
./up.sh # 기동 — 준비될 때까지 대기 (0 = 준비 완료)
./down.sh # 정지 (상태 보존)
./restart.sh # graceful 재시작 (drain + 준비 대기)
./status.sh # 서비스 / health / 볼륨 요약 (0=정상 / 2=비정상)
./logs.sh [서비스] # 로그 보기 (1회 출력, -f 로 따라가기). 인자가 없으면 전체, 목록은 --list
./shell.sh [서비스] # 컨테이너 bash 진입 (인자 없으면 데이터레이크)
./ops-check.sh # 운영 health + 최근 critical log 점검
./remove.sh # 컨테이너 제거 (볼륨은 보존)
./doctor.sh # 장애 진단 tarball 생성
When deploying a new version, execute this one-liner again — Upgrade. All verbs support --help. Old names (stack-run.sh · stack-stop.sh · stack-bash.sh · stack-update.sh · stack-remove.sh) also continue to work.
Troubleshooting
Download Script Execution Failure
# 다운로드 서버 접근 가능 여부 확인
curl -fsSL https://product.kopens.io/plantpulse-platform/install.sh -o /tmp/install.sh
ls -al /tmp/install.sh
# 회사 방화벽 / 프록시로 차단된 경우 네트워크 관리자에게 도메인 허용 요청:
# product.kopens.io, docker.kopens.io
Container Fails to Transition to Healthy State
First, narrow down which container is causing the issue.
cd /opt/kopens/plantpulse-platform-docker/bin
./status.sh # 어떤 서비스가 비정상인가
./logs.sh --list # 볼 수 있는 서비스 목록
./logs.sh plantpulse-server-web -n 200 # 그 컨테이너의 로그
./doctor.sh # 진단 tarball 생성 후 기술 지원팀에 전달 (모든 컨테이너를 담습니다)
This is likely due to an Aster TSDB schema migration failure or /data1/pp-data permission issues. Detailed procedures are available in Docker Installation — If Stack Does Not Start.
Additional Inquiries
For other issues, please check the troubleshooting section of the Docker Installation page first. If the issue persists, contact webmaster@kopens.com.