Self-Host Instructions
Self-host Engine on your own infrastructure for free and manage your self-hosted Engine from the thirdweb dashboard.
Requirements
- Docker
- A thirdweb secret key from the API Keys page
- PostgresDB (version 14+)
- Redis (version 7.2.4+)
Running Engine locally
Start Postgres:
Start Redis:
Start Engine server:
Environment variables
* Required
Your server is running when this log line appears:
Manage Engine from the dashboard
To manage your Engine instance from the dashboard:
-
Navigate to
https://localhost:3005/json
- The "Your connection is not private" page will appear.
- Select Show advanced and select Proceed to localhost (unsafe) to render the JSON file.
- This one-time step allows your browser to connect to your local Engine instance.
-
Navigate to the Engine dashboard page.
-
Sign in with the
<admin_wallet_address>
wallet. -
Select Import
-
Add your publicly accessible Engine URL.
- If Engine is running locally, provide the URL
https://localhost:3005
.
- If Engine is running locally, provide the URL
Running Engine in production
See the Production Checklist for best practices using Engine in a production environment.
- Pin Engine Docker to a version to control when changes are introduced.
latest
may include major version changes which can introduce breaking changes.
- Host Engine DB on any Postgres-compatible database.
- Remember to update
POSTGRES_CONNECTION_URL
. - Examples: AWS RDS, Google Cloud SQL, Heroku, Supabase
- Minimum specs: 2 vCPU, 2 GB memory (AWS equivalent: t4g.small)
- Minimum version: 14
- Add the
?connection_limit=10
param to yourPOSTGRES_CONNECTION_URL
to increase the connection limit.
- Remember to update
- Host Engine server on any cloud provider.
- Minimum specs: 1 vCPU, 2 GB memory (AWS equivalent: t2.small)
- Auto-scale the instance count to increase inbound throughput and queuing capacity.
- Remove the
ENABLE_HTTPS
env var.
FAQ
Why is my Docker image unable to reach my Postgres database?
Here are common troubleshooting tips:
- Ensure the Postgres DB is running in Docker.
POSTGRES_CONNECTION_URL
should be set tolocalhost
(if in the same container) orhost.docker.internal
(if in a different container). - Ensure the Postgres DB connection URL and credentials are correct.
- Ensure the database name exists on the Postgres DB.
See Production Checklist for best practices using Engine in a production environment.
Self-hosting recommendations
- Do not set the environment variable
ENABLE_HTTPS=true
. - Host Engine Docker on a cloud provider.
- Minimum specs: 1 vCPU, 2 GB memory (AWS equivalent: t2.small)
- Auto-scale the instance count to increase inbound throughput and queuing capacity.
- Host Postgres DB on a cloud provider.
- Examples: AWS RDS, Google Cloud SQL, Heroku, Supabase
- Minimum specs: 2 vCPU, 2 GB memory (AWS equivalent: t4g.small)
- Set the
connection_limit
parameter within yourPOSTGRES_CONNECTION_URL
environment variable to10
.
FAQ
How do I filter logs in Engine?
Configure log verbosity via the LOG_LEVEL
environment variable.
The severity levels ordered from highest to lowest are:
fatal
: Terminates the program due to critical errors.error
: Highlights serious issues needing immediate action.warn
: Suggests caution due to potential issues.info
: Shares routine operational insights.debug
: Provides detailed debugging information.trace
: Offers in-depth tracing details.
Engine by default captures logs at debug
severity and higher. Setting LOG_LEVEL
to error
limits logging to only error
and fatal
severities.
How to prevent SIGSEGV
errors with the Engine docker image?
Ensure the Engine docker image's stability by allocating a minimum of 0.5 vCPU & 1 GB memory
to the container, mitigating SIGSEGV
(Segmentation Fault) errors due to inadequate resources or memory access issues.
Engine recommends a minimum DB connections limit of 8
PER HOST. Please set the connection_limit
parameter within your POSTGRES_CONNECTION_URL
environment variable, to allow a connection limit between (8, # conns supported by your DB / # hosts). In practice, 10-20 is a suitable connection limit.
DB Error:
Example configuration: