Install and Configure Actual Budget on Ubuntu 24.04

By Raman Kumar

Updated on Jul 27, 2025

In this tutorial, we'll learn how to install and configure Actual Budget on Ubuntu 24.04 server. 

Actual Budget is an open-source, self-hosted alternative to popular budgeting tools like YNAB (You Need A Budget). It offers robust features for tracking income, expenses, and overall financial well-being, all while keeping our sensitive financial data securely on our own hardware. This is a significant advantage for those who prioritize data privacy and want full control over their financial information.

This guide will walk us through the installation and configuration of Actual Budget on Ubuntu 24.04, transforming our Ubuntu server into a powerful, privacy-focused financial hub.

Let's dive in!

Prerequisites

Before we begin, let’s ensure our environment meets the following requirements:

  • A Ubuntu 24.04 installed dedicated server or KVM VPS.
  • A non-root user with sudo privileges.
  • Basic knowledge of using the terminal.
  • A domain name pointing A record to server IP.

Install and Configure Actual Budget on Ubuntu 24.04

Step 1: Update Ubuntu 24.04 Server

Next, update our package lists and upgrade any existing packages:

sudo apt update
sudo apt upgrade -y

The -y flag automatically confirms any prompts, making the process smoother.

Step 2: Install Docker and Docker Compose

Actual Budget is best deployed using Docker and Docker Compose, which simplify the installation and management of applications by packaging them into isolated containers. This approach ensures that Actual Budget runs consistently across different environments and avoids conflicts with other software on our server.

Install Docker Engine

Add Docker's official GPG key:

sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Add the repository to Apt sources:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

Install the Docker packages.

sudo apt-get install docker-ce

Once installed, we can verify that Docker is running correctly:

sudo systemctl status docker

We should see output indicating that the Docker service is active (running).

To avoid using sudo every time we run a Docker command, we can add our user to the docker group. Replace our_username with our actual Ubuntu username:

sudo usermod -aG docker ${USER}

Step 3: Deploy Actual Budget with Docker Compose

Now that Docker and Docker Compose are set up, we can deploy Actual Budget. The Actual Budget team provides a straightforward docker-compose.yml file to get us started.

Create a Directory for Actual Budget

Let's create a dedicated directory to store our Actual Budget configuration and data. This helps keep things organized.

mkdir ~/actual-budget
cd ~/actual-budget

Create the Docker Compose File

Now, we'll create the docker-compose.yml file within this directory. This file will define how our Actual Budget server container should be set up.

nano docker-compose.yml

Paste the following content into the docker-compose.yml file:

services:
  actual-server:
    image: actualbudget/actual-server:latest
    container_name: actual_server
    restart: unless-stopped
    ports:
      - "5006:5006" # Host port:Container port
    volumes:
      - ./data:/data # This maps a local 'data' directory to the container's /data

Save the file.

Start Actual Budget

Now, we can start the Actual Budget server using Docker Compose:

docker compose up -d

The -d flag runs the containers in "detached" mode, meaning they run in the background, freeing up our terminal.

Docker will download the actualbudget/actual-server:latest image if it's not already present and then start the container.

We can verify that the container is running by checking the Docker processes:

docker ps

We should see actual_server listed among the running containers.

Step 4: Configure Nginx as a Reverse Proxy with SSL

While we can access Actual Budget directly via http://example.com:5006, it's highly recommended to set up a reverse proxy with SSL (HTTPS) for security, especially if we plan to access it over the internet. Nginx is a popular choice for this. This step ensures that our connection to Actual Budget is encrypted, protecting our sensitive financial data in transit.

Install Nginx

sudo apt install nginx -y

Next, we need to add HTTP and HTTPS ports in the firewall:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

Next, install Certbot and the Nginx plugin:

sudo apt install certbot python3-certbot-nginx -y

Certbot will interactively guide us through the process. It will ask for our email, agree to the terms of service, and then attempt to configure Nginx.

Now, we'll configure Nginx to act as a reverse proxy for Actual Budget.

Create a new Nginx configuration file for Actual Budget:

sudo nano /etc/nginx/sites-available/actualbudget.conf

Paste the following configuration, replacing example.com with our domain:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:5006;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Save the file (Ctrl + O, Enter, Ctrl + X).

Enable the Nginx Configuration

Create a symbolic link to enable our new Nginx configuration:

sudo ln -s /etc/nginx/sites-available/actualbudget.conf /etc/nginx/sites-enabled/

Remove the default Nginx site to avoid conflicts:

sudo rm /etc/nginx/sites-enabled/default

Test Nginx Configuration and Restart

Test the Nginx configuration for syntax errors:

sudo nginx -t

If the test is successful, restart Nginx to apply the changes:

sudo systemctl restart nginx

Next, obtain the SSL certificate. Replace example.com with our actual domain name:

sudo certbot --nginx -d example.com

Step 5: Access Actual Budget in Our Web Browser

Once the container is running, Actual Budget should be accessible.

Open our web browser and navigate to:

https://example.com

Replace example.com with the actual IP address of our Ubuntu 24.04 server.

The first time we access Actual Budget, we will be prompted to set up a password. This password will be used to log in to our self-hosted Actual Budget instance. There's no username to enter; it's simply password-based authentication for the server itself.

After setting the password, we can log in and begin using Actual Budget to track our personal finances!

Conclusion

We've successfully installed and configured Actual Budget on our Ubuntu 24.04 server, creating a powerful, self-hosted solution for personal finance tracking. By following these steps, we've gained full control over our financial data, benefiting from the privacy and flexibility that self-hosting offers.

Actual Budget provides a compelling alternative for those seeking a robust budgeting tool without relying on cloud-based services. We hope this guide empowers our users to take charge of their financial journey!