Installation im Air-Gap-Netzwerk
Dies ist das Verfahren für die Installation auf einem Server in einem Air-Gap-Netzwerk (ohne Internetzugang). Der Ablauf besteht aus drei Schritten.
① 인터넷 되는 PC ② USB 등 이동 매체 ③ 폐쇄망 서버
번들 내려받기 → 반출 → 로드 → 설정 → 기동
무결성·서명 검증 (검증 자동 재확인)
Die Anforderungen an Server-Spezifikation, Ports und Firewall sind identisch mit den "Voraussetzungen" im Dokument Installation. Lesen Sie zuerst diesen Abschnitt.
0. Vorbereitung des Air-Gap-Servers
Das One-Line-Installationsskript lädt Docker herunter und installiert es, wenn es nicht vorhanden ist — in einem Air-Gap-Netzwerk funktioniert dieser Weg nicht. Installieren Sie Docker daher vorab.
docker --version
docker compose version # v2.22 이상
Die Installation kann über das Offline-Repository der Distribution oder über RPM/DEB-Pakete erfolgen. Wenn Sie auch die Signaturprüfung
durchführen möchten, bringen Sie zusätzlich die cosign-Binärdatei mit (optional — ohne sie wird nur die Prüfung übersprungen).
1. Herunterladen an einem Ort mit Internetzugang
Es sind vier Dateien zu laden.
| Datei | Inhalt |
|---|---|
plantpulse-studio-images-<version>.tar.gz | Paket mit 5 Container-Images (ca. 2,8 GB) |
…tar.gz.sha256 | Prüfsumme für die Integritätsprüfung |
…tar.gz.sig | Cosign-Signatur für die Herkunftsprüfung (Signatur) |
plantpulse-studio-docker.tar.gz | Betriebspaket — bin/-Skript · compose · .env.example · cosign.pub |
BASE=https://product.kopens.io/plantpulse-studio
VER=2026.08 # 또는: VER=$(curl -fsSL $BASE/latest.txt)
# 번들은 수 GB — 전송이 끊기면 -C - 가 이어받습니다
curl -fLO -C - --retry 5 $BASE/plantpulse-studio-images-$VER.tar.gz
curl -fLO $BASE/plantpulse-studio-images-$VER.tar.gz.sha256
curl -fLO $BASE/plantpulse-studio-images-$VER.tar.gz.sig
curl -fLO $BASE/plantpulse-studio-docker.tar.gz
latest.txtlatest.txt ist eine einzeilige Datei, die nur den Namen der neuesten Version enthält (z. B. 2026.08). Sie ist keine Kopie des
Bundles, sodass sich die zu ladende Datei auch bei einer neuen Version nicht ändert.
Einmal veröffentlichte Versionen werden nicht gelöscht. Auch wenn 2026.09 erscheint, bleibt plantpulse-studio-images-2026.08.tar.gz
weiterhin bestehen. Sie können also jederzeit die Adresse verwenden, um die verwendete Version erneut zu laden oder zurückzugehen.
Wenn Sie den Installationsablauf in einem Skript festgehalten haben, ist es sicherer, die Version direkt anzugeben, anstatt latest.txt zu verwenden.
Es sind sechs Images enthalten — Studio Server · Web · Session Runtime · Builder Sidecar · Docker-Socket-Proxy sowie PostgreSQL. Es sind keine weiteren Images im Air-Gap-Netzwerk erforderlich.
Der Stack selbst startet keinen PostgreSQL-Container (er verwendet eine externe PG). Da im Air-Gap-Netzwerk möglicherweise keine verwendbare PG verfügbar ist, wurde das Image mitgeliefert — verwenden Sie es, wenn Sie die PG vor Ort selbst aufsetzen müssen.
Integritäts- und Herkunftsprüfung (vor dem Export)
Entpacken Sie zuerst das Betriebspaket, um den öffentlichen Schlüssel (cosign.pub) zu extrahieren.
mkdir -p pkg && tar xzf plantpulse-studio-docker.tar.gz -C pkg --strip-components=1
# ① 무결성 — 전송 중 파일이 깨지지 않았는가
sha256sum -c plantpulse-studio-images-$VER.tar.gz.sha256
# ② 출처 — KOPENS 가 서명한 번들이 맞는가
cosign verify-blob --key pkg/cosign.pub --insecure-ignore-tlog=true \
--signature plantpulse-studio-images-$VER.tar.gz.sig \
plantpulse-studio-images-$VER.tar.gz
--insecure-ignore-tlog verwendet wirdGemäß den Richtlinien des unternehmensinternen Registries wird kein öffentliches Transparenzprotokoll (Rekor) verwendet. Diese Option überspringt nur die Abfrage des öffentlichen Protokolls; die Signatur selbst wird weiterhin kryptografisch geprüft.
Möglicherweise liegt ein CDN-Cache vor. Fügen Sie ?v=$(date +%s) an die URL an und laden Sie erneut.
2. Export auf ein Wechselmedium
Kopieren Sie die folgenden vier Dateien unverändert auf ein USB-Laufwerk usw. Lassen Sie .sha256 und .sig nicht aus —
das Skript auf der Zielseite führt damit eine automatische erneute Prüfung durch.
plantpulse-studio-images-2026.08.tar.gz
plantpulse-studio-images-2026.08.tar.gz.sha256
plantpulse-studio-images-2026.08.tar.gz.sig
plantpulse-studio-docker.tar.gz
3. Import auf dem Air-Gap-Server
3-1. Betriebspaket platzieren
sudo mkdir -p /opt/kopens/plantpulse-studio-docker
sudo tar xzf /media/usb/plantpulse-studio-docker.tar.gz \
-C /opt/kopens/plantpulse-studio-docker --strip-components=1
cd /opt/kopens/plantpulse-studio-docker
mkdir -p dist
sudo cp /media/usb/plantpulse-studio-images-2026.08.tar.gz* dist/
3-2. Images laden
sudo bash bin/load.sh dist/plantpulse-studio-images-2026.08.tar.gz
Wenn load.sh und .sha256 sowie .sig im selben Ordner vorhanden sind, werden sie automatisch überprüft; bei einer Abweichung
wird der Import abgebrochen.
✅ 서명 검증 통과
▶ 로드 중: dist/plantpulse-studio-images-2026.08.tar.gz
✅ 로드 완료 — cp .env.example .env 설정 후 bin/up.sh
Wenn ⚠ 서명 검증 생략(.sig/cosign.pub/cosign 중 부재) angezeigt wird, fehlt eines der drei Elemente.
Entscheiden Sie je nach Sicherheitsrichtlinie, ob Sie ohne Prüfung fortfahren — es wird empfohlen, zumindest die .sha256
Integritätsprüfung zu bestehen.
3-3. Konfigurationsdatei erstellen
cp .env.example .env
vi .env
chmod 600 .env
Folgende Punkte müssen im Air-Gap-Netzwerk unbedingt angepasst werden.
| Punkt | Wert | Grund |
|---|---|---|
REGISTRY | Leer lassen (REGISTRY=) | Bei vorhandenem Wert wird bei jedem Start versucht, ein Registry-Pull durchzuführen, was zu Verzögerungen und Warnungen führt |
PP_IMAGE_TAG | Version des importierten Bundles (2026.07) | Muss mit dem Tag der geladenen Images übereinstimmen |
DATABASE_URL | postgres://ppstudio:<password>@<호스트>:5432/ppstudio | Externe PG-Verbindung — das Passwort ist in dieser URL enthalten |
PLATFORM_API_TARGET | Adresse der Vor-Ort-Plattform | Ziel für Echtzeitdaten und Authentifizierungs-Delegation |
STUDIO_LOCAL_USERS | admin:<password> | Erstes Login-Konto |
PP_LANG / PP_TZ | ko / Asia/Seoul | Koreanischer Standort |
Die AI- und Plattform-Schlüssel legen Sie gemäß Geheimnisverwaltung in .env ab.
Die Datenbank und die Rollen müssen zuerst erstellt werden — folgen Sie den Abschnitten „Datenbankvorbereitung" und bin/provision-platform-db.sh
in Installation.
3-4. Start
bash bin/up.sh
ℹ️ REGISTRY 비어있음(로컬/에어갭) — pull 생략, 로컬 이미지 사용
⏳ 헬스 대기...
✅ PlantPulse Studio 시작됨 → http://192.168.x.x/
4. Installationsprüfung
bash bin/status.sh
bash bin/smoke-install.sh
smoke-install.sh prüft Health, Web-Antwort, tatsächliches Login, Session-Runtime-Image und Container-Status in einem Schritt.
Wenn alles bestanden wird, ist das System tatsächlich nutzbar.
Greifen Sie im Browser über http://<server-ip>/ zu und melden Sie sich mit dem Konto STUDIO_LOCAL_USERS an.
Die weiteren Schritte sind identisch mit denen im Abschnitt „Erstes Login" im Dokument Installation.
5. Aktualisierung der Air-Gap-Umgebung
Importieren Sie das neue Versionsbundle auf dieselbe Weise, laden Sie es und starten Sie den Stack neu.
cd /opt/kopens/plantpulse-studio-docker
bash bin/backup.sh # ① 먼저 백업
sudo cp /media/usb/plantpulse-studio-images-2026.08.tar.gz* dist/
sudo bash bin/load.sh dist/plantpulse-studio-images-2026.08.tar.gz # ② 새 이미지 로드
sed -i 's/^TAG=.*/TAG=2026.08/' .env # ③ 태그 변경
bash bin/restart.sh # ④ 재기동
Um auch das Betriebsskript (bin/) zu aktualisieren, entpacken Sie das neue plantpulse-studio-docker.tar.gz in einem temporären Ordner und
überschreiben Sie nur die Dateien außer .env und dist/.
.env und dist/ niemals überschreiben.env enthält Plattformadresse, Konten und API-Schlüssel; dist/ enthält lokale Backups.
Wenn Sie diese vollständig überschreiben, startet der Stack nicht oder Sie verlieren die Backups.
6. Backup und Wiederherstellung im Air-Gap-Netzwerk
Die Backup- und Wiederherstellungsskripte funktionieren ohne Internet — da das postgres:18-alpine-Image für die Verwendung einer externen
PostgreSQL im Import-Bundle enthalten ist.
bash bin/backup.sh # 백업
DRYRUN=1 bash bin/restore.sh # 복구 리허설(비파괴)
Weitere Einzelheiten finden Sie unter Backup und Wiederherstellung.
Nächste Schritte
- Geheimnisverwaltung — Prinzip, Schlüssel nur in
.envabzulegen - Domain und Reverse Proxy — Dienste über die unternehmensinterne Domain und HTTPS bereitstellen
- Backup und Wiederherstellung
- Fehlerbehebung