Zum Hauptinhalt springen

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.

DateiInhalt
plantpulse-studio-images-<version>.tar.gzPaket mit 5 Container-Images (ca. 2,8 GB)
…tar.gz.sha256Prüfsumme für die Integritätsprüfung
…tar.gz.sigCosign-Signatur für die Herkunftsprüfung (Signatur)
plantpulse-studio-docker.tar.gzBetriebspaket — 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
Version auswählen — latest.txt

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

Was im Image-Bundle enthalten ist

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
Warum --insecure-ignore-tlog verwendet wird

Gemäß 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.

Wenn die geladene Datei wie eine alte Version aussieht

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 die Warnung zur übersprungenen Prüfung erscheint

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.

PunktWertGrund
REGISTRYLeer 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_TAGVersion des importierten Bundles (2026.07)Muss mit dem Tag der geladenen Images übereinstimmen
DATABASE_URLpostgres://ppstudio:<password>@<호스트>:5432/ppstudioExterne PG-Verbindung — das Passwort ist in dieser URL enthalten
PLATFORM_API_TARGETAdresse der Vor-Ort-PlattformZiel für Echtzeitdaten und Authentifizierungs-Delegation
STUDIO_LOCAL_USERSadmin:<password>Erstes Login-Konto
PP_LANG / PP_TZko / Asia/SeoulKoreanischer 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​