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
.
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:
What is x-forwarded-for
and how does it affect Engine?
If you have engine running on a server behind a reverse proxy, you can set the TRUST_PROXY
environment variable to true
to trust the X-Forwarded-For
header. Reverse proxies like Nginx or Apache will add this header to the request with the original client IP address, and setting this variable will allow Engine to use the correct IP address for the IP Allowlist. For more details on IP Allowlisting, refer to the Security Features page.