Skip to main content

Run Visor in Docker

Operator package TBA

This is a deployment template. The team still needs to confirm the release, image, Core endpoints, and environment-specific configuration before it can be used.

Prerequisites

  • Docker Engine on Linux, with Compose support.
  • An approved Visor source release and its Dockerfile.
  • A dedicated Visor PostgreSQL database.
  • Approved Core RPC and gRPC endpoints.
  • A TSS binary compatible with the container runtime, its configuration, TLS certificates, and the required Vault access.

On-host layout that will be mounted

./deploy/
config.yaml
binary/
tss
configs/
tss.yaml
certs/

In deploy/config.yaml, use paths as seen inside the container:

tss:
binary_path: "/binary/tss"
binary_params: "service run sign --config /binary/configs/tss.yaml"
api_params: ""
config_path: "/binary/configs/tss.yaml"
certificates_path: "/binary/configs/certs"
core_address: "REPLACE_WITH_ZEL_NODE_ADDRESS"

Keep the --config argument and config_path identical: Visor does not append the configuration path during default launch. The /binary directory must be writable for the approved update, certificate, and configuration tasks.

Use the configuration template for the remaining fields. Keep configuration files protected; do not bake credentials into the image.

1. Build the image

From the approved Visor source checkout:

docker build -f build/Dockerfile -t tss-wrapper-svc .

The image uses tss-wrapper-svc as its entrypoint, so the commands below pass only its arguments.

2. Prepare the database

Use the database template with the Visor values: a separate visor-db Compose project, database and role, and loopback port 5435.

Set db.url in deploy/config.yaml to the dedicated Visor DSN. Do not reuse the TSS database or its credentials.

These commands use Linux host networking, so Visor connects to the database through 127.0.0.1:5435. Set Visor's HTTP and gRPC listeners to 127.0.0.1:8080 and 127.0.0.1:9090. Host networking uses those listener bindings directly; Docker port-publishing flags do not restrict access.

3. Apply migrations

Apply the approved release's upward migrations before starting Visor. Back up an existing database before upgrading. Rollback migrations are not part of setup.

docker run --rm \
--network host \
-v "$(pwd)/deploy/config.yaml:/config.yaml:ro" \
tss-wrapper-svc service migrate up -c /config.yaml

4. Run Visor

docker run -d --name tss-wrapper \
--network host \
-v "$(pwd)/deploy/config.yaml:/config.yaml:ro" \
-v "$(pwd)/deploy/binary:/binary" \
tss-wrapper-svc service run -c /config.yaml

A release-specific Compose package remains TBA. For a deployment using a private Docker network, configure the database service address and listener access for that network instead of copying the host-network settings.

5. Verify

Check logs and the local listeners:

docker logs --tail 100 tss-wrapper
curl http://127.0.0.1:8080/
grpcurl -plaintext 127.0.0.1:9090 list

Listener responses alone do not confirm signing readiness. Check that the expected TSS process started and the Core observer connected before accepting traffic.