Installation

Installation

Du musst billingcat nur installieren, wenn du es selbst hosten möchtest. Falls du die gehostete Version auf billingcat.de nutzt, kannst du dieses Kapitel überspringen.


1. Quellcode holen

Den Quellcode findest du auf GitHub:

👉 https://github.com/billingcat/crm

git clone https://github.com/billingcat/crm.git
cd crm

2. Konfiguration anlegen

Erzeuge deine eigene Konfigurationsdatei auf Basis des Beispiels:

cp config.toml.example config.toml

Bearbeite anschließend config.toml mit einem Editor deiner Wahl. Die wichtigsten Optionen sind weiter unten im Abschnitt Konfigurationsdatei config.toml beschrieben.

Standardmäßig startet billingcat im development-Modus mit SQLite.


3. Entwicklung: billingcat mit SQLite starten

Für lokale Entwicklung reicht die eingebaute SQLite-Datenbank.

go run -tags sqlite .

Wenn in config.toml nichts am mode geändert wurde, läuft billingcat im development-Modus.

Standardport ist 5555, d. h. die Anwendung ist erreichbar unter:

http://localhost:5555

Admin-Benutzer anlegen

Rufe im Browser folgende URL auf:

http://localhost:5555/register

Der erste registrierte Benutzer wird automatisch als Admin-Benutzer angelegt.


4. Produktion: Migration & Start

Für den Produktionsbetrieb stellst du in config.toml den Modus um:

mode = "production"
# mode = "development"

4.1 Datenbankmigration ausführen

Vor dem ersten Start im Produktionsmodus müssen die Datenbanktabellen angelegt werden:

go run -tags sqlite . -migrate

Wenn du PostgreSQL verwendest, kompilierst du billingcat entsprechend mit -tags postgres (siehe auch Datenbank-Konfiguration weiter unten).

4.2 Binary bauen und starten

Empfohlen für Produktion ist ein kompiliertes Binary:

go build -tags sqlite -o crm .
./crm

Mit PostgreSQL statt SQLite z. B.:

go build -tags postgres -o crm .
./crm

5. PDF-Erstellung (Rechnungen)

Für die Rechnungs-PDFs wird der speedata Publisher verwendet. Dieser wird über eine HTTP-API angesprochen (siehe Felder publishingserveraddress und publishingserverusername in der Konfiguration).

Der speedata Publisher ist als Pro-Paket erhältlich.

Ohne korrekt konfigurierten Publisher können zwar Stammdaten gepflegt werden, aber die PDF-Erstellung von Rechnungen funktioniert nicht.


6. Mailversand

Der Versand von E-Mails (z. B. Rechnungen oder Einladungen) läuft über Mailjet.

Die Zugangsdaten trägst du in config.toml ein:

mailapikey  = "apikey"
mailsecret  = "mailsecret"

Ohne gültige Mailjet-Daten können keine E-Mails versendet werden.


7. Konfigurationsdatei config.toml

Im Folgenden eine kurze Referenz zu den wichtigsten Feldern deiner config.toml. Beispiel:

port = 5555

mode = "production"
# mode = "development"
registrationAllowed = true
useinvitationcodes  = false

basedir = "dir to main.go"
xmldir  = "/tmp/zugferdxml"

# from mailjet
mailapikey = "apikey"
mailsecret = "mailsecret"

publishingserveraddress  = "https://api.speedata.de"
publishingserverusername = "sdapi..."
cookiesecret             = "some secret"


[servers.development]
database = "sqlite3"
dbname   = "test.db"
dblogger = "info"


[servers.production]
database   = "postgresql"
dbname     = "other_db"
dbuser     = "other_app_user"
dbhost     = "localhost"
dbpassword = "supergeheim"
dblogger   = "silent"

7.1 Globale Einstellungen

  • port HTTP-Port, auf dem billingcat lauscht. Standard: 5555.

  • mode Betriebsmodus der Anwendung:

    • "development" – für lokale Entwicklung, ausführlichere Logs.
    • "production" – für Live-Betrieb, ggf. andere Log-Einstellungen usw.
  • registrationAllowed Steuert, ob sich Benutzer selbst registrieren dürfen.

    • true – Registrierung ist erlaubt.
    • false – keine öffentliche Registrierung (Admin legt Benutzer an).
  • useinvitationcodes Legt fest, ob zur Registrierung ein Einladungscode notwendig ist.

    • false – normale Registrierung (sofern registrationAllowed = true).
    • true – Registrierung nur mit gültigem Einladungscode.
  • basedir Basisverzeichnis der Anwendung, typischerweise der Pfad zum Projekt-Root (dort, wo main.go liegt). Wird genutzt, um interne Ressourcen zu finden (Templates, Layouts usw.).

  • xmldir Verzeichnis für temporäre ZUGFeRD-XML-Dateien. Das Verzeichnis muss existieren und vom billingcat-Prozess beschreibbar sein.

  • mailapikey, mailsecret API-Key und Secret von Mailjet für den E-Mail-Versand.

  • publishingserveraddress URL des speedata-Publisher-API-Servers, z. B. https://api.speedata.de.

  • publishingserverusername Benutzername / Token für den speedata-Publisher-Server.

  • cookiesecret Geheimnis für das Signieren und Verschlüsseln der Session-Cookies. Wichtig: In Produktion unbedingt einen langen, zufälligen Wert verwenden und ihn geheim halten.


7.2 Server-spezifische Einstellungen

Die Sektionen [servers.development] und [servers.production] steuern hauptsächlich die Datenbankverbindung und das Logging für die jeweiligen Modi.

[servers.development]

  • database Datenbank-Treiber für den Development-Modus. Typischer Wert: "sqlite3".

  • dbname Datenbank-Datei bzw. Name. Bei SQLite ist das der Dateiname, z. B. "test.db".

  • dblogger Steuerung der Log-Ausgabe der Datenbank. Übliche Werte sind z. B. "info" oder "silent". (Genaue Bedeutungen hängen von der Implementierung ab.)

[servers.production]

  • database Datenbank-Treiber für Produktion. Typischer Wert: "postgresql".

  • dbname Name der Produktionsdatenbank.

  • dbuser, dbpassword Benutzername und Passwort für den Datenbankzugang.

  • dbhost Hostname oder IP-Adresse des Datenbankservers, z. B. "localhost".

  • dblogger Logging-Level für die Datenbank im Produktionsbetrieb, z. B. "silent".


Damit ist billingcat bereit für den Einsatz – ob lokal mit SQLite oder im Produktionssetup mit PostgreSQL. 🚀