Skip to main content

Docker

SwissKnife publishes three images for linux/amd64 and linux/arm64 on Docker Hub:

ImageContentsPort
bitcoinnumeraire/swissknife:0.3.0Backend and static dashboard3000
bitcoinnumeraire/swissknife-server:0.3.0Backend only3000
bitcoinnumeraire/swissknife-dashboard:0.3.0Standalone Next.js dashboard8080

Pin a release tag or digest for deployment. Tags such as 0.3, 0, and latest can move when releases are published.

Configure before starting​

The backend requires a database, a reachable LND or CLN provider with its TLS credentials, and authentication configuration. It does not bundle a Lightning node. Use the configuration guide to prepare a swissknife.env file and mount provider credentials at their configured paths.

For example, with the default SQLite path and credentials under /certs:

mkdir -p storage certs
docker run --env-file ./swissknife.env \
--mount type=bind,src="$PWD/storage",dst=/storage \
--mount type=bind,src="$PWD/certs",dst=/certs,readonly \
-p 3000:3000 bitcoinnumeraire/swissknife:0.3.0

Populate the credential directory and configure provider endpoints before running this command. Set a strong SWISSKNIFE_JWT__SECRET for the local JWT owner login, or configure OAuth2. For PostgreSQL, set SWISSKNIFE_DATABASE__URL and use the database's own persistent storage.

Configure the dashboard at build time​

The published dashboard uses the checked-in Numeraire Auth0 production profile. For your own API or identity provider, edit dashboard/.env.production before building from source. Use NEXT_PUBLIC_AUTH_METHOD=jwt for the local owner login, or auth0 with your public Auth0 settings.

Set NEXT_PUBLIC_SERVER_URL to the public API origin, or leave it empty for a same-origin bundle. These values are compiled into browser JavaScript; changing environment variables only on a running container does not reconfigure the dashboard. They must not contain private secrets.

Separate backend and dashboard​

The backend-only image sets SWISSKNIFE_DASHBOARD_DIR="". The standalone dashboard serves on port 8080 and needs a build configured for the backend's public URL. Kubernetes uses these two images.