One-line Installation (Recommended)
If the server has internet access, a single command starts the installation. The installation script is fetched from the distribution server product.kopens.io.
curl -fsSL https://product.kopens.io/plantpulse-ai/install.sh | sudo bash
If you're on an air-gapped network, you can't use this path → Air-gapped Installation.
Before You Start
| Check | Details |
|---|---|
| Permissions | Must run as root (sudo bash) |
| Network | HTTPS access to product.kopens.io · docker.kopens.io |
| Hardware | For GPU requirements → System Requirements |
What Gets Fetched — the Repository Set
The AI stack's compose needs three repositories placed side by side to come up.
/opt/kopens/
├── plantpulse-ai-docker/ ← 설치 본체
├── plantpulse-ai-inference-server/
└── plantpulse-timeseries-insight-server/
One-line installation fetches a bundle (plantpulse-ai-bundle.tar.gz) containing all three and unpacks them at once.
There's nothing to prepare separately. After unpacking, the script checks that all three arrived, and if any is missing,
it prints the name and falls back to another path — this prevents the system from coming up half-deployed.
Give it GIT_USER · GIT_TOKEN and it will git clone from dev.kopens.io instead of the bundle.
Since customer sites don't have our GitLab account, the default is the bundle.
Installing with Specified Values
Environment variables go before bash. If placed after curl, they won't carry through the pipe.
curl -fsSL https://product.kopens.io/plantpulse-ai/install.sh \
| sudo START=1 PP_DATALAKE_ADMIN_URL=https://192.168.0.41:4950 PP_DATALAKE_ADMIN_API_KEY=<플랫폼의 키> bash
To have it prompt for each unset value individually, run it interactively.
curl -fsSL https://product.kopens.io/plantpulse-ai/install.sh | sudo INTERACTIVE=1 bash
| Environment Variable | Default | Purpose |
|---|---|---|
INTERACTIVE | 0 | If 1, prompts for unset values |
START | — | If 1, starts up immediately after installation |
DEST | /opt/kopens/plantpulse-ai-docker | Installation location |
BRANCH | master | Branch to fetch |
REPO_HOST | (internal Git host) | Fallback path used only when the distribution can't be fetched. The value is embedded in the installation script |
REPO_PATH | plantpulse-ai/plantpulse-ai-docker.git | Repository path |
GIT_USER · GIT_TOKEN | — | Private repository authentication |
Values that pass through as-is to the installation script (install.sh) also go in the same place. Only the frequently used ones are listed here —
for the full set and what each step does, see Installation Overview.
| Environment Variable | Default | Purpose |
|---|---|---|
PP_DATALAKE_ADMIN_URL · PP_DATALAKE_ADMIN_API_KEY | — | Address (https://<플랫폼 호스트>:4950) and key for retrieving Platform credentials. If given, won't be prompted |
PP_PROXY_CERT_SAN | This host's address | Access addresses/names to embed in the TLS certificate (comma-separated for multiple). Must be given if accessed via public IP · VIP · domain. Values already in the env file are kept even on reinstall |
ENV_TEMPLATE | env.gb10.example | AWS g7e (amd64) is env.g7e.example. Stops if machine and architecture mismatch |
HOST_TUNING | apply (plan if other containers are running) | How to handle host-wide settings among skip · plan · apply |
ALLOW_DOCKER_RECONFIGURE | — | If 1, allows changing/restarting settings of an existing Docker installation |
SKIP_GPU | — | If 1, skips NVIDIA driver/toolkit installation |
SKIP_WAIT · WAIT_READY_MIN | — · 15 | Skips waiting for a response after START=1 or changes the timeout (minutes) |
If INTERACTIVE=1, it first asks for the TLS certificate SAN, then asks for the address and key for retrieving Platform credentials
(PP_DATALAKE_ADMIN_URL · PP_DATALAKE_ADMIN_API_KEY). Beyond that, remaining placeholders (Platform API token,
admin password, Neo4j password, etc.) are asked one by one. From 2026.10, the Platform host and Platform PG · Aster TSDB · Redis account ·
password are no longer asked — the host is computed from the address above, and the account/password are obtained from the Platform at startup. Internal secrets (gateway key, salt, inbound key, session secret,
stored credential encryption key, etc.) are not asked — the installer generates them.
Prompted values can also be passed as environment variables of the same name instead of interactively (… | sudo PP_API_TOKEN=<token> PI_ADMIN_PASSWORD=<password> bash).
The installer fills in only the keys that are still placeholders with those values and does not overwrite values already set.
The Platform trust anchor /etc/kopens/ca/root.crt (and the same content as CA.crt) is not created by the installer. If START=1,
the installer tries once to retrieve credentials from the Platform before fetching images, and if the anchor is missing or the key is wrong, it stops without bringing anything up.
Either place the anchor first and run with START=1, or run prepare-only without START, then place the anchor and start it →
Installation Overview
After Installation Completes
- Change Initial Password — set up the admin console account.
If
PI_ADMIN_PASSWORDremains a placeholder,START=1startup is refused, and if left blank, the console won't come up at all. - Go to the AI Admin Console and check overall status from the home screen.
- Use the Service Port Map to configure your firewall.
- To use video/audio collection and voice-based chat queries, add the
PI_MEDIA_ENABLED=trueline to the host env and fetch the transcription model — it's off by default → Video/Audio Collection
Related Documentation
- Installation and Configuration — full procedure and offline installation
- System Requirements
- Environment Variable Configuration