System requirements
What the server has to bring along before you start the installation.
Check this list beforehand. The wizard checks most of it itself, but a server without the required extensions will not get past step 1 — and then you are sitting on an uploaded package waiting for your hosting provider to answer.
The quick test
These three commands answer the important questions:
php -v | head -1
php -m | grep -xE 'ctype|iconv|json|sodium|pdo_mysql|openssl|mbstring|redis|intl' | sort | tr '\n' ' '
php -r 'echo function_exists("proc_open") ? "proc_open ok" : "proc_open BLOCKED";'
The second line has to print nine names. Anything fewer is what you are missing.
PHP
8.4 at minimum. No upper bound is defined; testing runs against 8.4.
Extensions — mandatory
All nine are checked by the wizard and block the installation if missing.
| Extension | What for |
|---|---|
ctype | Character type functions |
iconv | Character set conversion |
json | JSON |
sodium | Encryption of credentials for connected systems |
pdo_mysql | Database driver |
openssl | JWT keys and encryption |
mbstring | Multibyte strings |
redis | Cache and queues in production |
intl | Date, time and number formats per language |
Two of them are not checked by
setup.sh:redisandintl. The script passes green, then the wizard blocks red. Check both yourself beforehand.
intlis not a convenience: every money, date and time output outside German goes through it with no fallback. Without the extension the server installs cleanly and fails on the first non-German output.
Extensions — recommended
These do not block, but they limit what works:
| Extension | Without it |
|---|---|
curl | No connection to external services and no AI |
gd | No preview images or avatars. For the page builder additionally with WebP support |
zip | No export or import through ZIP archives |
Further PHP requirements
proc_open()must not be disabled. The wizard runs every setup step as a separate process.
If the function is in disable_functions, nothing works.
- A discoverable PHP command line, 8.4 or newer. The wizard searches by itself; if it finds
nothing, it asks for the path.
post_max_sizeandupload_max_filesizeat least 36 MB, matching the web server limit.
Database
MariaDB or MySQL. PostgreSQL is not supported.
| System | Minimum | Released lines |
|---|---|---|
| MariaDB | 10.11 (LTS) | 10.11 · 11.4 · 11.8 |
| MySQL | 8.0 | 8.0 · 8.4 |
Older versions install with a warning; the version is deliberately not a blocker. For production the rule still holds: a release without security updates does not belong on a server holding business data.
You also need:
- An empty database in
utf8mb4. - A user with full privileges on it, including
CREATE,ALTERandINDEX. Without those
three the migrations abort.
- If the wizard is to create the database itself, the user needs that privilege as well.
Web server
nginx or Apache. The document root points at public/, not at the project directory. Ready-made templates ship in the package under deploy/.
What the configuration has to do:
- A dedicated rule for
/install/taking precedence over the general PHP block. Without it the
server delivers the installer's source code instead of executing it.
- Upload limit of at least 36 MB. Files are transferred as Base64 inside JSON, which adds a
third on top of the 25 MB payload.
- On Apache:
FollowSymLinksplusmod_rewrite,mod_headersandmod_deflate. - HTTPS with a valid certificate. Login works with secure cookies; over plain HTTP it does not
work at all.
Services
Mandatory
| Service | What for | Without it |
|---|---|---|
| Background workers | Mail, notifications, webhooks | None of it is delivered |
| Scheduler consumer | All time-driven processes | Nothing scheduled runs. Exactly one instance per environment, otherwise everything fires twice |
| Cron or systemd | Starts both of the above | See above |
| Chromium | Document PDFs | No document is produced. This is the core engine, not a side path |
| Mail delivery | Delivery | No notification reaches its recipient |
Chromium is easily overlooked. It appears neither in the
setup.shcheck nor in the wizard's requirements list. Working through that list alone gets you a system that cannot produce a single invoice as a PDF.What is needed is
chromium,chromium-browser,google-chromeorgoogle-chrome-stableon the search path. If it lives elsewhere, put the path into the configuration. Check with:php bin/console app:pdf:check
Optional
| Service | If it is missing |
|---|---|
| Redis server | The database takes over cache and queues. The PHP extension redis is still mandatory |
| Mercure | No token-by-token streaming of AI answers. Answers arrive in one piece; the default is off anyway |
| Collab service | No simultaneous editing. Regular saving keeps working. Needs Node 22 or newer |
| OCR tools | Full-text search in documents only finds file names. The module is off by default |
Additionally for the one-file route
If you install through install.php instead of uploading the package yourself, three more things are needed. The file checks them on opening and names each missing one individually.
| What | What for | Without it |
|---|---|---|
phar and zlib | Extracting the downloaded archive | The file cannot extract and says so |
| Outbound HTTPS | Fetching the package from the update server | Only the route with a self-uploaded package remains |
| About 1.1 GB free disk space | Archive, extracted archive and files exist side by side for a moment | Extraction aborts |
phar and zlib are on with practically every provider. The outbound connection is the point that fails in locked-down environments.
The one-file route itself runs on any PHP version. That is deliberate: only then can it report that the version is too old for Octibiz, instead of ending in a blank error page.
Access and tools
- SSH access for
setup.sh. On plain web hosting, file upload plus a one-off script call
through the panel is enough.
flockfor the overlap guard on the worker cron calls.- Composer and Node are not needed on the target server — as long as you use the pre-built
package and do not install plugins afterwards. As soon as a plugin triggers an interface rebuild, the instance needs Node and the frontend dependencies.
Memory and disk space
There is no defensible figure for this, and we will not state one we cannot back up. Two reference points:
- Each background worker runs with a 256 MB limit and restarts when it exceeds that. Two workers
are the default.
- While the interface is being updated it exists on disk twice for a short while. Keep space
available accordingly.
What the wizard checks itself
So that you know what you cannot rely on:
| Checked | Not checked |
|---|---|
| PHP version, all nine extensions | memory_limit, max_execution_time, upload limits |
proc_open(), PHP command line | Free disk space |
| Write access to four directories | HTTPS, web server type, rewrite rules |
| Database connection and version | Database privileges (CREATE, ALTER, INDEX) |
| Presence of the built interface | Chromium |
The four directories needing write access are: the project directory itself, var, config/jwt and public/uploads.
Next
- Installation — the procedure step by step
- Background processing — setting up workers and schedules
- Hardening and security