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_passwordvalues to the same strong password - Generate
APP_SECRETwith:openssl rand -hex 32 - Set
MAILER_DSNif 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
- Open
http://your-server-ip:8181in your browser - Register your account (first user becomes the admin)
- Set your base currency (defaults to USD — configure additional currencies in settings)
- Create your first account (checking, savings, credit card, etc.)
- Start logging transactions
Configuration
| Setting | What It Does |
|---|---|
APP_SECRET | Symfony encryption key — required for security |
DATABASE_URL | PostgreSQL connection string |
MAILER_DSN | Email notification transport (SMTP, Sendmail, etc.) |
APP_ENV | Set to prod for production |
Multi-Currency Setup
Econumo starts with USD. To add more currencies:
- Go to Settings → Currencies in the web UI
- Add currencies you use (EUR, GBP, JPY, etc.)
- Econumo fetches exchange rates automatically
- Transactions in different currencies convert to your base currency for reporting
Shared Accounts (Family)
Econumo supports shared accounts between users:
- Create additional user accounts via the registration page
- In account settings, invite other users to share specific accounts
- Each user sees their own dashboard but shared accounts appear for both
- Transaction permissions can be set per shared account
Reverse Proxy
Example Nginx Proxy Manager configuration:
| Field | Value |
|---|---|
| Domain | budget.yourdomain.com |
| Scheme | http |
| Forward Host | econumo |
| Forward Port | 8181 |
| SSL | Request 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
| Resource | Usage |
|---|---|
| RAM | ~150-256 MB (PHP + PostgreSQL) |
| CPU | Low |
| Disk | ~200 MB for application, minimal for data |
Econumo vs Other Finance Apps
| Feature | Econumo | Firefly III | Actual Budget |
|---|---|---|---|
| Multi-currency | Native with auto-rates | Manual conversion rules | Basic support |
| Shared accounts | Yes (family) | No (single user) | No |
| Budgeting | Flexible budgets | Rule-based budgets | Envelope method |
| Bank syncing | No | GoCardless (EU) | SimpleFIN (US, paid) |
| API | REST API | Full REST API | Limited |
| Mobile app | Responsive web | Third-party | Progressive 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.
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