Deploying Miru on Render
Miru 3.0 is designed to run on Render with:
- one web service
- one worker service
- one Postgres database
- one Render Key Value instance
For the fastest setup, use the repository Blueprint at the root of the repo:
Or use the one-click button from the main repository README.
Branch model
production: deploy branch forapp.miru.sodevelop: integration branchstable-3-0: release preparation branch
One-click deploy
- Open the Deploy to Render button from the README.
- Confirm the Blueprint resources.
- Fill in the required secret values.
- Create the stack.
- Set
APP_BASE_URLto your Render hostname first, then to your custom domain when DNS is ready.
Services created by the Blueprint
miru-webmiru-workermiru-dbmiru-redis
Required environment variables
These should be provided during Blueprint setup or immediately after first deploy:
APP_BASE_URLDEFAULT_MAILER_SENDERDEFAULT_FROM_EMAILREPLY_TO_EMAILEMAIL_DELIVERY_METHODPOSTMARK_API_TOKENSENTRY_DSNSTRIPE_SECRET_KEYSTRIPE_PUBLISHABLE_KEYSTRIPE_WEBHOOK_ENDPOINT_SECRETSTRIPE_MONTHLY_PRICE_IDSTRIPE_YEARLY_PRICE_IDSTRIPE_PLAN_PAGE_URLGOOGLE_OAUTH_CLIENT_IDGOOGLE_OAUTH_CLIENT_SECRETGOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETCLOUDFLARE_R2_ACCESS_KEY_IDCLOUDFLARE_R2_SECRET_ACCESS_KEYCLOUDFLARE_R2_BUCKET_NAMECLOUDFLARE_R2_ENDPOINTCLOUDFLARE_R2_REGION
Custom domain
For production:
- Add
app.miru.soas a custom domain in Render. - Point DNS at the Render web service.
- Verify
https://app.miru.so/health. - Verify email/password login.
- Verify Google OAuth after the callback host changes to the custom domain.
Worker
The worker runs:
bundle exec rake solid_queue:start
Make sure the worker has the same shared app secrets as the web service.
Verification after deploy
Run these checks before cutover:
https://<your-domain>/health- log in with a real owner account
- verify one worker-backed action
- verify one mailer flow
- check Sentry for new unresolved errors