Skip to main content

CommyPanel 0.2.0

This release finishes the deploy pipeline and lets you see and shape what your apps are doing: migrations on deploy, start/stop/restart, private repositories over HTTPS, deploy on push, live resource usage, a clear "Docker is down" state, and a per-app nginx editor.

CommyPanel is still pre-1.0. Please read Before you upgrade first.

What's new​

Deploying​

  • Release command. An optional command per app (for example npm run migrate) that runs once per deployment, in a fresh container from the new image with the app's environment, before the new version starts. If it fails or runs longer than 10 minutes, the new version is not started and the old one keeps serving. The output is in the deployment log. Rollbacks do not run it again.
  • Start, stop and restart. A Container menu on the app page. A stopped app keeps its release and domains (visitors get an error page) and can be started again instantly, without a deployment. This is different from Deactivate, which removes the container and takes the domains offline.
  • HTTPS access tokens for private repositories. An alternative to deploy keys. The token is tested against the repository before it is saved, stored encrypted, and never shown again. GitHub, GitLab and Bitbucket get the right username filled in.
  • Deploy on push. A per-app webhook for GitHub, GitLab, Bitbucket Cloud, Gitea and Forgejo. Every call must be signed with the app's secret. Only pushes to the app's branch deploy.

Seeing what is happening​

  • Live resource usage. Server > Overview shows live CPU, memory, disk and network with the last five minutes, plus a table of what each container uses. Each app's Deployments tab has the same charts for its own container. Updates every two seconds while the page is open; hover for exact values, or switch a chart to a table.
  • "Docker is down" is a first-class state. A banner on every page when Docker or the agent stops answering. Server > Docker shows the state of the Docker service and its latest log lines, and people with the right permission can restart Docker from there (after confirming their password).

Nginx​

  • Custom nginx directives per app. A new Nginx tab with a text editor for extra directives (upload limits, timeouts, headers, redirects, extra locations). Save checks the text, lets nginx test the whole configuration and reloads it; Cancel discards your edits. If anything is refused, nothing is saved and the previous configuration keeps running. The generated configuration is shown next to the editor, read only. Your directives are kept across deployments, domain changes and certificate renewals.

Fixes​

  • Fresh installs. Migrating a brand-new install could fail because the cache database did not exist yet when the permission tables were created. Fixed, with a test that runs the real command from an empty directory.

Changed​

  • The app status stopped now means "the container is stopped but the release is still live". The old meaning (taken offline by the user) is now called deactivated.
  • The server overview's static "Resources" card is replaced by the live usage section.
  • Generated nginx sites set the proxy headers once at server level instead of inside location / (same behaviour for the app), and the Let's Encrypt validation location is now ^~ so no other location can take it over.

Before you upgrade​

  • This release was tested as a release candidate (0.2.0-rc.1) on a real server before it was published. It is still pre-1.0, so as with any upgrade, keep a backup of /var/lib/commypanel (the upgrade also backs up the panel databases for you).
  • Upgrade with sudo commypanel upgrade (or run the installer again). It backs up the databases, runs the new migrations, switches over and restarts the services, and starts the previous release again if the new one does not come up healthy.
  • Two new permissions: apps.control (start, stop, restart) and apps.nginx (edit nginx directives). The built-in admin role and the super user get them automatically. Roles you created yourself do not, so grant them on the Roles page where you want them.
  • Existing nginx sites keep their current configuration until their next deployment or domain/certificate change; then they are rewritten in the new layout.
  • Private-repository tokens need Git 2.31 or newer, which every supported system has.
  • A new optional setting, DEPLOY_RELEASE_TIMEOUT (seconds, default 600), limits how long a release command may run.

Security notes​

  • The deploy-on-push endpoint is public, so it does nothing before the signature is verified, answers unknown or unsigned calls without detail, refuses SHA-1 signatures, and is rate-limited per address.
  • The nginx editor never writes your text as typed. nginx runs as root, so the agent parses the text, checks every directive and value against a list of safe ones, and writes the site from the result. root, alias, include, log paths, ssl_* and proxy_pass to anywhere but the app are refused. return, rewrite and if only work inside a location.
  • Access tokens are passed to Git through its environment, never in a URL or on a command line, and Git is told not to follow redirects, so a token is never sent to another host.
  • Release commands run your code in the same restricted container an app runs in, and only from images CommyPanel built.
  • Restarting Docker runs one fixed command (systemctl restart docker.service); nothing the panel sends can change it.

Known limitations​

  • A stopped app shows an error page on its domains until it is started again.
  • Deploy on push needs your Git host to reach the panel; give the panel its own domain so the webhook URL is a stable HTTPS address.
  • Not in this release yet: a container and network overview, a log viewer with search and download, persistent volumes with a file browser, and a browser terminal.

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/emrecanful/commypanel/releases/latest/download/install.sh | sudo bash

# Upgrade
sudo commypanel upgrade