Skip to content

Releases: gavrilencu/PortDock

v1.12.1

Choose a tag to compare

@github-actions github-actions released this 24 Sep 21:09

Fix: read-only SQL console on PostgreSQL 16 and newer

Fixes

  • The read-only SQL console failed with permission denied on PostgreSQL 16+: the read-only role introduced in v1.12.0 did not inherit the pg_read_all_data grant, because inheritance became a property of the grant itself in PostgreSQL 16. The grant is now made with inheritance; existing databases are repaired on the next query.

Install on a server

On a Linux server (Ubuntu or Debian recommended), as root. Ports 80 and 443 must be free for the HTTPS proxy.

Option 1: installer (installs Docker if it is missing and builds this version):

git clone --branch v1.12.1 https://github.com/gavrilencu/PortDock.git portdock
cd portdock
sudo bash install.sh                               # dashboard on http://<server-ip>:8000
sudo bash install.sh https://portdock.example.com  # or with a domain that points to the server

If port 8000 is taken, the installer uses the next free port and prints the address.

Option 2: prebuilt image (Docker already installed):

docker run -d --name portdock --restart unless-stopped \
  -p 8000:8000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /data/portdock:/data/portdock \
  -e PORTDOCK_PUBLIC_URL=http://<server-ip>:8000 \
  ghcr.io/gavrilencu/portdock:v1.12.1

Keep the data directory mounted at the same path as on the host (/data/portdock). To use another port, change it on the left of -p, for example -p 8001:8000.

Then open the dashboard, create the owner account, and start the proxy from Servers → localhost → Run setup.

Update an existing installation

In PortDock, click Update available at the bottom of the sidebar, or go to Settings → Updates. A backup is taken first, and the previous version comes back automatically if the new one doesn't start. Your applications keep running during the update.

Full Changelog: v1.12.0...v1.12.1

v1.12.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 20:59

Security hardening, faster everywhere, new logo

This release follows a full security and performance review of PortDock. Updating is recommended for every installation.

Security

  • Extra docker run options and compose files can no longer hand a container the server. Options are checked against an allow-list and quoted (no privileged mode, host namespaces, capabilities or host ports); bind mounts of server paths and devices are for administrators only, and never the root, /etc or the Docker socket. Compose files that need such settings deploy only when an administrator enables Allow host access on the application.
  • Build paths stay inside the repository: base directory, Dockerfile, compose file and publish directory cannot climb out with ...
  • The webhook secret is shown only to users with write access and stored encrypted; the deploy hook no longer accepts GET.
  • Owners and administrators are never linked by e-mail through SSO or LDAP. They connect a provider themselves from Settings → Profile; members are linked only with a verified e-mail (trust e-mail is now off by default); administrators link local accounts to a directory from Settings → Team.
  • Only the owner can change the owner's password; second-factor codes are throttled per account; X-Forwarded-For is trusted only from proxies (private ranges by default, PORTDOCK_TRUSTED_PROXIES).
  • Content-Security-Policy, Permissions-Policy and HSTS (on HTTPS) on the interface; the sign-in page follows only same-site redirects; custom labels cannot steer the proxy.
  • Members no longer receive the infrastructure settings, the servers' images, volumes, networks or setup logs; the SQL console runs read-only PostgreSQL scripts as a real read-only role.

Performance

  • SQLite reads use a pool of connections next to the single writer, so a long write no longer stalls every request; ten indexes added. A deadlock that froze the whole instance when a member opened the dashboard is fixed.
  • Deployment logs are appended instead of rewritten every two seconds, capped at 8 MB, and never loaded in lists.
  • Servers are reconciled in parallel with backoff from unreachable ones; topology and fleet share one docker call per server every few seconds; the health check uses one probe container instead of one every two seconds.
  • The interface loads pages, the terminal and the assistant on demand (first download ~3× smaller), renders long build logs in a window, polls less and compresses JSON.
  • The SSH connection to a server is no longer dropped when it refuses one more session.

Fixes

  • Applications no longer stay in deploying after a PortDock restart.
  • A cancellation during the rollout can no longer leave two versions live.
  • A TOTP or recovery code cannot be used twice by parallel requests; two concurrent first registrations cannot both become owner.
  • Pages that hit a null list show an error box with a reload button instead of a blank page.

New logo

The PortDock icon and wordmark appear in the sidebar, on the sign-in page, in About, on the status page and as the favicon, with a variant for each theme.

Notes

  • Existing applications with docker options that the allow-list refuses fail at the next deploy with a clear message; an administrator can adjust them.
  • If an owner or administrator signed in through SSO before, they sign in with their password once and connect the provider from their profile.

Install on a server

On a Linux server (Ubuntu or Debian recommended), as root. Ports 80 and 443 must be free for the HTTPS proxy.

Option 1: installer (installs Docker if it is missing and builds this version):

git clone --branch v1.12.0 https://github.com/gavrilencu/PortDock.git portdock
cd portdock
sudo bash install.sh                               # dashboard on http://<server-ip>:8000
sudo bash install.sh https://portdock.example.com  # or with a domain that points to the server

If port 8000 is taken, the installer uses the next free port and prints the address.

Option 2: prebuilt image (Docker already installed):

docker run -d --name portdock --restart unless-stopped \
  -p 8000:8000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /data/portdock:/data/portdock \
  -e PORTDOCK_PUBLIC_URL=http://<server-ip>:8000 \
  ghcr.io/gavrilencu/portdock:v1.12.0

Keep the data directory mounted at the same path as on the host (/data/portdock). To use another port, change it on the left of -p, for example -p 8001:8000.

Then open the dashboard, create the owner account, and start the proxy from Servers → localhost → Run setup.

Update an existing installation

In PortDock, click Update available at the bottom of the sidebar, or go to Settings → Updates. A backup is taken first, and the previous version comes back automatically if the new one doesn't start. Your applications keep running during the update.

Full Changelog: v1.11.0...v1.12.0

v1.11.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 18:27

SAST, DAST and security reports for every deploy

What's new

  • Static analysis of the source (SAST) with Semgrep:
    • Runs right after the checkout, before the build, on every deploy (per application), or on demand from the Security tab.
    • Finds injections, unsafe deserialization, weak cryptography, secrets, insecure Dockerfiles… with the rule, file and line, CWE, description and fix.
    • A deploy can be blocked when a high finding is found.
    • Rule sets are configurable (p/default, p/owasp-top-ten, p/secrets, URLs or files of the repository) in Settings → Network & proxy → Security scanners.
  • Dynamic scan of the running application (DAST) with OWASP ZAP:
    • A baseline scan runs in the background once the new version is live, or on demand; it doesn't attack the application.
    • It reaches the application directly inside the PortDock network; the URL to scan can be changed per application (Docker Compose applications use their first domain).
    • Reports missing security headers, insecure cookies, information leaks… with the number of instances and the solution.
  • Reports for every scan (Trivy, Semgrep and ZAP):
    • A self-contained HTML report, CSV (opens in Excel), JSON and the raw report of the tool (Trivy JSON, SARIF, ZAP JSON and HTML).
    • Viewed in the browser or downloaded one by one or as a ZIP.
    • Each deployment page lists its scans with a Download all (ZIP) button for every report of that build and deploy.
    • The last 30 scans of each kind are kept per application.
  • Security tab with sub-tabs for the image (Trivy), the code (SAST) and the running app (DAST), each with its own settings, filters and history.
  • The images of the scanners can be pulled from your own registry (Trivy, Semgrep and ZAP image settings).

Fixes

  • The "⋯" menus are no longer cut off at the bottom of cards and tables (for example on Uptime with a single monitor); they open upwards when there is no room below.

Notes

  • The first SAST and DAST scans download the Semgrep and ZAP images (a few hundred MB), once per server.
  • Static analysis needs the source, so it is available for applications deployed from Git.

Install on a server

On a Linux server (Ubuntu or Debian recommended), as root. Ports 80 and 443 must be free for the HTTPS proxy.

Option 1: installer (installs Docker if it is missing and builds this version):

git clone --branch v1.11.0 https://github.com/gavrilencu/PortDock.git portdock
cd portdock
sudo bash install.sh                               # dashboard on http://<server-ip>:8000
sudo bash install.sh https://portdock.example.com  # or with a domain that points to the server

If port 8000 is taken, the installer uses the next free port and prints the address.

Option 2: prebuilt image (Docker already installed):

docker run -d --name portdock --restart unless-stopped \
  -p 8000:8000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /data/portdock:/data/portdock \
  -e PORTDOCK_PUBLIC_URL=http://<server-ip>:8000 \
  ghcr.io/gavrilencu/portdock:v1.11.0

Keep the data directory mounted at the same path as on the host (/data/portdock). To use another port, change it on the left of -p, for example -p 8001:8000.

Then open the dashboard, create the owner account, and start the proxy from Servers → localhost → Run setup.

Update an existing installation

In PortDock, click Update available at the bottom of the sidebar, or go to Settings → Updates. A backup is taken first, and the previous version comes back automatically if the new one doesn't start. Your applications keep running during the update.

Full Changelog: v1.10.1...v1.11.0

v1.10.1

Choose a tag to compare

@github-actions github-actions released this 24 Sep 17:57

Fix: the SQL console page crashed when a query failed

Fixes

  • SQL console: when the first statement of a script failed (a table that doesn't exist, a typo, a name that needs quotes), the page stopped with "Cannot read properties of null (reading 'length')". It now shows the database's error message, for example relation "customers" does not exist.
  • If the database client stops without a result or an error, the console now shows what it printed instead of an empty result.

Install on a server

On a Linux server (Ubuntu or Debian recommended), as root. Ports 80 and 443 must be free for the HTTPS proxy.

Option 1: installer (installs Docker if it is missing and builds this version):

git clone --branch v1.10.1 https://github.com/gavrilencu/PortDock.git portdock
cd portdock
sudo bash install.sh                               # dashboard on http://<server-ip>:8000
sudo bash install.sh https://portdock.example.com  # or with a domain that points to the server

If port 8000 is taken, the installer uses the next free port and prints the address.

Option 2: prebuilt image (Docker already installed):

docker run -d --name portdock --restart unless-stopped \
  -p 8000:8000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /data/portdock:/data/portdock \
  -e PORTDOCK_PUBLIC_URL=http://<server-ip>:8000 \
  ghcr.io/gavrilencu/portdock:v1.10.1

Keep the data directory mounted at the same path as on the host (/data/portdock). To use another port, change it on the left of -p, for example -p 8001:8000.

Then open the dashboard, create the owner account, and start the proxy from Servers → localhost → Run setup.

Update an existing installation

In PortDock, click Update available at the bottom of the sidebar, or go to Settings → Updates. A backup is taken first, and the previous version comes back automatically if the new one doesn't start. Your applications keep running during the update.

Full Changelog: v1.10.0...v1.10.1

v1.10.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 17:53

Every server in one view, corporate proxy and Nexus mirrors

What's new

  • Containers of every server in one place (new Containers page):
    • The containers of all connected servers, each with its server and the PortDock resource it belongs to (project / environment / name), CPU and memory.
    • Logs, terminal, restart, start, pause, stop and remove, wherever the container runs.
    • Filters by server, state and PortDock resources; a card per server shows whether it is reachable.
    • Tabs for the images (with how many containers use each, and removal of unused ones) and the volumes of every server.
    • Members only see the containers of the projects they have access to.
  • Servers of each resource shown in the project page.
  • Corporate proxy (Settings → Network & proxy):
    • HTTP / HTTPS proxy with user and password (stored encrypted) and NO_PROXY with names, domains, IP addresses and CIDR ranges.
    • Used by PortDock itself (Git providers, updates, notifications, AI assistant, uptime checks), by builds (git clone, docker build as predefined build arguments so nothing is left in the images, Nixpacks, Docker Compose builds, the Trivy database) and by containers.
    • Each application can follow the setting, always use the proxy or never use it.
    • A connection test runs through the settings before they are saved.
  • Docker Hub mirror for Nexus, Artifactory or Harbor:
    • Merged into /etc/docker/daemon.json on each server, keeping your other settings, with insecure-registries for plain HTTP.
    • Applied by reloading Docker, without stopping any container.
    • The daemon's proxy is written as a systemd drop-in, applied with a confirmed restart of Docker.
  • Package mirrors for builds: npm, PyPI, Go proxy and any other build variable (Maven, NuGet…), used automatically by the Node.js, Bun, Python and Go build packs; a mirror of the Trivy database for servers without internet.

Notes

  • In your own Dockerfiles, declare the package mirror variables you need (ARG NPM_CONFIG_REGISTRY) before the step that installs packages; the proxy works without any change.
  • Writing the Docker daemon configuration needs root or passwordless sudo on the server.

Install on a server

On a Linux server (Ubuntu or Debian recommended), as root. Ports 80 and 443 must be free for the HTTPS proxy.

Option 1: installer (installs Docker if it is missing and builds this version):

git clone --branch v1.10.0 https://github.com/gavrilencu/PortDock.git portdock
cd portdock
sudo bash install.sh                               # dashboard on http://<server-ip>:8000
sudo bash install.sh https://portdock.example.com  # or with a domain that points to the server

If port 8000 is taken, the installer uses the next free port and prints the address.

Option 2: prebuilt image (Docker already installed):

docker run -d --name portdock --restart unless-stopped \
  -p 8000:8000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /data/portdock:/data/portdock \
  -e PORTDOCK_PUBLIC_URL=http://<server-ip>:8000 \
  ghcr.io/gavrilencu/portdock:v1.10.0

Keep the data directory mounted at the same path as on the host (/data/portdock). To use another port, change it on the left of -p, for example -p 8001:8000.

Then open the dashboard, create the owner account, and start the proxy from Servers → localhost → Run setup.

Update an existing installation

In PortDock, click Update available at the bottom of the sidebar, or go to Settings → Updates. A backup is taken first, and the previous version comes back automatically if the new one doesn't start. Your applications keep running during the update.

Full Changelog: v1.9.0...v1.10.0

v1.9.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 17:19

SQL console, uptime monitoring and status page, Trivy scans, Microsoft Teams, Azure DevOps previews

What's new

  • SQL console in every PostgreSQL, MySQL, MariaDB, SQL Server and ClickHouse database: browse the tables, run a script (or the selected part), see each statement's result, NULLs and affected rows, and export to CSV.
    • Members without an admin role have read-only access, enforced twice: only reading statements are accepted, and they run in a session that cannot write (a read-only transaction under a reading role, a SELECT-only user, an impersonated db_datareader, or readonly=1).
    • Organization admins can allow writes. Every query is recorded in the audit log; client commands (\!, system, :!!…) are refused.
  • Uptime monitoring (new Uptime page): checks of your URLs every 30 seconds to 1 hour — accepted status codes, an optional keyword, response time and TLS certificate expiry — with 24-hour and 30-day uptime, 90-day history and incidents.
    • Alerts through the notification channels: monitor.down, monitor.up, monitor.ssl_expiring.
  • Public status page at /status: the state and 90-day uptime of the public monitors and the incidents of the last 14 days, without URLs or error details.
  • Vulnerability scanning with Trivy (application → Security): scan the running images now or on every deploy, with findings by severity, fixed versions, filters and history.
    • Deployments can be blocked on critical or on critical and high vulnerabilities; the running version stays live.
    • Docker Compose images are scanned once running.
  • Microsoft Teams notifications, as Adaptive Cards (Teams Workflows or incoming webhooks).
  • Azure DevOps: pull requests targeting the branch get preview deployments (redeployed on new commits, removed when completed or abandoned), and every deployment is reported as portdock/deploy on the commit and portdock/preview on the pull request.

Notes

  • For Azure DevOps statuses, add the Code: Status scope to the personal access token, then Recreate service hooks in each application's CI/CD tab to subscribe to pull requests.
  • Uptime checks run from the PortDock server. The first Trivy scan on a server downloads the vulnerability database (about a minute).

Install on a server

On a Linux server (Ubuntu or Debian recommended), as root. Ports 80 and 443 must be free for the HTTPS proxy.

Option 1: installer (installs Docker if it is missing and builds this version):

git clone --branch v1.9.0 https://github.com/gavrilencu/PortDock.git portdock
cd portdock
sudo bash install.sh                               # dashboard on http://<server-ip>:8000
sudo bash install.sh https://portdock.example.com  # or with a domain that points to the server

If port 8000 is taken, the installer uses the next free port and prints the address.

Option 2: prebuilt image (Docker already installed):

docker run -d --name portdock --restart unless-stopped \
  -p 8000:8000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /data/portdock:/data/portdock \
  -e PORTDOCK_PUBLIC_URL=http://<server-ip>:8000 \
  ghcr.io/gavrilencu/portdock:v1.9.0

Keep the data directory mounted at the same path as on the host (/data/portdock). To use another port, change it on the left of -p, for example -p 8001:8000.

Then open the dashboard, create the owner account, and start the proxy from Servers → localhost → Run setup.

Update an existing installation

In PortDock, click Update available at the bottom of the sidebar, or go to Settings → Updates. A backup is taken first, and the previous version comes back automatically if the new one doesn't start. Your applications keep running during the update.

Full Changelog: v1.8.0...v1.9.0

v1.8.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 16:36

Azure DevOps: deploy repositories and deploy on every push

What's new

  • Connect Azure DevOps from Settings → Git sources: an organization (contoso, https://dev.azure.com/contoso, *.visualstudio.com or an Azure DevOps Server 2020+ collection) and a personal access token with the scopes Code: Read and Service Hooks: Read, query & manage. The token is checked when you connect, stored encrypted, and can be replaced when it expires without touching the applications.
  • New resource → Git repository → Azure DevOps: search the repositories of every project, pick the branch, and the build pack is detected from the repository (Dockerfile, Compose with a domain per service, Node, Vite, Python, Go…), just like for GitHub.
  • Deploy on push: PortDock adds a service hook (Code pushed) to the application's repository, authenticated by a secret header. Pushes to the branch deploy; watch paths are checked against the files of the pushed commits; deleted branches and other branches are ignored.
  • CI/CD & Webhooks shows whether the service hook is active, recreates it with one click, and gives the URL and header to add it by hand when the token isn't allowed to.
  • The hook follows the application: replaced when the webhook secret is regenerated or the repository changes, removed when the application is deleted. A connection still used by applications can't be removed.

Notes

  • Azure DevOps must reach PortDock: set PORTDOCK_PUBLIC_URL to a public HTTPS address for deploys on push.
  • Pull request previews stay available for GitHub, GitLab and Gitea.

Install on a server

On a Linux server (Ubuntu or Debian recommended), as root. Ports 80 and 443 must be free for the HTTPS proxy.

Option 1: installer (installs Docker if it is missing and builds this version):

git clone --branch v1.8.0 https://github.com/gavrilencu/PortDock.git portdock
cd portdock
sudo bash install.sh                               # dashboard on http://<server-ip>:8000
sudo bash install.sh https://portdock.example.com  # or with a domain that points to the server

If port 8000 is taken, the installer uses the next free port and prints the address.

Option 2: prebuilt image (Docker already installed):

docker run -d --name portdock --restart unless-stopped \
  -p 8000:8000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /data/portdock:/data/portdock \
  -e PORTDOCK_PUBLIC_URL=http://<server-ip>:8000 \
  ghcr.io/gavrilencu/portdock:v1.8.0

Keep the data directory mounted at the same path as on the host (/data/portdock). To use another port, change it on the left of -p, for example -p 8001:8000.

Then open the dashboard, create the owner account, and start the proxy from Servers → localhost → Run setup.

Update an existing installation

In PortDock, click Update available at the bottom of the sidebar, or go to Settings → Updates. A backup is taken first, and the previous version comes back automatically if the new one doesn't start. Your applications keep running during the update.

Full Changelog: v1.7.0...v1.8.0

v1.7.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 16:31

Database backups for every engine, including Microsoft SQL Server

What's new

  • Microsoft SQL Server as a managed database (SQL Server 2022, free Express edition), with the database created automatically.
  • Backups for every engine, done the way each engine's documentation recommends, while the database keeps serving:
    • PostgreSQL: pg_dump custom format, restored with pg_restore --clean in a single transaction (all or nothing);
    • MySQL and MariaDB: --single-transaction dumps with routines, events and triggers;
    • SQL Server: copy-only full backups with checksums, verified with RESTORE VERIFYONLY;
    • MongoDB: mongodump archives;
    • ClickHouse: now supported — table schemas and data in Native format;
    • Redis and Valkey: BGSAVE instead of SAVE, so clients are no longer blocked during a backup.
  • A job queue: backups and restores of a database run one at a time; new requests wait as Pending, and at most two jobs run per server.
  • Back up now on every database, and Back up all now in Settings → Backup storage.
  • Safer restores: a safety backup of the current data is taken first (kept as Before restore); if it fails, nothing is restored. Restores run in the background with their progress shown.
  • The Backups tab lists every backup with its status, type, size and path on the server, to download or delete.

Fixes

  • Retention of a schedule no longer deletes the files of other schedules or of manual backups.
  • A half-written backup file is never shown as complete, and jobs interrupted by a restart are marked as failed.
  • MongoDB only counts as healthy once its root user exists.

Install on a server

On a Linux server (Ubuntu or Debian recommended), as root. Ports 80 and 443 must be free for the HTTPS proxy.

Option 1: installer (installs Docker if it is missing and builds this version):

git clone --branch v1.7.0 https://github.com/gavrilencu/PortDock.git portdock
cd portdock
sudo bash install.sh                               # dashboard on http://<server-ip>:8000
sudo bash install.sh https://portdock.example.com  # or with a domain that points to the server

If port 8000 is taken, the installer uses the next free port and prints the address.

Option 2: prebuilt image (Docker already installed):

docker run -d --name portdock --restart unless-stopped \
  -p 8000:8000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /data/portdock:/data/portdock \
  -e PORTDOCK_PUBLIC_URL=http://<server-ip>:8000 \
  ghcr.io/gavrilencu/portdock:v1.7.0

Keep the data directory mounted at the same path as on the host (/data/portdock). To use another port, change it on the left of -p, for example -p 8001:8000.

Then open the dashboard, create the owner account, and start the proxy from Servers → localhost → Run setup.

Update an existing installation

In PortDock, click Update available at the bottom of the sidebar, or go to Settings → Updates. A backup is taken first, and the previous version comes back automatically if the new one doesn't start. Your applications keep running during the update.

Full Changelog: v1.6.0...v1.7.0

v1.6.0

Choose a tag to compare

@github-actions github-actions released this 23 Sep 21:28

Open source under Apache-2.0

PortDock is now officially open source under the Apache License 2.0: free to use, change and distribute, including commercially, as long as the license and the NOTICE file are kept.

What's new

  • License: LICENSE (Apache-2.0) and NOTICE files; the Docker image carries the org.opencontainers.image.licenses label, and Settings → About shows the license.
  • New README in English with a quick start (installer or prebuilt image), the full feature list, screenshots, a comparison with hosted platforms, configuration, guides (domains and certificates, Docker Compose, versions, GitHub, CI/CD, SSO and LDAP, AI assistant, updates) and the architecture. The Romanian documentation moved to docs/README.ro.md and was brought up to date.
  • CONTRIBUTING.md explains how to report issues and send pull requests; SECURITY.md explains how to report a vulnerability privately.

Install on a server

On a Linux server (Ubuntu or Debian recommended), as root. Ports 80 and 443 must be free for the HTTPS proxy.

Option 1: installer (installs Docker if it is missing and builds this version):

git clone --branch v1.6.0 https://github.com/gavrilencu/PortDock.git portdock
cd portdock
sudo bash install.sh                               # dashboard on http://<server-ip>:8000
sudo bash install.sh https://portdock.example.com  # or with a domain that points to the server

If port 8000 is taken, the installer uses the next free port and prints the address.

Option 2: prebuilt image (Docker already installed):

docker run -d --name portdock --restart unless-stopped \
  -p 8000:8000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /data/portdock:/data/portdock \
  -e PORTDOCK_PUBLIC_URL=http://<server-ip>:8000 \
  ghcr.io/gavrilencu/portdock:v1.6.0

Keep the data directory mounted at the same path as on the host (/data/portdock). To use another port, change it on the left of -p, for example -p 8001:8000.

Then open the dashboard, create the owner account, and start the proxy from Servers → localhost → Run setup.

Update an existing installation

In PortDock, click Update available at the bottom of the sidebar, or go to Settings → Updates. A backup is taken first, and the previous version comes back automatically if the new one doesn't start. Your applications keep running during the update.

Full Changelog: v1.5.2...v1.6.0

v1.5.2

Choose a tag to compare

@github-actions github-actions released this 23 Sep 21:16

About page and credits

Changes

  • Settings → About, available to every user: the installed version and whether an update is available, links to GitHub, releases and issue reporting, and a short overview of everything PortDock can do. Available in English, Romanian and Russian.
  • Credits at the bottom of every page and on the sign-in page: "© 2026 PortDock · Developed by Gavrilencu Grigore". The year updates by itself.

Install on a server

On a Linux server (Ubuntu or Debian recommended), as root. Ports 80 and 443 must be free for the HTTPS proxy.

Option 1: installer (installs Docker if it is missing and builds this version):

git clone --branch v1.5.2 https://github.com/gavrilencu/PortDock.git portdock
cd portdock
sudo bash install.sh                               # dashboard on http://<server-ip>:8000
sudo bash install.sh https://portdock.example.com  # or with a domain that points to the server

If port 8000 is taken, the installer uses the next free port and prints the address.

Option 2: prebuilt image (Docker already installed):

docker run -d --name portdock --restart unless-stopped \
  -p 8000:8000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /data/portdock:/data/portdock \
  -e PORTDOCK_PUBLIC_URL=http://<server-ip>:8000 \
  ghcr.io/gavrilencu/portdock:v1.5.2

Keep the data directory mounted at the same path as on the host (/data/portdock). To use another port, change it on the left of -p, for example -p 8001:8000.

Then open the dashboard, create the owner account, and start the proxy from Servers → localhost → Run setup.

Update an existing installation

In PortDock, click Update available at the bottom of the sidebar, or go to Settings → Updates. A backup is taken first, and the previous version comes back automatically if the new one doesn't start. Your applications keep running during the update.

Full Changelog: v1.5.1...v1.5.2