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
| Betriebssystem | Linux, getestet mit Debian 12 und Ubuntu 24.04 |
|---|---|
| PHP | 8.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 |
| Datenbank | MariaDB 10.6+ oder MySQL 8.0+ |
| Webserver | nginx (oder Apache) mit HTTPS, z. B. mit einem Zertifikat von Let’s Encrypt |
| Zertifikate | Das Paket ca-certificates: Ohne Zertifikatspaket erreicht PHP weder Zahlungsanbieter noch Registrare oder Panels („cURL error 60“) |
| Werkzeuge | Composer 2; Node.js 20+ nur, wenn du die Oberfläche selbst baust |
| Server | ab 2 GB RAM und 10 GB Speicher; ausgehende HTTPS-Verbindungen zu Zahlungsanbietern, Panels und dem Lizenzserver |
| Domain | Eine 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):
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
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:
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:
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):
* * * * * 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):
[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
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:
- Unternehmen: Name, Anschrift, Kontakt, Bankverbindung – erscheint auf Rechnungen und im Impressum.
- Steuern: Regelbesteuerung oder Kleinunternehmer, USt-IdNr., Steuernummer, OSS.
- Rechnungen: Nummernkreise, Zahlungsziel, Design und Fußzeile.
- Planer: Cronjob und Queue-Worker mit den Pfaden deines Servers.
- 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):
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:
| Was | Warum |
|---|---|
| Datenbank (mysqldump --single-transaction provomatic) | Kunden, Verträge, Rechnungen, Audit-Log |
| storage/app/private | Rechnungs-PDFs und E-Rechnungen; Rechnungen sind 10 Jahre aufzubewahren |
| storage/app/public | Hochgeladene Bilder (Logos, Seiten) |
| .env | Vor 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.