TL;DR: This upgrades Harbor 2.13.1 → 2.14.0 for the exact setup from my previous guide — Install Harbor 2.13.1 on Ubuntu 24.04 with HAProxy, Let’s Encrypt (DNS-01), and Systemd.
Scope & Assumptions
- TLS termination: at HAProxy:443 (Let’s Encrypt DNS-01 via Cloudflare).
- Harbor binding: HTTP only, bound to 127.0.0.1:80 and exposed externally only through HAProxy.
- Config: external_url: https://harbor.maksonlee.com,http.port: 80, nohttps:block inharbor.yml.
- Service management: Docker Compose v2 and a harbor.servicesystemd unit.
- Paths: Harbor program/config in /opt/harbor, data in /data (default layout from the previous post).
If your deployment differs (Kubernetes/Helm, external Postgres/Redis, or air-gapped), adapt accordingly.
- Pre-flight (stop Harbor)
cd /opt/harbor
sudo docker compose down
- Backups (minimal but enough to roll back)
cd ~
mkdir -p ~/backup
sudo mv /opt/harbor ~/backup/harbor
sudo cp -r /data/database ~/backup/
- Download Harbor 2.14.0 and restore your harbor.yml
curl -LO https://github.com/goharbor/harbor/releases/download/v2.14.0/harbor-online-installer-v2.14.0.tgz
sudo mkdir -p /opt/harbor
sudo tar -xzf harbor-online-installer-v2.14.0.tgz -C /opt/harbor --strip-components=1
# Reuse the previous config
sudo cp ~/backup/harbor/harbor.yml /opt/harbor/
- Migrate harbor.yml(prepare migrator)
sudo docker pull goharbor/prepare:v2.14.0
sudo docker run -it --rm -v /:/hostfs \
  goharbor/prepare:v2.14.0 migrate \
  -i /hostfs/opt/harbor/harbor.yml
- Install 2.14.0
Use the same flags you used originally if applicable.
cd /opt/harbor
sudo ./install.sh
In my environment, this was enough. the loopback binding and HAProxy flow continued to work as-is.
