docker-compose.yml, run it inside a dedicated, attested CVM per deployment, expose the same networking interfaces node operators already expect, and generate TDX quotes directly from inside the node container for downstream verification.
This guide covers three outcomes:
- Provisioning a TEE-ready host. Renting an Intel TDX-capable machine from a cloud provider and preparing it for confidential workloads.
- Running Palliora under Dstack. Installing Dstack’s components on the host, adapting Palliora’s
docker-compose.yml, and deploying through Dstack’s UI. - Proving and observing execution. Pulling TDX attestation reports and node logs from inside the TEE, so you and anyone verifying your node can build on top of that trust.
What Dstack is
Dstack is an SDK and orchestration layer that runs your existing Docker apps inside Confidential VMs (CVMs) backed by hardware TEEs, Intel TDX and others. Core components:- dstack-vmm: runs on the bare-metal TDX host. Creates, boots, and stops CVMs, with orchestration and monitoring built in.
- dstack-gateway: a reverse proxy on the host. Terminates TLS and routes
https://<id>-<port>.<base_domain>to services inside CVMs. - dstack-kms: a key management service. Generates and seals keys, only unsealing them inside attested CVMs, kept secluded from the host. Serves key derivation requests from
dstack-guest-agentinside running CVMs over RPC. - dstack-guest-agent: runs inside each CVM. Handles key derivation and remote attestation, and exposes
/var/run/dstack.sockso containers can request TDX quotes. - meta-dstack (a Yocto layer): builds the minimal, hardened Linux image that runs inside CVMs and hosts Docker plus the guest agent, with dedicated, host-secluded memory and resources for confidentiality.
docker-compose.yml, no app code changes), per-app CVM isolation with encrypted memory, remote attestation (containers request TDX quotes via dstack.sock and prove they ran in the expected environment), and network ingress out of the box through the gateway, no manual nginx.
See Dstack: Getting Started for the full architecture and concepts.
1. Rent an Intel TDX machine
You need a VM that supports Intel TDX Confidential VMs (a C3-class machine or similar) from your cloud provider. Typical requirements:- Machine family: Intel Sapphire Rapids with TDX enabled (for example,
c3-standard-*on some providers) - vCPU/RAM: at least 8 vCPU, 32 to 64 GB RAM
- Disk: 200+ GB SSD (balanced PD or NVMe)
- OS: a recent Linux with a TDX-capable kernel (Ubuntu 24.04 LTS with the
TDX_CAPABLEflag, for example) - Security: enable Confidential VM service, Intel TDX, under your provider’s security menu
- Enable Confidential VM / Intel TDX in the provider’s UI.
- Use a TDX-capable OS image.
- Allow these ports in your firewall/security groups: SSH (22, admin access), Dstack-vmm UI (9080), Dstack-gateway HTTP/HTTPS (80, 443, and optionally 9070 for the gateway dashboard).
2. Install and run Dstack
On your TDX host, follow the upstream Dstack getting-started guide. Summarized:dstack-vmm UI is then at http://<host-ip>:9080, and the dstack-gateway dashboard (if configured) at https://<host-domain-or-ip>:9070.
3. Prepare Palliora’s docker-compose for Dstack
Palliora’s standard compose file uses a host-mounted genesis config and private ECR images. For TDX and Dstack, adapt both to make the setup TEE-friendly. Genesis config from a remote source. Instead of mounting a local path:/var/run/dstack.sock, so the node container can request TDX quotes:
docker-compose.yml with these changes applied. Ask in the Palliora community channels for the current version.]
4. Deploy through the Dstack UI
- Open
http://<your-tdx-host-ip>:9080, the Dstack-vmm web interface. - Click “Deploy App” (or the equivalent button).
- Paste or upload the Palliora
docker-compose.ymlfrom step 3. If you’re using private ECR images and need secrets, configure Encrypted Environment Variables, they’re encrypted client-side and only decrypted inside the CVM. - Click Deploy.
5. Get attestations and logs from the TEE
Once your node is running inside the TDX CVM, generate attestation reports and fetch logs programmatically, or use the Trust Centre to verify attestations automatically. Trust Centre. An open-source platform for managing and verifying TEE attestations in the Dstack ecosystem, covering end-to-end verification of hardware attestation, OS integrity, source code authenticity, and domain ownership for TEE-protected applications. Repository. The Trust Centre client automatically verifies: hardware authenticity (cryptographic proof your app runs on genuine Intel TDX and Nvidia CC hardware), code integrity (the exact Docker Compose configuration deployed matches your source), OS security (the operating system hasn’t been tampered with), and, for gateway deployments, that domain certificates are managed entirely within the TEE. See the Trust Centre technical documentation for automated verification details. Requesting a TDX quote directly, with/var/run/dstack.sock mounted, from inside the Palliora container:
reportData is a 64-byte, app-defined hex field hashed into the TDX report, Palliora can use it to bind the quote to a particular genesis hash or config version. The response includes the TDX quote (base64), the embedded report_data, and measurement fields and signatures.
Recap
You rented a TDX-capable machine, installed and ran Dstack (vmm, gateway, kms), adapted Palliora’sdocker-compose.yml for Dstack (remote genesis, public images, the dstack.sock mount), deployed through the Dstack UI, and verified attestation through the Trust Centre or by pulling TDX quotes directly from inside the TEE.