SSD Nodes Learn 🎉 VPS $5.50/aydan başlayan
Rehberler Matt ConnorYazan Matt Connor

En iyi self-hosted faturalandırma yazılımları

Invoice Ninja, InvoiceShelf, InvoicePlane, Kimai ve ERPNext yazılımlarını karşılaştırın. Yinelenen faturalar, vergi yönetimi ve lisans farklarını tek VPS üzerinden inceleyin.

Hangi self-hosted faturalandırma yazılımını seçmelisiniz?

Self-hosted faturalandırma yazılımları söz konusu olduğunda, tek bir VPS üzerinde kullanılabilecek beş gerçekçi seçenek mevcuttur ve bunlar birbirinin tam alternatifi değildir. Invoice Ninja en tamamlanmış üründür: yinelenen faturalar, müşteri portalı, ödeme ağ geçitleri ve e-fatura formatlarının tümü kurulumu yaptığınız gün çalışır durumdadır. InvoiceShelf, daha hafif ve tamamen açık kaynaklı bir seçenektir. InvoicePlane, herhangi bir orkestrasyon gerektirmeyen basit bir PHP uygulamasıdır. Kimai, kalem bazlı ürünler yerine takip edilen saatleri faturalandırır. ERPNext ise fatura da kesebilen tam kapsamlı bir muhasebe sistemidir.

Self-hosted bir faturalandırma kurulumunu, eksik bir özellikten çok daha sık sekteye uğratan iki sorun vardır. Birincisi e-postadır. Spam klasörüne düşen bir fatura, ödenmemiş bir faturadır ve bunun gerçekleştiğini size bildiren hiçbir şey yoktur. İkincisi ise yedeklemelerdir. Bu, kaybı sadece bir rahatsızlık değil, vergi sorunu haline gelen tek self-hosted veritabanıdır.

Özellik listesini okumadan önce lisansı okuyun. Bu beş yazılımdan üçü copyleft, biri izin verici (permissive), diğeri ise üzerinde yapabilecekleriniz konusunda gerçek sınırlamaları olan kaynak-erişilebilir (source-available) lisansa sahiptir.

Beş seçenek ve her birinin hedef kitlesi

Invoice Ninja

Şu anda v5 serisinde olan bir Laravel uygulamasıdır. Self-host edilmesi ücretsizdir ve tüm özellikler açıktır: düzenli faturalar, teklifler, projeler, zaman takibi, giderler, müşteri portalı ve Stripe ile PayPal dahil ödeme ağ geçitleri. Proje kendisini "Laravel ile oluşturulmuş, kaynak kodu erişilebilir bir fatura, teklif, proje ve zaman takibi uygulaması" olarak tanımlamaktadır. Ücretli olan tek kısım markalamadır. Projenin kendi ifadesiyle: "Uygulamanın müşteriyle yüz yüze olan kısımlarından Invoice Ninja markasını kaldırmak için yıllık 40 USD tutarında bir white-label lisansı sunuyoruz". Bu fiyat Ağustos 2026 itibarıyla günceldir.

En kapsamlı ürünü istiyorsanız ve en büyük yığınla (stack) çalışmayı kabul ediyorsanız bunu seçin.

InvoiceShelf

Crater'ın GNU Affero General Public License sürüm 3 (AGPL-3.0) altındaki bir çatalıdır (fork). Faturaları, tahminleri, düzenli faturalandırmayı, giderleri, vergileri, çoklu para birimini, müşteri portalını ve çoklu şirket desteğini kapsar. Ödemeler ve white-label özellikleri, her ikisi de AGPL-3.0 lisanslı ve ücretsiz olan ayrı resmi modül depolarında bulunur. Kartlı ödeme Stripe checkout üzerinden gerçekleştirilir.

Küçük, tamamen açık kaynaklı bir uygulama istiyorsanız ve otuz farklı ödeme ağ geçidine ihtiyacınız yoksa bunu seçin.

InvoicePlane

CodeIgniter üzerinde çalışan, MIT lisansıyla yayınlanan bir PHP uygulamasıdır. Buradaki seçenekler arasında dosyaları bir web kök dizinine (web root) açarak kurulan tek seçenektir. Docker veya Node derleme adımı gerektirmez. PDF'ler mPDF üzerinden oluşturulur, bu nedenle şablonlar HTML ve CSS tabanlıdır. Müşteriler, faturayı görüntülemek ve ödemek için bir misafir bağlantısı alır.

Buradaki zorluk ödemelerdir. Belgeler, InvoicePlane 1.6 sürümünün varsayılan olarak yalnızca Stripe desteklediğini ve diğer sağlayıcıların bu sürümde kaldırıldığını açıkça belirtmektedir. 1.6 serisi için yayınlanan gereksinimler PHP 8.0 ile 8.1 arası ve MySQL 5.5 veya eşdeğeri MariaDB'dir. 1.7 serisi hala geliştirilme aşamasında olduğundan, indirdiğiniz her sürümün notlarını mutlaka okuyun.

Paylaşımlı hosting veya 512 MB RAM'li bir VPS üzerinde çalışıyorsanız bunu seçin.

Kimai

Zaman çizelgelerinden fatura oluşturan bir AGPL-3.0 zaman takip aracıdır. Saat bazlı ücretlendirme yapan herkes için doğru cevaptır. Fatura şablonları, belgelerin de onayladığı üzere kabul edilen tek format olan DOCX, ODS veya XLSX dosyaları olarak yüklenir ve PDF veya HTML olarak çıktı alınır. Faturanızı CSS yazmak yerine bir kelime işlemcide tasarlarsınız; çoğu kişi bunu daha kolay bulur.

Kimai'nin müşteri portalı veya ödeme ağ geçidi yoktur, bu nedenle PDF'i e-posta ile gönderirsiniz. Yapılandırılmış e-fatura özelliği, E-Invoice Plus adlı ücretli bir mağaza eklentisidir. Ağustos 2026 itibarıyla self-hosted kurulumlar için KDV hariç yıllık 99 EUR olarak listelenmiştir ve EN16931, XRechnung, ZUGFeRD, Factur-X ve Peppol profillerini kapsar.

Faturanız, takip edilen zamanın bir çıktısıysa bunu seçin.

ERPNext

GPL-3.0 lisanslı, farklı bir yazılım kategorisidir. Satış faturası; hesap planı, yevmiye kayıtları, stok ve bordro içeren tam teşekküllü bir muhasebe sistemindeki belge türlerinden sadece biridir. Faturalandırma artık işinizin sadece küçük bir parçası haline geldiğinde doğru cevaptır. Sekiz müşterisi olan tek bir serbest çalışan için çok fazla yazılım yükü getirir. Kurulumu başlı başına bir projedir ve VPS üzerinde ERPNext çalıştırma rehberinde ele alınmıştır.

Yinelenen faturalar görünmeyen bir zamanlayıcıya bağlıdır

Invoice Ninja, InvoiceShelf, InvoicePlane ve ERPNext uygulamalarının tümü yinelenen faturalar oluşturur. Kimai'nin çekirdek yapısında yinelenen fatura özelliği yoktur; çünkü Kimai'de fatura, belirli bir dönemdeki zaman çizelgesi kayıtlarından oluşturulur.

Hata modu Laravel tabanlı tüm uygulamalarda aynıdır ve sessizce gerçekleşir. Yinelenen faturalar, uygulama dışından her dakika çağrılması gereken php artisan schedule:run adlı zamanlanmış bir görev tarafından oluşturulur. Eğer bu görevi çağıran bir mekanizma yoksa, yinelenen fatura listesinde bir sonraki gönderim tarihi görünmeye devam eder ve bu tarih öylece geçer. Hiçbir fatura oluşmaz. Kod çalışmadığı için herhangi bir hata günlüğü de tutulmaz.

Bu nedenle, ilk yinelenen faturanızı oluşturduktan sonra bir sonraki gönderim tarihini birkaç dakika sonrasına ayarlayın ve bekleyin. Eğer fatura ulaşmazsa, zamanlayıcı çalışmıyor demektir. Docker kurulumlarında bu durum, genellikle compose dosyasındaki cron veya zamanlayıcı servisinin hiç başlamadığı ya da durduğu anlamına gelir.

docker compose ps
docker compose logs --tail 50

Dosyadaki her servis running durumunu bildirmelidir. exited durumunda takılı kalan bir servis, günlük kayıtlarını incelemeniz gereken servistir.

Çoklu para birimi ve vergi: onaylamadan önce kontrol edilmesi gerekenler

Özellik listeleri "çoklu para birimi" ifadesini kullanır ancak bu ifadeyle birbirinden çok farklı durumları kastederler. Kendi işletmenize ait gerçek rakamları kullanarak bir demo örneği üzerinde şu dört kontrolü gerçekleştirin; çünkü burada yapılacak bir hatayı siz değil, muhasebeciniz fark edecektir.

  1. Fatura, düzenlendiği tarihte geçerli olan döviz kurunu saklıyor mu? Saklamalıdır. Uygulama toplamları canlı kur üzerinden yeniden hesaplıyorsa, geçen çeyreğe ait raporlar her açtığınızda değişir ve kayıtlarınız, daha önce beyan ettiklerinizle uyuşmaz hale gelir.
  2. Vergi kalem bazında mı, fatura bazında mı yoksa her ikisi üzerinden mi uygulanıyor? Tek bir fatura seviyesinde vergi oranı, bir kalem vergi muafiyetine tabi olana kadar yeterlidir.
  3. Fiyatları vergi dahil ve vergi hariç olarak girebiliyor musunuz? Sonradan dönüştürme işlemi, kalem başına bir kuruşluk yuvarlama farklarına yol açar ve bu kuruşlar bir yıl boyunca birikerek büyür.
  4. Başka bir ülkede bulunan ve KDV ödemesi gerekmeyen bir müşteri için belge ne gösteriyor? Vergi sütununda sadece sıfır olması yeterli değildir; faturanın üzerinde muafiyet notunun yazılı olması gerekir.

Invoice Ninja ve ERPNext bu dört maddeyi de karşılar. InvoiceShelf, vergileri ve çoklu para birimini özellikleri arasında listeler. InvoicePlane ve Kimai daha basit yapıdadır; bu nedenle onları en kolay faturanızla değil, en karmaşık faturanızla test edin.

Müşteri portalı ve ödeme ağ geçitleri

Müşteri portalı, müşterinin faturalarını görüntüleyebildiği, PDF olarak indirebildiği ve ödeme yapabildiği bir sayfadır. Bu portal kulağa geldiğinden daha önemlidir; çünkü e-posta yoluyla ödeme takibi yapmak, faturayı oluşturmaktan daha fazla zaman kaybettirir.

Invoice Ninja, tam teşekküllü bir portal, çok sayıda ödeme ağ geçidi, kayıtlı ödeme yöntemleri ve yinelenen faturalar için otomatik faturalandırma özellikleri ile bu konuda en güçlü seçenektir. InvoiceShelf bir müşteri portalına sahiptir ve ödeme modülü aracılığıyla Stripe checkout desteği ekler. InvoicePlane her fatura için bir misafir bağlantısı sunar ve Stripe destekler. Kimai'de ise bu özelliklerin hiçbiri bulunmaz, bu nedenle PDF bir ek olarak gönderilir.

Sürekli karıştırılan bir nokta vardır. Faturalandırma uygulamasını self-host etmek, kart numaralarını sakladığınız anlamına gelmez. Stripe checkout kullanıldığında müşteri Stripe sayfasına yönlendirilir, kart bilgilerini oraya girer ve VPS'niz kart numarasını hiçbir zaman görmez. Ödeme formunu kendiniz oluşturmadığınız için PCI (ödeme kartı endüstrisi) kapsamınız küçük kalır. İleride birden fazla işlemciye ihtiyaç duyarsanız veya ödemeleri ülkeye göre yönlendirmek isterseniz, bu işlem Hyperswitch ile self-hosted ödeme orkestrasyonu gibi ayrı bir katmanın konusudur.

PDF kalitesi ve düzenleyeceğiniz şablon

Şablonu siz düzenleyeceksiniz. Buradaki her varsayılan ayar, adresinizi ülkenize göre yanlış yere yerleştirir.

Invoice Ninja, HTML ve CSS şablonlarını PDF'e dönüştürmek için imajın içine gömülü, başsız (headless) bir Chromium kullanır; konteynerin boyutunun büyük olmasının nedeni budur. Bunun için bellek ayırın: Başsız bir tarayıcı, yığındaki en ağır süreçtir, bu nedenle 1 GB'lık bir VPS oldukça kısıtlı kalacaktır. InvoicePlane, saf PHP olan ve hafif çalışan ancak bazı modern CSS özelliklerini görmezden gelen mPDF kullanır. Kimai ise tam tersi bir yaklaşım benimser ve bir DOCX veya ODS dosyası yüklemenizi sağlar; böylece düzenleme, stil sayfası yazmamış biri tarafından LibreOffice veya Word üzerinde yapılır.

Eğer tasarlanmış bir fatura sizin için önemliyse ve CSS önemli değilse, Kimai'nin yaklaşımı daha avantajlıdır. Eğer şablonun sürüm kontrolünde olmasını ve farklarının (diff) görülebilmesini istiyorsanız, HTML yaklaşımı daha uygundur.

Lisans ticari kullanıma izin veriyor mu?

Beş yazılımın tamamı kendi müşterilerinize fatura kesmenize olanak tanır. Farklılıklar, bunun ötesine geçtiğinizde ortaya çıkar.

Invoice Ninja, Elastic License 2.0 altındadır. İki madde önem taşır.

Yazılımı, kullanıcılara yazılımın özelliklerinin veya işlevlerinin önemli bir kısmına erişim sağlayan barındırılan veya yönetilen bir hizmet olarak üçüncü taraflara sunamazsınız.
Yazılımdaki lisans anahtarı işlevini taşıyamaz, değiştiremez, devre dışı bırakamaz veya atlatamazsınız.

Dolayısıyla, yazılımı kendi işiniz için çalıştırmanız sorun teşkil etmez; ancak müşteriler için bir ürün olarak örnekler (instance) çalıştırmanız yasaktır. İkinci madde, marka işaretlerini kaldırmanın kaynak kod üzerinde bir yama yapmak yerine neden 40 dolarlık bir lisans gerektirdiğinin nedenidir.

InvoiceShelf, Kimai ve Crater, AGPL-3.0 lisansına sahiptir. Ticari kullanım ücretsizdir ve üzerinizde herhangi bir üst katman bulunmaz. Yükümlülük 13. maddededir: kodu değiştirir ve başkalarının değiştirdiğiniz sürümü bir ağ üzerinden kullanmasına izin verirseniz, onlara yaptığınız değişikliklerin kaynak kodunu sunmanız gerekir. Değiştirilmemiş bir örnek zaten yukarı akışın (upstream) herkese açık kaynağı kapsamındadır, bu nedenle çoğu self-host kullanıcısı bu durumla karşılaşmaz.

InvoicePlane, gruptaki en hafif yükümlülüğe sahip olan MIT lisanslıdır; ancak README dosyası, isim ve logonun projeye ait olduğunu belirtir.

ERPNext, GPL-3.0 lisanslıdır. Dağıttığınız değişikliklerin paylaşılması gerekir; özel olarak çalıştırmanın ise herhangi bir yükümlülüğü yoktur.

Bu, lisans metninin bir açıklamasıdır ve hukuki tavsiye niteliği taşımaz.

Proje hala güncel mi? Commit günlüğünü kontrol edin

Crater, birkaç yıl boyunca popüler bir açık kaynak faturalandırma uygulamasıydı ve birçok rehber hala bu uygulamayı önermektedir. Varsayılan dalında 741 gündür herhangi bir commit yapılmamıştır.

ChartGap since the last commit on the default branch, in days, checked 21 August 2026
The data behind this chart
[
  {
    "label": "ERPNext",
    "commit_gap": 0
  },
  {
    "label": "Invoice Ninja",
    "commit_gap": 1
  },
  {
    "label": "Kimai",
    "commit_gap": 1
  },
  {
    "label": "InvoicePlane",
    "commit_gap": 3
  },
  {
    "label": "InvoiceShelf",
    "commit_gap": 4
  },
  {
    "label": "Crater",
    "commit_gap": 741
  }
]

Bu bloktaki 6 proje arasından beş tanesi son bir hafta içinde commit almıştır. InvoiceShelf, Crater'ın çalışmalarını aynı AGPL-3.0 lisansı ve aynı veri modeliyle devam ettiren çatallanmış (fork) sürümdür; bu nedenle geçiş yapmak, yeniden yazım gerektirmeyen bir veri taşıma işlemidir. Crater yerine InvoiceShelf kurun.

Her birinin bir VPS üzerine kurulması

InvoicePlane dışındaki her şey Docker Compose altında en kolay şekilde çalışır. Eğer bu sizin için yeniyse, bir VPS üzerinde ilk Docker Compose yığını ile başlayın ve buraya geri dönün.

Invoice Ninja kendi compose deposuyla gelir.

git clone https://github.com/invoiceninja/dockerfiles.git
cd dockerfiles
docker run --rm -it invoiceninja/invoiceninja php artisan key:generate --show

Bu anahtarı, gerçek APP_URL değerinizle birlikte depodaki env dosyasına kopyalayın. Ardından imajın beklediği sahiplik ayarlarını yapın ve başlatın.

chmod 755 docker/app/public
sudo chown -R 1500:1500 docker/app
docker compose up -d

1500:1500 sahipliği, imaj içindeki kullanıcıyla eşleşmelidir. Bunu atlarsanız uygulama önbelleğini veya oluşturduğu PDF dosyalarını yazamaz. Kurulum sihirbazında veritabanı ana bilgisayarı olarak db değerini girin, çünkü compose ağındaki servis adı budur. Oradaki localhost, doğrudan uygulama konteynerinin kendisine işaret eder.

InvoiceShelf, veritabanı motoru başına bir tane olacak şekilde hazır compose dosyaları yayınlar.

curl -fLO https://raw.githubusercontent.com/InvoiceShelf/docker/master/docker-compose.mysql.yml
mv docker-compose.mysql.yml docker-compose.yml

Başlatmadan önce bu dosyayı açın. İçindeki her parola bir yer tutucudur ve dosya kendi yorum satırlarında bunu belirtir. APP_URL, SESSION_DOMAIN ve SANCTUM_STATEFUL_DOMAINS varsayılan olarak localhost değerindedir ve her üçü de ilk girişten önce gerçek ana bilgisayar adınızla ayarlanmalıdır. Ardından sistemi ayağa kaldırın.

docker compose up -d

Ana bilgisayarda 8090 numaralı portu yayınlar ve konteyner içinde 8080 üzerinden hizmet verir. Tek bir istemciyi bile yönlendirmeden önce önüne TLS (taşıma katmanı güvenliği) içeren bir reverse proxy yerleştirin.

Proje dokümantasyonundan Kimai üretim compose dosyası
services:

  sqldb:
    image: mysql:8.3
    volumes:
      - mysql:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=kimai
      - MYSQL_USER=kimaiuser
      - MYSQL_PASSWORD=kimaipassword
      - MYSQL_ROOT_PASSWORD=changemeplease
    command: --default-storage-engine innodb
    restart: unless-stopped
    healthcheck:
      test: mysqladmin -uroot -p$$MYSQL_ROOT_PASSWORD ping -h 127.0.0.1 --silent
      interval: 10s
      timeout: 5s
      retries: 12
      start_period: 30s

  kimai:
    image: kimai/kimai2:stable
    depends_on:
      sqldb:
        condition: service_healthy
        restart: true
    volumes:
      - data:/opt/kimai/var/data
      - plugins:/opt/kimai/var/plugins
    ports:
      - 8001:8001
    environment:
      - APP_SECRET=your-fantastic-long-random-and-ultra-secure-secret
      - TRUSTED_HOSTS=kimai.example.com
      - ADMINMAIL=admin@example.com
      - ADMINPASS=changemeplease
      - DATABASE_URL=mysql://kimaiuser:kimaipassword@sqldb/kimai?charset=utf8mb4&serverVersion=8.3.0
    restart: unless-stopped

volumes:
  data:
  mysql:
  plugins:

APP_SECRET değerini kendi oluşturduğunuz uzun ve rastgele bir diziyle, TRUSTED_HOSTS değerini ise gerçekten kullanacağınız alan adıyla değiştirin. ADMINMAIL ve ADMINPASS ilk açılışta ilk yöneticiyi oluşturur, bu nedenle sonrasında arayüzden bu parolayı değiştirin ve dosyadan kaldırın.

InvoicePlane'in konteyneri yoktur. Önce boş bir veritabanı oluşturun.

sudo mysql -e "CREATE DATABASE invoiceplane CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

Arşivi projenin sürümler sayfasından indirin, web kök dizininize çıkartın, ipconfig.php.example dosyasını ipconfig.php olarak kopyalayın ve dosyadaki yorumları takip ederek URL'nizi ayarlayın. Ardından https://your-domain.example/index.php/setup dosyasını açın ve kurulum sihirbazını tamamlayın.

Faturanız neden spam klasörüne düşer

Bu, size maddi kayıp yaşatan bir başarısızlıktır ve uygulama, faturayı başarıyla gönderilmiş gibi raporlamaya devam eder.

Fatura postalarını VPS'in kendi IP adresinden göndermeyin. Yeni bir VPS IP adresinin gönderim geçmişi yoktur; büyük alıcılar, bir barındırma aralığından gelen ve bilinmeyen bir adresten gönderilen ilk iletiyi varsayılan olarak şüpheli kabul eder. Kimliğini doğruladığınız bir alan adı üzerinden bir SMTP (simple mail transfer protocol) aktarıcısı (relay) kullanın. Bunu uçtan uca yapılandırmak başlı başına bir rehber konusudur ve self-hosted bir uygulamadan güvenilir şekilde posta gönderme rehberi; aktarıcıyı, DNS kayıtlarını ve test süreçlerini kapsamaktadır.

From adresi, faturalandırma kurulumlarında en sık hata yapılan kısımdır. Bu adres, kontrolünüz altında olan ve aktarıcınızın DKIM (domainkeys identified mail) ile imzaladığı bir alan adına ait olmalıdır. Müşterinin kendi adresini From kısmına yazmak nazik bir davranış gibi görünse de teslimatı engeller; çünkü alıcı sunucu, From alanındaki alan adı ile iletiyi doğrulayan alan adının eşleşip eşleşmediğini kontrol eder. Gmail, bu uyumsuzluğu doğrudan reddeder:

550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policy

Kendi adresinizi From kısmında tutun ve müşteriyi Reply-To kısmına ekleyin. Gerçek bir gönderim yapmadan önce yayınladığınız kayıtları kontrol edin.

dig +short TXT example.com
dig +short TXT _dmarc.example.com
dig +short TXT selector1._domainkey.example.com

İlk komut, aktarıcınızı belirten bir SPF (sender policy framework) kaydı döndürmelidir. İkinci komut, bir DMARC (domain-based message authentication, reporting and conformance) politikası döndürmelidir. Üçüncü komut ise aktarıcınızın size verdiği seçiciye (selector) bağlıdır; boş bir yanıt, DKIM kaydının eksik olduğu veya yanlış isimle yayınlandığı anlamına gelir; bu durumda gönderdiğiniz her ileti imza kontrolünden geçemeyecektir.

Ardından, büyük bir sağlayıcıda sahip olduğunuz bir hesaba gerçek bir fatura gönderin ve ham başlıkları (raw headers) inceleyin. Authentication-Results başlığındaki dkim=pass ve spf=pass değerleri, geçerli olan tek kanıttır. Uygulamanın kendi "gönderildi" işareti, yalnızca iletinin aktarıcıya teslim edildiği anlamına gelir.

Yedeklemeler: kaybetmeyi göze alamayacağınız tek veritabanı

Bir medya sunucusunu kaybetmek, dosyaları yeniden indirmek anlamına gelir. Faturalandırma veritabanını kaybetmek ise neyi faturalandırdığınızı, neyin ödemesini aldığınızı veya ne kadar alacağınızın kaldığını kanıtlayamamanız demektir. Buna göre hareket edin.

Dört şeyi yedekleyin. Veritabanı. Logoları, oluşturulan PDF'leri ve gider makbuzlarını tutan depolama birimi. Uygulamanın environment dosyası. Ve normal dosyalar olarak saklanan oluşturulmuş PDF'ler; çünkü bir PDF, onu üreten uygulama olmasa bile on yıl sonra açılabilir.

Environment dosyası, insanların beklediğinden daha önemlidir. Laravel, ödeme geçidi kimlik bilgileri de dahil olmak üzere hassas saklanan değerleri, o dosyadaki APP_KEY kullanarak şifreler. Veritabanını yeni oluşturulmuş bir anahtarın yanında geri yüklerseniz, bu değerlerin şifresi çözülmez. Faturalarınızın tamamı yerindedir ancak geçit ayarlarınız okunamaz haldedir.

InvoiceShelf yığınından alınan bir döküm şu şekildedir. Veritabanı servisi mariadb:10 üzerinde çalışır, bu nedenle container içindeki araç mariadb-dump'tür.

docker compose exec -T database mariadb-dump \
  --user=root --password=YOUR_ROOT_PASSWORD \
  --single-transaction --databases invoiceshelf > invoiceshelf.sql

--single-transaction, InnoDB tablolarını kilitlemeden tutarlı bir anlık görüntü alır; böylece döküm çalışırken uygulama hizmet vermeye devam eder. -T, Docker'ın bir terminal ayırmasını engeller; aksi takdirde bu durum yönlendirilen çıktıyı bozar ve içe aktarılamayacak bir döküm dosyasıyla sonuçlanır.

Bunu bir zaman çizelgesine bağlı olarak sunucu dışı depolama alanına şifreli restic yedeklemeleri ile sunucudan dışarı gönderin ve saklama süresini muhasebecinizin belirttiği dönemi kapsayacak kadar uzun tutun.

Ardından geri yükleyin. Dökümü geçici bir container içinde ayağa kaldırın, giriş yapın ve geçen ayın faturasını açın. Bunu bir kez yapana kadar, yedeğin çalışıp çalışmadığını bilemezsiniz.

Muhasebecinizin talep edeceği bilgiler

Bir eğitim dokümanından vergi tavsiyesi almayın. Aşağıdakiler, bu yazılımın üretebildiği verilerdir; bu listeyi danışmanınızla paylaşabilirsiniz.

Dışa aktarılabilir veriler. Faturalarınızı ve ödemelerinizi, bir veritabanı istemcisine ihtiyaç duymadan veya destek talebi açmadan, arayüz üzerinden CSV formatında dışa aktarabilmelisiniz. SQL dökümü bir yedeklemedir, dışa aktarma değildir; çünkü muhasebeciniz bunu açamaz.

Değiştirilemez numaralandırma. Fatura numaraları sıralı ilerlemeli, asla yeniden kullanılmamalı ve aralarında boşluk olmamalıdır. Bir faturayı silmek, açıklanması gereken bir boşluk bırakır. Bunun yerine iptal veya alacak dekontu oluşturun; bu rehberdeki tüm uygulamalar bunu destekler. Boşluksuz numaralandırma zorunluluğu kayıtlı olduğunuz bölgeye göre değişir, bunu erkenden sormanızda fayda vardır.

Saklama. Veritabanı dökümlerini ve oluşturulan PDF dosyalarını, mevzuatınızın gerektirdiği süre boyunca saklayın. PDF, karşı tarafa gönderilen asıl belgedir ve bir fatura üzerinde anlaşmazlık çıkması durumunda esas alınacak kanıt budur.

Değişiklik geçmişi. Bir faturayı kimin ve ne zaman düzenlediğini görebilmek önemlidir; bu özellik uygulamalar arasında farklılık gösterir. Invoice Ninja, kayıt bazlı bir etkinlik günlüğü tutar.

Yapılandırılmış e-fatura, AB'nin bazı bölgelerinde artık isteğe bağlı bir özellik değil, gerçek bir zorunluluk haline gelmiştir. Invoice Ninja; ZUGFeRD, XRechnung, Facturae, FatturaPA ve genel EN16931 standartlarını kapsayan yaygın formatları üretir. Kendi sunucunuzda barındırdığınız bir örnek üzerinden Peppol ağı ile gönderim, Invoice Ninja'nın kendi erişim noktası üzerinden gerçekleşir: Kurumunuzu sisteme kaydettirip gönderim başına kredi satın almanız gerekir; bu nedenle Ağustos 2026 itibarıyla ücretli bir hizmettir. Kimai, aynı formatlara ücretli eklentisi aracılığıyla ulaşır. Diğer üç uygulama ise günümüzde herhangi bir yapılandırılmış e-fatura üretmemektedir; bu durum, AB sınırları içerisinde fatura kesiyorsanız Invoice Ninja'yı tercih etmeniz için en güçlü nedendir.

FAQ

Crater mı yoksa InvoiceShelf mi kurmalıyım?

InvoiceShelf. Crater projesinin varsayılan dalına 21 Ağustos 2026 itibarıyla 741 gündür hiçbir commit gönderilmemiştir ve projenin kendi hata takip sistemi kullanıcıları çatallanmış (fork) sürüme yönlendirmektedir. InvoiceShelf, aynı AGPL-3.0 lisansına ve aynı veri modeline sahiptir; bu nedenle iki uygulama arasında geçiş yapmak, yeniden yazım gerektirmeyen bir veritabanı taşıma işlemidir. Crater'ı hala öneren tüm kılavuzlar, proje sessizliğe gömülmeden önce yazılmıştır.

Invoice Ninja'yı kendi işim için ücret ödemeden kullanabilir miyim?

Evet. Kendi sunucunuzda barındırdığınız (self-hosted) Invoice Ninja, Elastic License 2.0 kapsamında yinelenen faturalar, müşteri portalı ve ödeme ağ geçitleri dahil olmak üzere tam işlevsellikle ücretsiz olarak kullanılabilir. Ücretli olan iki nokta vardır. Müşteriye yönelik sayfalardan Invoice Ninja markasını kaldırmak için, projenin Ağustos 2026 itibarıyla belirttiği üzere yıllık 40 dolar tutarındaki "white-label" lisansı gereklidir. Peppol ağı üzerinden e-fatura gönderimi ise ayrı bir ücretlendirmeye tabidir. Lisansın yasakladığı tek şey, yazılımı başkaları için barındırılan bir servis olarak çalıştırmaktır.

Fatura e-postalarım neden spam klasörüne düşüyor?

Bunun nedeni neredeyse her zaman, mesajın "Gönderen" (From) adresindeki alan adı için doğrulanmamış olmasıdır. E-postaları doğrudan VPS üzerinden değil, bir SMTP aktarıcısı (relay) üzerinden gönderin; ardından alan adınız için SPF ve DMARC kayıtlarını yayınlayın ve aktarıcınızın size verdiği seçici (selector) altında DKIM kaydını ekleyin. "Gönderen" kısmında kendi adresinizi tutun ve müşteriyi "Yanıtla" (Reply-To) kısmına ekleyin. Müşterinin adresini gönderen olarak ayarlamak, Gmail'in mesajı 550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policy hatasıyla reddetmesine neden olur. Çözümü doğrulamak için bir test mesajının Authentication-Results başlığında dkim=pass ve spf=pass ifadelerini arayın.

Saatlik ücretlendirme yapıyorsam hangisini seçmeliyim?

Kimai. Kimai öncelikle bir zaman takip aracıdır; bu nedenle fatura, onaylanmış zaman çizelgesi kayıtlarından oluşturulur ve kalemler, kaydettiğiniz işlerden oluşur. Şablonlar, bir kelime işlemcide tasarladığınız DOCX, ODS veya XLSX dosyalarıdır; bu, CSS düzenlemekten daha kolaydır. Bunun karşılığında Kimai'nin müşteri portalı ve ödeme ağ geçidi yoktur; dolayısıyla PDF'i e-posta ile gönderir ve ödemeyi havale ile alırsınız. Invoice Ninja da zaman takibi yapar ve bir portala sahiptir; bu nedenle çevrimiçi kredi kartı ile ödeme almak, zaman çizelgesi detayından daha önemliyse onu tercih edin.

Tam olarak neleri yedeklemem gerekiyor?

Veritabanı, logoları ve oluşturulan PDF'leri tutan depolama birimi, environment dosyası ve düz dosyalar olarak saklanan oluşturulmuş PDF'ler. İnsanların gözden kaçırdığı dosya environment dosyasıdır: Invoice Ninja ve InvoiceShelf gibi Laravel uygulamaları, saklanan kimlik bilgilerini APP_KEY ile şifreler; bu nedenle yeni oluşturulmuş bir anahtarın yanına geri yüklenen bir veritabanı, ödeme ağ geçidi ayarlarınızı okunamaz hale getirir. Tüm yedeği bir kez geçici bir sunucuya geri yükleyin ve eski bir faturayı açın; çünkü yedeğin çalıştığını anlamanın tek yolu budur.

#invoicing#self-hosting#small-business#docker#accounting