Self-hosting Convex with Railway.com
Instructions for railway self-hosting is community maintained. For help, please join the community discord. Thanks to orenaksakal for the work in putting the instructions together.
You can view the ready to deploy template here
or use one click deploy button below:
The template comes with pre-configured env-variables and you need to follow some setup steps to make it fully work.
- Setting up ports for the deployment
- Generating admin key with railway ssh
Steps:
-
Setting up ports for the deployment
Go to your railway deployment
- Select
convex-backend
service - Select Settings tab and scroll to
Public Networking
section - Hover on the domain and delete auto assigned domain
- Click on
Generate Domain
for auto generated one orCustom Domain
if you want to setup custom domain - Make sure to select port
3210
and add your domain - Re-deploy both
convex-dashboard
andconvex-backend
services
- Select
-
Generating admin key with railway ssh
Follow these instructions to setup railway SSH on your machine
- Link your convex deployment project
- Run
railway ssh
and selectconvex-backend
when prompted - Run
ls
and then./generate_admin_key.sh
- Copy the whole admin key logged on the screen
- This is your admin key keep it secret
Note that HTTP actions run on your railway app url under the /http
path. For
example:
- If your railway app is deployed at
https://self-hosted-backend.railway.app
- And you have an HTTP action routed to
/sendEmail
- You would call it at
https://self-hosted-backend.railway.app/http/sendEmail
At this point, your data is stored in SQLite and your files are stored in the
Railway volume. You can see them in the data
folder if you run:
railway ssh
ls
To store your data in a SQL database of your choice, see these instructions.
The dashboard allows you to see logs, read/write data, run functions, and more. You can run the dashboard locally with Docker, or deploy it to Railway.
- Head over to your railway app
- Select
convex-dashboard
- Visit its public url
- Paste the admin key when prompted
- Enjoy
docker run -e 'NEXT_PUBLIC_DEPLOYMENT_URL=<backend-url>' -p '6791:6791' 'ghcr.io/get-convex/convex-dashboard:latest'
See these instructions.
- Performance issues: The default railway configuration allocates the minimum possible resources to get up and running. If your app has high load, you may see ratelimiting from railway and poor performance. We recommend increasing your memory and CPU.
- Running out of disk space: The hobby railway configuration allocates 5GB
to the
convex_data
volume where your SQLite database and storage lives. If you run out of space, you can increase the volume to 50GB by upgrading plan. - If you need more help feel free to join our discord community discord