Installation
Es gibt zwei Wege. Beide enden am selben Assistenten.
Der einfache Weg braucht nur einen FTP-Zugang und keine Kommandozeile. Er steht direkt hier unten. Wer SSH hat und lieber selbst entpackt, findet den zweiten Weg weiter unten.
Rechnen Sie mit 20 bis 30 Minuten, wenn der Server die Voraussetzungen erfüllt.
Die vollständige Liste der Voraussetzungen steht auf einer eigenen Seite: Systemvoraussetzungen. Prüfen Sie sie vorher — beide Wege prüfen zwar selbst, aber ein Server ohne die nötigen Erweiterungen kommt nicht weit.
Der einfache Weg: eine Datei
install.php hochladen → im Browser öffnen → fünf Fragen → fertig
1. Datei holen
<https://updates.octibiz.com/install.php>
Der Browser lädt sie herunter, statt sie anzuzeigen. Es ist eine einzelne Datei, etwa 27 KB groß.
2. Per FTP hochladen
Legen Sie sie in das Verzeichnis, in dem Octibiz laufen soll. Bei den meisten Anbietern ist das httpdocs, html oder public_html.
3. Im Browser öffnen
https://ihre-domain.de/install.php
Die Seite prüft den Server und nennt jede fehlende Voraussetzung einzeln.

Fehlt etwas, steht es rot da — mit dem, was im Hosting-Panel zu tun ist. Das häufigste Bild:

4. Auf „Installation starten" klicken
Ab hier läuft alles von selbst: Version ermitteln, Paket herunterladen, Prüfsumme kontrollieren, entpacken, Dateien einsetzen, Assistenten vorbereiten.

Das Paket ist rund 90 MB groß und wird in Häppchen geladen. Bricht die Verbindung ab, setzt der nächste Versuch dort fort, statt von vorne zu beginnen.
Am Ende leitet die Seite auf den Assistenten weiter — ohne dass Sie einen Schlüssel eingeben müssen. Die Datei erzeugt ihn selbst und hängt ihn an die Adresse. Danach löscht sie sich.
Weiter unten bei Der Assistent.
Zeigt Ihre Domain auf das Projektverzeichnis statt auf
public/? Dann legtinstall.phpeine Weiterleitung an, damit es trotzdem läuft. Sauberer ist es, die Domain im Hosting-Panel auf den Unterordnerpublic/zeigen zu lassen — die Weiterleitung ist nur der Rückfall.
Der Weg mit SSH
Wenn Sie ohnehin eine Shell haben, ist das der direktere Weg.
Was Sie vorbereitet haben sollten
- Eine leere Datenbank und einen Datenbank-Benutzer mit vollen Rechten darauf, inklusive
CREATE, ALTER und INDEX. Alternativ ein Benutzer, der die Datenbank selbst anlegen darf.
- Die öffentliche Adresse, unter der das System erreichbar sein wird, inklusive
https://. - Den Webserver so eingerichtet, dass die Domain auf den Unterordner
public/zeigt. - SSH-Zugang für
setup.sh. Bei reinem Web-Hosting genügen Datei-Upload und ein einmaliger
Skriptaufruf.
Paket hochladen und entpacken
Octibiz wird als vorgebautes Paket ausgeliefert. PHP-Bibliotheken und die fertige Oberfläche sind enthalten.
tar -xzf octibiz-1.0.0.tar.gz
cd octibiz
Der Document-Root der Domain zeigt auf public/, nicht auf das Projektverzeichnis. Fertige Vorlagen liegen bei: deploy/nginx.vhost.conf und deploy/apache.vhost.conf.
Für nginx wichtig: Der Installer liegt unter
public/install/und braucht eine eigene Location mit Vorrang vor der allgemeinen PHP-Sperre. Fehlt sie, liefert der Server den Quelltext der Datei aus, statt sie auszuführen. Die mitgelieferte Vorlage hat den Block bereits.
setup.sh ausführen
./setup.sh
Das Skript prüft die Voraussetzungen, setzt die Schreibrechte und gibt am Ende einen Link mit Sicherheits-Token aus:
https://os.example.de/install/?token=ab12cd34…
Auf einem eigenen Server können Sie die Hintergrunddienste gleich mit einrichten lassen:
sudo ./setup.sh --root
Achtung, bekannte Lücke:
setup.shprüft derzeit sieben PHP-Erweiterungen, der Assistent verlangt aber neun. Fehlenredisoderintl, läuftsetup.shgrün durch und Sie werden erst im Browser rot geblockt. Prüfen Sie beide Erweiterungen vorher selbst:php -m | grep -E '^(redis|intl)$'
Der Token ist Pflicht
Ohne gültiges Token antwortet der Installer mit 403. Das ist Absicht: Ein offener Installer auf einem erreichbaren Server ist eine Übernahme-Möglichkeit.
Beim einfachen Weg oben bekommen Sie davon nichts mit — install.php erzeugt den Token selbst.

Haben Sie den Link verloren, lesen Sie das Token auf dem Server aus und hängen es selbst an:
cat var/install.token
Der Assistent
Hier treffen sich beide Wege. Fünf Schritte, oben ist immer sichtbar, welcher gerade dran ist.
1 — Systemvoraussetzungen
Der Assistent prüft die Umgebung und nennt jede fehlende Voraussetzung einzeln, statt allgemein zu scheitern. Rote Punkte müssen behoben werden, gelbe sind Empfehlungen.

Geprüft werden PHP ab 8.4, neun Pflicht-Erweiterungen, drei empfohlene, die Verfügbarkeit von proc_open(), eine auffindbare PHP-Kommandozeile ab 8.4 sowie Schreibrechte auf Projektverzeichnis, var, config/jwt und public/uploads.
Beheben Sie Fehlendes und klicken Sie Erneut prüfen — die Prüfung läuft neu, ohne dass Sie von vorne anfangen müssen.
2 — Datenbank und Adresse

| Feld | Was hinein gehört |
|---|---|
| Öffentliche Adresse (URL) | Inklusive https://. Aus diesem Wert leiten sich später alle erzeugten Links ab |
| Datenbank-Host, Port | Bei den meisten Hostern 127.0.0.1 bzw. localhost und 3306 |
| Datenbankname | Die leere Datenbank |
| Datenbank-Benutzer, Passwort | Der Benutzer mit vollen Rechten auf dieser Datenbank |
| Datenbank anlegen | Ankreuzen, wenn die Datenbank noch nicht existiert und der Benutzer sie anlegen darf |
Verbindung testen & weiter prüft den Zugang sofort. Erst wenn er steht, geht es weiter.
Die Zeile PHP-CLI erkannt zeigt, welche Kommandozeile gefunden wurde. Findet der Assistent keine, erscheint stattdessen ein Eingabefeld — tragen Sie dort den vollen Pfad ein, etwa /usr/bin/php8.4.
3 — Dienste

Redis und Mailversand. Die Vorgaben können Sie übernehmen; ohne Redis übernimmt die Datenbank die Warteschlangen.
Diese Werte werden nicht geprüft. Sie landen unverändert in der Konfiguration. Ein Tippfehler im Mail-Zugang fällt erst auf, wenn die erste Mail nicht ankommt.
Hier erscheint auch eine Warnung, wenn Ihre Datenbank-Version unterhalb der freigegebenen Linien liegt — wie im Bild. Die Installation läuft trotzdem weiter, die Version ist bewusst kein Blocker. Aber ein Stand ohne Sicherheitsupdates gehört nicht in den Echtbetrieb.
4 — Administrator

Ihr erstes Konto. Das Passwort muss mindestens 12 Zeichen haben und zweimal übereinstimmen.
Das Konto bekommt die Systemrollen für Anmeldung, Verwaltung und API und, sofern vorhanden, die Rolle GF/Admin.
Beispieldaten sind optional. Sie sind für eine Vorführung gedacht, nicht für den Echtbetrieb.
5 — Überprüfen und installieren

Alle Angaben noch einmal im Überblick. Das Passwort steht hier bewusst nicht.
Der Lauf
Nach Installation starten arbeitet der Assistent die Schritte ab und zeigt jeden einzeln an.

Der Reihe nach passiert:
| Schritt | Was er tut |
|---|---|
| Konfiguration schreiben | Erzeugt alle Sicherheitsschlüssel und legt .env.local mit Dateirechten 600 an |
| Anwendungscache vorbereiten | Leert den Zwischenspeicher |
| Datenbank anlegen | Nur, wenn Sie es angekreuzt haben |
| JWT-Schlüsselpaar erzeugen | Für die Anmeldung |
| Datenbank-Schema einrichten | Alle Migrationen |
| Rechte und Rollen einrichten | Der Berechtigungskatalog |
| Standard-Daten einlesen | Status, Einstellungen, Nachschlagewerte |
| Plugin-Eigentum erfassen | Grundlage dafür, dass sich Module später sauber entfernen lassen |
| Administrator-Konto anlegen | Ihr Zugang |
| Anwendungscache aufwärmen | Der erste Aufruf wird dadurch schnell |
Bricht ein Schritt ab, nennt der Assistent den Schritt und die Ausgabe und bietet Erneut versuchen an. Beheben Sie die Ursache und starten Sie neu — die Schritte vertragen einen zweiten Durchlauf.
Fertig

Der Assistent sperrt sich jetzt selbst über die Datei var/install.lock und löscht das Token.
Ohne Browser
Derselbe Ablauf läuft auch auf der Kommandozeile:
php bin/console app:install
Interaktiv fragt der Befehl dieselben Werte ab. Für eine unbeaufsichtigte Installation lassen sich alle Angaben mitgeben:
php bin/console app:install --no-interaction \
--app-url=https://os.example.de \
--db-host=127.0.0.1 --db-name=octibiz --db-user=octibiz --db-password=… \
--create-database \
--admin-name="Vorname Nachname" --admin-email=admin@example.de --admin-password=… \
--mailer-from="Octibiz <noreply@example.de>"
Weitere Optionen: --db-port, --redis-url, --mailer-dsn, --google-allowed-domains, --php-cli, --with-demo, --force.
Kürzer geht es mit ./setup.sh --cli.
Nach der Installation
Diese fünf Punkte gehören unmittelbar dazu. Ohne sie ist das System eingerichtet, aber nicht betriebsbereit.
1. Installer entfernen. Die Sperrdatei deaktiviert ihn zwar, aber das Verzeichnis gehört weg:
rm -rf public/install
2. Hintergrund-Verarbeitung einrichten. Ohne laufende Worker verschickt das System keine Mail und führt keinen Termin aus. Auf einem eigenen Server hat ./setup.sh --root das bereits erledigt; auf Managed-Hosting tragen Sie die fertigen Skripte aus deploy/cronjobs/ ein. Details in Hintergrund-Verarbeitung.
Der Zeitplan-Verbraucher darf je Umgebung genau EINMAL laufen. Läuft er doppelt, feuern alle zeitgesteuerten Abläufe doppelt — wiederkehrende Rechnungen, Mahnläufe, Fristen.
3. Sicherung einrichten. deploy/backup.sh täglich per Cron. Siehe Sicherung und Wiederherstellung.
4. .env.local sichern. Das ist die einzige Datei mit Geheimnissen. Sie gehört ins Backup und niemals in die Versionsverwaltung. Geht APP_CREDENTIAL_KEY verloren, sind alle gespeicherten Zugangsdaten zu angebundenen Systemen unlesbar — dauerhaft.
5. Mailversand und Anmeldung prüfen. Melden Sie sich mit dem Administrator-Konto an und lösen Sie eine Testmail aus.
Zusätzlich empfohlen: HTTPS mit gültigem Zertifikat, SPF, DKIM und DMARC je Absender-Domain, und der Update-Feed für System-Updates.
Wenn etwas nicht klappt
| Was Sie sehen | Was zu tun ist |
|---|---|
install.php meldet eine zu alte PHP-Version | Im Hosting-Panel PHP 8.4 für diese Domain aktivieren. Bei vielen Anbietern gilt die Einstellung je Domain, nicht für den ganzen Vertrag |
install.php meldet „Ausgehende HTTPS-Verbindung nicht möglich" | Der Server darf nicht ins Internet. Dann bleibt der Weg mit SSH und selbst hochgeladenem Paket |
| Der Download bleibt stehen | Seite neu laden und erneut starten — er setzt dort fort, wo er war |
| „Beim Auspacken ging der Platz aus" | Es werden vorübergehend rund 1,1 GB gebraucht. Archiv, entpacktes Archiv und Dateien liegen kurz gleichzeitig |
| Der Browser zeigt PHP-Quelltext statt des Assistenten | Dem Webserver fehlt die /install/-Regel. Vorlage aus deploy/ übernehmen |
| „🔒 Zugriffstoken erforderlich" | Token aus var/install.token lesen und an die Adresse hängen |
„Setup kann nicht starten … var/ ist nicht beschreibbar" | Schreibrechte auf var/ setzen |
| „Abhängigkeiten fehlen / vendor/ nicht gefunden" | Kein vollständiges Paket entpackt |
| „PHP-CLI nicht gefunden" | Vollen Pfad angeben, etwa /usr/bin/php8.4, oder PHP_BIN=… ./setup.sh |
| „Zugriff verweigert" beim Verbindungstest | Benutzername oder Passwort falsch |
| „Datenbankserver nicht erreichbar" | Host oder Port falsch |
| „Datenbank existiert nicht" | Namen prüfen oder „Datenbank anlegen" ankreuzen. Kann auch bedeuten, dass dem Benutzer das Recht fehlt, die Datenbank überhaupt zu sehen |
| „proc_open deaktiviert" | In der php.ini aus disable_functions entfernen |
| „Sicherheits-Token ungültig. Seite neu laden." | Sitzung abgelaufen oder zweiter Browser-Tab. Seite neu laden |
| Migrationen schlagen fehl | Dem Datenbank-Benutzer fehlen CREATE, ALTER oder INDEX |
| Nach der Installation erscheint weiter der Assistent | public/install/ entfernen und Seite neu laden |
| Die Oberfläche bleibt leer | Der gebaute Oberflächen-Ordner fehlt. Im Paket ist er enthalten; bei Installation aus dem Quellcode muss er gebaut werden |
Noch einmal von vorne
Auf der Kommandozeile:
php bin/console app:install --force
Über den Browser: var/install.lock löschen und ./setup.sh erneut ausführen. Die bestehende Datenbank bleibt dabei stehen.
Auf einem Server mit Deploy-Automatik muss
var/install.lockdie Releases überleben. Verschwindet die Datei, hält sich das System für nicht installiert und leitet alle Aufrufe auf den Assistenten.
Weiter
- Systemvoraussetzungen — die vollständige Liste
- Hintergrund-Verarbeitung — Worker und Zeitpläne
- Sicherung und Wiederherstellung
- Härtung und Sicherheit
- System-Update