Akeneo best practices
Akeneo PIM combines a Symfony web application, a MySQL catalog, a mandatory search index, and a set of background job queues. Performance and stability depend on keeping those components healthy and right-sized. This page covers what TurboStack already configures for you and the additional optimizations worth applying.
What TurboStack configures for you
When you deploy with app_type: akeneo, the platform sets up the full runtime so you do not have to wire it together manually:
- Production build. The role installs Akeneo with
make prodandAPP_ENV=prod, which compiles assets and Symfony's cache for production rather than running in debug mode. - Background job queues. Three systemd job-queue consumers run continuously per app so imports, exports and maintenance tasks are processed:
pim-job-queue@ui_job,pim-job-queue@import_export_jobandpim-job-queue@data_maintenance_job. They run as user services withRestart=always. - Search index. The app is wired to Elasticsearch/OpenSearch via
APP_INDEX_HOSTS(defaultlocalhost:9200). Akeneo cannot run without it - the product and catalog index lives there. - Database. A dedicated MySQL database and user are provisioned and injected through
.env.local. - Nginx vhost. An Akeneo-tuned vhost serves the
public/front controller with a longfastcgi_read_timeout(1200s) for heavy operations, and blocks direct access to any other PHP file. - PDF/export dependencies. System packages Akeneo needs for rendering Portable Document Format (PDF) files and exports (
ghostscript,aspell) are installed for you. - Log rotation. Akeneo's
var/logs/*.logfiles are rotated automatically via logrotate.
Recommended optimizations
Apply these on top of the defaults - most are toggled on the host's Services tab.
- Keep Elasticsearch/OpenSearch healthy. It is the heart of the PIM. After large catalog changes, reindex with
bin/console pim:product:indexandpim:product-model:index. - Enable Redis for caching and sessions to take load off MySQL and speed up the UI.
- OPcache keeps compiled PHP in memory - confirm it is enabled for your PHP version for a large throughput win.
- Stay in production mode. Never switch the app to
dev/debug on a live host; rebuild withmake prodafter upgrades. - Scale the job queues for catalogs with frequent imports/exports by running additional queue consumers so jobs do not back up. See
Background job queues for the service unit and how to manage it. - Optimize media. Use a Content Delivery Network (CDN)/HTTP cache in front of generated product images and assets to reduce origin load.
- Schedule maintenance (index refreshes, cleanup jobs) during off-peak hours through the data maintenance queue.
Background job queues
Akeneo processes imports, exports and maintenance tasks through background job queues. TurboStack installs three queue consumers as systemd --user services per app and keeps them running with Restart=always:
pim-job-queue@ui_job- jobs started from the user interface.pim-job-queue@import_export_job- imports and exports.pim-job-queue@data_maintenance_job- cleanup and maintenance jobs.
Each service is an instance of one template unit at ~/.config/systemd/user/pim-job-queue@.service. The name after @ is the queue the consumer reads:
[Unit]
Description=Akeneo PIM Job Queue Service (#%i)
After=network-online.target
Requires=dbus.socket
StartLimitIntervalSec=0
[Service]
Type=simple
WorkingDirectory=%h/akeneo
ExecStart=%h/akeneo/bin/console messenger:consume --env=prod %I
RestartSec=10s
Restart=always
[Install]
WantedBy=default.target
%iis the queue name, so one template serves every queue;%his your home directory.--env=prodruns the consumer against the production environment.- Adjust
WorkingDirectoryto match your app path if it differs.
Manage a consumer like any other user service:
systemctl --user status pim-job-queue@import_export_job
systemctl --user restart pim-job-queue@import_export_job
When a busy queue backs up, run more consumer processes for it, but keep the total within the host's processor budget. See Scale throughput with more instances.
For the systemd --user basics - including loginctl enable-linger so the services keep running after you log out - see How to manage user system services.
Sizing and scaling
TurboStack auto-tunes resource allocations to the host. Override the defaults only when measurements justify it:
See Performance tuning before changing any of these, and change one variable at a time.
Stability
- Back up regularly. Ensure the MySQL catalog and the application files are covered - review Backups. The search index can be rebuilt from the database if needed.
- Watch Health for CPU, memory and disk pressure, and confirm the job-queue services stay running.
- Keep versions current. Track Akeneo, PHP and Elasticsearch/OpenSearch releases and apply security updates.
- Test on a staging clone. Validate Akeneo upgrades and large catalog imports on a copy before applying them to production.