Requirements
This page lists the infrastructure and runtime prerequisites for running Marketix in production. The recommended deployment path is the official Docker image, which satisfies all PHP runtime requirements out of the box.
Runtime
Section titled “Runtime”| Requirement | Minimum | Notes |
|---|---|---|
| PHP | 8.3 | composer.json requires ^8.3; the official Docker image ships PHP 8.4 |
| PHP extensions | pdo_mysql, redis, intl, gd, opcache, pcntl, zip | All installed in the official image (see Dockerfile) |
| Composer | 2.x | Only required for non-Docker installs |
| Node.js | 26 | Required only when building frontend assets yourself; not needed with the pre-built Docker image |
Database
Section titled “Database”Marketix is tested against MariaDB. The Docker Compose stack ships MariaDB 11.8. SQLite is supported for local development but is not recommended for production with an Octane-based server.
| Requirement | Value |
|---|---|
| Recommended engine | MariaDB 11.8 |
| Supported alternative | SQLite (development / single-user only) |
| Default port | 3306 |
| DB driver env var | DB_CONNECTION=mariadb (production) or DB_CONNECTION=sqlite (dev default) |
Redis is required in production for:
- Queue backend — Laravel Horizon uses Redis to manage and monitor queued jobs. Set
QUEUE_CONNECTION=redis. - Cache — the default Compose stack keeps
CACHE_STORE=database; switching to Redis is recommended under load. - Sessions —
SESSION_DRIVER=databaseby default; can be moved to Redis.
| Requirement | Value |
|---|---|
| Redis version | 7 (the Compose stack uses redis:7-alpine) |
| Redis client driver | phpredis (default; the redis PHP extension is installed in the image) |
| Default host | 127.0.0.1 (bare-metal) / redis (Docker Compose) |
| Default port | 6379 |
Object storage
Section titled “Object storage”Marketix stores uploaded files, generated QR code assets, and PDF reports on the configured filesystem disk. For production deployments with multiple replicas or external backup requirements, an S3-compatible object store is recommended.
| Environment variable | Purpose |
|---|---|
FILESYSTEM_DISK | local (default) or s3 |
AWS_ACCESS_KEY_ID | Access key |
AWS_SECRET_ACCESS_KEY | Secret key |
AWS_DEFAULT_REGION | Bucket region |
AWS_BUCKET | Bucket name |
AWS_USE_PATH_STYLE_ENDPOINT | true for MinIO and other path-style providers |
The league/flysystem-aws-s3-v3 package is included in composer.json and the S3 disk is wired up in Laravel’s standard config/filesystems.php.
A working mail transport is required for:
- Team invitations
- Password reset emails
- Forced-password-change notifications
Marketix uses Laravel’s mailer with synergitech/laravel-postal for Postal support. Available drivers include smtp, log (development only), and any standard Laravel-supported transport.
| Environment variable | Purpose |
|---|---|
MAIL_MAILER | Transport driver (e.g. smtp) |
MAIL_HOST | SMTP host |
MAIL_PORT | SMTP port |
MAIL_USERNAME / MAIL_PASSWORD | SMTP credentials |
MAIL_FROM_ADDRESS | Sender address |
MAIL_FROM_NAME | Sender display name |
GeoIP database
Section titled “GeoIP database”Click geolocation requires the MaxMind GeoLite2-City database. This is not bundled with the application — you must download it separately after deployment using the marketix:geoip:update Artisan command (see First run).
A free MaxMind account and license key (MAXMIND_LICENSE_KEY) are required to download the database. Without GeoIP, short-link redirects still work; geographic statistics will not be populated.
Recommended deployment
Section titled “Recommended deployment”The official Docker image at noixdev/marketix bundles PHP 8.4, all required PHP extensions, Composer dependencies, and compiled frontend assets in a single image. It is the only supported production deployment method documented here.
See Docker deployment for setup instructions.