Akeneo 4.0 brings fresh ideas into the community
We have been using Akeneo since version 1.3 and since version 1.7 we have developed a dockerized environment for it, which has been equipped with some comfort features over time. Since then the new versions brought us changes
- In the 2-series versions, the variant groups were converted into product models and family variants.
- In the 3 versions the namespaces of the Akeneo bundles and their location were restructured to make the further development more comprehensible.
- In the latest version the general structure and way of working of Akeneo has been changed in favor of the Symfony Flex Design Pattern to benefit from the advantages of Symfony Flex.
Due to this change, we have reworked our docker setup and were able to familiarize ourselves with the new structures as well as identify some potential for improvement for Akeneo. As soon as we have more time for R&D besides our projects, we will gladly support the Akeneo community with input and development.
New features of MySQL & Elasticsearch
Services which are needed for Akeneo must be used in current versions. So MySQL version 8.0.18 or higher is now expected. Also Elasticsearch needs the relatively new version 7.5.2. The performance and features have been improved by the new versions, but they needed some adjustments. With MySQL we had to set the authentication plugin to the native password (mysql_native_password). This is necessary because the PHP images of 7.3 do not support the default plugin of MySQL 8 (caching_sha2_password) and support will be available in future PHP versions. See: www.php.net/manual/en/mysqli.requirements.php
Docker Compose configuration for MySQL
With the Elasticsearch images used, however, Elasticsearch now always assumes a cluster and requires some node settings, even if there is only one node. Fortunately since the Elasticsearch version for Akeneo 3 it was no longer necessary to apply for a basic license of Elasticsearch. Previously you had to activate a newly booted instance with a file, otherwise the trial license expired after 30 days.
Many changes within the processes come from Symfony Flex itself. Akeneo has added some additional comfort features. But the clear design has been kept.
Symfony Flex Workflow
To activate a new bundle, you had to enter the bundle namespace into the AppKernel class. Now there is a file under "config/bundles.php", which only contains the bundle namespaces to be activated as an array.
Example of a bundles.php
In Akeneo 4 the configurations, like file paths, database access data or mailer URL are no longer in a "parameters.yml", but either as environment variables in the ".env" file in the project root directory, or in a separate YAML file in the directory "config/services/*.yml". In the past, files with certain suffixes, such as "parameters_dev.yml", were searched for, but now it is divided into the respective subdirectories.
You can define a configuration for a development environment in a YAML file, which is located here: "config/services/dev/*.yml". The same logic applies to routing.yml and config.yml. The paths can be found in the new kernel class "src/Kernel.php".
To add sample data from a Fixture Bundle to the system during installation, it was sufficient to add a configuration in "parameters.yml" (installer_data: PimInstallerBundle:minimal). Now the definition is more programmatic. It is expected that the parameter "catalog" will be included when the installation command is called, which is either an absolute path or, as before, a package path of the fixture. Also note that since Akeneo version 3, no default user admin:admin is created for the minimal fixtures. This increases the security, but also has to be considered for automatic processes.
New feature: Connections
Besides the increased performance, the new feature Connections is very interesting. Akeneo is mostly just a bridge, which gets information, refines it and then passes it on to the target systems. For this a development was always necessary, which connects the corresponding systems. With the new feature it is possible to connect certain systems directly by configuring the endpoints, which could make development unnecessary. We are excited to test it in the next suitable project.
Users of the Enterprise Edition can now solve the problem of media storage with an integrated DAM solution, which up to now usually had to be implemented by an in-house solution.
What works differently than anticipated?
At some points in the development, we have noticed areas where we either do not yet know how it can be better implemented or where there is simply room for improvement.
For example, when installing example data, the parameter "catalog" must be sent along with the data. But this parameter is only defined in the command "pim:installer:db". So you can't use the basic command "pim:install", because the default value is always used.
Furthermore, instead of filling the ".env" file you can also work directly with environment variables, but there are some processes which ignore them and only take the entries from the file. An example is the sending of e-mails within the Swiftmailer bundle.
Basically, it is possible to add bundles automatically to the routes and activated bundles via Symfony Flex. However, we could not achieve this so far. Either because we lack a so-called recipe for Flex or because Akeneo does not allow it or expects a different structure. So we continue to add our bundle information (namespace, routes, configurations) to the corresponding new directories using scripts.
The official PHP images of Akeneo still run on Debian Stretch, only one developer image uses Debian Buster. This is relevant, because there are libraries which expect a version which is only available from Buster. But since the developer image works a little bit different than the previous ones, some adjustments had to be made.
In general I personally have the feeling that the current setup was rather prepared for the own Akeneo cloud solution. Also the problems and questions within the Slack Channel are often related to environments that have been booted using existing Akeneo Cloud Hosting solutions. Accordingly there is little information on the web about the above mentioned subtleties of setting up outside an existing cloud solution.
My conclusion on Akeneo 4.0
Apart from these little things, it still feels good to work with Akeneo and be part of the community. You can see how much effort is put into the product and we are excited to see what will happen in the future.