Deploying dpndncY
dpndncY ships as one container image. This page explains what you are deploying and how to choose a method. The step-by-step guides are:
| You have | Guide |
|---|---|
| One Linux machine (VM, bare metal, cloud instance) | Deploying on one Linux machine |
| Docker on any host | Deploying with Docker |
| A Kubernetes cluster | Deploying on Kubernetes |
| No internet access at all | Running dpndncY without internet access (air-gapped), together with one of the guides above |
Before you begin: Getting the software (registry, file, or your own registry), Ports and networking (what to open, for the network team), and for the person delivering it, Handing dpndncY to a customer. When something goes wrong: Troubleshooting.
#What you are deploying
console host API host
dpndncy.example.com api.dpndncy.example.com
| |
browsers ------------+ CLI, CI pipelines, runtime agents
| |
+--------v----------------------------------v--------+
| container ghcr.io/dpndncy-sca/platform |
| :3000 console (web UI) |
| :3001 API (also /health and /releases) |
| scan engines: SCA, SAST, secrets, AI risk, ... |
+----------------------------+------------------------+
|
volume mounted at /app/data
(SQLite database, signing secrets, caches)Four facts decide everything else:
- Two ports, normally two hostnames. Port 3000 is the web console. Port 3001 is the API that the CLI, CI pipelines and runtime agents call. The console only serves the browser; it does not forward API calls for other clients. A deployment that exposes only the console works for people but not for pipelines. Publish both.
- One replica. The database is a single SQLite file in
/app/data. Run exactly one container per installation. Scaling up means a bigger machine, not more replicas. - One volume holds all state. Everything worth keeping is in
/app/data. Mount it on persistent storage and back it up (see Running dpndncY). - Two addresses must be set. The backend refuses to start in production without
CORS_ORIGIN, and it needsAPP_SECRET. The Compose file and the Helm chart derive the address variables from one setting (DOMAINorconfig.publicUrl), so you rarely set them by hand.
#Requirements
| Minimum | Comfortable for a team | |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| Memory | 4 GB | 8 GB |
| Disk | 20 GB | 50 GB and growing with scan history |
| Network (online) | outbound HTTPS to api.osv.dev, nvd.nist.gov, api.github.com, package registries |
same |
| Network (air-gapped) | none | see Running dpndncY without internet access (air-gapped) |
Scans are CPU and memory heavy, and a large repository can take minutes. The container is limited to 2 CPUs and 4 GB in the Compose file; raise that for heavy use. The System health page shows event-loop lag, which is the first sign a machine is too small.
#Images
ghcr.io/dpndncy-sca/platform is published on every release:
| Tag | Means |
|---|---|
stable |
the latest release |
2.9.0 |
exactly that release. Use this to control upgrades |
latest |
the main branch. Not for production |
#Setting up a new workplace
For a company that gets its own installation, the sequence is the same on every platform:
- Deploy with one of the guides above, with
ENABLE_BOOTSTRAP_SUPERADMIN=trueand aSUPERADMIN_EMAILandSUPERADMIN_PASSWORDof your choosing. This creates the first operator account. - Sign in at the console address and change nothing else yet. Then set
ENABLE_BOOTSTRAP_SUPERADMIN=falseand restart. While it is true, every restart resets the operator password to the configured one. - Create the workplace's tenant (Settings, Customers, or
POST /api/admin/tenants) with the company's first owner. See Tenants, users and access. A tenant is the unit that owns projects, scans, users and a scan policy. - The owner signs in, enables two-step verification, optionally turns on enforcement for everyone (Settings, Sign-in security), and invites colleagues.
- Pick the scan policy (Settings, Scan policy). See Scan policies.
- Connect pipelines. The owner creates an API token (Settings, API Tokens) and gives it to CI as a secret. See Scanning from CI/CD pipelines and The dpndncy command line.
- Activate the licence (Settings, License). A new installation runs a 30-day trial; after that it becomes read-only (existing data stays readable, new scans are blocked) until a licence is applied. A licence can be activated online, from an activation code, or imported from a file for air-gapped sites.
A company that shares an installation with others (a service provider hosting several customers) uses the same installation and creates one tenant per customer in step 3. Customers never see each other's data.
#Checking a deployment
| Check | Expected |
|---|---|
curl https://api.dpndncy.example.com/health |
{"status":"ok","version":"2.9.0",...} |
curl -I https://dpndncy.example.com/login |
200 |
curl https://api.dpndncy.example.com/releases |
lists dpndncy-linux, dpndncy-macos, dpndncy-win.exe |
| Sign in, then Settings, System health | all green |
dpndncy status --server https://api.dpndncy.example.com --token <token> |
Server reachable |
#Not covered here
The Windows installer (dpndncY-Setup-<version>-x64.exe, built from installer/) installs the platform on a Windows machine under PM2. It is intended for evaluation and small sites; use the container for anything that has to run unattended. The Packer files in deploy/packer build a virtual machine image that runs the installer on first boot.