Zum Inhalt springen
Provomatic Provomatic

Installation

Provomatic läuft auf deinem eigenen Server. Du bereitest den Server mit ein paar Befehlen vor, den Rest erledigt der Web-Installer im Browser. Mit etwas Linux-Erfahrung dauert das etwa 10 Minuten.

Hinweis zur Beta: Diese Anleitung beschreibt die Installation für Beta-Teilnehmer. Zur Version 1.0 kommt ein fertiges Paket mit gebauten Dateien und ein Updater im Admin; Code holen und Updates werden dann kürzer.

Voraussetzungen

BetriebssystemLinux, getestet mit Debian 12 und Ubuntu 24.04
PHP8.3 oder 8.4 mit php-fpm und den Erweiterungen ctype, curl, dom, fileinfo, filter, gd, iconv, intl, libxml, mbstring, openssl, pdo_mysql, session, simplexml, sodium, tokenizer, xmlreader, zip und zlib
DatenbankMariaDB 10.6+ oder MySQL 8.0+
Webservernginx (oder Apache) mit HTTPS, z. B. mit einem Zertifikat von Let’s Encrypt
ZertifikateDas Paket ca-certificates: Ohne Zertifikatspaket erreicht PHP weder Zahlungsanbieter noch Registrare oder Panels („cURL error 60“)
WerkzeugeComposer 2; Node.js 20+ nur, wenn du die Oberfläche selbst baust
Serverab 2 GB RAM und 10 GB Speicher; ausgehende HTTPS-Verbindungen zu Zahlungsanbietern, Panels und dem Lizenzserver
DomainEine eigene Domain oder Subdomain, z. B. billing.deinhosting.de – die Lizenz gilt für genau eine Domain

Provomatic sollte auf einem eigenen Server oder einer eigenen VM laufen, nicht auf demselben Server wie dein Game-Panel.

Server vorbereiten

1. Pakete installieren

Beispiel für Debian oder Ubuntu mit PHP 8.4 (aus der Distribution oder dem sury.org-Repository):

bash
apt install nginx mariadb-server ca-certificates unzip git composer \
  php8.4-fpm php8.4-cli php8.4-mysql php8.4-intl php8.4-gd php8.4-mbstring \
  php8.4-xml php8.4-zip php8.4-curl php8.4-bcmath

2. Datenbank anlegen

bash
mariadb -e "CREATE DATABASE provomatic CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  CREATE USER provomatic@localhost IDENTIFIED BY 'EIN-LANGES-PASSWORT';
  GRANT ALL ON provomatic.* TO provomatic@localhost;"

Zugangsdaten notieren: Der Web-Installer fragt sie gleich ab.

3. Code holen

Entpacke das Release-Paket nach /var/www/provomatic oder hole den Code per git:

bash
git clone <repository> /var/www/provomatic && cd /var/www/provomatic
composer install --no-dev --optimize-autoloader
npm ci && npm run build      # mit dem Release-Paket nicht nötig
chown -R www-data:www-data storage bootstrap/cache
cp .env.example .env && chown www-data:www-data .env

Die Datei .env muss dem Benutzer des Webservers gehören: Dort speichert der Installer Datenbank, Adresse, Mailserver und den Schlüssel, mit dem Provomatic Zugangsdaten verschlüsselt.

Webserver

Beispiel für nginx (/etc/nginx/sites-available/provomatic, danach nach sites-enabled verlinken). Das Wurzelverzeichnis ist immer der Ordner public:

nginx
server {
    listen 80;
    server_name billing.deinhosting.de;
    root /var/www/provomatic/public;
    index index.php;
    client_max_body_size 32m;
    location / { try_files $uri $uri/ /index.php?$query_string; }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
        fastcgi_read_timeout 300;   # das Anlegen der Tabellen im Installer kann eine Minute dauern
    }
    location ~ /\.(?!well-known) { deny all; }
}

Danach HTTPS einrichten, z. B. mit certbot --nginx -d billing.deinhosting.de.

Web-Installer

Rufe jetzt deine Adresse im Browser auf, z. B. https://billing.deinhosting.de. Bis die Installation fertig ist, führt jede Seite zu /install. Jeder Schritt prüft, dass die vorherigen erledigt sind:

Systemprüfung

PHP-Version, alle Erweiterungen, beschreibbare Ordner, gebaute Oberfläche, Zertifikatspaket und eine HTTPS-Verbindung zu Stripe, PayPal und Mollie. Was fehlt, ist rot markiert und mit einem Hinweis zur Lösung versehen.

Datenbank und Adresse

Der Installer testet die Verbindung zur Datenbank, bevor er die .env schreibt. Setze den Haken für den Proxy, wenn Cloudflare oder ein Load Balancer vor dem Server HTTPS beendet.

Tabellen

Legt Tabellen, Rechte und Themes an.

Mailversand

Der SMTP-Server deines Mailanbieters. Vor dem Speichern geht eine Testmail raus. Du kannst den Schritt überspringen; dann landen Bestätigungen, Rechnungen und Erinnerungen nur im Log, und dein Team bekommt einen Alarm, bis der Mailversand eingerichtet ist.

Administrator

Das erste Mitarbeiterkonto. Damit ist die Installation abgeschlossen.

Danach sperrt sich der Installer: /install und jede Schritt-Adresse antworten mit 404. Eine Datenbank, in der es schon Mitarbeiterkonten gibt, gilt ebenfalls als installiert – der Installer öffnet sich nie über bestehenden Daten. Starte ihn direkt nach dem Vorbereiten des Servers, denn bis er fertig ist, könnte ihn jeder ausführen, der den Server erreicht.

Ohne Browser geht es auch auf der Kommandozeile: .env von Hand ausfüllen, dann php artisan migrate --force und php artisan provomatic:create-admin.

Cronjob und Queue

Provomatic erledigt Abrechnung, Bereitstellung, Webhooks und E-Mails im Hintergrund. Dafür braucht es einen Cronjob und einen dauerhaft laufenden Queue-Worker. Die letzte Seite des Installers zeigt beide mit den richtigen Pfaden für deinen Server.

Cronjob (/etc/cron.d/provomatic):

bash
* * * * * www-data cd /var/www/provomatic && php artisan schedule:run >> /dev/null 2>&1

Queue-Worker als systemd-Dienst (/etc/systemd/system/provomatic-queue.service):

bash
[Unit]
Description=Provomatic queue worker
After=network.target mariadb.service

[Service]
User=www-data
WorkingDirectory=/var/www/provomatic
ExecStart=/usr/bin/php artisan queue:work --sleep=3 --tries=1 --max-time=3600
Restart=always

[Install]
WantedBy=multi-user.target
bash
systemctl daemon-reload && systemctl enable --now provomatic-queue

Steht der Scheduler oder der Worker, meldet Provomatic das deinem Team im Admin. Für eine Überwachung von außen gibt es den Endpunkt /health (siehe Betrieb und Überwachung).

Einrichtung im Admin

Melde dich unter /admin an und richte die Zwei-Faktor-Anmeldung ein. Danach führt dich der Einrichtungsassistent durch die Grundeinstellungen:

  1. Unternehmen: Name, Anschrift, Kontakt, Bankverbindung – erscheint auf Rechnungen und im Impressum.
  2. Steuern: Regelbesteuerung oder Kleinunternehmer, USt-IdNr., Steuernummer, OSS.
  3. Rechnungen: Nummernkreise, Zahlungsziel, Design und Fußzeile.
  4. Planer: Cronjob und Queue-Worker mit den Pfaden deines Servers.
  5. Sprache und Währung.

Danach legst du unter Infrastruktur → Server dein Panel an, unter Katalog Produktgruppen und Produkte, unter Einstellungen → Zahlungen deine Zahlungsanbieter (siehe Zahlungen einrichten) und unter Shop-Website → Rechtstexte Impressum, AGB, Datenschutz und Widerrufsbelehrung.

Lizenz

Den Lizenzschlüssel trägst du im Admin auf der Seite Lizenz ein. Er gilt für genau eine Domain. Provomatic bestätigt die Lizenz regelmäßig beim Lizenzserver; dabei werden Lizenzschlüssel, Domain und Version übertragen, keine Kunden- oder Umsatzdaten. Ohne Lizenz läuft Provomatic im Testmodus.

Updates

Bis zum Updater in Version 1.0 spielst du Updates so ein (vorher sichern, siehe unten):

bash
cd /var/www/provomatic
php artisan down --retry=10 --refresh=10
git pull                                     # oder das neue Release-Paket über das alte entpacken
composer install --no-dev --optimize-autoloader
npm ci && npm run build                      # mit dem Release-Paket nicht nötig
php artisan migrate --force
php artisan provomatic:sync-permissions
php artisan provomatic:sync-themes
chown -R www-data:www-data storage bootstrap/cache
sudo -u www-data php artisan optimize
sudo -u www-data php artisan filament:optimize
php artisan queue:restart                    # der Worker lädt den neuen Code
systemctl reload php8.4-fpm                  # leert den OPcache
php artisan up

Scheitert eine Migration, bleibt Provomatic im Wartungsmodus: Datenbank-Sicherung zurückspielen, alten Code wiederherstellen, php artisan up.

Sicherung

Sichere jede Nacht diese vier Dinge und lege eine Kopie auf einem anderen Server ab:

WasWarum
Datenbank (mysqldump --single-transaction provomatic)Kunden, Verträge, Rechnungen, Audit-Log
storage/app/privateRechnungs-PDFs und E-Rechnungen; Rechnungen sind 10 Jahre aufzubewahren
storage/app/publicHochgeladene Bilder (Logos, Seiten)
.envVor allem APP_KEY: Ohne ihn lassen sich verschlüsselte Daten wie Panel- und Registrar-Schlüssel nicht mehr lesen

Kunden können eine Rechnung nur herunterladen, solange ihr PDF zur beim Festschreiben gespeicherten Prüfsumme passt. Eine Wiederherstellung mit fehlenden oder veränderten Dateien fällt also sofort auf.

Interesse an der Beta?

Provomatic ist in Entwicklung. Schreib uns, wenn du es vor dem Start mit deinem Hosting-Unternehmen testen möchtest.

Kontakt aufnehmen