Repository navigation
EN Troubleshooting
中文版:常见报错
Open Settings → Environment self-check first. A token created in the Proxmox web UI has privilege
separation enabled by default, and such a token starts with no permissions at all. Reads that need
privileges return 403, while endpoints like /storage return 200 with an empty array without
reporting an error, so the panel can only render an empty list and it looks like the panel is broken.
The self-check asks Proxmox for the token's effective permissions (/access/permissions) and prints
the commands to fix it:
pveum acl modify / --tokens 'root@pam!panel' --roles PVEVMAdmin
pveum acl modify / --tokens 'root@pam!panel' --roles PVEDatastoreUser
pveum acl modify / --tokens 'root@pam!panel' --roles PVEAuditor # node metrics need Sys.AuditThe tell-tale sign is privsep = 1 in pveum token list. Details in
Token and permissions.
systemctl status proxcenter --no-pager -l
journalctl -u proxcenter -n 50 --no-pager
tail -n 50 logs/panel.log| Log line | Meaning |
|---|---|
| "panel startup was rejected" | A .env problem; the sentence after it names the key to fix, usually SECRET_KEY or ADMIN_PASSWORD
|
Access denied for user |
Wrong database account or grants (re-run with --db-* to rewrite .env) |
Can't connect to MySQL |
The database is not running (locally: systemctl status mariadb) |
Address already in use |
Port 8080 is taken; change it with --port
|
ModuleNotFoundError / cannot find app
|
Dependencies are incomplete; re-run without --skip-deps
|
An unreachable Proxmox does not stop the panel from starting, it only leaves a warning in the log. That is deliberate: if it refused to start, one bad configuration would lock you out of the UI you need to fix it with.
Almost always the database password. The MySQL container initialises its credentials only when its
data directory is empty, so changing MYSQL_ROOT_PASSWORD or DB_PASSWORD after the first run
leaves the panel authenticating with a password the database does not have:
docker compose logs panel | tail -30 # look for Access denied / Can't connectEither start over (docker compose down -v && docker compose up -d, which wipes the data) or change
the password in the database by hand with ALTER USER. Both are spelled out at the bottom of
docker-compose.yml.
Connection settings are resolved database first, then .env. If a different address was saved
earlier, editing .env has no effect. Change it under Settings, or clear the stored record and
restart:
DELETE FROM settings WHERE `key` = 'pve_connection';- Will not open: Proxmox does not allow an API token to access
vncproxy. Add a PVE account and password under Settings, ideally a dedicated account with onlyPVEVMUser. - Connects but stays black: cloud images do not write boot output to the graphical console. Templates
built by the panel already add
serial0andvga: serial0; a hand-made template needs them added manually. - Drops behind Nginx: the
location /api/block must carryproxy_set_header Upgrade $http_upgrade;andproxy_set_header Connection "upgrade";, andproxy_read_timeouthas to be raised, because the console is a long-lived connection.
no space left or a storage error while creating a VM: check which disk formats the target storage
supports. LVM and ZFS only take raw; qcow2 needs dir, NFS or CIFS. The panel corrects the format
automatically, but a full storage pool can only be fixed by using another pool.
"Security baseline", "SSH login security" and "Port and process detection" read the logs and /proc
of the host the panel runs on, plus any managed hosts added over SSH. Inside a container those paths
belong to the container rather than the host, and the pages say so instead of showing an empty list.
Mount the host paths read-only if you want them (the comments in docker-compose.yml describe how);
the panel never writes to them.
"Port and process detection" and "Security baseline" do not read a stored record. They SSH into every host and run a probe, up to 45 seconds per host. So that nobody waits for that, the panel shows the previous result immediately and rescans in the background. The "collected at" timestamp at the top of the page tells you which run you are looking at.
All of this is expected:
- the page appears instantly while the timestamp is a few minutes old;
- until that background rescan finishes you are still looking at the previous result, and reopening or reloading once will pick up the new one;
- a stale result is used for at most 15 minutes; anything older is discarded and the request waits for a real scan.
To force a real scan right now, use "Rescan" in the page header, which bypasses the cache.
With many hosts a single scan still takes a while (16 hosts are probed concurrently, i.e.
ceil(hosts / 16) batches). That concurrency is a backend constant, PROBE_CONCURRENCY
(backend/app/baseline.py), not an .env option. Raise it if your fleet is far larger.
给 audit_log 补 target_guest 失败:创建时间回填会退化成查不到
On the first start after an upgrade the panel adds a column and an index to the audit table (used to
answer "when was this guest cloned?" quickly), and that needs ALTER on the database account.
Missing it does not break anything: the only effect is that a cloned guest may show the inherited
template time as its creation time. Grant it and restart:
GRANT ALTER ON proxcenter_panel.* TO 'proxcenter'@'localhost';(Substitute your database name and account.)
The update finished and the version number changed, yet the UI looks the same and a newly added
button is nowhere to be found. That usually means the frontend build did not follow: the backend code
is current, the service runs, the page opens, and the UI is just serving the previous dist/.
The panel now reports this itself. Open Settings → Panel version and updates; a "frontend build and backend differ in version" notice is exactly that. Rebuild by hand:
cd /data/proxcenter # your install directory
npm install # dependencies may not have been synced across a skipped release
npm run build
sudo systemctl restart proxcenterSince 0.2.3 deploy.sh checks the frontend dependencies on every run, and it returns in seconds when
nothing changed. The "skipped a release, new dependency missing, build fails with a wall of
Cannot find module" failure no longer happens, and a stale build is reported on the settings page
together with the commands to fix it.
ProxCenter · Apache-2.0 · 仓库 · 报错与建议 · 本 wiki 与仓库 README 同步维护,功能以 README 为准
ProxCenter · Apache-2.0 · repository · issues · this wiki is kept in sync with the repository README, which remains the authoritative source.