Skip to main content
This page is a deployment-method-agnostic checklist for self-hosting OpenTaco. Use it for Docker Compose, Railway, Kubernetes, or other deployment targets.
Current third-party dependencies:
  • WorkOS is required for authentication.
  • E2B is required if you want to use Remote Runs.
Future work may enable self-hosting without these requirements.

Required external credentials

These values come from external providers and cannot be invented locally.

Public URL and DNS

Before configuring these variables, create a public endpoint for your deployment by setting a DNS record (for example, opentaco.your-domain.com) .resolving to wherever you are hosing your application. Alternatively, you can use something like ngrok if running locally.
Variable(s)Used bySource systemWhen requiredNotes
PUBLIC_BASE_URL, PUBLIC_URL, OPENTACO_PUBLIC_BASE_URLorchestrator, drift, ui, statesmanYour public DNS/URL endpointBefore first loginPoint these to your app’s valid public URL (DNS or ngrok) and keep them aligned unless you intentionally split domains.

WorkOS

For authentication-specific setup details, see WorkOS Setup.
Variable(s)Used bySource systemWhen requiredNotes
WORKOS_CLIENT_ID, WORKOS_API_KEY, WORKOS_COOKIE_PASSWORD, WORKOS_WEBHOOK_SECRET, WORKOS_REDIRECT_URIuiWorkOSBefore first loginRequired to authenticate into the app UI. WORKOS_REDIRECT_URI must match your public app URL callback route. See WorkOS Setup.

GitHub

Variable(s)Used bySource systemWhen requiredNotes
GITHUB_APP_ID, GITHUB_APP_CLIENT_ID, GITHUB_APP_CLIENT_SECRET, GITHUB_APP_PRIVATE_KEY_BASE64, GITHUB_WEBHOOK_SECRETorchestrator, driftGitHub AppDuring GitHub integration setupUsually obtained from the in-app GitHub setup flow. Both services should use the same credentials and webhook secret.
GITHUB_ORGorchestrator, driftGitHub org/userDuring GitHub integration setupMust match the org where the GitHub App is installed.

E2B (sandboxes)

Variable(s)Used bySource systemWhen requiredNotes
E2B_API_KEY, E2B_BAREBONES_TEMPLATE_IDsidecarE2BOptional (Remote Runs only)Needed only if you enable Remote Runs with SANDBOX_RUNNER=e2b.

Internal consistency variables

These values are mostly internal wiring. They do not come from a third-party, but they must be consistent across services.
Platform templates may ship with different defaults for internal URLs and ports.In most cases, the defaults should be correct for the selected platform, but you can validate and adjust them based on your deployment topology.
Variable(s)Used byConsistency requirement
ORCHESTRATOR_GITHUB_APP_URLuiShould be <internal-orchestrator-endpoint>/github/setup.
ORCHESTRATOR_BACKEND_URL, STATESMAN_BACKEND_URL, TOKENS_SERVICE_BACKEND_URLuiMust point to reachable internal service endpoints for your deployment.
DIGGER_INTERNAL_SECRET, ORCHESTRATOR_BACKEND_SECRETorchestrator, drift, uiORCHESTRATOR_BACKEND_SECRET must equal the DIGGER_INTERNAL_SECRET used by orchestrator/drift.
DIGGER_WEBHOOK_SECRET, DRIFT_REPORTING_BACKEND_WEBHOOK_SECRETdrift, uiThese should match so UI can report drift status securely.
STATESMAN_BACKEND_WEBHOOK_SECRET, OPENTACO_ENABLE_INTERNAL_ENDPOINTSui, statesmanKeep these aligned when using statesman internal endpoint authentication.
HTTP_BASIC_AUTH, HTTP_BASIC_AUTH_USERNAME, HTTP_BASIC_AUTH_PASSWORDorchestratorConfigure only for the orchestrator service if you are using HTTP basic auth.
DIGGER_PUBLIC_PATH_PREFIXorchestratorConfigure for orchestrator path routing when needed (for example, /orchestrator).

Data stores and platform internals

These are usually self-managed values in your deployment and vary by provider.
  • Databases: You need connection details for the backing databases (host, port, database name, user, password, SSL mode) used by orchestrator, statesman, and token services.
  • Object storage: You need S3-compatible object storage settings (endpoint/region, bucket, prefix, access key, secret key) for state storage.
  • Service endpoints: You need internal URLs so services can call each other.

Service-level runtime flags

These are local service behavior toggles and paths.
Variable(s)Used byPurpose
BACKGROUND_JOBS_CLIENT_TYPE, DIGGER_ENABLE_API_ENDPOINTS, DIGGER_ENABLE_INTERNAL_ENDPOINTS, DIGGER_LOAD_PROJECTS_ON_PUSH, PROJECTS_REFRESH_BIN, INTERNAL_BASE_URLorchestratorOrchestrator runtime behavior and internal routing.
DIGGER_DRIFT_REPORTER_HOSTNAME, DIGGER_HOSTNAME, DIGGER_ENABLE_API_ENDPOINTS, DIGGER_ENABLE_INTERNAL_ENDPOINTS, INTERNAL_BASE_URLdriftDrift runtime behavior and callback/internal routing.
ALLOWED_HOSTSuiHost validation allowlist for UI ingress hostnames.
NODE_ENV, PORT, SANDBOX_RUNNERsidecarSidecar runtime mode and provider selection.
OPENTACO_ALLOW_X_FORWARDED_FOR, OPENTACO_PORT, OPENTACO_QUERY_BACKEND, OPENTACO_SANDBOX_PROVIDER, OPENTACO_E2B_SIDECAR_URL, OPENTACO_SECRET_KEY, OPENTACO_AUTHs_DISABLEstatesmanStatesman runtime and auth behavior.

By deployment target

  • Docker Compose: Set values in env files and/or compose environment blocks.
  • Railway: Set values as service environment variables in each Railway service.
  • Kubernetes: Store secrets in Secret resources and non-secret config in ConfigMap resources, then mount/inject into pods.
  • Other platforms: Apply the same variable groups, keeping cross-service URLs and shared secrets consistent.
  • Keep external credentials in secret stores (not committed .env files).
  • Generate unique values for all *-SECRET, passwords, and cookie keys per environment.
  • Treat all cross-service shared secrets as a single rotation unit.
  • Validate the current variable names against runtime docs before production rollout.