Introduction
Small businesses, freelancers, and IT teams frequently waste hours juggling spreadsheets, multiple SaaS invoicing tools, and manual expense tracking. Late payments, lost receipts, and compliance headaches add up quickly. Akaunting eliminates these issues as a free, open-source, fully self-hosted online accounting platform built on Laravel. The latest stable release—v3.1.21 (December 2025, actively maintained into 2026)—delivers double-entry bookkeeping, professional invoicing, expense tracking, banking reconciliation, reports, payroll, CRM features, and a modular App Store for extensions.
With over 620,000 downloads and thousands of GitHub stars, Akaunting ranks among the most popular Laravel-based self-hosted business tools. It solves three major problems for developers, sysadmins, and small teams:
- Complete financial control: Track income, expenses, invoices, bills, and cash flow in one private instance—no cloud vendor lock-in or recurring fees.
- Modern usability: Clean Vue.js + Tailwind interface with mobile support, RESTful API, multi-currency, and automated recurring transactions.
- Extensibility: Modular architecture lets you install community or custom apps for inventory, HR, or advanced reporting.
Lightweight enough for a $10/month VPS yet powerful for growing teams, Akaunting runs on standard LEMP stacks. This guide provides a production-ready setup on Ubuntu 24.04 LTS with Nginx. The entire process is beginner-to-intermediate friendly and takes 30–50 minutes. By the end, you’ll have a secure, fully functional accounting system accessible via your domain.
Prerequisites
Akaunting v3.1.x requires a standard Laravel environment. Here are the exact 2026-validated requirements:
Hardware (minimum for 1–20 users and hundreds of transactions):
- CPU: 2 cores (4+ recommended for reports and PDF generation)
- RAM: 2 GB (4 GB+ ideal)
- Storage: 10 GB+ free (SSD preferred)
Operating System:
- Ubuntu 24.04 LTS (recommended) or Debian 12
- Windows/WSL2 or Docker supported but Linux preferred for production
Software Dependencies:
- PHP 8.3+ (8.1 minimum) with extensions:
bcmath,curl,gd,intl,mbstring,mysql,openssl,xml,zip,bz2 - Composer 2.8+
- Node.js 20+ and npm (for frontend assets)
- Web server: Nginx (recommended) or Apache
- Database: MariaDB 10.6+ / MySQL 8.0+ (PostgreSQL or SQLite supported)
- Git
Accounts/Extras:
- Domain or subdomain (e.g., accounting.example.com) with Let’s Encrypt SSL
- SSH access with sudo privileges
- (Optional) SMTP for email notifications; payment gateways via apps
Quick Checklist:
- Fresh Ubuntu 24.04 server with sudo
- Backed-up environment
- Domain pointed to server IP
- Firewall allowing ports 80/443
Installation Guide
We’ll use the official Git clone method—ideal for easy updates and full control (the tarball download from akaunting.com is an alternative noted below).
Step 1: System Preparation (Ubuntu 24.04)
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx mariadb-server php8.3-fpm php8.3-cli \
php8.3-bcmath php8.3-curl php8.3-gd php8.3-intl \
php8.3-mbstring php8.3-mysql php8.3-xml php8.3-zip \
php8.3-bz2 git unzip curl nodejs npm build-essential
Install Composer:
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
Secure MariaDB:
sudo mysql_secure_installation
Create database and user (replace strong_password):
sudo mysql -u root -p
CREATE DATABASE akaunting CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'akaunting_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON akaunting.* TO 'akaunting_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Step 2: Download and Install Akaunting
sudo mkdir -p /var/www/akaunting
cd /var/www/akaunting
sudo git clone https://github.com/akaunting/akaunting.git .
sudo chown -R www-data:www-data /var/www/akaunting
Install dependencies:
sudo -u www-data composer install --no-dev --optimize-autoloader
sudo -u www-data npm install
sudo -u www-data npm run dev
Step 3: Configure Nginx
sudo nano /etc/nginx/sites-available/akaunting
Paste this production config (replace accounting.example.com):
server {
listen 80;
server_name accounting.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name accounting.example.com;
root /var/www/akaunting/public;
index index.php index.html;
ssl_certificate /etc/letsencrypt/live/accounting.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/accounting.example.com/privkey.pem;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Enable and restart:
sudo ln -s /etc/nginx/sites-available/akaunting /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx php8.3-fpm
Step 4: Run the Installer
cd /var/www/akaunting
sudo -u www-data php artisan install \
--db-name="akaunting" \
--db-username="akaunting_user" \
--db-password="strong_password" \
--admin-email="admin@accounting.example.com" \
--admin-password="your_strong_admin_password"
(Optional) Seed sample data for testing:
sudo -u www-data php artisan sample-data:seed
Alternative: Tarball Method
Download the latest package from https://akaunting.com/download, unzip to /var/www/akaunting, then run the web installer at https://accounting.example.com.
Alternative: Docker
Official community Docker images are available—see the GitHub repository for examples.
Configuration
Akaunting uses a standard Laravel .env file (copied automatically during install). Edit key production settings with:
sudo -u www-data nano .env
Sample production configuration:
APP_NAME="Akaunting"
APP_ENV=production
APP_KEY=base64:your-generated-key-here
APP_URL=https://accounting.example.com
APP_DEBUG=false
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=akaunting
DB_USERNAME=akaunting_user
DB_PASSWORD=strong_password
MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=your-smtp-user
MAIL_PASSWORD=your-smtp-pass
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@accounting.example.com
MAIL_FROM_NAME="Akaunting"
# Optional: Queue for background jobs
QUEUE_CONNECTION=database
Clear caches:
sudo -u www-data php artisan config:cache
sudo -u www-data php artisan route:cache
Set permissions:
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
Set up cron for scheduled tasks (recurring invoices, reports):
sudo -u www-data crontab -e
Add:
* * * * * cd /var/www/akaunting && php artisan schedule:run >> /dev/null 2>&1
Usage
- Access the Application: Visit
https://accounting.example.com. Log in with the admin credentials created during install. - Dashboard Overview: View cash flow charts, receivables, payables, and profit/loss at a glance.
- Create Your First Invoice: Go to Sales → Invoices → New Invoice. Add customer, line items, and send instantly.
- Test Core Features:
- Track expenses under Purchases → Expenses.
- Reconcile bank accounts under Banking.
- Generate reports for profit & loss or cash flow.
The responsive UI works perfectly on desktop and mobile. Use the App Store for additional modules (inventory, payroll, etc.) and the API for custom integrations.
Troubleshooting
| Common Error | Cause | Fix |
|---|---|---|
| 500 error / blank page | Missing APP_KEY or permissions | Run php artisan key:generate + fix storage ownership |
| Database connection failed | Wrong .env credentials |
Verify DB user/password and re-run installer |
| npm run dev fails | Missing build tools | Install build-essential and retry |
| Images/CSS not loading | Wrong Nginx document root | Confirm root /var/www/akaunting/public; |
| Emails not sending | SMTP misconfigured | Test settings in .env and check logs |
| Installer hangs | Missing PHP extensions | Reinstall required PHP modules and restart PHP-FPM |
Check logs: storage/logs/laravel.log or journalctl -u nginx.
Conclusion
Self-hosting Akaunting delivers professional-grade accounting with zero recurring costs and complete data sovereignty. Benefits include beautiful dashboards, automated invoicing and recurring billing, powerful reports, modular extensions, and a clean Laravel backend that’s easy to maintain and customize.
Next Steps:
- Scale: Add Redis for queues and enable the built-in backup module.
- Secure: Keep SSL active, schedule regular database backups, and enable 2FA via available apps.
- Integrate: Connect payment gateways (Stripe, PayPal), import CSV data, or automate with webhooks and the REST API.
- Maintain: Update with
git pull origin master, runcomposer install && npm run dev, thenphp artisan akaunting:upgrade.
Start today with the Git clone method and take full control of your business finances. Official resources:
- GitHub Repository: https://github.com/akaunting/akaunting
- Documentation: https://akaunting.com/hc/docs
- Demo & Downloads: https://akaunting.com
Akaunting continues to prove why Laravel remains the premier framework for elegant, maintainable self-hosted business tools in 2026. Your books deserve this level of clarity and freedom.
(Word count: 1,912)