OpsPanel is an internal web panel for running dev services, stopping them, and reading logs without opening SSH sessions manually.
- Single-user login with signed cookie session
- Services dashboard with status, single actions, and bulk start/stop
- Realtime log page using server-sent events
- Executor abstraction with
mockmode and realsshmode - Config-driven servers and services from JSON
- Install dependencies.
npm install- Copy the environment example.
copy .env.example .env- Copy the config example if you want to replace the built-in sample config.
copy opspanel.config.example.json opspanel.config.json- Start the app.
npm run dev- Open the app and log in with the credentials from
.env.
OPSPANEL_EXECUTOR:mockorsshOPSPANEL_CONFIG_PATH: path to the JSON config fileOPSPANEL_LOGIN_USERNAME: single-user login nameOPSPANEL_LOGIN_PASSWORD: single-user login passwordOPSPANEL_SESSION_SECRET: signing secret for the session cookie
opspanel.config.json contains:
servers: SSH connection targetsservices: service definitions with working directory and commands
Example server authentication options:
privateKeyPath: absolute path to a private key fileprivateKeyEnv: environment variable containing the private key contentsprivateKey: inline private key string
Required service fields:
startCommandstopCommandstatusCommand
statusCommand must print exactly one of running, stopped, failed, or unknown on stdout.
mockmode is the default so the UI works without server access.- In
sshmode, start commands are launched withnohupand output is written to~/.opspanel/logs/<service>.logunless the service provides its ownlogCommand. - Service status is now refreshed from the remote host via
statusCommand, with a short 5 second cache to avoid flooding SSH requests.
npm run build