Zum Hauptinhalt springen

Air-Gap-Installation

Ablauf für die Installation auf einem Server ohne Internetanbindung (Air-Gap-Netzwerk). Der Ablauf besteht aus drei Schritten.

① 인터넷 되는 PC ② USB 등 이동 매체 ③ 폐쇄망 서버
번들 내려받기 → 반출 → 로드 → 설정 → 기동
무결성·서명 검증 (검증 자동 재확인)

Die Anforderungen an Serverspezifikation, Ports und Firewall entsprechen dem Abschnitt „Voraussetzungen" im Dokument Installation. Prüfen Sie zunächst diesen Abschnitt.


0. Vorbereitung des Servers im Air-Gap-Netzwerk

Das Einzeilen-Installationsskript lädt Docker aus dem Internet herunter und installiert es, falls es fehlt — im Air-Gap-Netzwerk funktioniert dieser Weg nicht. Installieren Sie Docker 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-Binary mit (optional — ohne sie entfällt lediglich die Prüfung).


1. Download an einem Standort mit Internetzugang

Es sind vier Dateien herunterzuladen.

DateiInhalt
plantpulse-studio-images-<version>.tar.gzBündel aus 5 Container-Images (ca. 2,8 GB)
…tar.gz.sha256Prüfsumme zur Integritätsprüfung
…tar.gz.sigCosign-Signatur zur Herkunftsprüfung
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 wählen — latest.txt

latest.txt ist eine einzeilige Datei, die nur den Namen der neuesten Version enthält (z. B. 2026.08). Da es sich nicht um eine Kopie des Bündels handelt, ändert sich die heruntergeladene Datei auch dann nicht, wenn eine neue Version erscheint.

Einmal veröffentlichte Versionsstände werden nicht gelöscht. Auch wenn 2026.09 erscheint, bleibt plantpulse-studio-images-2026.08.tar.gz unverändert bestehen; Sie können diese Adresse also jederzeit verwenden, um eine genutzte Version erneut zu laden oder zurückzurollen. Wenn Sie den Installationsablauf per Skript fixiert haben, ist es sicherer, die Version direkt einzutragen statt latest.txt zu verwenden.

Inhalt des Image-Bündels

Enthalten sind alle 5 Images: Studio Server · Web · Session-Runtime · Builder-Sidecar · PostgreSQL. Im Air-Gap-Netzwerk müssen keine weiteren Images nachgeladen werden.

Integritäts- und Herkunftsprüfung (vor dem Ausschleusen)

Entpacken Sie zunächst das Betriebspaket und entnehmen Sie den öffentlichen Schlüssel (cosign.pub).

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 gesetzt wird

Gemäß den Vorgaben für interne Registries wird kein öffentliches Transparenzprotokoll (Rekor) verwendet. Diese Option überspringt nur die Abfrage des öffentlichen Logs; die Signatur selbst wird weiterhin kryptografisch vollständig verifiziert.

Wenn die heruntergeladene Datei veraltet wirkt

Möglicherweise liegt es am CDN-Cache. Hängen Sie ?v=$(date +%s) an die URL an und laden Sie erneut herunter.


2. Ausschleusen über Wechselmedien

Kopieren Sie die folgenden vier Dateien unverändert auf einen USB-Datenträger o. Ä. Vergessen Sie .sha256 und .sig nicht — das Skript auf der Einschleusseite prüft damit automatisch erneut.

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. Einschleusen auf dem Server im Air-Gap-Netzwerk

3-1. Betriebspaket ablegen

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

Liegen .sha256 und .sig im selben Ordner, prüft load.sh automatisch und bricht das Einschleusen bei Abweichungen ab.

✅ 서명 검증 통과
▶ 로드 중: dist/plantpulse-studio-images-2026.08.tar.gz
✅ 로드 완료 — cp .env.example .env 설정 후 bin/start.sh
Wenn eine Warnung über übersprungene Prüfung erscheint

Erscheint ⚠ 서명 검증 생략(.sig/cosign.pub/cosign 중 부재), fehlt eine der drei Dateien. Ob Sie ohne Prüfung fortfahren, entscheiden Sie nach Ihren Sicherheitsrichtlinien — es wird empfohlen, zumindest die Integritätsprüfung per .sha256 zu bestehen.

3-3. Konfigurationsdatei erstellen

cp .env.example .env
vi .env
chmod 600 .env

Diese Einträge müssen im Air-Gap-Betrieb unbedingt angepasst werden.

EintragWertGrund
REGISTRYleer lassen (REGISTRY=)Bei gesetztem Wert wird bei jedem Start ein Registry-Pull versucht, was Verzögerungen und Warnungen verursacht
TAGVersion des eingeschleusten Bündels (2026.07)Muss mit dem Tag der geladenen Images übereinstimmen
PG_PASSWORDausreichend lange Zufallszeichenfolgebei Verwendung des mitgelieferten PostgreSQL
PLATFORM_API_TARGETAdresse der Platform Vor-OrtZiel für Echtdaten und Authentifizierungsdelegation
STUDIO_LOCAL_USERSadmin:<password>Konto für die erste Anmeldung
PP_LANG / PP_TZko / Asia/Seoulkoreanischer Standort

AI- und Platform-Schlüssel werden gemäß Secret-Verwaltung in .env eingetragen. Bei Verwendung eines externen PostgreSQL folgen Sie unverändert dem Abschnitt „Datenbankauswahl" im Dokument Installation.

3-4. Start

bash bin/start.sh
ℹ️ REGISTRY 비어있음(로컬/에어갭) — pull 생략, 로컬 이미지 사용
⏳ 헬스 대기...
✅ PlantPulse Studio 시작됨 → http://192.168.x.x/

4. Installation prüfen

bash bin/status.sh
bash bin/smoke-install.sh

smoke-install.sh prüft Health, Web-Antwort, tatsächliche Anmeldung, Session-Runtime-Image und Containerstatus in einem Durchgang. Bestehen alle Prüfungen, ist das System tatsächlich einsatzbereit.

Rufen Sie im Browser http://<server-ip>/ auf und melden Sie sich mit dem Konto STUDIO_LOCAL_USERS an. Der weitere Ablauf entspricht dem Abschnitt „Erste Anmeldung" im Dokument Installation.


5. Update in der Air-Gap-Umgebung

Schleusen Sie das Bündel der neuen Version auf demselben Weg ein, laden Sie es und starten Sie 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 die Betriebsskripte (bin/) zu aktualisieren, entpacken Sie das neue plantpulse-studio-docker.tar.gz in einen temporären Ordner und überschreiben Sie nur die Dateien mit Ausnahme von .env und dist/.

.env und dist/ niemals überschreiben

.env enthält Platform-Adresse, Konten und API-Schlüssel, dist/ enthält die lokalen Backups. Ein vollständiges Überschreiben führt dazu, dass der Stack nicht startet oder Backups verloren gehen.


6. Backup und Wiederherstellung im Air-Gap-Betrieb

Die Backup- und Wiederherstellungsskripte funktionieren ohne Internet — das für externes PostgreSQL benötigte postgres:18-alpine-Image ist im eingeschleusten Bündel enthalten.

bash bin/backup.sh # 백업
DRYRUN=1 bash bin/restore.sh # 복구 리허설(비파괴)

Einzelheiten finden Sie unter Backup und Wiederherstellung.


Nächste Schritte