English | 简体中文
Panel is an alpha-stage server operations panel for small Linux fleets. It helps you connect Debian and Ubuntu servers over SSH, see their health at a glance, run package maintenance, bootstrap or join Nomad nodes, deploy container applications, and manage DNS and ACME certificates from one web UI.
The project is built for people who run their own servers and for humans sharing code with each other. It aims to stay understandable: a Go backend, a Vue frontend, local SQLite data, and task commands that are easy to run.
- Add SSH credentials and register servers.
- Probe server reachability, OS details, system traits, and passwordless sudo support.
- Collect overview metrics for CPU, memory, disk, network, uptime, kernel, and load.
- Refresh APT package updates and run selected or full upgrades.
- Install UFW where supported.
- Bootstrap a Nomad server or join servers as Nomad clients.
- View Nomad nodes, jobs, deployments, evaluations, and services.
- Deploy Docker-based applications through Nomad.
- Configure application files, variables, mounts, ports, placement, runtime actions, logs, and reverse proxy routes.
- Manage Cloudflare domains and issue ACME certificates.
- Track background tasks and task logs.
- Switch the UI between English and Simplified Chinese.
Panel is currently alpha software. It already has useful workflows, but you should expect changes in configuration, database migrations, and UI behavior as the project grows. Use it first on development or non-critical servers, and keep backups of the data directory if you run it for real work.
Panel support is intentionally explicit and will expand over time.
Current supported systems:
- Debian 12
- Debian 13
- Ubuntu 20.04 LTS
- Ubuntu 22.04 LTS
- Ubuntu 24.04 LTS
- Ubuntu 24.10
- Ubuntu 25.04
- Ubuntu 25.10
- Ubuntu 26.04 LTS
Notes:
- Servers are managed over SSH.
- Password or private-key SSH credentials are supported.
- Many maintenance actions require root or passwordless sudo.
- Package maintenance uses APT.
- Nomad setup installs Nomad, Docker, and CNI plugins on supported systems when needed.
Install these on the machine where you develop or run Panel:
- Go 1.25+
- Node.js 22+
- npm
- Task
Docker is optional for containerized deployment.
npm --prefix web ciIf you are working without a lockfile-aware flow, npm --prefix web install also works.
cp config.example.json config.jsonThen point Panel at it:
export PANEL_CONFIG=./config.jsonPowerShell:
$env:PANEL_CONFIG = ".\config.json"Default local login:
- Username:
admin - Password:
admin
Panel requires a password change on first use and rotates the JWT signing secret automatically when the password is changed.
task run:backendThe backend listens on 127.0.0.1:8080 by default.
Open another terminal:
task run:webOpen http://127.0.0.1:5173. During development, Vite proxies /api requests to the backend.
Panel loads configuration in this order:
- Built-in defaults.
- The JSON file pointed to by
PANEL_CONFIG. - Environment variables.
Common config values:
| Key | Purpose | Default |
|---|---|---|
listenAddress |
Backend listen address | 127.0.0.1:8080 |
dataRoot |
Root directory for Panel data | data |
appDatabase |
Main SQLite database | data/db/app.db |
metricsDatabase |
Metrics SQLite database | data/db/metrics.db |
nomad.address |
Nomad HTTP API address | http://127.0.0.1:4646 |
nomad.token |
Nomad ACL token, when required | Empty |
certificates.acmeDirectoryUrl |
ACME directory URL | Let's Encrypt production |
Administrator username/password, JWT secret, remote command timeout, Nomad namespace/region/datacenter, certificate email, and certificate DNS propagation delay are stored in the application database and configured from Settings in the UI.
Supported environment variables:
PANEL_CONFIGPANEL_LISTEN_ADDRESSPANEL_DATA_ROOTPANEL_APP_DATABASEPANEL_METRICS_DATABASEPANEL_CERT_ACME_DIRECTORY_URL
Runtime settings such as language, token expiration, metrics retention, Nomad scope, security settings, and certificate defaults can be adjusted from the UI.
Development-only web proxy variable:
PANEL_WEB_PROXY_TARGET
Build the image:
docker build -t panel .Run it:
docker run --rm -p 8080:8080 -v panel-data:/app/data panelContainer defaults:
- Listens on
0.0.0.0:8080. - Stores data in
/app/data. - Serves the built web UI from the backend.
For persistent deployments, mount or back up the data volume. Security settings, including the JWT secret, are stored there.
Useful commands:
task run:backend
task run:web
task test:backend
task test:web
task build:backend
task build:web
task buildProject layout:
cmd/panel backend entry point
internal/ backend services, handlers, storage, integrations
web/ Vue 3 frontend
web/src/i18n/ frontend translations
docs/agents/ repository collaboration and i18n notes
tmp/ temporary test and build files
Taskfile.yml common task entry points
config.example.json example runtime config
Dockerfile production container build
Useful entry points:
- Backend startup:
cmd/panel/main.go - Route wiring and static UI serving:
internal/app/app.go - Database migrations:
internal/storage/migrations.go - Target OS adapters:
internal/linux/ - Nomad control plane logic:
internal/nomad/ - Application deployment logic:
internal/applications/ - Frontend routes:
web/src/router/index.ts - Frontend i18n setup:
web/src/i18n/index.ts
Panel has English and Simplified Chinese UI strings. When changing user-visible text in the application, follow the i18n guide in docs/agents/i18n-guide.md and keep docs/agents/i18n-translation-status.md up to date.
No license file is currently included. If you plan to reuse or redistribute the project, check with the project owner first.