How to Self-Host Econumo with Docker Compose

What Is Econumo?

Econumo is a self-hosted personal and family budgeting app built for multi-currency households. Track expenses across currencies, share accounts with family members, create flexible budgets, and see where your money goes — all on your own server. The multi-currency support is its standout feature, handling automatic conversion between currencies without relying on a third party.

GitHub: github.com/econumo/econumo

Prerequisites

  • A Linux server (Ubuntu 22.04+ recommended)
  • Docker and Docker Compose installed (guide)
  • 256 MB of free RAM
  • A domain name (optional, for remote access)

Docker Compose Configuration

Create a docker-compose.yml file:

services:
  econumo:
    image: ghcr.io/econumo/econumo:0.8.1
    container_name: econumo
    restart: unless-stopped
    ports:
      - "8181:80"
    environment:
      APP_ENV: prod
      APP_SECRET: change_this_to_a_random_hex_string
      DATABASE_URL: postgresql://econumo:change_this_strong_password@postgres:5432/econumo?serverVersion=16
      MAILER_DSN: null://null
    depends_on:
      postgres:
        condition: service_healthy
    networks:
      - econumo

  postgres:
    image: postgres:16-alpine
    container_name: econumo-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: econumo
      POSTGRES_PASSWORD: change_this_strong_password
      POSTGRES_DB: econumo
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U econumo"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - econumo

volumes:
  postgres_data:

networks:
  econumo:

Before starting:

  • Change both change_this_strong_password values to the same strong password
  • Generate APP_SECRET with: openssl rand -hex 32
  • Set MAILER_DSN if you want email notifications (e.g., smtp://user:[email protected]:587)

Start the stack:

docker compose up -d

Note: First startup takes up to 90 seconds as the app runs database migrations and compiles assets.

Initial Setup

  1. Open http://your-server-ip:8181 in your browser
  2. Register your account (first user becomes the admin)
  3. Set your base currency (defaults to USD — configure additional currencies in settings)
  4. Create your first account (checking, savings, credit card, etc.)
  5. Start logging transactions

Configuration

SettingWhat It Does
APP_SECRETSymfony encryption key — required for security
DATABASE_URLPostgreSQL connection string
MAILER_DSNEmail notification transport (SMTP, Sendmail, etc.)
APP_ENVSet to prod for production

Multi-Currency Setup

Econumo starts with USD. To add more currencies:

  1. Go to Settings → Currencies in the web UI
  2. Add currencies you use (EUR, GBP, JPY, etc.)
  3. Econumo fetches exchange rates automatically
  4. Transactions in different currencies convert to your base currency for reporting

Shared Accounts (Family)

Econumo supports shared accounts between users:

  1. Create additional user accounts via the registration page
  2. In account settings, invite other users to share specific accounts
  3. Each user sees their own dashboard but shared accounts appear for both
  4. Transaction permissions can be set per shared account

Reverse Proxy

Example Nginx Proxy Manager configuration:

FieldValue
Domainbudget.yourdomain.com
Schemehttp
Forward Hosteconumo
Forward Port8181
SSLRequest a new certificate

For more options: Reverse Proxy Setup

Backup

Back up the PostgreSQL database:

docker exec econumo-db pg_dump -U econumo econumo > econumo_backup.sql

Restore:

docker exec -i econumo-db psql -U econumo econumo < econumo_backup.sql

For automated backup strategies: Backup Strategy

Troubleshooting

App Returns 500 Error

Symptom: HTTP 500 error after first deploy.

Fix: Wait up to 90 seconds for initial startup. Check logs for migration errors:

docker logs econumo

If migrations failed, the database may not have been ready. Restart:

docker compose restart econumo

Exchange Rates Not Updating

Symptom: Multi-currency transactions show stale rates.

Fix: Econumo fetches rates on a schedule. Ensure the container has internet access. Manually trigger rate refresh from the settings page.

”Connection refused” to Database

Symptom: Database connection errors in logs.

Fix: Verify the DATABASE_URL matches your PostgreSQL credentials. The hostname must be postgres (the service name), not localhost.

Resource Requirements

ResourceUsage
RAM~150-256 MB (PHP + PostgreSQL)
CPULow
Disk~200 MB for application, minimal for data

Econumo vs Other Finance Apps

FeatureEconumoFirefly IIIActual Budget
Multi-currencyNative with auto-ratesManual conversion rulesBasic support
Shared accountsYes (family)No (single user)No
BudgetingFlexible budgetsRule-based budgetsEnvelope method
Bank syncingNoGoCardless (EU)SimpleFIN (US, paid)
APIREST APIFull REST APILimited
Mobile appResponsive webThird-partyProgressive web app

Verdict

Econumo fills a specific niche: multi-currency household budgeting with shared accounts. If you and your partner earn in different currencies, or you track finances across countries, Econumo handles this better than Firefly III or Actual Budget. For single-currency personal budgeting, Actual Budget is simpler. For comprehensive financial tracking with automation rules, Firefly III is more powerful. Econumo is the right choice when multi-currency and family sharing are your primary requirements.

Comments