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.10.0
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:pass@smtp.example.com: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.
Frequently Asked Questions
How does Econumo handle currency conversion?
Econumo automatically fetches exchange rates from external services on a schedule. Transactions in different currencies are converted to your base currency for reports and budgets. You set a base currency during setup (defaults to USD), and all reporting uses that base for totals. Exchange rates update automatically — no manual rate entry needed.
Can family members use Econumo simultaneously?
Yes. Create separate user accounts through the registration page. In account settings, invite other users to share specific accounts (checking, savings, joint expenses). Each user sees their own dashboard, but shared accounts appear for both. Transaction permissions can be configured per shared account.
Does Econumo support bank import?
No. Econumo doesn’t have bank syncing or OFX/CSV import. All transactions are entered manually. For users who want bank import, Firefly III supports GoCardless (EU banks) and Actual Budget supports SimpleFIN (US banks, paid). Econumo’s strength is multi-currency and family sharing, not automation.
Can I track investments in Econumo?
Econumo is a budgeting and expense tracking tool, not an investment tracker. For investment portfolio tracking, use Ghostfolio. You can use Econumo alongside Ghostfolio — track daily expenses and budgets in Econumo, track your investment portfolio in Ghostfolio.
What’s the first startup time for Econumo?
Up to 90 seconds. On first launch, Econumo runs database migrations and compiles Symfony assets. If you see a 500 error immediately after deployment, wait 90 seconds and refresh. Subsequent restarts are much faster since migrations only run once. Check docker logs econumo if the app doesn’t come up after 2 minutes.
How do I migrate from another budgeting app to Econumo?
There’s no built-in import tool. Migration requires manual data entry or scripting through Econumo’s REST API. For large datasets, export from your current app (CSV/JSON), write a script to transform and POST transactions to Econumo’s API. For small datasets, manual entry is faster than writing migration code.
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