Skip to main content

One-line Installation (Recommended)

This is the standard procedure for installing a single gateway in the field. The Edge is deployed as a single Docker container image, and install.sh handles everything from OS dependencies to systemd registration in one go.

Upgrades follow the same path — download the latest install.sh from product.kopens.io and run it again (idempotent). For details, see Upgrade.

Outcome of this procedure

Once installation is complete, plantpulse-edge.service manages the container.


0. At a Glance​

sudo -i
curl -fsSL https://product.kopens.io/plantpulse-edge/install.sh | bash

Including the image pull during installation, this typically takes 5–15 minutes. It can take longer on slow connections or machines that need a first-time Docker installation.

⌨️ Edge One-line Installation — recorded live on a staging box

1. One-Minute Pre-Install Check​

# 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
ItemRequirement
Privilegesroot (sudo -i)
NetworkHTTPS reachable via product.kopens.io
Disk/opt/kopens 3GB+, /data1 100GB+ recommended for data
Memory8GB minimum, 16GB or more recommended
Existing servicesIf plantpulse-edge.service is already present, installation will update over it

Before installation, organize the values approved by the operations team according to Production Acceptance Criteria.

Try this procedure first even if you don't have Java/Docker

install.sh installs and sorts Docker, OS packages, sysctl, firewall, and chrony. If corporate policy blocks package installation, request permission from the security/IT team or switch to an Air-gapped Installation.


2. Running the Installation​

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

The bundle approach keeps the installation files on disk, which makes troubleshooting and re-running easier.

Operational scripts are placed in a fixed location after installation

No matter where you unpack the bundle, install.sh copies operational scripts like status.sh, health.sh, and upgrade.sh to /opt/kopens/install/bin/. This is why subsequent documentation refers to them as /opt/kopens/install/bin/… — you don't need to remember where you unpacked the bundle.

Alternative: One-line Execution​

sudo -i
bash < <(curl -fsSL https://product.kopens.io/plantpulse-edge/install.sh)

3. Setting Site/Network Values​

You can install with defaults, but for field deployments, you'll typically specify the following env variables.

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>' \
NET1_IFACE=enp1s0 \
NET1_IP=192.168.100.10/24 \
NET2_IFACE=enp2s0 \
NET2_IP=192.168.0.10/24 \
NET2_GATEWAY=192.168.0.1 \
NET2_DNS=192.168.0.1 \
bash install.sh

Frequently used env variables:

VariableDescription
EDGE_IDGateway ID. Example: EDGE_00303
SITE_IDSite ID. Example: SITE_00001
SERVER_HOST / SERVER_API_KEYPlatform API connection information
NET1_IFACE / NET1_IPPLC network NIC and static IP
NET2_IFACE / NET2_IP / NET2_GATEWAY / NET2_DNSWAN/external network NIC and routing
ADMIN_PASS / API_KEY / MQTT_PASS / OPCUA_PASSOverride with initial credentials set by the operations team
CERT_PASSTLS keystore password. Only this official cert password key is used
IMAGE_TAGPin a specific container image tag
SKIP_PULL=1For air-gapped/re-run cases where the image has already been loaded locally

To avoid leaving passwords/API keys in the shell history, use the secret-safe installation env pattern. Put the passwords specified by the operations team in a root 0600 file, source it, and then run install.sh.


4. Expected Output During Installation​

The example may vary slightly by version, but the flow is the same.

[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.

On first installation, admin/MQTT/OPC-UA/API keys are randomly generated per machine and stored in /etc/kopens/credentials.txt. Manage this file with chmod 0600 root.


5. Post-Install Verification​

# 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

Browser:

ScreenURL
Web UIhttps://<gateway-ip>/ui/main
Node-REDhttps://<gateway-ip>/ui/flow/
Swagger UIhttps://<gateway-ip>/public/swagger-ui/index.html

For the initial login password, check the admin entry in /etc/kopens/credentials.txt. Immediately after installation, proceed with Post-Installation Checklist and Production Acceptance Criteria.

Leaving Acceptance Evidence​

For field acceptance, reproducible textual evidence is more important than a screenshot of the health screen.

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

For the complete acceptance log, use the Acceptance Evidence Collection command.


6. Common Pitfalls​

SymptomCause / Solution
Could not resolve host: product.kopens.ioDNS or corporate firewall. Check DNS, proxy, allow-list. If it doesn't resolve, use Air-gapped Installation
curl: (7) Failed to connectOutbound 443 blocked or proxy required. Configure HTTPS_PROXY and retry
No space left on deviceInsufficient space for /opt or /data1. Free up space after checking df -h
docker pull takes a long timeThe first image pull is several GB. If the line is slow, consider importing the image tar.zst from the air-gapped procedure

| Web access fails after installation completes | First, check curl -ks https://127.0.0.1/api/v1/system/health from inside the gateway. If it works internally, it's an external firewall/NAT issue | | Certificate warning | If it's a self-signed certificate, a browser warning on first access is normal. The distribution policy for operational CA certificates follows site security standards | | health returns 503 | Check journalctl -u plantpulse-edge.service -n 100 and docker logs plantpulse-edge |

For more symptom-specific troubleshooting, see Installation Troubleshooting.


7. Next Steps​

  1. Post-Installation Checklist — health, first login, site/edge ID verification
  2. Production Acceptance Criteria — restart, backup, evidence files, security hardening
  3. Add a New PLC Connection
  4. Register Tags
  5. Container Mode Operations
  6. Backup and Recovery