Update AppImage

This commit is contained in:
MacRimi
2025-09-29 18:58:53 +02:00
parent edb09777de
commit ffe8f4acc6
3 changed files with 82 additions and 77 deletions

41
AppImage/scripts/AppRun Normal file
View File

@@ -0,0 +1,41 @@
#!/bin/bash
# ProxMenux Monitor AppImage Entry Point
# This script is executed when the AppImage is run
# Get the directory where this AppImage is mounted
APPDIR="$(dirname "$(readlink -f "${0}")")"
# Set up environment
export PATH="${APPDIR}/usr/bin:${PATH}"
export LD_LIBRARY_PATH="${APPDIR}/usr/lib:${LD_LIBRARY_PATH}"
# Change to the AppImage directory
cd "${APPDIR}"
# Debug: Print directory structure for troubleshooting
echo "[v0] AppImage mounted at: ${APPDIR}"
echo "[v0] Contents of AppImage root:"
ls -la "${APPDIR}/" || echo "[v0] Cannot list AppImage root"
echo "[v0] Contents of web directory:"
ls -la "${APPDIR}/web/" || echo "[v0] Web directory not found"
echo "[v0] Looking for index.html:"
find "${APPDIR}" -name "index.html" -type f || echo "[v0] No index.html found"
# Check for translation argument
if [[ "$1" == "--translate" ]]; then
echo "🌐 Starting ProxMenux Translation Service..."
exec python3 "${APPDIR}/scripts/translator.py" "${@:2}"
else
echo "🚀 Starting ProxMenux Monitor Dashboard..."
echo "📊 Dashboard will be available at: http://localhost:8008"
echo "🔌 API endpoints at: http://localhost:8008/api/"
echo ""
echo "Press Ctrl+C to stop the server"
echo ""
# Start the Flask server
exec python3 "${APPDIR}/scripts/flask_server.py"
fi

View File

@@ -229,66 +229,17 @@ else
exit 1 exit 1
fi fi
# Create AppRun script # Copy AppRun script
cat > "$APP_DIR/AppRun" << 'EOF' echo "📋 Copying AppRun script..."
#!/bin/bash if [ -f "$SCRIPT_DIR/AppRun" ]; then
cp "$SCRIPT_DIR/AppRun" "$APP_DIR/AppRun"
# Get the directory where this AppImage is located chmod +x "$APP_DIR/AppRun"
HERE="$(dirname "$(readlink -f "${0}")")" echo "✅ AppRun script copied successfully"
else
# Set Python path echo "❌ Error: AppRun script not found at $SCRIPT_DIR/AppRun"
export PYTHONPATH="$HERE/usr/lib/python3/dist-packages:$PYTHONPATH" exit 1
export PATH="$HERE/usr/bin:$PATH"
# Check if translation mode is requested
if [ "$1" = "--translate" ]; then
shift
exec python3 "$HERE/usr/bin/translate_cli.py" "$@"
fi fi
# Start Flask server in background
echo "🚀 Starting ProxMenux Monitor..."
echo "📊 Dashboard will be available at: http://localhost:8008"
cd "$HERE"
python3 "$HERE/usr/bin/flask_server.py" &
FLASK_PID=$!
# Function to cleanup on exit
cleanup() {
echo "🛑 Stopping ProxMenux Monitor..."
kill $FLASK_PID 2>/dev/null || true
exit 0
}
# Set trap for cleanup
trap cleanup SIGINT SIGTERM EXIT
# Wait for Flask to start
sleep 3
# Try to open browser
if command -v xdg-open > /dev/null; then
xdg-open "http://localhost:8008" 2>/dev/null || true
elif command -v firefox > /dev/null; then
firefox "http://localhost:8008" 2>/dev/null || true
elif command -v chromium > /dev/null; then
chromium "http://localhost:8008" 2>/dev/null || true
elif command -v google-chrome > /dev/null; then
google-chrome "http://localhost:8008" 2>/dev/null || true
fi
echo "✅ ProxMenux Monitor is running!"
echo "📝 Press Ctrl+C to stop"
echo "🌐 Access dashboard at: http://localhost:8008"
echo "🌍 Translation available with: ./ProxMenux-Monitor.AppImage --translate"
# Keep the script running
wait $FLASK_PID
EOF
chmod +x "$APP_DIR/AppRun"
# Create desktop file # Create desktop file
cat > "$APP_DIR/proxmenux-monitor.desktop" << EOF cat > "$APP_DIR/proxmenux-monitor.desktop" << EOF
[Desktop Entry] [Desktop Entry]

View File

@@ -23,20 +23,28 @@ CORS(app) # Enable CORS for Next.js frontend
def serve_dashboard(): def serve_dashboard():
"""Serve the main dashboard page from Next.js build""" """Serve the main dashboard page from Next.js build"""
try: try:
base_dir = os.path.dirname(os.path.abspath(__file__))
appimage_root = os.path.dirname(base_dir) # Subir un nivel desde scripts/
index_paths = [ index_paths = [
os.path.join(os.path.dirname(__file__), '..', 'web', 'index.html'), # Exportación estática os.path.join(appimage_root, 'web', 'index.html'), # Ruta principal para exportación estática
os.path.join(os.path.dirname(__file__), '..', 'web', 'out', 'index.html'), # Fallback os.path.join(appimage_root, 'web', 'out', 'index.html'), # Fallback si está en subcarpeta
os.path.join(os.path.dirname(__file__), '..', 'web', '.next', 'server', 'app', 'page.html'), os.path.join(base_dir, '..', 'web', 'index.html'), # Ruta relativa alternativa
os.path.join(os.path.dirname(__file__), '..', 'web', '.next', 'server', 'pages', 'index.html'), os.path.join(base_dir, '..', 'web', 'out', 'index.html'), # Fallback relativo
os.path.join(os.path.dirname(__file__), '..', 'web', 'dist', 'index.html')
] ]
for index_path in index_paths: print(f"[v0] Flask server looking for index.html in:")
if os.path.exists(index_path): for path in index_paths:
return send_file(index_path) abs_path = os.path.abspath(path)
exists = os.path.exists(abs_path)
print(f"[v0] {abs_path} - {'EXISTS' if exists else 'NOT FOUND'}")
if exists:
print(f"[v0] Found index.html, serving from: {abs_path}")
return send_file(abs_path)
# If no Next.js build found, return error message # If no Next.js build found, return error message with actual paths checked
return ''' actual_paths = [os.path.abspath(path) for path in index_paths]
return f'''
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head><title>ProxMenux Monitor - Build Error</title></head> <head><title>ProxMenux Monitor - Build Error</title></head>
@@ -44,7 +52,7 @@ def serve_dashboard():
<h1>🚨 ProxMenux Monitor - Build Error</h1> <h1>🚨 ProxMenux Monitor - Build Error</h1>
<p>Next.js application not found. The AppImage may not have been built correctly.</p> <p>Next.js application not found. The AppImage may not have been built correctly.</p>
<p>Expected paths checked:</p> <p>Expected paths checked:</p>
<ul>''' + ''.join([f'<li>{path}</li>' for path in index_paths]) + '''</ul> <ul>{''.join([f'<li>{path}</li>' for path in actual_paths])}</ul>
<p>API endpoints are still available:</p> <p>API endpoints are still available:</p>
<ul> <ul>
<li><a href="/api/system" style="color: #4f46e5;">/api/system</a></li> <li><a href="/api/system" style="color: #4f46e5;">/api/system</a></li>
@@ -128,10 +136,13 @@ def serve_sw():
def serve_next_static(filename): def serve_next_static(filename):
"""Serve Next.js static files""" """Serve Next.js static files"""
try: try:
base_dir = os.path.dirname(os.path.abspath(__file__))
appimage_root = os.path.dirname(base_dir)
static_paths = [ static_paths = [
os.path.join(os.path.dirname(__file__), '..', 'web', '_next'), # Exportación estática os.path.join(appimage_root, 'web', '_next'), # Ruta principal
os.path.join(os.path.dirname(__file__), '..', 'web', 'out', '_next'), # Fallback os.path.join(appimage_root, 'web', 'out', '_next'), # Fallback
os.path.join(os.path.dirname(__file__), '..', 'web', '.next', 'static') os.path.join(base_dir, '..', 'web', '_next'), # Ruta relativa
] ]
for static_dir in static_paths: for static_dir in static_paths:
@@ -147,12 +158,14 @@ def serve_next_static(filename):
def serve_static_files(filename): def serve_static_files(filename):
"""Serve static files (icons, etc.)""" """Serve static files (icons, etc.)"""
try: try:
base_dir = os.path.dirname(os.path.abspath(__file__))
appimage_root = os.path.dirname(base_dir)
public_paths = [ public_paths = [
os.path.join(os.path.dirname(__file__), '..', 'web'), # Raíz web para exportación estática os.path.join(appimage_root, 'web'), # Raíz web para exportación estática
os.path.join(os.path.dirname(__file__), '..', 'web', 'out'), # Fallback os.path.join(appimage_root, 'web', 'out'), # Fallback
os.path.join(os.path.dirname(__file__), '..', 'web', 'public'), os.path.join(base_dir, '..', 'web'), # Ruta relativa
os.path.join(os.path.dirname(__file__), '..', 'public'), os.path.join(base_dir, '..', 'web', 'out'), # Fallback relativo
os.path.join(os.path.dirname(__file__), '..', 'web', '.next', 'static')
] ]
for public_dir in public_paths: for public_dir in public_paths: