Eigenes Docker Image erstellen
Für Produktionsumgebungen empfiehlt es sich, ein eigenes Docker Image zu erstellen. Damit sind alle benötigten Third-Party Nodes, Konfigurationen und statischen Dateien im Image enthalten und reproduzierbar.
Basis-Image
Das offizielle LowCode Image dient als Basis:
marketplace.processcube.io/processcube-io/processcube_lowcode:latestDieses Image basiert auf nodered/node-red:4.1.1-22 (Node.js 22) und enthält:
- Alle ProcessCube®-spezifischen Nodes und Extensions
- System-Pakete: ffmpeg, ghostscript
- ProcessCube®-Theme und Konfiguration
- Storage Extension für Flow-Management
Einfaches Dockerfile
Das einfachste Dockerfile installiert zusätzliche npm-Pakete:
FROM marketplace.processcube.io/processcube-io/processcube_lowcode:latest
# Als Root-User für Paketinstallation
USER root
# Zusätzliche Nodes installieren
WORKDIR /data
RUN npm install \
node-red-contrib-influxdb@0.7.0 \
node-red-contrib-cron-plus@2.1.0 \
node-red-node-email@2.1.0
# Zurück zum Node-RED-User
USER node-red
WORKDIR /usr/src/node-redDockerfile mit package.json
Für bessere Wartbarkeit und Versionskontrolle verwenden Sie eine separate package.json:
{
"name": "my-lowcode-project",
"version": "1.0.0",
"description": "Custom LowCode Image fuer Projekt XY",
"dependencies": {
"node-red-contrib-influxdb": "0.7.0",
"node-red-contrib-cron-plus": "2.1.0",
"node-red-node-email": "2.1.0",
"node-red-contrib-telegrambot": "16.0.0"
}
}FROM marketplace.processcube.io/processcube-io/processcube_lowcode:latest
USER root
# package.json kopieren
COPY custom-nodes/package.json /data/package.json
# Abhängigkeiten installieren
WORKDIR /data
RUN npm install --production --no-optional
# Zurück zum Standard-User
USER node-red
WORKDIR /usr/src/node-redErweitertes Dockerfile
Dieses Beispiel zeigt ein erweitertes Dockerfile mit statischen Dateien, eigenen Flows und System-Paketen:
FROM marketplace.processcube.io/processcube-io/processcube_lowcode:latest
USER root
# Zusätzliche System-Pakete installieren (Alpine Linux)
RUN apk add --no-cache \
imagemagick \
curl
# Custom Nodes installieren
COPY custom-nodes/package.json /data/package.json
WORKDIR /data
RUN npm install --production --no-optional
# Statische Dateien kopieren (Logos, PDFs, etc.)
COPY static/ /static/
# Eigene Flows als Standardkonfiguration
COPY flows/ /data/flowStorageDir/
# Berechtigungen setzen
RUN chown -R node-red:node-red /data /static
USER node-red
WORKDIR /usr/src/node-redProjektstruktur
Eine empfohlene Projektstruktur für ein Custom Docker Image:
mein-lowcode-projekt/
├── Dockerfile
├── docker-compose.yml
├── custom-nodes/
│ └── package.json
├── static/
│ ├── logo.png
│ └── styles.css
├── flows/
│ └── flows/
│ └── main-flow/
│ └── flow.json
└── .dockerignoreDie .dockerignore verhindert, dass unnötige Dateien ins Image gelangen:
node_modules
.git
.env
*.mdBuild, Tag und Push
Lokaler Build
# Image bauen
docker build -t mein-lowcode:1.0.0 .
# Image lokal testen
docker run -p 1880:1880 \
-e NODERED_AUTH_DISABLED=true \
mein-lowcode:1.0.0Image taggen und pushen
# Für private Registry
docker tag mein-lowcode:1.0.0 registry.example.com/mein-lowcode:1.0.0
docker push registry.example.com/mein-lowcode:1.0.0
# Mit "latest" Tag
docker tag mein-lowcode:1.0.0 registry.example.com/mein-lowcode:latest
docker push registry.example.com/mein-lowcode:latestCI/CD-Integration
Beispiel für eine GitHub Actions Pipeline:
name: Build LowCode Image
on:
push:
branches: [main]
tags: ['v*']
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to Registry
run: docker login registry.example.com -u ${{ secrets.REGISTRY_USER }} -p ${{ secrets.REGISTRY_PASS }}
- name: Build and Push
run: |
docker build -t registry.example.com/mein-lowcode:${{ github.sha }} .
docker push registry.example.com/mein-lowcode:${{ github.sha }}Verwendung in docker-compose.yml
services:
lowcode:
build:
context: .
dockerfile: Dockerfile
ports:
- "1880:1880"
environment:
- ENGINE_URL=http://engine:8000
- NODERED_AUTHORITY_URL=http://authority:11560
- NODERED_CREDENTIAL_SECRET=${CREDENTIAL_SECRET}
volumes:
- lowcode_data:/data
restart: unless-stopped
volumes:
lowcode_data:Aufbau des offiziellen Image
Das offizielle LowCode Image verwendet einen Multi-Stage-Build:
- Builder-Stage (Node.js 22): Kompiliert alle Pakete mit pnpm, baut TypeScript-Quellen und erstellt das Deployment-Bundle
- Runtime-Stage (
nodered/node-red:4.1.1-22): Kopiert die gebauten Artefakte, installiert System-Pakete (ffmpeg, ghostscript) und konfiguriert den Entrypoint
Der Entrypoint startet Node-RED mit dem ProcessCube®-Settings-Loader:
ENTRYPOINT ["./entrypoint.sh", "--settings", "/etc/processcube/nodered/settings_loader.js"]Tipps
- Pinnen Sie Versionen: Verwenden Sie immer feste Versionen für Basis-Image und npm-Pakete
- Kleine Images: Installieren Sie nur benötigte Pakete und verwenden Sie
--production --no-optional - Sicherheit: Lassen Sie den Container als
node-red-User laufen (nicht als root) - Layer-Caching: Kopieren Sie die
package.jsonvor dem restlichen Code, um Docker-Layer-Caching zu nutzen
Nächste Schritte
- Produktiv-Konfiguration — Security und Monitoring konfigurieren
- Kubernetes Deployment — Image in Kubernetes betreiben
- Third-Party Nodes — Weitere Nodes installieren