Using Fused Cloud? Follow Use Fused Cloud. Fused provisions the database and runtime configuration for you.
What you need
- PostgreSQL 16+, reachable from the Engine container. Fused creates and upgrades its tables on startup.
- A Fused license key. Sign up and choose License key only to run the Engine yourself.
- A persistent encryption key, generated in the next step.
- Docker on the host where you will run the Engine.
Configure engine.yaml
Generate an encryption key once:engine.yaml as the primary configuration file for your deployment. Create it with the following content and replace all three placeholders:
engine.yaml
localhost there refers to the Engine container, not your host machine or a separate database container.
Keep this file out of version control and restrict access to it. The container runs as the fused user, which must be able to read the mounted file. In production, deliver sensitive configuration through your deployment’s secret manager.
Start the Engine
Unified Apps run in an isolated worker inside the Engine container. Docker’s default system-call filter can block the namespaces this worker needs. Fused images bundle a matching seccomp profile, its license, and a Compose example at/app/deploy/unified-app-workers.
Extract these files from a stopped container before starting the Engine. The profile is public configuration and contains no credentials. Docker applies it from the host; placing it inside the image alone does not activate it.
engine.yaml on startup. After editing it, restart the container to apply the configuration. The named volume retains runtime files across container replacement. PostgreSQL stores your workspace data and needs its own persistence and backup configuration.
When upgrading, extract the bundle from the new image and recreate the container with that profile. Changing Docker security options requires container recreation. Keep the profile and LICENSE.moby together, and allow only trusted administrators to modify the deployment files. Older images that predate the bundle require the profile from their matching source revision.
Both are moving tags. For production, set
FUSED_ENGINE_IMAGE to a version tag from the Engine releases, or use <tag>-headless for the headless image. Release archives also contain deploy/unified-app-workers; seccomp.json and LICENSE.moby are available as standalone release assets.
Download the profile by URL
Instead of extracting from the image, you can download the profile and its license from the same release. Replace<release-tag> with your Engine version, then use the docker run command above with this FUSED_ENGINE_IMAGE:
--security-opt seccomp=...; it cannot fetch an HTTP URL directly. Pin the download to the same release as the image. These assets become available with releases that include the bundle; older releases may return 404.
Published ports
The example publishes HTTP and gRPC. It does not require an external NATS server for a single instance.
Native binaries are also available on the releases page. The container packages the Node runtime, Unified App compiler, and Linux execution worker together; downloading only the Engine binary is not an equivalent full runtime installation.
Check the deployment
"unified_app_worker_ready": true. Setting FUSED_UNIFIED_APP_WORKER_REQUIRED=true makes a failed worker probe return HTTP 503; it does not grant the worker permission to start.
If readiness fails, check that /app/fused-execution-worker exists and is executable, Docker is using the extracted profile, and the host permits user namespaces. Host AppArmor policy may still deny worker startup even with the profile applied. Inspect kernel audit logs and resolve the specific denial; do not use privileged mode or disable seccomp or AppArmor globally. Worker readiness is probed at Engine startup, so restart the Engine after resolving a host policy issue.
Open http://localhost:8081 on the Docker host and sign in. For a remote deployment, use your Engine’s reachable HTTP address. Configure HTTPS routing before making the deployment available to users.
Connect the CLI
Install the CLI:http://localhost:8081 with its HTTP URL, such as https://engine.example.com. Approve the browser sign-in to save your CLI credential. The runtime license key and your CLI sign-in credential serve different purposes.
On a machine without a browser, use
fused-cli login --no-browser. An existing FUSED_ENGINE_URL environment variable overrides the saved URL; update or unset it when switching deployments.Additional configuration
Keep deployment settings inengine.yaml; select another file with --config. Environment variables remain available for deployment-specific overrides. For ordinary runtime settings, explicit flags override environment variables, which override the config file.
The license key resolves separately: --license-key, then FUSED_LICENSE_KEY in a local .env, then engine.license_key in engine.yaml, then an inherited FUSED_LICENSE_KEY process variable. FUSED_API_KEY is never a license source.
Public URL settings describe your routes; they do not configure DNS, TLS, or a load balancer. Use the HTTP address for the CLI and the gRPC address for generated SDKs.
Before production
- Pin the Engine image version and retain your encryption key in a secret manager.
- Back up PostgreSQL and test restoring it with the same encryption key.
- Configure TLS and network access for the HTTP and gRPC routes your clients need.
- For multiple Engine replicas, configure an external NATS server. Set
nats.urlwithout embedded credentials and select one authentication method. Prefer a mounted file referenced bynats.credentials_fileornats.nkey_seed_file; token or username/password authentication remains available throughNATS_TOKENor pairedNATS_USERNAMEandNATS_PASSWORD. Mount credential and TLS files read-only. - Review the Engine license and contact Fused about commercial licensing and support.
Create your first App
With your Engine running and CLI connected, enable a service and create an App.