You want to self-host apps for fun or privacy - but not the ‘running servers in your garage’ type of self-hosted. In 2022 we live in a Golden Era of low-cost VPCs and hosting providers, and there has never been a better time for people looking to offload the frustrating parts of self-hosting, while still operating on a shoe-string budget (or free!).
Speaking of budgeting, you’re here because you want to host Actual and take control of your finances! These deployment instructions are available on the repo as well , but I wanted an excuse to go through the process of deploying onto Fly.io and documenting. Plus, now I can add pretty pictures, and who doesn’t love pretty pictures and see what they’re getting themselves into?
Your first step is to get the Actual server code on your machine and running.
git clone git@github.com:actualbudget/actual-server.git
cd actual-server/
docker build -t actual-server .
docker run -p 5006:5006 actual-server
....
<lots of Docker output>
....
At this point, you should be able to navigate to localhost:5006 and see the Actual application! Awesome!
Now kill that process with Ctrl+C
and let’s put it somewhere with more longevity.
We need to take a quick detour to ensure you have an account with Fly.io .
Install
the flyctl
CLI tool.
Authenticate with flyctl auth signup
(for newbies), or flyctl auth login
(existing accounts).
⚠️ You will have to add credit card information to the account, so if that’s enough to keep you from using a free service 🤷- keep your usage to the free tier and you’ll have no issues.
We’re back on track! You should be back in the same actual-server/
directory for the rest of the process. Deploying to Fly requires a few small tweaks to a config file, a couple commands, and then you’ll have a live app on the interwebs!
cp fly.template.toml fly.toml
flyctl launch --no-deploy
21:51:14:~/work/actual-server:(master) [1]▶ flyctl launch --no-deploy
An existing fly.toml file was found for app actualbudget-otter
? Would you like to copy its configuration to the new app? Yes
Creating app in /home/idk/work/actual-server
Scanning source code
Detected a Dockerfile app
? App Name (leave blank to use an auto-generated name):
Automatically selected personal organization: Kevin
? Select region: ord (Chicago, Illinois (US))
Created app lively-meadow-7214 in organization personal
Wrote config file fly.toml
Your app is ready. Deploy with `flyctl deploy`
flyctl volumes create actualbudget_vol --size 1 -r ord
ℹ️ I set this to volume of 1 GB since I am deploying multiple apps on Fly, but the free tier supports up to 3GB for your account .
21:53:07:~/work/actual-server:(master) [130]▶ flyctl volumes create actualbudget_vol --size 1 -r ord
ID: vol_<redacted>
Name: actualbudget_vol
App: lively-meadow-7214
Region: ord
Zone: 4f52
Size GB: 1
Encrypted: true
Created at: 07 May 22 01:53 UTC
Update the mounts section in the fly.toml
, source
will be the name of your sweet new volume, and destination
is defined by Actual
. Now is also a great time to edit the app name - I got the fantastic lively-meadow-7214
, but not everyone will be that lucky.
[mounts]
source="actualbudget_vol"
destination="/data"
The big moment you’ve been waiting for - deployment! Run flyctl deploy
and watch the magic work.
21:55:35:~/work/actual-server:(master) [0]▶ flyctl deploy
==> Verifying app config
--> Verified app config
==> Building image
==> Creating build context
--> Creating build context done
==> Building image with Docker
....
--> Pushing image done
image: registry.fly.io/lively-meadow-7214:deployment-1651888549
image size: 242 MB
==> Creating release
--> release v2 created
--> You can detach the terminal anytime without stopping the deployment
==> Monitoring deployment
1 desired, 1 placed, 1 healthy, 0 unhealthy [health checks: 1 total, 1 passing]
--> v0 deployed successfully
Now you have a live app running on Fly.io !
With a few commands and almost no thought required, I have a self-hosted Actual live and ready for use. Oh, the pretty pictures I promised!
The very first thing you’re greeted with is Actual prompting for server configuration, explained in more depth in the repo
. TL;DR You can just pick Use this domain
and not worry about it.
After that, I chose the option to fill Actual with demo data so I could play around and actually check out it’s features (see the image at top of page again).
I gotta hand it to the team at Fly, they’ve made it a very slick process for your first apps. Also thanks & congrats to @jlongster for building out a slick little tool and open-sourcing it for the community . Best of luck to them both.
Questions? Concerns? Big hugs? Let me know what you’re thinking on Twitter .
A simple guide to self-host n8n in just a few minutes on fly.io.
A simple guide to self-host a NocodDB Airtable alternative in just a few minutes, for free.
Let the nice robots at GitHub handle sending Venmo requests to your friends.