SSD Nodes Learn Hosting plans →
Rehberler Matt ConnorYazan Matt Connor · Güncellendi 2026-08-22

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

Invoice Ninja, InvoiceShelf, InvoicePlane, Kimai ve ERPNext yazılımlarını VPS kurulumu, yinelenen faturalama, vergi yönetimi ve lisans koşulları açısından 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 eksiksiz üründür: yinelenen faturalar, müşteri portalı, ödeme ağ geçitleri ve e-fatura formatlarının tümü kurulumun yapıldığı 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 kalem ürün 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 batıran 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ğine dair size hiçbir bildirim gelmez. İ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), biri ise üzerinde yapabilecekleriniz konusunda gerçek kısıtlamaları olan kaynak-erişilebilir (source-available) lisansa sahiptir.

Beş seçenek ve her birinin hedef kitlesi

Invoice Ninja

v5 serisinde yer alan bir Laravel uygulamasıdır. Self-host kurulumu ücretsizdir ve tüm özellikler açıktır: yinelenen 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ımlar. Ücretli olan tek kısım markalamadır. Projenin kendi ifadesiyle: "Uygulamanın müşteri tarafından görünen kısımlarındaki 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 geçerlidir.

En kapsamlı ürünü istiyorsanız ve en büyük yazılım yığınını çalıştırmayı kabul ediyorsanız bunu seçin.

InvoiceShelf

GNU Affero General Public License sürüm 3 (AGPL-3.0) altında lisanslanmış bir Crater çatallamasıdır (fork). Faturalar, tahminler, yinelenen faturalandırma, giderler, vergiler, çoklu para birimi, müşteri portalı ve çoklu şirket desteği sunar. Ödemeler ve white-label özellikleri, her ikisi de AGPL-3.0 lisanslı ve ücretsiz olan ayrı resmi modül depolarında bulunur. Kartlı ödeme işlemleri Stripe checkout üzerinden yürütülür.

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ı ile yayınlanan bir PHP uygulamasıdır. Bu listede dosyaları bir web dizinine (web root) ziple 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 belirtir. 1.6 serisi için yayınlanan gereksinimler, PHP 8.0 ile 8.1 arası ve MySQL 5.5 veya uyumlu bir MariaDB sürümüdür. 1.7 serisi hala geliştirilme aşamasında olduğundan, indirdiğiniz sürümün notlarını mutlaka okuyun.

Paylaşımlı hosting veya 512 MB RAM kapasiteli bir VPS kullanıyorsanız bunu seçin.

Kimai

Zaman çizelgelerinden fatura oluşturan, AGPL-3.0 lisanslı bir zaman takip aracıdır. Saatlik ücretlendirme yapan herkes için doğru çözümdür. Fatura şablonları, belgelerde kabul edilen tek format olduğu belirtilen DOCX, ODS veya XLSX dosyaları olarak yüklenir ve PDF veya HTML formatına dönüştürülür. Faturanızı CSS yazmak yerine bir kelime işlemcide düzenlersiniz; bu çoğu kullanıcı için daha kolaydır.

Kimai'de 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 kapsamlı bir muhasebe sistemindeki belge türlerinden yalnızca biridir. Faturalandırma işin tamamı olmaktan çıktığında doğru çözüm budur. Sekiz müşterisi olan tek bir serbest çalışan için çok ağır bir yazılımdır. 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 durumu, Laravel tabanlı tüm uygulamalarda aynıdır ve sessizce gerçekleşir. Yinelenen faturalar, uygulama dışındaki bir sürecin her dakika çağırması gereken php artisan schedule:run adlı zamanlanmış bir görev tarafından oluşturulur. Eğer bu görevi çağıran bir süreç yoksa, yinelenen fatura listesi bir sonraki gönderim tarihini göstermeye devam eder ve bu tarih öylece geçer. Hiçbir fatura oluşmaz. Hiçbir 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 listelerinde geçen "çoklu para birimi" ifadesi, her yazılım için farklı anlamlar taşıyabilir. Kendi işletmenizden gerçek rakamları kullanarak bir demo kurulumu üzerinde şu dört kontrolü gerçekleştirin; çünkü bu konudaki bir hata, sizin tarafınızdan değil muhasebeciniz tarafından fark edilecektir.

  1. Fatura, düzenlendiği tarihteki 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çılışta değişir ve kayıtlarınız daha önce beyan ettiklerinizle uyumsuz hale gelir.
  2. Vergi kalem bazında mı, fatura bazında mı yoksa her ikisinde birden mi uygulanıyor? Tek bir fatura seviyesinde vergi oranı, bir kalem vergi dışı bırakılana kadar yeterlidir.
  3. Fiyatları vergi dahil ve vergi hariç olarak girebiliyor musunuz? Sonradan dönüştürme yapmak, 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. KDV borcu olmayan başka bir ülkedeki müşteri için belge ne gösteriyor? Fatura üzerinde sadece vergi sütununda bir sıfır değil, 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ıda olduklarından, bu yazılımları 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 ağ geçidi, kayıtlı ödeme yöntemleri ve yinelenen faturalarda otomatik faturalandırma özellikleri ile bu alanda en güçlü seçenektir. InvoiceShelf bir müşteri portalına sahiptir ve ödeme modülü aracılığıyla Stripe checkout desteği sunar. InvoicePlane her fatura için bir misafir bağlantısı sağlar ve Stripe destekler. Kimai'de bu özelliklerin hiçbiri bulunmaz, bu nedenle PDF dosyası ek olarak gönderilir.

Sürekli karıştırılan bir nokta bulunmaktadır. Faturalandırma uygulamasını kendi sunucunuzda barındırmak (self-hosting), kredi kartı numaralarını tuttuğunuz anlamına gelmez. Stripe checkout kullanıldığında müşteri Stripe sayfasına yönlendirilir, kart bilgilerini oraya girer ve VPS sunucunuz 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 dar 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 katmanda gerçekleştirilmelidir.

PDF kalitesi ve düzenleyeceğiniz şablon

Şablonu siz düzenleyeceksiniz. Buradaki varsayılan ayarlar, adresinizi bulunduğunuz ülkeye göre yanlış konuma 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; bu nedenle container boyutu büyüktür. Bunun için bellek ayırın: Başsız bir tarayıcı, yığındaki en ağır süreçtir, bu yüzden 1 GB RAM'e sahip bir VPS oldukça zorlanacaktır. InvoicePlane, tamamen PHP tabanlı olan ve hafif bir çözüm sunan mPDF kullanır; ancak bu durum modern CSS özelliklerinin bazılarını göz ardı etmesine neden olur. Kimai ise tam tersi bir yaklaşım benimser ve DOCX veya ODS dosyası yüklemenizi ister; böylece düzen, stil sayfası yazmayı bilmeyen biri tarafından LibreOffice veya Word üzerinde yapılır.

Eğer tasarlanmış bir fatura sizin için önemliyse ancak 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) izlenebilmesini 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ızda bir sakınca yoktur 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 kademe bulunmaz. Yükümlülük 13. maddededir: kodu değiştirir ve diğer insanları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 kaynak kodu kapsamındadır, bu nedenle çoğu kendi kendine barındırma (self-host) yapan kullanıcı 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 kaldığını 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 metin, 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ş tanesine son bir hafta içinde commit yapılmış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 yazmaktan ziyade bir veri taşıma işlemidir. Crater yerine InvoiceShelf kurun.

Her birini bir VPS üzerinde kurmak

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. Bu adımı atlarsanız uygulama önbelleğini veya oluşturduğu PDF dosyalarını yazamaz. Kurulum sihirbazında veritabanı sunucusu olarak db değerini girin; çünkü compose ağı üzerindeki servis adı budur. Oradaki localhost, doğrudan uygulama konteynerini 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 makine adınızla (hostname) ayarlanmalıdır. Ardından sistemi ayağa kaldırın.

docker compose up -d

Ana makinede 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) destekli bir reverse proxy yerleştirin.

Kimai üretim compose dosyası, proje dokümantasyonundan
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 yönetici hesabını oluşturur; bu nedenle arayüz üzerinden parolayı daha sonra değiştirin ve dosyadan kaldırın.

InvoicePlane konteyner desteğine sahip değildir. Öncelikle 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 adresinizi 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 para kaybettiren bir hata türüdür ve uygulama, faturanın başarıyla gönderildiğini raporlamaya devam eder.

Fatura e-postalarını VPS'in kendi IP adresi üzerinden göndermeyin. Yeni bir VPS IP adresi herhangi bir gönderim geçmişine sahip değildir; büyük alıcılar, bir barındırma aralığından gelen ve bilinmeyen bir adresten gönderilen ilk mesajı varsayılan olarak şüpheli kabul eder. Gönderimi, kimliğini doğruladığınız bir alan adı üzerinden bir SMTP (simple mail transfer protocol) aktarıcısı (relay) ile yapın. Bu süreci uçtan uca yönetmek başlı başına bir rehber konusudur ve self-hosted bir uygulamadan güvenilir şekilde e-posta gönderme rehberi; aktarıcıyı, DNS kayıtlarını ve test süreçlerini kapsamaktadır.

"From" (Gönderen) adresi, çoğu faturalandırma kurulumunda hatanın yapıldığı yerdir. 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 mesajın kimliğini 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

Birincisi, aktarıcınızı belirten bir SPF (sender policy framework) kaydı döndürmelidir. İkincisi, bir DMARC (domain-based message authentication, reporting and conformance) politikası döndürmelidir. Üçüncüsü, 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 mesaj 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 e-posta başlıklarını (raw headers) inceleyin. Authentication-Results başlığındaki dkim=pass ve spf=pass, geçerli olan tek kanıttır. Uygulamanın kendi "gönderildi" işareti, yalnızca mesajı aktarıcıya teslim ettiği anlamına gelir.

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

Bir medya sunucusunu kaybetmek, dosyaları yeniden indirmek anlamına gelir. PhotoPrism veya Immich gibi self-hosted bir fotoğraf sunucusu dahi, genellikle orijinal dosyaların çekildiği telefonda hala var olan ikinci bir kopyasını tutar. Faturalandırma veritabanınızı kaybetmek ise neyi faturalandırdığınızı, ne kadar ödeme aldığınızı veya ne kadar alacağınızın kaldığını gösteremeyeceğiniz anlamına gelir. 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ına geri yüklerseniz, bu değerlerin şifresi çözülmez. Faturalarınızın tamamı mevcuttur ancak geçit ayarlarınız okunamaz haldedir.

InvoiceShelf yığınından alınan bir döküm şu şekilde görünür. 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ın tutarlı bir anlık görüntüsünü onları kilitlemeden 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ına neden olur.

Bunu şifreli restic yedeklemeleri ile sunucu dışı depolama alanına düzenli olarak 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

Bu rehberden vergi tavsiyesi almayın. Aşağıdaki liste, bu yazılımın üretebileceği verileri içerir; bu listeyi size danışmanlık veren kişiye gösterebilirsiniz.

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 bir SQL dosyasını 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, burada listelenen tüm uygulamaların desteklediği iptal veya alacak dekontu yöntemlerini kullanın. Kesintisiz 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ı, tabi olduğunuz kuralların gerektirdiği süre boyunca saklayın. PDF, karşı tarafa gönderilen asıl belgedir ve bir fatura üzerinde ihtilaf çıkması durumunda esas alınacak kanıt budur.

Değişiklik geçmişi. Bir faturayı kimin, ne zaman düzenlediğini görebilmek oldukça değerlidir; bu özellik uygulamalar arasında en çok farklılık gösteren kısımdır. 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 olmaktan çıkıp gerçek bir gereklilik 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 örnekten (self-hosted) Peppol ağı üzerinden gönderim, Invoice Ninja'nın kendi erişim noktası üzerinden gerçekleşir: Kurumunuzu sisteme kaydedip gönderim başına kredi satın alırsınız; dolayısıyla bu, 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 içinde fatura kesiyorsanız Invoice Ninja'yı seçmeniz 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 yazılım arasında geçiş yapmak, yeniden yazım gerektirmeyen basit 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. Self-hosted Invoice Ninja, Elastic License 2.0 kapsamında yinelenen faturalar, müşteri portalı ve ödeme ağ geçitleri dahil olmak üzere hiçbir ücret ödemeden tam işlevsellikle kullanılabilir. Ücretli olan iki nokta vardır. Müşteriye dönük sayfalardan Invoice Ninja markasını kaldırmak için, projenin Ağustos 2026 itibarıyla kendi ifadesiyle "yıllık 40 dolar" olan white-label lisansı gereklidir. Peppol ağı üzerinden e-fatura göndermek 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 "Kimden" (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 sağladığı seçici (selector) altında DKIM kaydını ekleyin. Kendi adresinizi "Kimden" kısmında 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 ile reddetmesine neden olur. Çözümü doğrulamak için bir test mesajının Authentication-Results başlığında dkim=pass ve spf=pass değerlerini bulun.

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 Invoice Ninja'yı seçin.

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ında geri yüklenen bir veritabanı, ödeme ağ geçidi ayarlarınızın okunamaz hale gelmesine neden olur. Yedeklemenin çalıştığından emin olmanın tek yolu, her şeyi bir kez geçici bir sunucuya geri yüklemek ve eski bir faturayı açıp kontrol etmektir.