Self-host Actual Budget with Docker, a NAS or a VPS
Actual Budget is local-first. The app keeps your budget on the device you are using, which means the piece you would host is the sync server: the bit that lets your laptop, your phone and your partner's phone see the same numbers.
That distinction matters, because it sets how much hosting you actually need. This page covers how to run it yourself, what it costs you in attention afterwards, and when handing it over is the better trade.
Why self-host Actual Budget
The usual reasons are good ones. Your budget is among the most personal data you own, and Actual is designed so that it never has to sit on somebody else's commercial platform. The server is small, the project is open source, and if you already run a NAS or a home server the marginal cost is close to nothing.
If you enjoy running infrastructure, stop reading and go and run it. The rest of this page is about the parts people underestimate.
Running it with Docker
The sync server publishes to two registries: actualbudget/actual-server on Docker Hub, and ghcr.io/actualbudget/actual on GitHub. It listens on port 5006 and keeps everything in a mounted /data directory, where it creates server-files and user-files.
docker run --pull=always --restart=unless-stopped -d -p 5006:5006 \
-v /your/path/to/data:/data --name actual_budget \
actualbudget/actual-server:latest
The project also ships a docker-compose.yml, which is the friendlier route if you want the config in a file you can keep:
docker compose up --detach
Updating is a pull and a recreate:
docker compose pull && docker compose up -d
On a Raspberry Pi or a low-powered NAS, use the latest-alpine tag instead, which is built for resource-constrained devices.
On a Synology or other NAS
A NAS is a sensible home for this. Container Manager (or Docker, on older DSM) can run the same image: map a folder on the volume to /data, publish port 5006, and set the container to restart automatically.
Two things to get right while you are in there. Put the data folder somewhere included in your NAS backup job rather than in a scratch share, and decide how you will reach it from a phone that is not on the home network, which is the next section.
On a VPS, and the HTTPS part
A VPS gives you an address that works from anywhere, and hands you the certificate problem in exchange.
Actual's documentation is clear that you do not need HTTPS if you run the server on your own machine and only reach it over localhost, or if your provider terminates HTTPS for you. It is equally clear that HTTPS is needed to safely use all of Actual's features, so anything you reach from a phone wants a real certificate.
The practical options are a reverse proxy in front of the container, a tool like Caddy that obtains certificates for you, or Tailscale if you would rather not expose the server to the internet at all. Whichever you choose, it becomes a thing you maintain: certificates expire, proxies get upgrades, and the failure mode is your budget being unreachable on the day you want to check it.
Where self-hosting bites
Not the install. The install is twenty minutes. What follows is:
- Backups are yours. Your budget lives in the
/data directory you mounted. Nothing backs that up for you, and a sync server without a backup is a single disk away from a rebuilt budget. - Updates are yours. A pull and a recreate, forever, and the reminder to do it is you.
- Uptime is yours. Local-first means an outage does not lose your data, but it does mean the phone in the supermarket is not seeing the transaction you entered this morning.
- The certificate is yours. See above.
None of that is hard. It is simply permanent, and it competes with everything else you would rather do.
What managed hosting changes
On ElfHosted, the sync server runs with HTTPS on your own subdomain, single sign-on, nightly backups into a backup volume you can browse yourself, monitoring, and updates applied for you. You get the same open-source Actual Budget, on infrastructure somebody else is on call for.
Actual Budget is part of the Flex collection, which matters for the arithmetic: Flex is a plan with app slots rather than a per-app charge, so Actual sits alongside a password manager, an RSS reader or a dashboard on the same subscription instead of costing another line item.
Compare Flex plans
What managed hosting does not change
Your data is still yours. Budgets export to CSV, the file format is documented, and end-to-end encryption remains yours to switch on if you want the server to hold nothing it can read. Nothing here locks the budget to us, which is rather the point of picking an app like this in the first place.
It is also still the same application, with the same features and the same upstream release cadence. Managed hosting changes who gets paged, not what the software does.
When to pick DIY
Run it yourself if you already have a NAS or a server that is on anyway, if you are comfortable with a reverse proxy and a backup job, or if you simply want to. The software is free and the project deserves the users.
When to pick managed
Pay for it if you want the sync server reachable from a phone without operating anything, if you have been meaning to sort out backups for six months, or if Actual is one of several apps you want and you would rather buy one subscription than assemble a server.