---
title: "Deploy Sure Finance (w/ Storage)"
description: "Personal finance, budgets, net worth. Maybe fork, stable pin, S3 uploads"
category: "Other"
url: https://railway.com/deploy/sure-finance-w-storage
---

# Deploy Sure Finance (w/ Storage)

Personal finance, budgets, net worth. Maybe fork, stable pin, S3 uploads

**[Deploy Sure Finance (w/ Storage) on Railway](https://railway.com/template/sure-finance-w-storage)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/sure-finance-w-storage/manifest.json

- **Creator:** Auromations
- **Category:** Other
- **Total deploys:** 1

## Template content

### Web https://raw.githubusercontent.com/we-promise/sure/v0.7.6/public/android-chrome-512x512.png

- **Image:** ghcr.io/we-promise/sure:0.7.6
- **Start command:** `/rails/bin/docker-entrypoint ./bin/rails server`
- **Health check:** /up
- **Public domain:** Yes

### Postgres

- **Image:** postgres:16.12

### Redis

- **Image:** redis:7.4.11
- **Start command:** `/bin/sh -c "rm -rf /data/lost+found && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --appendonly yes --maxmemory-policy noeviction"`

### Worker https://raw.githubusercontent.com/we-promise/sure/v0.7.6/public/android-chrome-512x512.png

- **Image:** ghcr.io/we-promise/sure:0.7.6
- **Start command:** `/rails/bin/docker-entrypoint bundle exec sidekiq`

## Buckets

- **sure-storage**

## Documentation

# Deploy and Host Sure on Railway

Sure is an open-source personal finance app, the community-maintained continuation of Maybe Finance. Track every account in one place, see your net worth over time, categorize transactions with rules, set budgets, and import history from CSV, Mint, YNAB, Actual or another Sure instance.

## About Hosting Sure

Sure runs as a Rails web app plus a Sidekiq worker, backed by Postgres and Redis. This template runs that exact upstream topology on the pinned stable release (0.7.6), and adds a Railway Storage Bucket for uploaded and generated files.

The bucket matters. Web and Worker are separate containers, and a Railway volume can attach to only one of them. Data exports, Sure imports, account logos, receipts and statements are written by one process and read by the other. With the bucket, both see the same files, and the files survive redeploys.

Web and Worker also share one set of secrets and encryption keys. Bank and provider credentials that you save in the web app can be decrypted by the background jobs that sync them.

## Common Use Cases

- Replace Mint, Monarch or YNAB with a finance app whose data stays in your own database
- Track net worth across bank, credit, investment, crypto, property and loan accounts
- Import years of transaction history from CSV, Mint, YNAB, Actual Budget or a Sure export
- Share one household budget with family members, each with their own login
- Add optional AI chat and auto-categorization with your own OpenAI or Anthropic key

## Dependencies for Sure Hosting

- Postgres 16 (bundled)
- Redis 7.4 (bundled)
- S3-compatible object storage (bundled Railway Storage Bucket)
- Optional: SMTP credentials for password resets and invites
- Optional: OpenAI key for AI features, Twelve Data key for exchange rates and stock prices

### Deployment Dependencies

- Sure source: https://github.com/we-promise/sure
- Self-hosting guide: https://github.com/we-promise/sure/blob/main/docs/hosting/docker.md
- Environment reference: https://github.com/we-promise/sure/blob/main/.env.example

### Implementation Details

**First boot.** The deploy asks you nothing. Every password and key is generated for your project. First boot takes about two minutes while Web runs the database migrations. Until then the Worker logs warnings about missing tables. That is expected and stops on its own.

**Your first login.**

1. Open the **Web** service's public URL. You land on the sign-up page.
2. Create your account. The first account on the instance becomes its admin.
3. Finish the three onboarding screens (name, preferences, goals).

**Close sign-ups.** New instances allow open sign-up, so anyone with your URL can create their own separate household. They cannot see your data. To stop this, go to Settings > Self-Hosting and set onboarding to Closed or Invite only. You can also set the `ONBOARDING_STATE` variable on the Web service.

**Keep these values.** `SECRET_KEY_BASE` and the three `ACTIVE_RECORD_ENCRYPTION_*` variables on the Web service encrypt saved credentials. If you change them, stored bank tokens and API keys can no longer be read.

**Optional settings** on the Web service. The Worker picks them up automatically.

- `SMTP_ADDRESS`, `SMTP_PORT`, `SMTP_USERNAME`, `SMTP_PASSWORD`, `EMAIL_SENDER` for password resets and invites
- `OPENAI_ACCESS_TOKEN` for AI chat and auto-categorization
- `TWELVE_DATA_API_KEY` for exchange rates and security prices (also settable in Settings > Self-Hosting)

**Upgrading.** Change the image tag on both Web and Worker to the new release, for example `ghcr.io/we-promise/sure:0.7.7`. Web runs migrations on boot.

## Why Deploy Sure on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Sure on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/sure-finance-w-storage
