| description | Update your installation to the latest v5.0 version from an earlier v5.0 version. |
|---|---|
| month_change | true |
To update from v4.6.x, see Update from v4.6 to v5.0. To update from an older version, visit the update page and choose the applicable path.
Note which version you actually have before starting.
First, run:
=== "[[= product_name_headless =]]"
``` bash
yarn upgrade @ibexa/frontend-config @ibexa/ts-config
composer require ibexa/headless:[[= latest_tag_5_0 =]] --with-all-dependencies --no-scripts
composer recipes:install ibexa/headless --force -v
```
=== "[[= product_name_exp =]]"
``` bash
yarn upgrade @ibexa/frontend-config @ibexa/ts-config
composer require ibexa/experience:[[= latest_tag_5_0 =]] --with-all-dependencies --no-scripts
composer recipes:install ibexa/experience --force -v
```
=== "[[= product_name_com =]]"
``` bash
yarn upgrade @ibexa/frontend-config @ibexa/ts-config
composer require ibexa/commerce:[[= latest_tag_5_0 =]] --with-all-dependencies --no-scripts
composer recipes:install ibexa/commerce --force -v
```
Then execute the instructions below starting from the version you're upgrading from.
Some packages increase their type hinting strictness. You can run Ibexa DXP Rector to update your code.
=== "MySQL"
``` sql
CREATE TABLE ibexa_messenger_messages (
id BIGINT AUTO_INCREMENT NOT NULL,
body LONGTEXT NOT NULL,
headers LONGTEXT NOT NULL,
queue_name VARCHAR(190) NOT NULL,
created_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
available_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
delivered_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)',
INDEX ibexa_messenger_created_at_idx (created_at),
INDEX ibexa_messenger_available_at_idx (available_at),
INDEX ibexa_messenger_delivered_at_idx (delivered_at),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_520_ci` ENGINE = InnoDB;
CREATE TABLE ibexa_messenger_lock_keys (
key_id VARCHAR(64) NOT NULL,
key_token VARCHAR(44) NOT NULL,
key_expiration INT UNSIGNED NOT NULL,
PRIMARY KEY(key_id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_520_ci` ENGINE = InnoDB;
```
=== "PostgreSQL"
``` bash
CREATE TABLE ibexa_messenger_messages (
id BIGSERIAL NOT NULL,
body TEXT NOT NULL,
headers TEXT NOT NULL,
queue_name VARCHAR(190) NOT NULL,
created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
available_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
delivered_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL,
PRIMARY KEY(id)
);
CREATE INDEX ibexa_messenger_created_at_idx ON ibexa_messenger_messages (created_at);
CREATE INDEX ibexa_messenger_available_at_idx ON ibexa_messenger_messages (available_at);
CREATE INDEX ibexa_messenger_delivered_at_idx ON ibexa_messenger_messages (delivered_at);
COMMENT ON COLUMN ibexa_messenger_messages.created_at IS '(DC2Type:datetime_immutable)';
COMMENT ON COLUMN ibexa_messenger_messages.available_at IS '(DC2Type:datetime_immutable)';
COMMENT ON COLUMN ibexa_messenger_messages.delivered_at IS '(DC2Type:datetime_immutable)';
CREATE TABLE ibexa_messenger_lock_keys (
key_id VARCHAR(64) NOT NULL,
key_token VARCHAR(44) NOT NULL,
key_expiration INT NOT NULL,
PRIMARY KEY(key_id)
);
```
On Commerce, run this additional update queries:
=== "MySQL"
``` sql
ALTER TABLE ibexa_discount
ADD indexed_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)';
CREATE INDEX ibexa_discount_indexed_at_idx
ON ibexa_discount (indexed_at);
```
=== "PostgreSQL"
``` sql
ALTER TABLE ibexa_discount
ADD indexed_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL;
COMMENT ON COLUMN ibexa_discount.indexed_at IS '(DC2Type:datetime_immutable)';
CREATE INDEX ibexa_discount_indexed_at_idx
ON ibexa_discount (indexed_at);
```
Form Builder performance fix: missing indexes on form submission data [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
In large production databases, the ibexa_form_submission and ibexa_form_submission_data tables may contain a lot of rows.
Missing indexes can cause high CPU load and slow queries.
Run the provided SQL upgrade script to add the missing indexes to your database:
=== "MySQL"
``` sql
mysql -u <username> -p <password> <database_name> < vendor/ibexa/installer/upgrade/db/mysql/ibexa-5.0.2-to-5.0.3.sql
```
=== "PostgreSQL"
``` sql
psql <database_name> < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-5.0.2-to-5.0.3.sql
```
Database update [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
From a platform first installed on v5.0.3 or updated precisely to v5.0.3, you need to execute the requests below. If the platform comes from lower than v5.0.3 and is updated to higher than v5.0.3, you don't need this part (but if you run the requests anyway, you only obtain error messages, nothing being broken or lost).
=== "MySQL"
``` sql
ALTER TABLE `ibexa_site_public_access` ADD COLUMN `tree_root_location_id` INT DEFAULT NULL;
ALTER TABLE `ibexa_site_public_access` ADD INDEX `ibexa_spa_trl_id` (`tree_root_location_id`);
UPDATE ibexa_site_public_access
SET tree_root_location_id = CAST(JSON_UNQUOTE(JSON_EXTRACT(config, '$."ibexa.site_access.config.content.tree_root.location_id"')) AS SIGNED)
WHERE tree_root_location_id IS NULL AND JSON_EXTRACT(config, '$."ibexa.site_access.config.content.tree_root.location_id"') IS NOT NULL;
```
=== "PostgreSQL"
``` sql
ALTER TABLE ibexa_site_public_access ADD COLUMN tree_root_location_id INT DEFAULT NULL;
CREATE INDEX "ibexa_spa_trl_id" ON "ibexa_site_public_access" ("tree_root_location_id");
UPDATE ibexa_site_public_access
SET tree_root_location_id = (config::jsonb ->> 'ibexa.site_access.config.content.tree_root.location_id')::integer
WHERE tree_root_location_id IS NULL AND config::jsonb ? 'ibexa.site_access.config.content.tree_root.location_id';
```
As of v5.0.5, [[= product_name =]] adds support for Elasticsearch 8.19 or higher. You can continue using unsupported Elasticsearch 7.16.2+, but it's recommended to upgrade to Elasticsearch 8 for improved performance and security features.
When choosing to keep using Elasticsearch 7.16.2, adjust your configuration as described in the Update configuration section below to avoid using deprecated settings.
If you choose to upgrade to Elasticsearch 8, follow these steps:
Upgrade your Elasticsearch server to version 8.19 or higher. For detailed instructions, follow the Elasticsearch upgrade guide.
When you use [[= product_name_cloud =]], see Elasticsearch service for a list of supported versions.
Update your configuration in config/packages/ibexa_elasticsearch.yaml.
The deprecated connection_pool and connection_selector settings are now ignored and don't have any effect.
Replace them with appropriate node_pool_selector and node_pool_resurrect settings:
# Old configuration (Elasticsearch 7 - deprecated)
ibexa_elasticsearch:
connections:
default:
connection_pool: 'Elasticsearch\ConnectionPool\StaticNoPingConnectionPool'
connection_selector: 'Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector'# New configuration (Elasticsearch 7 and 8)
ibexa_elasticsearch:
connections:
default:
node_pool_selector: 'Elastic\Transport\NodePool\Selector\RoundRobin'
node_pool_resurrect: 'Elastic\Transport\NodePool\Resurrect\NoResurrect'For more information, see Node pool settings.
The trace debugging option is no longer available.
# Old configuration (Elasticsearch 7)
ibexa_elasticsearch:
connections:
default:
debug: true
trace: true# New configuration (Elasticsearch 7 and 8)
ibexa_elasticsearch:
connections:
default:
debug: true
# Trace option is no longer availableAfter upgrading to Elasticsearch 8 and updating your configuration, reindex the search engine:
-
Push the index templates:
php bin/console ibexa:elasticsearch:put-index-template --overwrite
-
Reindex your content:
php bin/console ibexa:reindex
Run the provided SQL upgrade script to ensure the Messenger tables for background tasks exist in your database:
=== "MySQL"
``` sql
mysql -u <username> -p <password> <database_name> < vendor/ibexa/installer/upgrade/db/mysql/ibexa-5.0.4-to-5.0.5.sql
```
=== "PostgreSQL"
``` sql
psql <database_name> < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-5.0.4-to-5.0.5.sql
```
No additional steps needed.
Database update [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
Run the provided SQL upgrade script to adapt your database to latest change in form builder's max_length validator behavior:
=== "MySQL"
``` sql
mysql -u <username> -p <password> <database_name> < vendor/ibexa/installer/upgrade/db/mysql/ibexa-5.0.5-to-5.0.6.sql
```
=== "PostgreSQL"
``` sql
psql <database_name> < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-5.0.5-to-5.0.6.sql
```
Prior, 0 was interpreted as "no length limit".
Now, 0 is interpreted as "length limited to zero characters" and NULL as "no length limit".
If you're using [[= product_name_cloud =]], you must install a new package and update your cloud configuration.
First, install the ibexa/cloud package:
composer require ibexa/cloudThen, update your cloud configuration.
Instead of the old composer ibexa:setup --platformsh command, use:
php bin/console ibexa:cloud:setup --upsunThis command generates or updates the cloud configuration files.
Additionally, you must remove the following line from your .platform.app.yaml file if it exists:
curl -fs https://get.symfony.com/cloud/configurator | bashThis version of [[= product_name =]] requires Symfony 7.4.
Update Symfony constraints in composer.json before updating the packages.
-
In
composer.json, updateextra.symfony.requireto allow installing a higher Symfony version:"extra": { "symfony": { "require": "7.4.*" } }
-
To allow installing Symfony 7.4, update the requirements for all
symfonypackages incomposer.jsonas in the example below:- "symfony/<package>"": "7.3.*", + "symfony/<package>"": "7.4.*",
-
Review your code, configuration, and third-party bundles for Symfony 7.4 compatibility.
For more details about the new version, see the official Symfony upgrade instructions and blog posts introducing this release. Key changes include:
-
Independent application cache directory
Symfony 7.4 introduces a new share directory, dedicated for storing application cache on the file system. If you decide to configure it (for example, by setting the
APP_SHARE_DIRenvironment variable), review your existing scripts for explicitvar/cacheusage (for example,rm -rf var/cache) and decide whether to includevar/sharein the script.!!! caution "Always clear the persistence cache with
cache:pool:clearcommand"Starting with Symfony 7.4, running `php bin/console cache:clear` doesn't clear the [[= product_name =]] persistence cache, even when using a filesystem-based cache pool. To clear the persistence cache, for example after adding a [custom Page Builder block](create_custom_page_block.md), you must always run: ```bash php bin/console cache:pool:clear <cache-pool> ``` The default cache pool is named `cache.tagaware.filesystem`. The default cache pool when running Redis or Valkey is named `cache.redis`. If you have customized the persistence cache configuration, the name of your cache pool might be different. For more information about persistence cache, see [Persistence cache](persistence_cache.md). -
Array-based PHP configuration format
As part of the new array-based PHP configuration format, Symfony creates the
config/reference.phpfile. Consider commiting this file to the repository.
-
-
Update Ibexa packages by running:
=== "[[= product_name_headless =]]"
``` bash yarn upgrade @ibexa/frontend-config @ibexa/ts-config composer require ibexa/headless:v5.0.7 --with-all-dependencies --no-scripts composer recipes:install ibexa/headless --force -v ```=== "[[= product_name_exp =]]"
``` bash yarn upgrade @ibexa/frontend-config @ibexa/ts-config composer require ibexa/experience:v5.0.7 --with-all-dependencies --no-scripts composer recipes:install ibexa/experience --force -v ```=== "[[= product_name_com =]]"
``` bash yarn upgrade @ibexa/frontend-config @ibexa/ts-config composer require ibexa/commerce:v5.0.7 --with-all-dependencies --no-scripts composer recipes:install ibexa/commerce --force -v ``` -
Manually restore the entry for
JMSTranslationBundleinconfig/bundles.phpto its previous position:FOS\HttpCacheBundle\FOSHttpCacheBundle::class => ['all' => true], JMS\TranslationBundle\JMSTranslationBundle::class => ['all' => true], Liip\ImagineBundle\LiipImagineBundle::class => ['all' => true],
You're now running Symfony 7.4, the current long-term support version.
Following the changes introduced in v5.0.6, the ibexa:setup command is deprecated as of v5.0.7 and will be removed in v6.0.0.
Additionally, the ibexa/cloud package must be installed for the [[= product_name_cloud =]] build to succeed.
The command ibexa:cloud:setup from this package replaces the deprecated ibexa:setup.
To learn how to adjust your configuration, see update instructions for v5.0.6.
Database update [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
Run the provided SQL upgrade script to update your database:
=== "MySQL"
``` bash
mysql -u <username> -p <password> <database_name> < vendor/ibexa/installer/upgrade/db/mysql/ibexa-5.0.6-to-5.0.7.sql
```
=== "PostgreSQL"
``` bash
psql <database_name> < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-5.0.6-to-5.0.7.sql
```
LTS Updates are standalone packages with their own update procedures. To use the latest features added to them, update them separately with the following commands:
=== "Integrated help"
### Integrated help [[% include 'snippets/lts-update_badge.md' %]]
See [Integrated help](integrated_help.md) for more information.
If you're already using it, run the following command to get the latest version of this feature:
```bash
composer require ibexa/integrated-help:[[= latest_tag_5_0 =]]
```
=== "Anthropic connector"
### Anthropic connector [[% include 'snippets/lts-update_badge.md' %]]
See [how to configure Anthropic connector](configure_ai_actions.md#install-anthropic-connector) for more information.
If you're already using it, run the following command to get the latest version of this feature:
```bash
composer require ibexa/connector-anthropic:[[= latest_tag_5_0 =]]
```
=== "Real-time collaborative editing"
### Real-time collaborative editing
To learn more about the [Real-time editing](collaborative_editing_guide.md), see the [installation and configuration instructions](configure_collaborative_editing.md).
If you're already using it, run the following command to get the latest version of this feature:
```bash
composer require ibexa/fieldtype-richtext-rte:[[= latest_tag_5_0 =]] ibexa/ckeditor-premium:[[= latest_tag_5_0 =]]
```
=== "Shopping list"
### Shopping list [[% include 'snippets/lts-update_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
To learn more about the [Shopping list](shopping_list_guide.md), see the [installation and configuration instructions](install_shopping_list.md).