Deploy

Last updated on May 21, 2026

Once .env is ready, re-run the deploy script. The license key is saved in .env, so you do not need to pass it again:

curl -fsSL https://tofupilot.sh/deploy | bash

The script validates your configuration, pulls the Docker image, and starts four containers.

ContainerRole
tofupilot-dashboardTofuPilot application
tofupilot-pgPostgreSQL
tofupilot-seaweedSeaweedFS file storage
tofupilot-proxyTraefik reverse proxy with automatic HTTPS

After each deploy or update, the script reports the running version and domain to Orbit so you can monitor instances. No other data leaves your server.

First login

Open your domain (e.g. https://tofupilot.yourcompany.com) and create your first account. That account becomes the organization admin, and each self-hosted instance supports one organization.

Upload runs

To upload test Runs, point your scripts to your instance URL. The SDK reads your API key from the TOFUPILOT_API_KEY environment variable, or you can pass it directly.

import openhtf as htffrom tofupilot.openhtf import TofuPilotdef main():  test = htf.Test(      procedure_id="FVT1",      part_number="PCB1",  )  with TofuPilot(test, url="https://tofupilot.yourcompany.com"):      test.execute(lambda: "PCB1A001")if __name__ == '__main__':  main()
from tofupilot import TofuPilotClientfrom datetime import timedeltadef main():  client = TofuPilotClient(url="https://tofupilot.yourcompany.com")  client.create_run(      procedure_id="FVT1",      run_passed=True,      unit_under_test={          "serial_number": "PCB1A001",          "part_number": "PCB1"      },      duration=timedelta(minutes=1, seconds=45),  )if __name__ == '__main__':  main()
from datetime import datetime, timezone, timedeltafrom tofupilot.v2 import TofuPilotdef main():  client = TofuPilot(      api_key="your_api_key",      server_url="https://tofupilot.yourcompany.com/api"  )  started_at = datetime.now(timezone.utc)  ended_at = started_at + timedelta(seconds=30)  run = client.runs.create(      procedure_id="FVT1",      serial_number="PCB1A001",      part_number="PCB1",      outcome="PASS",      started_at=started_at,      ended_at=ended_at,  )  print(f"Run created: {run.id}")if __name__ == '__main__':  main()

Custom CA certificates

When your instance uses a self-signed or internal CA cert, tell the Python client to trust it.

First, export the certificate from your server:

echo | openssl s_client -connect tofupilot.yourcompany.com:443 -showcerts 2>/dev/null | openssl x509 -outform PEM > ca-certificate.pem

Then pass it to the client.

from tofupilot import TofuPilotClientclient = TofuPilotClient(  url="https://tofupilot.yourcompany.com",  verify="/path/to/ca-certificate.pem")# For OpenHTFfrom tofupilot.openhtf import uploadtest.add_output_callbacks(  upload(      url="https://tofupilot.yourcompany.com",      verify="/path/to/ca-certificate.pem"  ))
from tofupilot.v2 import TofuPilotimport httpxhttp_client = httpx.Client(  verify="/path/to/ca-certificate.pem")client = TofuPilot(  api_key="your_api_key",  server_url="https://tofupilot.yourcompany.com/api",  client=http_client)

How is this guide?

On this page