Home Assistant-style installation server for StdOut. Provides a visual, guided setup experience with real-time progress tracking.
This is an ephemeral setup server that:
- Runs on port 8888 during installation
- Serves a visual wizard UI at
http://stdout.local:8888 - Orchestrates Docker container deployment
- Streams real-time progress to the browser
- Self-destructs after installation completes
Browser (http://stdout.local:8888)
↓ SSE (Server-Sent Events)
Setup Server (Express + Node.js)
↓ execFile (secure command execution)
Docker Daemon (on host)
↓ creates
StdOut Stack (stdout + windlass containers)
The installer performs 8 steps:
- Generate Configuration — Creates docker-compose.yml from template
- Pull Docker Images — Downloads stdout and windlass images from GitHub Container Registry
- Start Containers — Launches containers with docker-compose
- Wait for Health Checks — Polls until containers are healthy
- Initialize Database — Runs migrations to create schema
- Create Admin Account — Creates first user with provided credentials
- Configure Environment — Sets environment name
- Finalize Installation — Marks installation complete and runs final health check
- No command injection: Uses
execFilewith argument arrays, not shell strings - No XSS: DOM manipulation uses
textContent, notinnerHTML - Input validation: Email and password validated before submission
- Ephemeral: Setup server is removed after installation
npm install
npm run devServer runs on http://localhost:8888
docker build -t charlieseay/stdout-setup:latest .
docker push charlieseay/stdout-setup:latestThis container is typically started by the install.sh script:
docker run -d \
--name stdout-setup \
--hostname stdout \
--restart unless-stopped \
-p 8888:8888 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd)/stdout-data:/workspace \
charlieseay/stdout-setup:latestserver.js— Express server with SSE endpointinstaller.js— Installation orchestrator (8 steps)templates/docker-compose.yml.tpl— Template for StdOut stackpublic/index.html— Setup wizard UIpublic/setup.js— SSE client and progress renderingpublic/styles.css— Visual styling
None required — all configuration comes from the browser form.
After installation completes, the container automatically runs:
docker stop stdout-setup
docker rm stdout-setupThis happens 10 seconds after the completion message is sent to the browser.
MIT