How to Self-Host Maybe with Docker Compose
What Is Maybe?
Maybe is an open-source personal finance app originally built as a commercial SaaS product. After the company was acqui-hired by ElevenLabs in July 2025, the repository was archived and development stopped at v0.6.0. The app still works — it tracks net worth, budgets, accounts, and investments through a clean modern UI built with Ruby on Rails. It replaces Mint or Personal Capital for basic financial dashboards.
Important: Maybe is no longer maintained. No security patches, no new features, no bug fixes. Self-host it if the current feature set meets your needs, but plan to migrate to Actual Budget or Firefly III if you need ongoing development.
GitHub: github.com/maybe-finance/maybe (archived)
Prerequisites
- A Linux server (Ubuntu 22.04+ recommended)
- Docker and Docker Compose installed (guide)
- 1 GB of free RAM
- A domain name (optional, for remote access)
Docker Compose Configuration
Create a docker-compose.yml file:
services:
maybe:
image: ghcr.io/maybe-finance/maybe:0.6.0
container_name: maybe
restart: unless-stopped
ports:
- "3000:3000"
environment:
RAILS_ENV: production
SECRET_KEY_BASE: generate_a_64_char_hex_string_here
DB_HOST: postgres
DB_PORT: "5432"
DB_USERNAME: maybe
DB_PASSWORD: change_this_strong_password
DB_NAME: maybe_production
RAILS_FORCE_SSL: "false"
RAILS_ASSUME_SSL: "false"
GOOD_JOB_EXECUTION_MODE: async
depends_on:
postgres:
condition: service_healthy
networks:
- maybe
postgres:
image: postgres:16-alpine
container_name: maybe-db
restart: unless-stopped
environment:
POSTGRES_USER: maybe
POSTGRES_PASSWORD: change_this_strong_password
POSTGRES_DB: maybe_production
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U maybe"]
interval: 10s
timeout: 5s
retries: 5
networks:
- maybe
volumes:
postgres_data:
networks:
maybe:
Before starting:
- Change
DB_PASSWORDandPOSTGRES_PASSWORDto the same strong password - Generate
SECRET_KEY_BASEwith:openssl rand -hex 64
Start the stack:
docker compose up -d
Initial Setup
- Open
http://your-server-ip:3000in your browser - Create your account with email and password (default login:
[email protected]/passwordmay work on some builds — change immediately) - Add your financial accounts — bank accounts, credit cards, investments, property
- Set your base currency
- Enter initial balances or import transaction history
Configuration
| Setting | Where | What It Does |
|---|---|---|
SECRET_KEY_BASE | Environment | Rails encryption key — must be 64+ hex chars |
RAILS_FORCE_SSL | Environment | Set true behind HTTPS reverse proxy |
GOOD_JOB_EXECUTION_MODE | Environment | async runs background jobs in-process |
| Base currency | Web UI → Settings | Primary currency for net worth calculations |
Reverse Proxy
Example Nginx Proxy Manager configuration:
| Field | Value |
|---|---|
| Domain | finance.yourdomain.com |
| Scheme | http |
| Forward Host | maybe |
| Forward Port | 3000 |
| SSL | Request a new certificate |
Set RAILS_FORCE_SSL=true and RAILS_ASSUME_SSL=true when behind HTTPS.
For more options: Reverse Proxy Setup
Backup
Back up the PostgreSQL database:
docker exec maybe-db pg_dump -U maybe maybe_production > maybe_backup.sql
Restore:
docker exec -i maybe-db psql -U maybe maybe_production < maybe_backup.sql
For automated backup strategies: Backup Strategy
Troubleshooting
App Won’t Start — SECRET_KEY_BASE Error
Symptom: Container exits immediately with a Rails error about missing secret key.
Fix: Generate a proper key:
openssl rand -hex 64
Set this as SECRET_KEY_BASE in your docker-compose.yml.
Database Connection Refused
Symptom: “PG::ConnectionBad” error in container logs.
Fix: Ensure DB_HOST is set to postgres (the service name), DB_PASSWORD matches POSTGRES_PASSWORD, and the PostgreSQL container is healthy.
Slow Initial Load
Symptom: First page load takes 30+ seconds.
Fix: Normal for Rails apps on first request — assets compile on first access. Subsequent loads are fast. Wait for the initial compilation.
Resource Requirements
| Resource | Usage |
|---|---|
| RAM | ~300-500 MB (Rails + PostgreSQL) |
| CPU | Low to moderate |
| Disk | ~500 MB for application, minimal for data |
Verdict
Maybe has the best-looking UI of any self-hosted finance app — clean, modern, and intuitive. But it’s archived software with no future updates. For a financial tracking dashboard that looks great and does the basics, it works. For anything requiring active development, bank syncing, or long-term reliability, use Actual Budget (envelope budgeting) or Firefly III (full-featured accounting). For investment tracking specifically, Ghostfolio is actively maintained and purpose-built.
Related
Get self-hosting tips in your inbox
Get the Docker Compose configs, hardware picks, and setup shortcuts we don't put in articles. Weekly. No spam.
Comments