CommyPanel 0.6.0
This release adds four things: opening a database in phpMyAdmin or pgAdmin, API tokens for scripts and CI, deployment messages to a chat, and a one-click GitHub connection. Please read Before you upgrade: the database tools need a new port open in your firewall.
CommyPanel is still pre-1.0.
What's new
Apply changes without redeploying
- After you change environment variables, volumes or links, the app page offers Apply changes: a new container is made from the version that is already running, with the new settings, and swapped in with the usual zero-downtime switch. No clone, no build, and a failed health check changes nothing. Before, these only took effect with the next full deployment.
Database tools
- A phpMyAdmin / pgAdmin button next to each database (phpMyAdmin for MySQL and MariaDB, pgAdmin for PostgreSQL). pgAdmin's image is about 600 MB, so the first opening of a PostgreSQL database takes a while to download. It starts a short-lived container, shows progress while it pulls and starts, and opens the tool in a new tab by itself.
- You are logged in as that database's own user, never as the administrator, and the password never reaches your browser and is written to no file or setting of the tool's container (pgAdmin holds it only in memory, unsaved, for your session).
- A session ends after 15 minutes without use (4 hours at most) and the container is removed; at most 6 run at once. The page tells you this before you open one.
- The tools are served on port 2053 (
COMMYPANEL_TOOLS_PORT), a port of their own, because a browser treats another port as another origin: a flaw inside a tool cannot read the panel's pages. 2053 is one Cloudflare also proxies, for panels behind Cloudflare. - New permission
databases.tools, password confirmation, and an audit entry for every opening. Treat it like the database's password.
API tokens
- Settings > API tokens (permission
tokens.manage) creates tokens for scripts and CI: list apps, start a deployment and follow it. Abilities areapps:readandapps:deploy; a token can be limited to chosen apps and lasts 30 days to a year, or never expires (with a clear warning, and revoking or deleting the owner ends it). Creating one has a page of its own. It is shown once, only a hash is stored, and it is checked against its owner's current permissions on every call. - Failed attempts are counted before the token is looked up, a token gets 60 calls a minute, and there is no CORS. See
docs/api.md, which has a GitHub Actions example.
Deployment messages
- Settings > Notifications sends the result of a deployment to Slack (and Mattermost, Rocket.Chat), Discord or any webhook as JSON: only failures, or every result. Messages hold the app, commit and reason, never logs or secrets. The address is stored encrypted and must be https; this server, reserved ranges and the cloud metadata address are refused. New permission
notifications.manage. Seedocs/notifications.md.
GitHub
- Settings > GitHub creates a GitHub App for the panel through GitHub's manifest flow: no tokens or deploy keys to paste. New apps can pick a repository from a list; each clone uses a read-only token for that one repository that expires after an hour.
- Deploy on push is a switch when you create the app from a GitHub repository, and later on its Settings tab, where it asks you to confirm turning it on or off. It is off unless you turn it on; every other app has it off too.
- New permission
github.manage. Anyone who may create apps can deploy any repository the GitHub app may read, so give it access only to what should be deployable. Seedocs/github.md.
Before you upgrade
- Open port 2053 in your firewall (next to 80, 443 and 8443) if you want to use the database tools. The installer prints the reminder.
- The upgrade adds a few columns to
appsanddeployments, rewrites the agent's service file (a second socket for the tools) and the panel's nginx site. Back up/var/lib/commypanelas usual and upgrade withsudo commypanel upgrade. - New permissions:
databases.tools,tokens.manage,notifications.manageandgithub.manage. The built-inadminrole gets them; give them to other roles on purpose. - The panel contacts the outside in more cases, all started by you:
api.github.comandgithub.comwhen you use the GitHub page, create an app from it or deploy one, and your chat's webhook address once you switch messages on. Update checks, your S3 copy and the address lookup are as before.
Security notes
- The database tools' proxy is the security boundary: single-use ticket (60 s), a cookie limited to its own session path, only the tool's own cookies forwarded, redirects kept inside the session, no WebSocket upgrades, a body limit. The agent chooses the tool image and network; a request cannot.
- API tokens, deployment messages and the GitHub App keep their secrets encrypted and never show them again. The GitHub return works once, bound to your session, within ten minutes; its webhook accepts only this app's signed pushes.
Known limitations
- Cookies ignore ports, so a script running inside a database tool could still fill the cookie jar of the host and read cookies that are not HttpOnly. A separate host name for the tools (planned with wildcard certificates) is the real fix.
- Deployment messages are one webhook for the whole panel, and not email. GitHub Enterprise Server is not supported, and GitLab, Gitea and Bitbucket stay on deploy keys.
- Not in this release: wildcard certificates.
Requirements
Unchanged: Ubuntu 24.04 or 26.04, or Debian 13 or newer, with systemd; amd64 or arm64; root access; at least 1 GB of RAM.
# Install
curl -fsSL https://github.com/commypanel/panel/releases/latest/download/install.sh | sudo bash
# Upgrade
sudo commypanel upgrade