Guide · Service onboarding · harborvps.com
What your app needs. Git, Docker, network, database, and proxy are Harbor’s responsibility — not hand-setup prerequisites. Domain and DNS are optional.
Not service prerequisites — Harbor checks and sets these up:
| Concern | Harbor’s role |
|---|---|
| Git + Docker | Detect if missing; install / guide install |
Network (apps-net) | Create if absent |
Database (apps-db) | Provision / repair |
| Proxy (Traefik) | Config under platform + run container |
| Platform tree | /usr/apps/platform/…, secrets, platform.yaml |
Use Infra (prereqs → provision / repair). You should not need to create apps-net or Traefik by hand.
| Requirement | Why |
|---|---|
| Git repo Harbor can clone | platform/services/<slug>/repo |
| Dockerfile in the repo | Harbor never generates one |
| Kebab-case slug | Container / image / manifest names |
Listen on PORT | Harbor assigns 8000–8999 and injects PORT |
PORT and bind HTTP to
0.0.0.0:$PORT — not localhost-only, not a hard-coded port that ignores env.
| Item | Required? |
|---|---|
| Public domain | No. Leave empty for private / internal use. Container still runs on apps-net and is reachable as <slug> from other services. |
| DNS records | No for onboarding. Only needed later for Let’s Encrypt / public HTTPS. Onboard first, fix DNS after if you want. |
When a domain is set, Harbor adds a Traefik Host() route with TLS.
.env.example for PORT / DB mappingDATABASE_URL or DB_* / PG* (host apps-db)/mnt/… or similardocker build; mounts writable as uid 1000| Keys | Filled with |
|---|---|
PORT, API_PORT | Assigned port |
DATABASE_URL / DB_URL / … | postgres://…@apps-db:5432/… |
DB_HOST / PGHOST / … | apps-db |
DB_* user / password / name | Generated |
NODE_ENV | production |
PORT and binds 0.0.0.0.env.example lists real keysapps-db when using platform DB