CUB-126: Update Control Center deployment for Go + React
All checks were successful
Dev Build / build-test (pull_request) Successful in 1m33s
All checks were successful
Dev Build / build-test (pull_request) Successful in 1m33s
- Updated docker-compose.yml for Go + React + PostgreSQL - Go backend multi-stage Dockerfile (already existed) - React frontend multi-stage Dockerfile with nginx SPA config (already existed) - Kiosk start script and systemd unit - Deployment README - .env.example for environment variables
This commit is contained in:
42
kiosk/control-center-kiosk.service
Normal file
42
kiosk/control-center-kiosk.service
Normal file
@@ -0,0 +1,42 @@
|
||||
# Control Center Kiosk Service
|
||||
# =============================
|
||||
# Systemd unit file for auto-starting the Control Center kiosk on boot
|
||||
#
|
||||
# Install: sudo cp control-center-kiosk.service /etc/systemd/system/
|
||||
# Enable: sudo systemctl enable control-center-kiosk
|
||||
# Start: sudo systemctl start control-center-kiosk
|
||||
# Status: sudo systemctl status control-center-kiosk
|
||||
# Logs: sudo journalctl -u control-center-kiosk -f
|
||||
|
||||
[Unit]
|
||||
Description=Control Center Kiosk - Chrome Browser Dashboard
|
||||
Documentation=https://code.cubecraftcreations.com/CubeCraft-Creations/Control-Center
|
||||
After=graphical-session.target network-online.target
|
||||
Wants=network-online.target
|
||||
PartOf=graphical-session.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/home/overseer/projects/Control-Center/kiosk/start-kiosk.sh http://localhost:3000
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
Environment=DISPLAY=:0
|
||||
Environment=XAUTHORITY=/home/overseer/.Xauthority
|
||||
WorkingDirectory=/home/overseer/projects/Control-Center
|
||||
User=overseer
|
||||
Group=overseer
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
SyslogIdentifier=control-center-kiosk
|
||||
|
||||
# Security hardening
|
||||
NoNewPrivileges=true
|
||||
ProtectSystem=strict
|
||||
ProtectHome=true
|
||||
PrivateTmp=true
|
||||
ReadWritePaths=/home/overseer/.config/chromium
|
||||
ReadWritePaths=/var/log/journal
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical-session.target
|
||||
88
kiosk/start-kiosk.sh
Executable file
88
kiosk/start-kiosk.sh
Executable file
@@ -0,0 +1,88 @@
|
||||
#!/bin/bash
|
||||
# Control Center Kiosk Startup Script
|
||||
# ====================================
|
||||
# This script launches Chromium in kiosk mode for the Control Center dashboard
|
||||
# Usage: ./start-kiosk.sh [frontend-url]
|
||||
|
||||
set -e
|
||||
|
||||
FRONTEND_URL="${1:-http://localhost:3000}"
|
||||
BROWSER_WINDOW="chromium-browser"
|
||||
|
||||
# ── Functions ────────────────────────────────────────────────────────────
|
||||
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
log "Stopping kiosk browser..."
|
||||
pkill -f "chromium-browser.*--kiosk" || true
|
||||
}
|
||||
|
||||
trap cleanup SIGINT SIGTERM
|
||||
|
||||
# ── Check prerequisites ──────────────────────────────────────────────────
|
||||
|
||||
check_browser() {
|
||||
if ! command -v chromium-browser &> /dev/null; then
|
||||
log "ERROR: chromium-browser not found"
|
||||
log "Install with: sudo apt-get install chromium"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_x_server() {
|
||||
if [ -z "$DISPLAY" ]; then
|
||||
log "ERROR: DISPLAY environment variable not set"
|
||||
log "This script requires an X server session"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ── Main ────────────────────────────────────────────────────────────────
|
||||
|
||||
main() {
|
||||
log "Starting Control Center Kiosk..."
|
||||
log "Frontend URL: $FRONTEND_URL"
|
||||
|
||||
check_browser
|
||||
check_x_server
|
||||
|
||||
# Clean up any existing browser instances
|
||||
cleanup
|
||||
|
||||
# Launch Chromium in kiosk mode
|
||||
# --kiosk: Fullscreen without browser UI
|
||||
# --incognito: Clean session
|
||||
# --noerrdialogs: Suppress error dialogs
|
||||
# --disable-notifications: Disable notifications
|
||||
# --disable-extensions: Disable extensions
|
||||
# --disable-plugins-discovery: Disable plugins
|
||||
# --disable-sync: Disable sync
|
||||
# --disable-web-security: Allow CORS (needed for local API calls)
|
||||
# --ignore-certificate-errors: Ignore SSL errors (for local dev)
|
||||
# --gpu: Enable GPU acceleration
|
||||
# --start-fullscreen: Start in fullscreen mode
|
||||
chromium-browser \
|
||||
--kiosk \
|
||||
--incognito \
|
||||
--noerrdialogs \
|
||||
--disable-notifications \
|
||||
--disable-extensions \
|
||||
--disable-plugins-discovery \
|
||||
--disable-sync \
|
||||
--disable-web-security \
|
||||
--ignore-certificate-errors \
|
||||
--gpu \
|
||||
--start-fullscreen \
|
||||
"$FRONTEND_URL" &
|
||||
|
||||
KIOSK_PID=$!
|
||||
log "Kiosk browser started (PID: $KIOSK_PID)"
|
||||
|
||||
# Wait for browser to exit
|
||||
wait $KIOSK_PID
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user