Skip to content
Bondry

Requirements

What a server needs before you install Bondry, for shared hosting and for a VPS, and how to check it without a shell.

Bondry is a PHP application. There is no Node, no build step and no service to keep alive beyond one cron entry. This page lists the minimum for shared hosting and the recommended setup for a VPS, so you can check a host before you buy.

At a glance#

Item Requirement
PHP 8.3 or newer (8.3, 8.4 and 8.5 are supported)
Database MySQL 8.0 or newer, or MariaDB 10.6 or newer (InnoDB, utf8mb4)
Web server Apache 2.4 with mod_rewrite (the product ships public/.htaccess), Nginx or LiteSpeed
HTTPS A valid certificate on the domain
Cron One entry, every minute
Outbound network HTTPS to api.bondry.org
Disk 500 MB free before uploads
Memory memory_limit of 256M (128M is the floor)

Shared hosting (minimum)#

Check each line in your hosting panel (cPanel, Plesk or DirectAdmin).

What to check Value Why
PHP version selector 8.3, 8.4 or 8.5 The installer refuses anything older
PHP extensions pdo_mysql, mbstring, openssl, zip, gd, curl, fileinfo, intl, tokenizer All are required; the installer refuses to continue while one is missing
memory_limit 256M 128M is the floor; the admin updater and image processing need headroom
max_execution_time 120 or more The updater raises it itself when the host allows
upload_max_filesize 64M The core package is about 16 MB and module and theme packages go through the panel
post_max_size 64M Must be at least upload_max_filesize
max_input_vars 3000 Large admin forms send many fields
OPcache Enabled Faster page loads
Writable directories storage, bootstrap/cache, modules, themes and public/uploads Cache, logs, installed packages and public uploads
Database One MySQL database and one user with full rights on it The installer creates the tables
Cron jobs Allowed in the panel See below
Outgoing email SMTP credentials or an API provider The default MAIL_MAILER=log writes mail to a file; change it after the install
Outbound HTTPS api.bondry.org reachable License activation, heartbeat and updates
Disk 500 MB free before uploads See the table below
SSH Optional The web installer and the admin panel do everything

Cron and the queue#

Add one entry, every minute:

Shell
* * * * * php /path/to/bondry/artisan schedule:run >> /dev/null 2>&1

The scheduler drives pruning, the license heartbeat, the daily update check, file cleanup, storage moves, webhooks, RSS imports and digests. It does not run a queue worker. Bondry does not require a worker: search indexing runs after the response in the same process. If the queue driver is database and more than 100 jobs wait, the health page in the admin panel warns that no worker is running. If your host has no cron at all, Advanced Configuration offers a mode that runs the due tasks from site traffic, at most once a minute.

Disk#

Part Size
Core package (compressed) 16 MB
Installed about 60 MB
Backup copy made by the updater during an update about 60 MB
Uploads grows with your content

Plan 500 MB free before uploads.

Typical shared hosts#

Any cPanel, Plesk or DirectAdmin host with the values above works. The installer verifies every item before it writes anything, so a host that falls short is reported before it changes your account.

VPS or dedicated server (recommended)#

Size CPU RAM Disk
Small (up to a few thousand members, low traffic) 1 vCPU 1 GB (2 GB with the Designer and LMS modules) 10 GB SSD
Medium 2 vCPU 4 GB 40 GB SSD
Large 4 vCPU 8 GB SSD, sized to your uploads

MySQL benefits most from RAM and SSD.

Software stack#

Component Recommendation
Operating system Debian 12 or 13, Ubuntu 22.04 or 24.04
Web server Nginx with PHP-FPM 8.3 or newer
Database MySQL 8.4 or MariaDB 10.11
Queue worker (optional) Supervisor or systemd running php artisan queue:work database --sleep=3 --tries=3
Redis (optional) Cache, session and queue; the .env file has REDIS_* entries
TLS Let's Encrypt with certbot
Firewall Open 22, 80 and 443 only
Cron The same entry as above
Backups The database and the public/uploads directory

A minimal Nginx server block:

Code
server {
    listen 443 ssl;
    server_name example.com;
    root /var/www/bondry/public;
    index index.php;
    client_max_body_size 64m;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    }
}

File ownership#

Code is readable by the PHP user. Only storage, bootstrap/cache, modules, themes and public/uploads are writable. Set the owner to the PHP-FPM user rather than making directories world writable.

Tested environments#

Environment Setup
Production Debian 13, Nginx, PHP-FPM 8.5, MySQL 8.4 (bondry.org and demo.bondry.org run here)
Automated tests PHP 8.3 and PHP 8.4
Development macOS, PHP 8.5

Checking before you buy#

  • Upload a file containing <?php phpinfo(); and look for the PHP version, the extension list and the values of memory_limit, upload_max_filesize, post_max_size and max_input_vars. Delete the file afterwards.
  • Cron: open the cron section of the panel and confirm you can add a job that runs every minute with the PHP command line.
  • Outbound HTTPS: ask the host, or run a one-line PHP file with var_dump(file_get_contents('https://api.bondry.org')); and check it does not report a connection error. Delete it afterwards.

Common problems#

Problem Cause Fix
The installer refuses to start PHP 8.2 or older is selected Select 8.3 or newer in the panel
Red item for intl or zip Extension not enabled Enable it in the PHP extensions page of the panel
Uploads fail post_max_size or upload_max_filesize too low Raise both to 64M
500 error after install storage or bootstrap/cache not writable Fix the owner or permissions of those directories
Scheduled work never ran Cron entry missing or wrong path Add the entry; the health page shows the last run
License activation fails Outbound HTTPS to api.bondry.org blocked Ask the host to allow it

Privacy

This site uses only necessary cookies: session, language, theme and the hCaptcha anti-spam check on forms. There is no tracking and no advertising. Privacy policy