fix docker-compose.* + .env*
- desktop-app Versuch VNC
This commit is contained in:
@@ -32,20 +32,19 @@ RUN ./gradlew :frontend:shells:meldestelle-portal:dependencies --no-daemon
|
|||||||
RUN ./gradlew :frontend:shells:meldestelle-portal:createDistributable --no-daemon
|
RUN ./gradlew :frontend:shells:meldestelle-portal:createDistributable --no-daemon
|
||||||
|
|
||||||
# ===================================================================
|
# ===================================================================
|
||||||
# 2. Runtime Stage - Ubuntu (Notwendig für GUI/X11 Libraries)
|
# Stage 2: Runtime Stage - Ubuntu mit VNC + noVNC
|
||||||
# ===================================================================
|
# ===================================================================
|
||||||
FROM ubuntu:22.04
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
# Installiere X11, VNC, Window Manager und Libraries für Compose Multiplatform
|
# Installiere System-Dependencies
|
||||||
# Compose braucht oft libgl1-mesa-glx, libgtk-3-0, libasound2 etc.
|
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
openjdk-21-jdk \
|
openjdk-21-jdk \
|
||||||
xvfb \
|
xvfb \
|
||||||
x11vnc \
|
x11vnc \
|
||||||
novnc \
|
python3 \
|
||||||
websockify \
|
python3-numpy \
|
||||||
xfce4 \
|
xfce4 \
|
||||||
xfce4-goodies \
|
xfce4-goodies \
|
||||||
curl \
|
curl \
|
||||||
@@ -53,11 +52,27 @@ RUN apt-get update && apt-get install -y \
|
|||||||
unzip \
|
unzip \
|
||||||
supervisor \
|
supervisor \
|
||||||
net-tools \
|
net-tools \
|
||||||
|
git \
|
||||||
|
# WICHTIG: GUI Libraries für Java/Compose
|
||||||
libgl1-mesa-glx \
|
libgl1-mesa-glx \
|
||||||
|
libgl1-mesa-dri \
|
||||||
libgtk-3-0 \
|
libgtk-3-0 \
|
||||||
libasound2 \
|
libasound2 \
|
||||||
|
libxcursor1 \
|
||||||
|
libxi6 \
|
||||||
|
libxtst6 \
|
||||||
|
libxrandr2 \
|
||||||
|
&& apt-get remove -y xfce4-power-manager \
|
||||||
|
&& apt-get autoremove -y \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Manuelle Installation von noVNC und Websockify
|
||||||
|
# Wir klonen Websockify an den Ort, wo noVNC es erwartet
|
||||||
|
RUN mkdir -p /usr/share/novnc \
|
||||||
|
&& git clone --depth 1 https://github.com/novnc/noVNC.git /usr/share/novnc \
|
||||||
|
&& git clone --depth 1 https://github.com/novnc/websockify /usr/share/novnc/utils/websockify \
|
||||||
|
&& ln -s /usr/share/novnc/vnc.html /usr/share/novnc/index.html
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Kopiere Build-Ergebnis
|
# Kopiere Build-Ergebnis
|
||||||
|
|||||||
@@ -1,137 +1,79 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ===================================================================
|
|
||||||
# Entrypoint-Script für Meldestelle Desktop-App (VNC)
|
|
||||||
# ===================================================================
|
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Logging-Funktion
|
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"; }
|
||||||
log() {
|
|
||||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
|
|
||||||
}
|
|
||||||
|
|
||||||
log "Starting Meldestelle Desktop-App VNC Container..."
|
log "Starting Meldestelle Desktop-App..."
|
||||||
|
|
||||||
# Environment-Variablen setzen
|
|
||||||
export DISPLAY=${DISPLAY:-:99}
|
export DISPLAY=${DISPLAY:-:99}
|
||||||
export VNC_PORT=${VNC_PORT:-5901}
|
export VNC_PORT=${VNC_PORT:-5901}
|
||||||
export NOVNC_PORT=${NOVNC_PORT:-6080}
|
export NOVNC_PORT=${NOVNC_PORT:-6080}
|
||||||
export API_BASE_URL=${API_BASE_URL:-http://api-gateway:8081}
|
|
||||||
# Standard-Passwort setzen, falls keines über ENV kommt
|
|
||||||
export VNC_PW=${VNC_PW:-meldestelle}
|
export VNC_PW=${VNC_PW:-meldestelle}
|
||||||
|
export API_BASE_URL=${API_BASE_URL:-http://api-gateway:8081}
|
||||||
|
# Grafik-Optimierungen für Docker (Software Rendering erzwingen)
|
||||||
|
export SKIKO_RENDER_API="SOFTWARE"
|
||||||
|
export LIBGL_ALWAYS_SOFTWARE=1
|
||||||
|
export MESA_GL_VERSION_OVERRIDE=3.3
|
||||||
|
|
||||||
log "Environment:"
|
# 0. VNC Passwort Setup
|
||||||
log " DISPLAY: $DISPLAY"
|
|
||||||
log " VNC_PORT: $VNC_PORT"
|
|
||||||
log " NOVNC_PORT: $NOVNC_PORT"
|
|
||||||
log " API_BASE_URL: $API_BASE_URL"
|
|
||||||
|
|
||||||
# 0. VNC Passwort generieren
|
|
||||||
log "Generating VNC password..."
|
|
||||||
mkdir -p /home/vncuser/.vnc
|
mkdir -p /home/vncuser/.vnc
|
||||||
x11vnc -storepasswd "$VNC_PW" /home/vncuser/.vnc/passwd
|
x11vnc -storepasswd "$VNC_PW" /home/vncuser/.vnc/passwd
|
||||||
|
|
||||||
# Erstelle .Xauthority wenn nicht vorhanden
|
# 1. Start Xvfb
|
||||||
touch /home/vncuser/.Xauthority
|
log "Starting Xvfb..."
|
||||||
|
rm -f /tmp/.X99-lock
|
||||||
# 1. Starte X11 Virtual Display (Xvfb)
|
|
||||||
log "Starting Xvfb on display $DISPLAY..."
|
|
||||||
# rm -f /tmp/.X99-lock # Aufräumen falls Container neu gestartet wurde (optional)
|
|
||||||
Xvfb $DISPLAY -screen 0 1280x1024x24 -ac +extension GLX +render -noreset &
|
Xvfb $DISPLAY -screen 0 1280x1024x24 -ac +extension GLX +render -noreset &
|
||||||
XVFB_PID=$!
|
sleep 2
|
||||||
|
|
||||||
# Warte bis X11 bereit ist
|
# 2. Start Window Manager
|
||||||
sleep 3
|
log "Starting XFCE4..."
|
||||||
|
|
||||||
# 2. Starte Desktop Environment (XFCE4)
|
|
||||||
log "Starting XFCE4 desktop environment..."
|
|
||||||
startxfce4 &
|
startxfce4 &
|
||||||
XFCE_PID=$!
|
sleep 2
|
||||||
|
|
||||||
# Warte bis Desktop bereit ist
|
# 3. Start VNC Server
|
||||||
sleep 5
|
log "Starting x11vnc on port $VNC_PORT..."
|
||||||
|
|
||||||
# 3. Starte VNC Server
|
|
||||||
log "Starting VNC server on port $VNC_PORT..."
|
|
||||||
# WICHTIG: -rfbauth statt -usepw nutzen, um interaktive Abfrage zu vermeiden
|
|
||||||
x11vnc -display $DISPLAY -forever -rfbauth /home/vncuser/.vnc/passwd -create -rfbport $VNC_PORT -shared -bg
|
x11vnc -display $DISPLAY -forever -rfbauth /home/vncuser/.vnc/passwd -create -rfbport $VNC_PORT -shared -bg
|
||||||
VNC_PID=$!
|
|
||||||
|
|
||||||
# 4. Start noVNC (Websockify)
|
# 4. Start noVNC (Fix für Websockify Pfad)
|
||||||
log "Starting noVNC on port $NOVNC_PORT..."
|
log "Starting noVNC on port $NOVNC_PORT..."
|
||||||
|
# Wir nutzen das mitgelieferte Proxy-Script, das ist robuster als websockify direkt aufzurufen
|
||||||
|
/usr/share/novnc/utils/novnc_proxy --vnc localhost:$VNC_PORT --listen $NOVNC_PORT &
|
||||||
|
NOVNC_PID=$!
|
||||||
|
|
||||||
# Pfad-Korrektur für Ubuntu novnc
|
# 5. Start Desktop App (Fix für Pfad-Probleme)
|
||||||
WEB_DIR="/usr/share/novnc"
|
log "Searching for App binary..."
|
||||||
if [ ! -d "$WEB_DIR" ]; then
|
|
||||||
log "WARNING: $WEB_DIR not found! Searching..."
|
# Wir suchen rekursiv nach der Datei "Meldestelle" im Ordner "bin", die ausführbar ist
|
||||||
WEB_DIR=$(find /usr/share -type d -name "novnc" | head -n 1)
|
# Screenshot zeigte: /app/desktop-app/Meldestelle/bin/Meldestelle
|
||||||
|
APP_PATH=$(find /app/desktop-app -type f -path "*/bin/Meldestelle" | head -n 1)
|
||||||
|
|
||||||
|
if [ -z "$APP_PATH" ]; then
|
||||||
|
# Fallback: Suche irgendeine Datei im bin Ordner, die KEIN Shellscript/Bat ist und executable
|
||||||
|
APP_PATH=$(find /app/desktop-app -type f -path "*/bin/*" ! -name "*.sh" ! -name "*.bat" | head -n 1)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Fix: Index File erstellen, falls es fehlt (Ubuntu hat oft nur vnc.html)
|
if [ -f "$APP_PATH" ]; then
|
||||||
if [ -d "$WEB_DIR" ] && [ ! -f "$WEB_DIR/index.html" ]; then
|
log "🚀 Launching App from: $APP_PATH"
|
||||||
log "Fixing missing index.html in noVNC..."
|
chmod +x "$APP_PATH"
|
||||||
if [ -f "$WEB_DIR/vnc.html" ]; then
|
"$APP_PATH" &
|
||||||
ln -s "$WEB_DIR/vnc.html" "$WEB_DIR/index.html"
|
|
||||||
elif [ -f "$WEB_DIR/vnc_lite.html" ]; then
|
|
||||||
ln -s "$WEB_DIR/vnc_lite.html" "$WEB_DIR/index.html"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
log "Serving noVNC from: $WEB_DIR"
|
|
||||||
|
|
||||||
# Starte Websockify im Vordergrund, wenn es crasht, sehen wir es
|
|
||||||
websockify --web="$WEB_DIR" $NOVNC_PORT localhost:$VNC_PORT &
|
|
||||||
|
|
||||||
# 5. Warte bis Services bereit sind
|
|
||||||
sleep 5
|
|
||||||
|
|
||||||
# 6. Starte Desktop-App
|
|
||||||
log "Starting Meldestelle Desktop-App..."
|
|
||||||
cd /app/desktop-app
|
|
||||||
export API_BASE_URL=$API_BASE_URL
|
|
||||||
|
|
||||||
# Finde die ausführbare Datei
|
|
||||||
if [ -f "client/bin/client" ]; then
|
|
||||||
DESKTOP_APP="client/bin/client"
|
|
||||||
elif [ -f "bin/client" ]; then
|
|
||||||
DESKTOP_APP="bin/client"
|
|
||||||
elif [ -f "client" ]; then
|
|
||||||
DESKTOP_APP="client"
|
|
||||||
else
|
|
||||||
log "ERROR: Desktop-App executable not found!"
|
|
||||||
log "Contents of /app/desktop-app:"
|
|
||||||
ls -R /app/desktop-app/
|
|
||||||
# Wir beenden hier NICHT, damit man debuggen kann (VNC bleibt offen)
|
|
||||||
log "Keeping VNC open for debugging..."
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$DESKTOP_APP" ]; then
|
|
||||||
log "Found desktop app: $DESKTOP_APP"
|
|
||||||
chmod +x "$DESKTOP_APP"
|
|
||||||
# Starte Desktop-App
|
|
||||||
./"$DESKTOP_APP" &
|
|
||||||
APP_PID=$!
|
APP_PID=$!
|
||||||
|
else
|
||||||
|
log "❌ CRITICAL ERROR: App binary not found!"
|
||||||
|
log "Files in /app/desktop-app:"
|
||||||
|
ls -R /app/desktop-app
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "All services started successfully!"
|
log "Ready! Access: http://localhost:6080/vnc.html"
|
||||||
log "VNC: vnc://localhost:$VNC_PORT (Password: $VNC_PW)"
|
|
||||||
log "noVNC: http://localhost:$NOVNC_PORT/vnc.html"
|
|
||||||
|
|
||||||
# Cleanup-Funktion
|
# Cleanup bei Stop
|
||||||
cleanup() {
|
cleanup() {
|
||||||
log "Shutting down services..."
|
log "Stopping..."
|
||||||
if [ -n "$APP_PID" ]; then kill $APP_PID 2>/dev/null || true; fi
|
if [ -n "$APP_PID" ]; then kill $APP_PID 2>/dev/null || true; fi
|
||||||
kill $NOVNC_PID 2>/dev/null || true
|
kill $NOVNC_PID 2>/dev/null || true
|
||||||
# x11vnc läuft im Background (-bg), PID ist schwerer zu greifen, killall hilft:
|
|
||||||
pkill x11vnc || true
|
pkill x11vnc || true
|
||||||
kill $XFCE_PID 2>/dev/null || true
|
|
||||||
kill $XVFB_PID 2>/dev/null || true
|
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# Signal-Handler
|
|
||||||
trap cleanup SIGTERM SIGINT
|
trap cleanup SIGTERM SIGINT
|
||||||
|
|
||||||
# Warten auf Prozesse (unendlich, damit Container nicht stirbt wenn App crasht)
|
# Loggt Websockify Output in die Konsole
|
||||||
# wait $APP_PID
|
|
||||||
tail -f /dev/null
|
tail -f /dev/null
|
||||||
|
|||||||
+1
-1
@@ -358,7 +358,7 @@ services:
|
|||||||
aliases:
|
aliases:
|
||||||
- "web-app"
|
- "web-app"
|
||||||
|
|
||||||
# --- DESKTOP-APP ---
|
# --- DESKTOP-APP (optional) ---
|
||||||
desktop-app:
|
desktop-app:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
|
|||||||
Reference in New Issue
Block a user