Actual Money
March 18, 2025
I set up Actual Budget as a self-hosted finance tracking system to maintain full control over my financial data. Instead of relying on third-party services, this setup ensures that all transactions and budgeting data remain within my own infrastructure.
The service runs as a standalone Docker container and stores its data on a mounted NAS path. It is exposed internally and routed externally through Caddy and Cloudflare Tunnel.
code
version: "3.8"
services:
actual_server:
image: actualbudget/actual-server:latest
container_name: actual_server
restart: unless-stopped
ports:
- "5006:5006"
volumes:
- /mnt/nas/actual/data:/data
env_file:
- .env
networks:
- caddy_net
networks:
caddy_net:
external: trueExplanation
- image: Uses the official Actual Budget server image
- container_name: Explicit naming for easier reference across services
- ports: Exposes the app internally; external access is handled via reverse proxy
- volumes: Maps persistent storage to NAS to ensure durability and backups later
- env_file: Keeps configuration and secrets separate from compose
- networks: Connects to shared
caddy_netso Caddy can route traffic
Notes
- Financial data is stored on NAS, making it independent of container lifecycle
- Reverse proxy + Cloudflare tunnel removes need for direct exposure
- Backup strategy is important here and should be added