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_PASSWORD and POSTGRES_PASSWORD to the same strong password
  • Generate SECRET_KEY_BASE with: openssl rand -hex 64

Start the stack:

docker compose up -d

Initial Setup

  1. Open http://your-server-ip:3000 in your browser
  2. Create your account with email and password (default login: [email protected] / password may work on some builds — change immediately)
  3. Add your financial accounts — bank accounts, credit cards, investments, property
  4. Set your base currency
  5. Enter initial balances or import transaction history

Configuration

SettingWhereWhat It Does
SECRET_KEY_BASEEnvironmentRails encryption key — must be 64+ hex chars
RAILS_FORCE_SSLEnvironmentSet true behind HTTPS reverse proxy
GOOD_JOB_EXECUTION_MODEEnvironmentasync runs background jobs in-process
Base currencyWeb UI → SettingsPrimary currency for net worth calculations

Reverse Proxy

Example Nginx Proxy Manager configuration:

FieldValue
Domainfinance.yourdomain.com
Schemehttp
Forward Hostmaybe
Forward Port3000
SSLRequest 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

ResourceUsage
RAM~300-500 MB (Rails + PostgreSQL)
CPULow 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.

Comments