Actual Money

March 18, 2025

docker · seself-hosted

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: true
Explanation
  • 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_net so 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