docker.recipes

Akaunting Free Accounting

beginner

Free and open-source accounting software for small businesses.

Overview

Akaunting is a comprehensive, open-source accounting platform designed specifically for small businesses, freelancers, and startups who need professional-grade financial management without the enterprise price tag. Built with PHP and Laravel framework, Akaunting offers double-entry bookkeeping, invoicing, expense tracking, and financial reporting capabilities that rival commercial solutions like QuickBooks or FreshBooks. The software supports multi-currency operations, tax management, and comes with a marketplace of extensions for specialized business needs. This Docker stack combines Akaunting with MariaDB to create a self-hosted financial management system that maintains complete data ownership while providing enterprise-level accounting features. MariaDB serves as the robust database backend, leveraging its enhanced performance characteristics and Aria storage engine to handle complex financial transactions and reporting queries efficiently. The combination eliminates dependency on cloud-based accounting services while providing better performance than traditional MySQL setups. This stack is particularly valuable for businesses requiring GDPR compliance, custom financial workflows, or integration with existing enterprise systems. Small business owners, accounting firms managing multiple clients, and organizations needing customizable financial reporting will find this deployment offers the flexibility and control that cloud-based solutions cannot match.

Key Features

  • Double-entry bookkeeping system with automated journal entries and account reconciliation
  • Multi-currency support with real-time exchange rate updates and currency conversion tracking
  • Professional invoice generation with customizable templates, recurring billing, and payment gateway integration
  • Expense management with receipt scanning, vendor tracking, and automated categorization
  • Financial reporting dashboard with P&L statements, balance sheets, and cash flow analysis
  • MariaDB Aria storage engine providing crash-safe tables and improved performance for financial data
  • Apps marketplace integration allowing installation of banking connectors, payment processors, and industry-specific modules
  • Multi-company support enabling accounting firms to manage multiple client books from single installation

Common Use Cases

  • 1Small business owners replacing QuickBooks or similar commercial accounting software with self-hosted solution
  • 2Freelancers and consultants needing professional invoicing with integrated expense tracking and tax reporting
  • 3Accounting firms managing multiple client accounts with separated company books and custom branding
  • 4International businesses requiring multi-currency support with automated exchange rate management
  • 5Organizations needing GDPR-compliant financial data storage with complete control over sensitive information
  • 6Startups requiring scalable accounting infrastructure that grows from basic invoicing to complex financial management
  • 7Non-profit organizations tracking donations, grants, and program expenses with detailed reporting requirements

Prerequisites

  • Minimum 1GB RAM for MariaDB performance with financial data processing and concurrent user access
  • Port 8080 available for Akaunting web interface access and administrative functions
  • Basic understanding of accounting principles including double-entry bookkeeping and chart of accounts structure
  • SSL certificate and reverse proxy setup recommended for production deployment with sensitive financial data
  • Regular backup strategy for both MariaDB data volumes and Akaunting file storage containing invoices and receipts
  • Valid SMTP configuration for automated invoice delivery and system notifications

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 akaunting:
3 image: akaunting/akaunting:latest
4 container_name: akaunting
5 environment:
6 - APP_URL=${APP_URL}
7 - LOCALE=en-US
8 - DB_HOST=db
9 - DB_PORT=3306
10 - DB_NAME=akaunting
11 - DB_USERNAME=akaunting
12 - DB_PASSWORD=${DB_PASSWORD}
13 - DB_PREFIX=akaunt_
14 - COMPANY_NAME=${COMPANY_NAME}
15 - COMPANY_EMAIL=${COMPANY_EMAIL}
16 - ADMIN_EMAIL=${ADMIN_EMAIL}
17 - ADMIN_PASSWORD=${ADMIN_PASSWORD}
18 volumes:
19 - akaunting-data:/var/www/html/storage
20 ports:
21 - "8080:80"
22 depends_on:
23 - db
24 networks:
25 - akaunting-network
26 restart: unless-stopped
27
28 db:
29 image: mariadb:10.11
30 container_name: akaunting-db
31 environment:
32 - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
33 - MYSQL_DATABASE=akaunting
34 - MYSQL_USER=akaunting
35 - MYSQL_PASSWORD=${DB_PASSWORD}
36 volumes:
37 - mariadb-data:/var/lib/mysql
38 networks:
39 - akaunting-network
40 restart: unless-stopped
41
42volumes:
43 akaunting-data:
44 mariadb-data:
45
46networks:
47 akaunting-network:
48 driver: bridge

.env Template

.env
1# Akaunting
2APP_URL=http://localhost:8080
3COMPANY_NAME=My Company
4COMPANY_EMAIL=company@example.com
5ADMIN_EMAIL=admin@example.com
6ADMIN_PASSWORD=secure_admin_password
7
8# Database
9DB_PASSWORD=secure_akaunting_password
10DB_ROOT_PASSWORD=secure_root_password

Usage Notes

  1. 1Web UI at http://localhost:8080
  2. 2Setup wizard on first visit
  3. 3Double-entry accounting
  4. 4Multi-currency support
  5. 5Apps marketplace available

Individual Services(2 services)

Copy individual services to mix and match with your existing compose files.

akaunting
akaunting:
  image: akaunting/akaunting:latest
  container_name: akaunting
  environment:
    - APP_URL=${APP_URL}
    - LOCALE=en-US
    - DB_HOST=db
    - DB_PORT=3306
    - DB_NAME=akaunting
    - DB_USERNAME=akaunting
    - DB_PASSWORD=${DB_PASSWORD}
    - DB_PREFIX=akaunt_
    - COMPANY_NAME=${COMPANY_NAME}
    - COMPANY_EMAIL=${COMPANY_EMAIL}
    - ADMIN_EMAIL=${ADMIN_EMAIL}
    - ADMIN_PASSWORD=${ADMIN_PASSWORD}
  volumes:
    - akaunting-data:/var/www/html/storage
  ports:
    - "8080:80"
  depends_on:
    - db
  networks:
    - akaunting-network
  restart: unless-stopped
db
db:
  image: mariadb:10.11
  container_name: akaunting-db
  environment:
    - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
    - MYSQL_DATABASE=akaunting
    - MYSQL_USER=akaunting
    - MYSQL_PASSWORD=${DB_PASSWORD}
  volumes:
    - mariadb-data:/var/lib/mysql
  networks:
    - akaunting-network
  restart: unless-stopped

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 akaunting:
5 image: akaunting/akaunting:latest
6 container_name: akaunting
7 environment:
8 - APP_URL=${APP_URL}
9 - LOCALE=en-US
10 - DB_HOST=db
11 - DB_PORT=3306
12 - DB_NAME=akaunting
13 - DB_USERNAME=akaunting
14 - DB_PASSWORD=${DB_PASSWORD}
15 - DB_PREFIX=akaunt_
16 - COMPANY_NAME=${COMPANY_NAME}
17 - COMPANY_EMAIL=${COMPANY_EMAIL}
18 - ADMIN_EMAIL=${ADMIN_EMAIL}
19 - ADMIN_PASSWORD=${ADMIN_PASSWORD}
20 volumes:
21 - akaunting-data:/var/www/html/storage
22 ports:
23 - "8080:80"
24 depends_on:
25 - db
26 networks:
27 - akaunting-network
28 restart: unless-stopped
29
30 db:
31 image: mariadb:10.11
32 container_name: akaunting-db
33 environment:
34 - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
35 - MYSQL_DATABASE=akaunting
36 - MYSQL_USER=akaunting
37 - MYSQL_PASSWORD=${DB_PASSWORD}
38 volumes:
39 - mariadb-data:/var/lib/mysql
40 networks:
41 - akaunting-network
42 restart: unless-stopped
43
44volumes:
45 akaunting-data:
46 mariadb-data:
47
48networks:
49 akaunting-network:
50 driver: bridge
51EOF
52
53# 2. Create the .env file
54cat > .env << 'EOF'
55# Akaunting
56APP_URL=http://localhost:8080
57COMPANY_NAME=My Company
58COMPANY_EMAIL=company@example.com
59ADMIN_EMAIL=admin@example.com
60ADMIN_PASSWORD=secure_admin_password
61
62# Database
63DB_PASSWORD=secure_akaunting_password
64DB_ROOT_PASSWORD=secure_root_password
65EOF
66
67# 3. Start the services
68docker compose up -d
69
70# 4. View logs
71docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/akaunting-accounting/run | bash

Troubleshooting

  • Akaunting installation wizard shows database connection error: Verify DB_PASSWORD matches between akaunting and db services in environment variables
  • Currency conversion rates not updating automatically: Check internet connectivity from akaunting container and verify API rate limits haven't been exceeded
  • Invoice PDF generation fails with memory errors: Increase PHP memory limit by adding PHP_MEMORY_LIMIT environment variable to akaunting service
  • MariaDB container fails to start with 'Table corrupt' errors: Stop containers and run docker exec akaunting-db mysql_upgrade to repair Aria storage engine tables
  • Apps marketplace shows connection timeout: Ensure akaunting container has outbound internet access for marketplace API and verify firewall rules
  • Multi-company setup shows permission denied errors: Check akaunting-data volume permissions and ensure web server user has write access to storage directory

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space