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.
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.
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
| Item | Requirement |
|---|---|
| Privileges | root (sudo -i) |
| Network | HTTPS reachable via product.kopens.io |
| Disk | /opt/kopens 3GB+, /data1 100GB+ recommended for data |
| Memory | 8GB minimum, 16GB or more recommended |
| Existing services | If 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.
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
Recommended: Download the Installation Bundle, Then Run
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.
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:
| Variable | Description |
|---|---|
EDGE_ID | Gateway ID. Example: EDGE_00303 |
SITE_ID | Site ID. Example: SITE_00001 |
SERVER_HOST / SERVER_API_KEY | Platform API connection information |
NET1_IFACE / NET1_IP | PLC network NIC and static IP |
NET2_IFACE / NET2_IP / NET2_GATEWAY / NET2_DNS | WAN/external network NIC and routing |
ADMIN_PASS / API_KEY / MQTT_PASS / OPCUA_PASS | Override with initial credentials set by the operations team |
CERT_PASS | TLS keystore password. Only this official cert password key is used |
IMAGE_TAG | Pin a specific container image tag |
SKIP_PULL=1 | For 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:
| Screen | URL |
|---|---|
| Web UI | https://<gateway-ip>/ui/main |
| Node-RED | https://<gateway-ip>/ui/flow/ |
| Swagger UI | https://<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
| Symptom | Cause / Solution |
|---|---|
Could not resolve host: product.kopens.io | DNS or corporate firewall. Check DNS, proxy, allow-list. If it doesn't resolve, use Air-gapped Installation |
curl: (7) Failed to connect | Outbound 443 blocked or proxy required. Configure HTTPS_PROXY and retry |
No space left on device | Insufficient space for /opt or /data1. Free up space after checking df -h |
docker pull takes a long time | The 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
- Post-Installation Checklist — health, first login, site/edge ID verification
- Production Acceptance Criteria — restart, backup, evidence files, security hardening
- Add a New PLC Connection
- Register Tags
- Container Mode Operations
- Backup and Recovery