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.
| Datei | Inhalt |
|---|---|
plantpulse-studio-images-<version>.tar.gz | Bündel aus 5 Container-Images (ca. 2,8 GB) |
…tar.gz.sha256 | Prüfsumme zur Integritätsprüfung |
…tar.gz.sig | Cosign-Signatur zur Herkunftsprüfung |
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). 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.
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
--insecure-ignore-tlog gesetzt wirdGemäß 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.
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
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.
| Eintrag | Wert | Grund |
|---|---|---|
REGISTRY | leer lassen (REGISTRY=) | Bei gesetztem Wert wird bei jedem Start ein Registry-Pull versucht, was Verzögerungen und Warnungen verursacht |
TAG | Version des eingeschleusten Bündels (2026.07) | Muss mit dem Tag der geladenen Images übereinstimmen |
PG_PASSWORD | ausreichend lange Zufallszeichenfolge | bei Verwendung des mitgelieferten PostgreSQL |
PLATFORM_API_TARGET | Adresse der Platform Vor-Ort | Ziel für Echtdaten und Authentifizierungsdelegation |
STUDIO_LOCAL_USERS | admin:<password> | Konto für die erste Anmeldung |
PP_LANG / PP_TZ | ko / Asia/Seoul | koreanischer 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
- Secret-Verwaltung — Grundsatz, Schlüssel ausschließlich in
.envabzulegen - Domain und Reverse Proxy — Bereitstellung über interne Domain und HTTPS
- Backup und Wiederherstellung
- Troubleshooting