<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Spryker Documentation</title>
        <description>Spryker documentation center.</description>
        <link>https://docs.spryker.com/</link>
        <atom:link href="https://docs.spryker.com/feed.xml" rel="self" type="application/rss+xml"/>
        <lastBuildDate>Tue, 14 Jul 2026 11:04:43 +0000</lastBuildDate>
        <generator>Jekyll v4.2.2</generator>
        
        
        <item>
            <title>Set up data export to S3</title>
            <description>Export your Spryker data tables to a secure, structured S3 bucket to enable different uses cases, such as analysis, integrations, or AI modeling.

Based on configurable frequency tables are automatically exported to a dedicated S3 bucket in `.parquet` format. These exports are ideal for connecting external analytics and reporting tools.

Access to the S3 bucket is secured and audited via AWS IAM policies. Every file access is logged for compliance and traceability.

## Request an export setup

Open a support ticket and include the following information:
- List of tables you want exported, comma-separated
- Desired frequency: every 6h, 12h, 1d, 2d, 1 week, or 1 month.
- Desired Start date and time, ISO 8601 format recommended

Our team will validate and set up the export for you.

## Limitations and recommendations

- Blacklisted tables and columns: Tables known to contain sensitive information, such as credentials or internal data in `spy_user`, `spy_customer` or `spy_api_key` tables, are automatically excluded to prevent security breaches.
- Only full export: The system exports full table snapshots each time. Consider frequency carefully to avoid unnecessary outbound traffic costs.
- Retention policy: Exported files are retained for seven days and then automatically deleted to optimize storage.
- We recommend reviewing your export requests to ensure no credentials or compliance-relevant fields are included.














































</description>
            <pubDate>Tue, 14 Jul 2026 11:03:46 +0000</pubDate>
            <link>https://docs.spryker.com/docs/ca/dev/set-up-data-export-to-s3.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/ca/dev/set-up-data-export-to-s3.html</guid>
            
            
        </item>
        
        <item>
            <title>Configure services</title>
            <description>&lt;p&gt;This document describes how to configure services shipped by default.&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;Install or update the Docker SDK to the latest version:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git clone https://github.com/spryker/docker-sdk.git ./docker
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;service-versions&quot;&gt;Service versions&lt;/h2&gt;
&lt;p&gt;When configuring a service, you need to define its version. The Docker SDK supports the following service versions:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SERVICE&lt;/th&gt;
&lt;th&gt;ENGINE&lt;/th&gt;
&lt;th&gt;VERSIONS&lt;/th&gt;
&lt;th&gt;ARM SUPPORT&lt;/th&gt;
&lt;th&gt;NOTE&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;datab&lt;/td&gt;
&lt;td&gt;postgres&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mysql&lt;/td&gt;
&lt;td&gt;5.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;8.4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-10.2&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-10.3&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-10.4&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-10.5&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-10.6&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-10.11&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-11.4&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;mariadb-11.8&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;broke&lt;/td&gt;
&lt;td&gt;rabbitmq&lt;/td&gt;
&lt;td&gt;3.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;3.8&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;3.9&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4.1&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;session&lt;/td&gt;
&lt;td&gt;redis&lt;/td&gt;
&lt;td&gt;5.0&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;valkey&lt;/td&gt;
&lt;td&gt;7.2&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;key_value_store&lt;/td&gt;
&lt;td&gt;redis&lt;/td&gt;
&lt;td&gt;5.0&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;valkey&lt;/td&gt;
&lt;td&gt;7.2&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;search&lt;/td&gt;
&lt;td&gt;elastic&lt;/td&gt;
&lt;td&gt;5.6*&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.elastic.co/support/eol&quot;&gt;Policy and Product End of Life Dates&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;6.8&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.elastic.co/support/eol&quot;&gt;Policy and Product End of Life Dates&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7.6&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7.10&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;opensearch&lt;/td&gt;
&lt;td&gt;1.3&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html#end-of-support&quot;&gt;Support Schedule&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;scheduler&lt;/td&gt;
&lt;td&gt;jenkins&lt;/td&gt;
&lt;td&gt;2.176&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2.305&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2.324&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2.516.3&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;webdriver&lt;/td&gt;
&lt;td&gt;phantomjs&lt;/td&gt;
&lt;td&gt;latest*&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;chromedriver&lt;/td&gt;
&lt;td&gt;latest&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mail_catcher&lt;/td&gt;
&lt;td&gt;mailhog&lt;/td&gt;
&lt;td&gt;1.0&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;swagger&lt;/td&gt;
&lt;td&gt;swagger-ui&lt;/td&gt;
&lt;td&gt;v3.24&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kibana&lt;/td&gt;
&lt;td&gt;kibana&lt;/td&gt;
&lt;td&gt;5.6*&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;6.8&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7.6&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;7.10&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;blackfire&lt;/td&gt;
&lt;td&gt;blackfire&lt;/td&gt;
&lt;td&gt;latest&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;database-services&quot;&gt;Database services&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://mariadb.org/&quot;&gt;MariaDB&lt;/a&gt; is provided as a service by default. MariaDB is about 40% faster on write operations when compared, for example, to PostgreSQL.&lt;/p&gt;
&lt;p&gt;You can switch to MySQL or PostgreSQL as described in the following sections.&lt;/p&gt;
&lt;h3 id=&quot;mariadb&quot;&gt;MariaDB&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://mariadb.org/&quot;&gt;MariaDB&lt;/a&gt; is a community-developed, commercially supported fork of the &lt;a href=&quot;https://dev.mysql.com/doc/&quot;&gt;MySQL&lt;/a&gt; relational database management system.&lt;/p&gt;
&lt;p&gt;For more details, see &lt;a href=&quot;https://mariadb.com/kb/en/&quot;&gt;MariaDB knowledge base&lt;/a&gt;.&lt;/p&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;Default service&lt;/div&gt;
&lt;p&gt;MariaDB is provided as a service by default. You may only need to use this configuration if you are running an older version of the Docker SDK or if you’ve previously switched to another database engine.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h4 id=&quot;configure-mariadb&quot;&gt;Configure MariaDB&lt;/h4&gt;
&lt;p&gt;To switch the database service to MariaDB, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mysql&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mariadb-11.8&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;localhost:3306:&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Bootstrap the docker setup, regenerate demo data, and rebuild the application:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker/sdk boot deploy.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.yml
docker/sdk clean-data
docker/sdk up &lt;span class=&quot;nt&quot;&gt;--build&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;mysql&quot;&gt;MySQL&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://dev.mysql.com/doc/&quot;&gt;MySQL&lt;/a&gt; is an open-source relational database management system based on Structured Query Language (SQL). MySQL allows data to be stored and accessed across multiple storage engines, including InnoDB, CSV, and NDB. Also, MySQL can replicate data and partition tables for better performance and durability.&lt;/p&gt;
&lt;p&gt;For more details, see &lt;a href=&quot;https://dev.mysql.com/doc/&quot;&gt;MySQL documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;configure-mysql&quot;&gt;Configure MySQL&lt;/h4&gt;
&lt;p&gt;To switch the database engine to MySQL, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yaml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mysql&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;localhost:3306:&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Bootstrap the docker setup, regenerate demo data, and rebuild the application:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker/sdk boot deploy.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.yml
docker/sdk clean-data
docker/sdk up &lt;span class=&quot;nt&quot;&gt;--build&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;postgresql&quot;&gt;PostgreSQL&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.postgresql.org/&quot;&gt;PostgreSQL&lt;/a&gt; is an open-source object-relational database system that uses and extends the SQL language combined with many features that safely store and scale the most complicated data workloads.&lt;/p&gt;
&lt;p&gt;For more details, see &lt;a href=&quot;https://www.postgresql.org/docs/&quot;&gt;PostgreSQL documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;configure-postgresql&quot;&gt;Configure PostgreSQL&lt;/h4&gt;
&lt;p&gt;To switch the database engine to PostgreSQL, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;postgres&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;17&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;localhost:5432:&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Bootstrap the docker setup, regenerate demo data, and rebuild the application:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker/sdk boot deploy.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.yml
docker/sdk clean-data
docker/sdk up &lt;span class=&quot;nt&quot;&gt;--build&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;elasticsearch&quot;&gt;Elasticsearch&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.elastic.co/elasticsearch/&quot;&gt;Elasticsearch&lt;/a&gt; is a search engine based on the Lucene library. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.&lt;/p&gt;
&lt;p&gt;For more information, see the following documents:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/pbc/all/search/latest/base-shop/tutorials-and-howtos/configure-elasticsearch.html&quot;&gt;Configure Elasticsearch&lt;/a&gt;—describes ElastciSearch configuration in Spryker.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html&quot;&gt;Elasticsearch documentation&lt;/a&gt;—provides detailed information about Elasticsearch.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;configure-elasticsearch&quot;&gt;Configure Elasticsearch&lt;/h3&gt;
&lt;p&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section to open the port used for accessing Elasticsearch:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;search&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;elastic&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;localhost:9200&lt;/span&gt;
                &lt;span class=&quot;s&quot;&gt;protocol&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tcp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;kibana-ui&quot;&gt;Kibana UI&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.elastic.co/kibana&quot;&gt;Kibana&lt;/a&gt; is an open-source analytics and visualization platform designed to work with Elasticsearch. You use Kibana to search, view, and interact with data stored in Elasticsearch indices. You can easily perform advanced data analysis and visualize your data in a variety of charts, tables, and maps.&lt;/p&gt;
&lt;p&gt;For more information, see &lt;a href=&quot;https://www.elastic.co/guide/en/kibana/current/index.html&quot;&gt;Kibana documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In Docker SDK, Kibana UI is provided as a service by default.&lt;/p&gt;
&lt;h3 id=&quot;configure-kibana-ui&quot;&gt;Configure Kibana UI&lt;/h3&gt;
&lt;p&gt;To configure an endpoint for Kibana UI, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;kibana&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kibana&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;custom_endpoint&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Add the endpoint to the &lt;code&gt;hosts&lt;/code&gt; file:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;127.0.0.1 {custom_endpoint}&quot;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-a&lt;/span&gt; /etc/hosts
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;rabbitmq&quot;&gt;RabbitMQ&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.rabbitmq.com/&quot;&gt;RabbitMQ&lt;/a&gt; is a messaging broker—an intermediary for messaging. It gives your applications a common platform to send and receive messages and your messages a safe place to live until received.&lt;/p&gt;
&lt;h3 id=&quot;configure-rabbitmq&quot;&gt;Configure RabbitMQ&lt;/h3&gt;
&lt;p&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section to open the port used for accessing RabbitMQ:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;broker&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;localhost:5672:&lt;/span&gt;
                &lt;span class=&quot;s&quot;&gt;protocol&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tcp&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;api.queue.spryker.local&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;swagger-ui&quot;&gt;Swagger UI&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://swagger.io/tools/swagger-ui/&quot;&gt;Swagger UI&lt;/a&gt; allows anyone—be it your development team or your end consumers—to visualize and interact with the API’s resources without having any of the implementation logic in place. It’s automatically generated from your OpenAPI (formerly known as Swagger) Specification, with the visual documentation making it easy for backend implementation and client-side consumption.&lt;/p&gt;
&lt;p&gt;For more details, see &lt;a href=&quot;https://swagger.io/docs/open-source-tools/swagger-ui/usage/installation/&quot;&gt;Swagger UI documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In Docker SDK, Swagger UI is provided as a service by default.&lt;/p&gt;
&lt;h3 id=&quot;rest-api-reference-in-spryker&quot;&gt;Rest API Reference in Spryker&lt;/h3&gt;
&lt;p&gt;Spryker provides the basic functionality to generate &lt;a href=&quot;https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md&quot;&gt;OpenApi schema specification&lt;/a&gt; for REST API endpoints. This document provides an overview of REST API endpoints. For each endpoint, you can find the URL, REST request parameters as well as the appropriate request and response data formats.&lt;/p&gt;
&lt;h3 id=&quot;configure-swagger-ui&quot;&gt;Configure Swagger UI&lt;/h3&gt;
&lt;p&gt;To configure an endpoint for Swagger UI, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;swagger&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;swagger-ui&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;custom_endpoint&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Add the endpoint to the &lt;code&gt;hosts&lt;/code&gt; file:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;127.0.0.1 {custom_endpoint}&quot;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-a&lt;/span&gt; /etc/hosts
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;redis&quot;&gt;Redis&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://redis.io&quot;&gt;Redis&lt;/a&gt; is an open-source (BSD licensed), in-memory data structure store used as a database, cache, and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries, and streams.&lt;/p&gt;
&lt;p&gt;For more information, see &lt;a href=&quot;https://redis.io/documentation&quot;&gt;Redis documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;configure-redis&quot;&gt;Configure Redis&lt;/h3&gt;
&lt;p&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section to open the port used for accessing Redis:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;key_value_store&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;redis&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;localhost:16379:&lt;/span&gt;
                &lt;span class=&quot;s&quot;&gt;protocol&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tcp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;redis-gui&quot;&gt;Redis GUI&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://joeferner.github.io/redis-commander/&quot;&gt;Redis Commander&lt;/a&gt; is a web management tool that provides a graphical user interface to access Redis databases and perform basic operations like view keys as a tree, view CRUD keys, or import and export databases.&lt;/p&gt;
&lt;h3 id=&quot;configure-redis-gui&quot;&gt;Configure Redis GUI&lt;/h3&gt;
&lt;p&gt;To configure an endpoint for Redis Commander, follow the steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;redis-gui&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;redis-commander&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;custom_endpoint&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;//redis-commander.spryker.local&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Adjust hosts file:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;127.0.0.1 {custom_endpoint}&quot;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-a&lt;/span&gt; /etc/hosts
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;mailhog&quot;&gt;MailHog&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/mailhog/MailHog&quot;&gt;MailHog&lt;/a&gt; is a mail catcher service that is used with Spryker in Docker for Demo and Development environments. Developers use this email testing tool to catch and show emails locally without an SMTP (Simple Mail Transfer Protocol) server.&lt;/p&gt;
&lt;p&gt;With the MailHog service, developers can do the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configure an application to use MailHog for SMTP delivery.&lt;/li&gt;
&lt;li&gt;View messages in the web UI or retrieve them via JSON API.&lt;/li&gt;
&lt;/ul&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;By default, the following applies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://mail.demo-spryker.com/&lt;/code&gt; is used to see incoming emails.&lt;/li&gt;
&lt;li&gt;Login is not required.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h3 id=&quot;configure-mailhog&quot;&gt;Configure MailHog&lt;/h3&gt;
&lt;p&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section to specify a custom endpoint:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;mail_catcher&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mailhog&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
                          &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;custom_endpoint&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;blackfire&quot;&gt;Blackfire&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://blackfire.io/&quot;&gt;Blackfire&lt;/a&gt; is a tool used to profile, test, debug, and optimize the performance of PHP applications. It gathers data about consumed server resources like memory, CPU time, and I/O operations. The data and configuration can be checked through the Blackfire web interface.&lt;/p&gt;
&lt;section class=&apos;info-block info-block--warning&apos;&gt;&lt;i class=&apos;info-block__icon icon-warning&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;While we recommend Blackfire for PHP code profiling, &lt;em&gt;Blackfire is not compatible with OpenTelemetry (OTel)&lt;/em&gt;. If OTel resolves this compatibility in future, we will inform you. Meantime, for profiling needs compatible with OTel, we suggest using tools like &lt;a href=&quot;/docs/dg/dev/integrate-and-configure/configure-services.html#tideways&quot;&gt;Tideways&lt;/a&gt;, which can integrate seamlessly with your OTel-based monitoring stack.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h3 id=&quot;configure-blackfire&quot;&gt;Configure Blackfire&lt;/h3&gt;
&lt;p&gt;To enable Blackfire, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the &lt;code&gt;image&lt;/code&gt; section, adjust &lt;code&gt;deploy.*.yml&lt;/code&gt; to enable the Blackfire PHP extension:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;spryker/php:7.4&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Use the same tag you had in `image`&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section to configure the Blackfire client:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;server-id&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;server_id&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;server-token&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;server_token&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;client-id&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;client_id&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;client-token&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;client-token&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h4 id=&quot;alternative-configuration&quot;&gt;Alternative configuration&lt;/h4&gt;
&lt;p&gt;Use the following configuration if you are going to change server or client details often or if you don’t want to define them in your deploy file.&lt;/p&gt;
&lt;p&gt;To enable Blackfire, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the &lt;code&gt;image&lt;/code&gt; section, adjust &lt;code&gt;deploy.*.yml&lt;/code&gt; to enable the Blackfire PHP extension:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;spryker/php:7.4&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# Use the same tag you had in `image`&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;In the &lt;code&gt;services&lt;/code&gt; section, adjust &lt;code&gt;deploy.*.yml&lt;/code&gt; to enable the Blackfire service:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;blackfire&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Pass Blackfire client details:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;BLACKFIRE_CLIENT_ID&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;client_id&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;BLACKFIRE_CLIENT_TOKEN&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;client-token&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; docker/sdk cli
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Pass Blackfire server details:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;BLACKFIRE_SERVER_ID&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;client-token&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;BLACKFIRE_SERVER_TOKEN&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;server_token&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; docker/sdk up
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;You can pass the server details only with the &lt;code&gt;docker/sdk up&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;It is not obligatory to pass all the details as environment variables or define all the details in the deploy file. You can pass the details in any combination.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h2 id=&quot;new-relic&quot;&gt;New Relic&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://newrelic.com/&quot;&gt;New Relic&lt;/a&gt; is a tool used to track the performance of services and the environment to quickly find and fix issues.&lt;/p&gt;
&lt;p&gt;The solution consists of a client and a server. The client is used to collect data about applications in an environment and send it to the server for further analysis and presentation. The server is used to aggregate, analyse, and present the data.&lt;/p&gt;
&lt;h3 id=&quot;prerequisites-1&quot;&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.newrelic.com/docs/apis/intro-apis/new-relic-api-keys/&quot;&gt;New Relic license key&lt;/a&gt;: &lt;code&gt;NEWRELIC_LICENSE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;NewRelic account ID: &lt;code&gt;NEWRELIC_ACCOUNT_ID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;NewRelic insights key: &lt;code&gt;NEWRELIC_INSIGHTS_KEY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The New Relic module.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;install-the-new-relic-module&quot;&gt;Install the New Relic module&lt;/h3&gt;
&lt;p&gt;While most environments come with New Relic already available, you may need to add the module to your project. Add the module to your &lt;code&gt;composer.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;composer require spryker-eco/new-relic
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;sccos-configure-new-relic&quot;&gt;SCCOS: Configure New Relic&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Adjust &lt;code&gt;deploy.*.yml&lt;/code&gt; in the &lt;code&gt;image:&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;- newrelic&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;NEWRELIC_CUSTOM_APP_ENVIRONMENT&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;ENVIRONMENT_VALUE_HERE&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# staging, dev, production, uat&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Push and deploy the changes using one of the following guides:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/deploy-in-a-staging-environment.html&quot;&gt;Deploying in a staging environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/deploy-in-a-production-environment.html&quot;&gt;Deploying in a production environment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Submit an infrastructure change request via the &lt;a href=&quot;/docs/about/all/support/using-the-support-portal.html&quot;&gt;Support Portal&lt;/a&gt;. Set up a Change Request for existing Parameter Store values and request your values to be set for the following parameters:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;NEWRELIC_LICENSE&lt;/li&gt;
&lt;li&gt;NEWRELIC_ACCOUNT_ID&lt;/li&gt;
&lt;li&gt;NEWRELIC_INSIGHTS_KEY&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once New Relic is enabled, in the New Relic dashboard, you may see either &lt;code&gt;company-staging-newrelic-app&lt;/code&gt; or &lt;code&gt;YVES-DE (docker.dev)&lt;/code&gt;. New Relic displays these APM names by the application name setup in the configuration files.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/the-docker-sdk/configure-services.md/new-relic-apms.png&quot; alt=&quot;screenshot&quot; /&gt;&lt;/p&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;If you update the name of an application, &lt;a href=&quot;/docs/about/all/support/using-the-support-portal.html&quot;&gt;contact support&lt;/a&gt; to update the changes in your APM.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h3 id=&quot;local-configure-new-relic&quot;&gt;Local: Configure New Relic&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;docker&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;newrelic&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;license&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;new_relic_license&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;distributed-tracing&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;In the &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;image&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;- newrelic&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;configure-yves-zed-and-glue-as-separate-apms&quot;&gt;Configure YVES, ZED, and GLUE as separate APMs&lt;/h3&gt;
&lt;p&gt;By default, in the New Relic dashboard, the APM is displayed as &lt;code&gt;company-staging-newrelic-app&lt;/code&gt;. To improve visibility, you may want to configure each application as a separate APM. For example, &lt;code&gt;YVES-DE (docker.dev)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To do it, add the &lt;code&gt;NewRelicMonitoringExtensionPlugin&lt;/code&gt; by creating the class &lt;code&gt;src/Pyz/Service/Monitoring/MonitoringDependencyProvider.php&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;declare&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;strict_types&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;cd&quot;&gt;/**
 * This file is part of the Spryker Commerce OS.
 * For full license information,  view the LICENSE file that was distributed with this source code.
 */&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Pyz\Service\Monitoring&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Spryker\Service\Monitoring\MonitoringDependencyProvider&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerMonitoringDependencyProvider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Pyz\Service\NewRelic\Plugin\NewRelicMonitoringExtensionPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;MonitoringDependencyProvider&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerMonitoringDependencyProvider&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;cd&quot;&gt;/**
     * @return \Spryker\Service\MonitoringExtension\Dependency\Plugin\MonitoringExtensionPluginInterface[]
     */&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getMonitoringExtensions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;array&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;NewRelicMonitoringExtensionPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Next, create the class &lt;code&gt;src/Pyz/Service/NewRelic/Plugin/NewRelicMonitoringExtensionPlugin.php&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;cd&quot;&gt;/**
 * MIT License
 * For full license information,  view the LICENSE file that was distributed with this source code.
 */&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Pyz\Service\NewRelic\Plugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerEco\Service\NewRelic\Plugin\NewRelicMonitoringExtensionPlugin&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerNewRelicMonitoringExtensionPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;NewRelicMonitoringExtensionPlugin&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerNewRelicMonitoringExtensionPlugin&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;cd&quot;&gt;/**
     * @param string|null $application
     * @param string|null $store
     * @param string|null $environment
     *
     * @return void
     */&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;setApplicationName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;?string&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$application&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;?string&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$store&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;?string&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$environment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;isActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// Custom application environment name, or use $environment as fallback&lt;/span&gt;
        &lt;span class=&quot;nv&quot;&gt;$environment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;getenv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;NEWRELIC_CUSTOM_APP_ENVIRONMENT&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;?:&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$environment&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
        &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;application&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$application&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;-&apos;&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$store&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos; (&apos;&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$environment&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;)&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;​&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;newrelic_set_appname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Some builds have the Monitoring service built into the Yves application. If &lt;code&gt;src/Pyz/Service/Monitoring/MonitoringDependencyProvider.php&lt;/code&gt; does not exist, you may want to check &lt;code&gt;src/Pyz/Yves/Monitoring/&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the class is missing from the Monitoring service, create it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;p&gt;With &lt;code&gt;new \SprykerEco\Service\NewRelic\Plugin\NewRelicMonitoringExtensionPlugin()&lt;/code&gt; being returned with the &lt;code&gt;getMonitoringExtensions()&lt;/code&gt; function, the Monitoring class includes New Relic. Now applications are displayed as separate APMs, and an appropriate endpoint or class is displayed with each transaction.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/the-docker-sdk/configure-services.md/new-relic-transactions.png&quot; alt=&quot;screenshot&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;track-deployments&quot;&gt;Track deployments&lt;/h3&gt;
&lt;p&gt;To notify New Relic about new deployments, include the console command &lt;code&gt;\SprykerEco\Zed\NewRelic\Communication\Console\RecordDeploymentConsole&lt;/code&gt; in &lt;code&gt;\Pyz\Zed\Console\ConsoleDependencyProvider&lt;/code&gt; as follows:&lt;/p&gt;
&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Pyz\Zed\Console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;mf&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerEco\Zed\NewRelic\Communication\Console\RecordDeploymentConsole&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;mf&quot;&gt;...&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ConsoleDependencyProvider&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SprykerConsoleDependencyProvider&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;mf&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getConsoleCommands&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Container&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$container&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;array&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nv&quot;&gt;$commands&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
	    &lt;span class=&quot;mf&quot;&gt;....&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;RecordDeploymentConsole&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	&lt;span class=&quot;mf&quot;&gt;....&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$commands&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;mf&quot;&gt;....&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;From now on you can use the record deployment functionality built-in in the console command, as follows:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vendor/bin/console newrelic:record-deployment &amp;lt;AppName&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;where &lt;code&gt;AppName&lt;/code&gt; corresponds to the preconfigured in NewRelicEnv::NEW_RELIC_APPLICATION_ID_ARRAY.
For more details, see &lt;a href=&quot;/docs/scos/dev/module-migration-guides/migration-guide-monitoring.html&quot;&gt;Upgrade the Monitoring module&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;webdriver&quot;&gt;Webdriver&lt;/h2&gt;
&lt;p&gt;PhantomJS is provided as a webdriver service by default, but you can switch to ChromeDriver as described below.&lt;/p&gt;
&lt;h3 id=&quot;chromedriver&quot;&gt;ChromeDriver&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://chromedriver.chromium.org/&quot;&gt;ChromeDriver&lt;/a&gt; is a thin wrapper on WebDriver and a &lt;a href=&quot;https://chromedriver.chromium.org/&quot;&gt;Chromium&lt;/a&gt; headless browser. It is used for automating web page interaction, JavaScript execution, and other testing-related activities. It provides full-control API to make end-to-end testing flexible and comfortable.&lt;/p&gt;
&lt;h4 id=&quot;configure-chromedriver&quot;&gt;Configure ChromeDriver&lt;/h4&gt;
&lt;p&gt;To enable Chromedriver, adjust &lt;code&gt;deploy.*.yml&lt;/code&gt; as follows:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;webdriver&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;chromedriver&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;phantomjs&quot;&gt;PhantomJS&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://phantomjs.org/&quot;&gt;PhantomJS&lt;/a&gt; is a headless browser for automating web page interaction. It ships with a WebDriver based on &lt;a href=&quot;https://www.selenium.dev/&quot;&gt;Selenium&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;configure-phantomjs&quot;&gt;Configure PhantomJS&lt;/h4&gt;
&lt;p&gt;To enable PhantomJS, adjust &lt;code&gt;deploy.*.yml&lt;/code&gt; as follows:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;webdriver&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;phantomjs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;dashboard&quot;&gt;Dashboard&lt;/h2&gt;
&lt;p&gt;Dashboard is a tool that helps to monitor logs in real time. You can monitor logs in all or a particular container.&lt;/p&gt;
&lt;h3 id=&quot;configure-dashboard&quot;&gt;Configure dashboard&lt;/h3&gt;
&lt;p&gt;To configure Dashboard, in the &lt;code&gt;services&lt;/code&gt; section, adjust &lt;code&gt;deploy.*.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;dashboard&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;dashboard&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;endpoints&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
                &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;custom_endpoint&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;tideways&quot;&gt;Tideways&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://tideways.com/&quot;&gt;Tideways&lt;/a&gt; is an application profiler used for testing and debugging. Its main functions are profiling, monitoring, and exception tracking.&lt;/p&gt;
&lt;h3 id=&quot;configure-tideways&quot;&gt;Configure Tideways&lt;/h3&gt;
&lt;p&gt;To configure Tideways, do the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;deploy.*.yml&lt;/code&gt;, adjust the &lt;code&gt;services&lt;/code&gt; section:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tideways&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;apikey&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;tideways_api_key&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tideways&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;environment-name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;tideways_environment_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;cli-enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;true|false&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;In the &lt;code&gt;image&lt;/code&gt; section of &lt;code&gt;deploy.*.yml&lt;/code&gt;, add Tideways to the list of enabled extensions:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;spryker/php:7.4&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# the image tag was previously used in `image`&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;php&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;s&quot;&gt;enabled-extensions&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;tideways&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
            <pubDate>Mon, 13 Jul 2026 14:48:42 +0000</pubDate>
            <link>https://docs.spryker.com/docs/dg/dev/integrate-and-configure/configure-services.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/dg/dev/integrate-and-configure/configure-services.html</guid>
            
            
        </item>
        
        <item>
            <title>CloudHub</title>
            <description>&lt;p&gt;CloudHub is a centralized self-service portal that lets you manage your Spryker infrastructure directly, without raising manual support requests for routine tasks. It provides a streamlined interface for provisioning resources and managing access.&lt;/p&gt;
&lt;p&gt;Technical teams can use CloudHub to maintain a clear overview of their cloud assets and keep access and storage resources aligned across environments, such as staging and production.&lt;/p&gt;
&lt;p&gt;CloudHub includes the following panels:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/cloud-hub/user-management.html&quot;&gt;User management (IAM)&lt;/a&gt;: Provision and manage IAM users, configure VPN access, and manage SSH public keys.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/cloud-hub/sso-user-management.html&quot;&gt;User management (SSO)&lt;/a&gt;: Provision and manage SSO users, configure VPN access.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/cloud-hub/storage-management.html&quot;&gt;Storage management (S3)&lt;/a&gt;: Provision and manage S3 buckets across your environments.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/cloud-hub/maintenance.html&quot;&gt;Maintenance&lt;/a&gt;: View upcoming maintenance windows and scheduled infrastructure updates.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/cloud-hub/service-links.html&quot;&gt;Service links&lt;/a&gt;: Access environment services such as Jenkins, RabbitMQ, AWS Console, and KeyCloak via SSO.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;resource-status-and-validation&quot;&gt;Resource status and validation&lt;/h2&gt;
&lt;p&gt;CloudHub provides feedback on all infrastructure actions through the &lt;strong&gt;Processing Status&lt;/strong&gt; column. This ensures transparency during the asynchronous provisioning process.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;Status&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;In Progress&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;The infrastructure change is currently being deployed or updated by the automation engine.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;Error&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;The action could not be completed. CloudHub provides specific error details. There are two types of error user might face:&lt;br&gt;• &lt;strong&gt;System errors&lt;/strong&gt;: In this case, we create a HubSpot ticket for our operations team to handle the problem. The user will receive a ticket number to track progress.&lt;br&gt;• &lt;strong&gt;Validation errors&lt;/strong&gt;: Issues like “S3 bucket name already exists” which must be fixed by the user.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;Active/Success&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;The resource is fully provisioned, validated, and ready for use in the designated environment.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description>
            <pubDate>Fri, 10 Jul 2026 12:03:10 +0000</pubDate>
            <link>https://docs.spryker.com/docs/ca/dev/cloud-hub/cloud-hub.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/ca/dev/cloud-hub/cloud-hub.html</guid>
            
            
        </item>
        
        <item>
            <title>Install Marketplace Dummy Payment</title>
            <description>This document describes how to integrate the Marketplace Dummy Payment into a Spryker project.

## Install feature core

Follow the steps below to install the Marketplace Dummy Payment feature core.

### Prerequisites

Install the required features:

| NAME | VERSION | INSTALLATION GUIDE |
| - | - | - |
| Spryker Core | {{page.release_tag}}   | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) |
| Payments | {{page.release_tag}}   | [Install the Payments feature](/docs/pbc/all/payment-service-provider/latest/base-shop/install-and-upgrade/install-the-payments-feature.html) |
| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) |
| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) |
| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) |


### 1) Install required modules using Сomposer

Install the required modules using Composer:

```bash
composer require spryker/dummy-marketplace-payment:^0.2.2 --update-with-dependencies
```

{% info_block warningBox &quot;Verification&quot; %}

Make sure that the following modules have been installed:

| MODULE | EXPECTED DIRECTORY |
|-|-|
| DummyMarketplacePayment | vendor/spryker/dummy-marketplace-payment |

{% endinfo_block %}

### 2) Set up configuration

Add the following configuration:

| CONFIGURATION | SPECIFICATION | NAMESPACE |
| ------------- | ------------ | ------------ |
| config_default-docker.php | Default docker specific configuration of entire application | config/Shared/config_default-docker.php |
| config_default.php | Default configuration of entire application | config/Shared/config_default.php |

**config/Shared/config_default-docker.php**

```php
use Spryker\Shared\DummyMarketplacePayment\DummyMarketplacePaymentConfig;


$config[OmsConstants::ACTIVE_PROCESSES] = [
    &apos;MarketplacePayment01&apos;,
];
$config[SalesConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING] = [
    DummyMarketplacePaymentConfig::PAYMENT_METHOD_DUMMY_MARKETPLACE_PAYMENT_INVOICE =&gt; &apos;MarketplacePayment01&apos;,
];
```

**config/Shared/config_default.php**

```php
use Spryker\Shared\DummyMarketplacePayment\DummyMarketplacePaymentConfig;

$config[OmsConstants::ACTIVE_PROCESSES] = [
    &apos;MarketplacePayment01&apos;,
];
$config[SalesConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING] = [
    DummyMarketplacePaymentConfig::PAYMENT_METHOD_DUMMY_MARKETPLACE_PAYMENT_INVOICE =&gt; &apos;MarketplacePayment01&apos;,
];
```

### 3) Set up transfer objects

```bash
console transfer:generate
```

{% info_block warningBox &quot;Verification&quot; %}

Make sure that the following transfer objects are generated:

| TRANSFER | TYPE | EVENT  | PATH  |
| --------- | ------- | ----- | ------------- |
| DummyMarketplacePayment | class | created | src/Generated/Shared/Transfer/DummyMarketplacePayment |
| Payment.dummyMarketplacePaymentInvoice | property | created | src/Generated/Shared/Transfer/Payment |
| Order.dummyMarketplacePaymentInvoice | property | created | src/Generated/Shared/Transfer/Order |

{% endinfo_block %}

### 4) Set up behavior

Enable the following behaviors by registering the plugins:

| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE |
| --------- | ------- | ----- | ------------- |
| MerchantProductItemPaymentMethodFilterPlugin | If not all order items contain of product reference, then filters dummy marketplace payment methods out. |  | Spryker\Zed\DummyMarketplacePayment\Communication\Plugin\Payment\MerchantProductItemPaymentMethodFilterPlugin |

**src/Pyz/Zed/Payment/PaymentDependencyProvider.php**

```php
&lt;?php

namespace Pyz\Zed\Payment;

use Spryker\Zed\DummyMarketplacePayment\Communication\Plugin\Payment\MerchantProductItemPaymentMethodFilterPlugin;
use Spryker\Zed\Payment\PaymentDependencyProvider as SprykerPaymentDependencyProvider;


class PaymentDependencyProvider extends SprykerPaymentDependencyProvider
{
    /**
     * @return array&lt;\Spryker\Zed\PaymentExtension\Dependency\Plugin\PaymentMethodFilterPluginInterface&gt;
     */
    protected function getPaymentMethodFilterPlugins(): array
    {
        return [
            new MerchantProductItemPaymentMethodFilterPlugin(),
        ];
    }
}
```

### 5) Import data

1. Extend and import payment method data:

**data/import/payment_method.csv**

```csv
payment_method_key,payment_method_name,payment_provider_key,payment_provider_name,is_active
dummyMarketplacePaymentInvoice,Invoice,DummyMarketplacePayment,Dummy Marketplace Payment,1
```

| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION |
|-|-|-|-|-|
| payment_method_key | &amp;check; | string | dummyMarketplacePaymentInvoice | Payment method key. |
| payment_method_name | &amp;check; | string | Invoice | Payment method name. |
| payment_provider_key | &amp;check; | string | DummyMarketplacePayment | Payment provider key. |
| payment_provider_name | &amp;check; | string | Dummy Marketplace Payment | Payment provider name. |
| is_active |  | boolean | 1 | Is payment method active. |

2. Extend and import payment store data:

**data/import/payment_method_store.csv**

```csv
payment_method_key,store
dummyMarketplacePaymentInvoice,DE
dummyMarketplacePaymentInvoice,AT
dummyMarketplacePaymentInvoice,US
```

| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION |
|-|-|-|-|-|
| payment_method_key | &amp;check; | string | dummyMarketplacePaymentInvoice | Payment method key. |
| store | &amp;check; | string | DE | Store identifier. |

3. Import data:

```bash
console data:import payment-method
console data:import payment-method-store
```

{% info_block warningBox &quot;Verification&quot; %}

Make sure that the new payment method is added to the `spy_payment_method` and `spy_payment_method_store` tables in the database.

{% endinfo_block %}

## Install feature frontend

Follow the steps below to install the Dummy Payment feature frontend.

### 1) Add translations

Append glossary according to your configuration:

**data/import/glossary.csv**

```yaml
DummyMarketplacePaymentInvoice,Invoice,en_US
DummyMarketplacePaymentInvoice,Auf Rechnung,de_DE
dummyMarketplacePaymentInvoice.invoice,Pay with invoice:,en_US
dummyMarketplacePaymentInvoice.invoice,Auf Rechnung bezahlen:,de_DE
checkout.payment.provider.DummyMarketplacePayment,Dummy Marketplace Payment,en_US
checkout.payment.provider.DummyMarketplacePayment,Beispiel Marktplatz Zahlungsmethode,de_DE
```

Import data:

```bash
console data:import glossary
```

{% info_block warningBox &quot;Verification&quot; %}

Make sure that the configured data is added to the `spy_glossary_key` and `spy_glossary_translation` tables in the database.

{% endinfo_block %}

### 2) Set up behavior

Enable the following behaviors by registering the plugins:

| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE |
| --------- | ------- | ----- | ------------- |
| DummyMarketplacePaymentHandlerPlugin | Expands Payment transfer with payment provider and payment selection. |  | Spryker\Yves\DummyMarketplacePayment\Plugin\StepEngine\DummyMarketplacePaymentHandlerPlugin |
| DummyMarketplacePaymentInvoiceSubFormPlugin | Creates sub form for Invoice payment method. |  | Spryker\Yves\DummyMarketplacePayment\Plugin\StepEngine\SubForm\DummyMarketplacePaymentInvoiceSubFormPlugin |

**src/Pyz/Yves/CheckoutPage/CheckoutPageDependencyProvider.php**

```php
&lt;?php

namespace Pyz\Yves\CheckoutPage;

use Spryker\Shared\DummyMarketplacePayment\DummyMarketplacePaymentConfig;
use Spryker\Yves\DummyMarketplacePayment\Plugin\StepEngine\DummyMarketplacePaymentHandlerPlugin;
use Spryker\Yves\Kernel\Container;
use Spryker\Yves\StepEngine\Dependency\Plugin\Handler\StepHandlerPluginCollection;
use SprykerShop\Yves\CheckoutPage\CheckoutPageDependencyProvider as SprykerShopCheckoutPageDependencyProvider;

class CheckoutPageDependencyProvider extends SprykerShopCheckoutPageDependencyProvider
{
    /**
     * @param \Spryker\Yves\Kernel\Container $container
     *
     * @return \Spryker\Yves\Kernel\Container
     */
    public function provideDependencies(Container $container): Container
    {
        $container = parent::provideDependencies($container);
        $container = $this-&gt;extendPaymentMethodHandler($container);
        $container = $this-&gt;extendSubFormPluginCollection($container);

        return $container;
    }

    /**
     * @param \Spryker\Yves\Kernel\Container $container
     *
     * @return \Spryker\Yves\Kernel\Container
     */
    protected function extendPaymentMethodHandler(Container $container): Container
    {
        $container-&gt;extend(static::PAYMENT_METHOD_HANDLER, function (StepHandlerPluginCollection $paymentMethodHandler) {
            $paymentMethodHandler-&gt;add(
                new DummyMarketplacePaymentHandlerPlugin(),
                DummyMarketplacePaymentConfig::PAYMENT_METHOD_DUMMY_MARKETPLACE_PAYMENT_INVOICE
            );

            return $paymentMethodHandler;
        });

        return $container;
    }

    /**
     * @param \Spryker\Yves\Kernel\Container $container
     *
     * @return \Spryker\Yves\Kernel\Container
     */
    protected function extendSubFormPluginCollection(Container $container): Container
    {
        $container-&gt;extend(static::PAYMENT_SUB_FORMS, function (SubFormPluginCollection $paymentSubFormPluginCollection) {
            $paymentSubFormPluginCollection-&gt;add(new DummyMarketplacePaymentInvoiceSubFormPlugin());

            return $paymentSubFormPluginCollection;
        });

        return $container;
    }
}
```

{% info_block warningBox &quot;Verification&quot; %}

Add a merchant product to a shopping cart, go to checkout and make sure that Dummy Payment Invoice payment method is available.

{% endinfo_block %}

### 3) Optional: Configure the date of birth field

By default, the Marketplace Invoice payment sub form renders a date of birth field with its validation. To hide the field and skip its validation, override `DummyMarketplacePaymentConfig::isDateOfBirthEnabled()` in your project to return `false`:

**src/Pyz/Yves/DummyMarketplacePayment/DummyMarketplacePaymentConfig.php**

```php
&lt;?php

namespace Pyz\Yves\DummyMarketplacePayment;

use Spryker\Yves\DummyMarketplacePayment\DummyMarketplacePaymentConfig as SprykerDummyMarketplacePaymentConfig;

class DummyMarketplacePaymentConfig extends SprykerDummyMarketplacePaymentConfig
{
    public function isDateOfBirthEnabled(): bool
    {
        return false;
    }
}
```
</description>
            <pubDate>Fri, 10 Jul 2026 11:37:24 +0000</pubDate>
            <link>https://docs.spryker.com/docs/pbc/all/payment-service-provider/latest/marketplace/install-marketplace-dummy-payment.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/pbc/all/payment-service-provider/latest/marketplace/install-marketplace-dummy-payment.html</guid>
            
            
        </item>
        
        <item>
            <title>User management (SSO)</title>
            <description>{% info_block infoBox %}

This feature is part of a gradual rollout and will be available to everyone eventually. We will notify your team once your project is onboarded.

{% endinfo_block %}

The **User management (SSO Users)** panel in [CloudHub](/docs/ca/dev/cloud-hub/cloud-hub.html) lets you control infrastructure access and define how team members connect to your environments in a unified and streamlined way while using one user to access everything. You can create, update, and delete SSO users, as well as fine-tune access for each user per service directly through the portal.

For more information on what SSO is and what benefits it provides, see [SSO Access](/docs/ca/dev/access/sso-access.html).

## Capabilities

- **Identity provisioning:** Create SSO users for specific environments to ensure precise access control.
- **Secure connectivity:** Enable or disable VPN access for individual users to secure communications with protected network resources. SSO users also offer a number of options for securing your access from MFA to passwordless.
- **User lifecycle management:** Modify existing user configurations or remove users when access is no longer required.

## Available service permissions

Users can be assigned very granular permissions for every available application per environment. This means one SSO user can have admin permissions for RabbitMQ on a test environment and viewer permissions for RabbitMQ on a production environment.

| Service | Permission |
| -------- | -------- |
| RabbitMQ | * Admin — Full administrative access with the ability to create and remove queues &lt;br&gt; * Developer — Can view queues, read and publish messages in the queues &lt;br&gt; * Viewer — Read-only access to queues |
| Jenkins | * Admin — Full administrative access &lt;br&gt; * Developer — Can build, view, and cancel jobs &lt;br&gt; * Viewer — Read-only access to jobs and builds |
| AWS CLI | * BaseRole — Allows access to the specific environment in the AWS Dashboard and AWS CLI &lt;br&gt; * Custom Role — Can be absent, or can be one or more roles composed specifically for the customer that include all permissions of the Base role and additional permissions like DB access |

### Requesting and renewing VPN for your SSO user

An SSO user needs VPN to access Jenkins and RabbitMQ. No VPN is required to access AWS Console.

To request the VPN for the specific environment, select the VPN option in the SSO user creation or edit form on CloudHub. Depending on whether SSO is enabled for Bastion (which handles VPN connections), you may need to use your SSO user credentials to also log in to the VPN when turning it on.

If your VPN configuration has expired, click the **VPN Renew** button next to your user to request a new VPN configuration.

## Credential delivery for new users

When a new SSO user is created, credentials and access configuration are delivered securely across two separate emails:

1. **User update email:** You will get an `Action needed: Verify your Spryker SSO account updates` email with the link for account update. Follow this link to set up the password for your new user.
2. **VPN configuration email:** If you selected the VPN checkbox on user creation, or checked it during user edit, the VPN configuration file (OVPN profile) required to connect to the protected network is sent in a separate email.

{% info_block infoBox &quot;Security note&quot; %}

Keep both emails secure. The link for account update expires in 3 hours. If you did not manage to set up the user password within 3 hours, contact support.

{% endinfo_block %}
</description>
            <pubDate>Fri, 10 Jul 2026 11:14:34 +0000</pubDate>
            <link>https://docs.spryker.com/docs/ca/dev/cloud-hub/sso-user-management.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/ca/dev/cloud-hub/sso-user-management.html</guid>
            
            
        </item>
        
        <item>
            <title>SSO Security Options</title>
            <description>{% info_block infoBox %}

This feature is part of a gradual rollout and will be available to everyone eventually. We will notify your team once your project is onboarded.

{% endinfo_block %}

## Security benefits of the SSO access

From a security perspective, enabling SSO strengthens the existing secure access flow by adding additional protection layers:

- Secure VPN access
- TLS communication
- Various authentication options

Users can authenticate through:

- **Flexible authentication:** Authenticate users with various mechanisms, including passkey and your own identity provider.
- **Two-factor authentication:** Support for passkey, recovery codes and TOTP/HOTP via Google Authenticator or FreeOTP.

## Passkey (WebAuthn authenticator)

A passkey is a FIDO authentication credential based on FIDO standards that allows a user to sign in to apps and websites with the same process that they use to unlock their device (biometrics, PIN, or pattern). Passkeys are FIDO cryptographic credentials that are tied to a user&apos;s account on a website or application.

{% info_block infoBox &quot;Acquiring Passkey limitation&quot; %}

This feature is available only for SSO users created via a Self-Service request.
Users managed through External IdP connections are not supported.

{% endinfo_block %}

How to set up a passkey for your SSO user:

1. Click on **Keycloak** service in CloudHub which will lead to the SSO login page.
2. Log in to your Keycloak Account Console.
3. Go to the **Account Security** section.
4. Open **Signing In**.
5. Find the **Passkey** section.
6. Click **Set up passkey**.
7. Follow the browser prompt to create a passkey using your device&apos;s supported method (for example, Windows Hello, Touch ID, Face ID, security key).
8. After successful registration, the passkey appears in your list of registered authenticators.

### Authenticate with WebAuthn authenticator

After you register your authenticator, signing in is easy:

1. Open the login page and enter your username and password.
2. Your browser will prompt you to verify your identity using your authenticator (for example, fingerprint, face recognition, or security key).

## LoginLess (WebAuthn passwordless)

Log in without a username or password. You can sign in using biometric methods (such as fingerprints or facial recognition), FIDO2 security keys (for example, YubiKey), or other compatible authenticators.

{% info_block infoBox &quot;Acquiring LoginLess limitation&quot; %}

This feature is available only for SSO users created via a Self-Service request.
Users managed through External IdP connections are not supported.

{% endinfo_block %}

1. Click on **Keycloak** service in CloudHub which will lead to the SSO login page.
2. Log in to your Keycloak Account Console.
3. Go to the **Account Security** section.
4. Open **Signing In**.
5. Find the **Passwordless** section.
6. Click **Set up passkey**.
7. Follow the browser prompt to create a passkey using your device&apos;s supported method (for example, Windows Hello, Touch ID, Face ID, security key).
8. After successful registration, the passkey appears in your list of registered authenticators.

### Authenticate with LoginLess (WebAuthn passwordless)

If you have set up passwordless WebAuthn, you can sign in to Keycloak without entering a username or password.

You will simply confirm your identity using your device (such as fingerprint, face recognition, or a security key). WebAuthn can also be used as an extra security step (two-factor authentication) if enabled for your account:

1. Open the login page.
2. Click **Sign in with Passkey**.
3. Your browser will prompt you to verify your identity using your authenticator (for example, fingerprint, face recognition, or security key).

## Related topics

- [User Management SSO](/docs/ca/dev/cloud-hub/sso-user-management.html)
</description>
            <pubDate>Fri, 10 Jul 2026 11:14:34 +0000</pubDate>
            <link>https://docs.spryker.com/docs/ca/dev/access/sso-security-options.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/ca/dev/access/sso-security-options.html</guid>
            
            
        </item>
        
        <item>
            <title>SSO Access</title>
            <description>{% info_block infoBox %}

This feature is part of a gradual rollout and will be available to everyone eventually. We will notify your team once your project is onboarded.

{% endinfo_block %}

## What is SSO

**Single Sign-On (SSO)** is an authentication mechanism that allows users to sign in once and access multiple applications without re-authenticating for each service (RMQ, Jenkins).

SSO can be integrated with an external organizational identity provider (IdP), such as a corporate directory service, enabling centralized user management and access control.

This approach improves security by reducing password reuse and enhances the user experience by minimizing repeated logins.

## How SSO improves the user experience

SSO makes accessing services easier, faster, and more secure by providing:

- **Centralized authentication** through your company&apos;s identity provider, or via users managed in our identity system
- **Fewer passwords to remember**, reducing friction and support overhead
- **A faster and smoother login experience** across all connected services
- **Simplified user lifecycle management** (onboarding, updates, and offboarding)
- **Stronger security and compliance** through consistent authentication policies
- **Easy integration for enterprise organizations** that use their own identity provider

## How to access applications with an SSO user

You will need an SSO user, [User Management SSO](/docs/ca/dev/cloud-hub/sso-user-management.html) describes how to get one.

### AWS access

#### AWS Management Console

1. Click on **AWS Console** service in CloudHub which will lead to the SSO login page.
2. Log in using your SSO user credentials.
3. After successful authentication, you will be redirected to the AWS Management Console with access to your environment services.

#### AWS CLI

To access AWS services via the AWS CLI with your SSO credentials, see [Connecting to AWS CLI with an SSO user](/docs/ca/dev/access/connecting-to-aws-cli-with-an-sso-user.html).

### VPN access

VPN access uses short-lived sessions for improved security. To start a VPN session, you must go through the SSO login process and provide an MFA code.

1. Open your VPN client and initiate a connection to the target environment.
2. When prompted, log in using your SSO user credentials.
3. Provide your MFA code to complete authentication.
4. Once authenticated, the VPN session is established. The session is short-lived and will expire after a period of inactivity or at a set time limit.

To reconnect after a session expires, repeat the SSO login and MFA steps.

### RabbitMQ access

For RabbitMQ, the user must have VPN enabled for the specific environment they want to access. Once the VPN is enabled:

1. Click on **RabbitMQ** service in CloudHub which will lead to the RabbitMQ login page.
2. Click the **Log in** button.
3. You will be redirected to the SSO login form.
4. Provide your SSO user credentials and log in.

If you previously logged in to VPN or any other application in the same browser, for example Jenkins, log in happens automatically, because you are using the same SSO user.

### Jenkins access

For Jenkins, the user must have VPN enabled for the specific environment they want to access. Once the VPN is enabled:

1. Click on **Jenkins** service in CloudHub which will lead to the SSO login page.
2. Provide your SSO user credentials and log in.
3. You will be redirected to the Jenkins dashboard.

If you previously logged in to VPN or any other application in the same browser, for example RabbitMQ, log in happens automatically, because you are using the same SSO user.

### Keycloak access

Keycloak is where you can view and edit your SSO user profile (editing options are limited).

1. Click on **Keycloak** service in CloudHub which will lead to the SSO login page.
2. Provide your SSO user credentials and log in.
3. You will be redirected to Keycloak where you can change your username and password.

If you previously logged in to VPN or any other application in the same browser, for example RabbitMQ, log in happens automatically, because you are using the same SSO user.

## External IdP connection

As an alternative or additional authentication method, we support connection to external Identity Providers (IdPs) that use SAML or OpenID Connect (OIDC).

Benefits of using an external IdP:

- You can apply and enforce your own authentication policies.
- You can manage user assignments and permissions to all supported services directly through your IdP without creating any Self‑Service requests.
- Centralized lifecycle management of users (onboarding/offboarding handled entirely in your IdP).
- Stronger security posture through enterprise-grade features such as MFA, conditional access, and device or network policies.
- Seamless user experience with a single set of corporate credentials.
- Reduced administrative overhead by eliminating duplicate user management.
- Better compliance and auditing through centralized identity logs and policies.
- Faster and automated access provisioning as your organization scales.
- Improved security posture by not storing or processing passwords within our platform.

{% info_block infoBox &quot;Acquiring external IdP users limitation&quot; %}

Such users **cannot** be created or managed via CloudHub User Management (SSO) page. For configuration details, contact our support team.

{% endinfo_block %}

## Next steps

- [User Management SSO](/docs/ca/dev/cloud-hub/sso-user-management.html)
- [SSO Security Options](/docs/ca/dev/access/sso-security-options.html)
- [Connecting to AWS CLI with an SSO user](/docs/ca/dev/access/connecting-to-aws-cli-with-an-sso-user.html)
</description>
            <pubDate>Fri, 10 Jul 2026 11:14:34 +0000</pubDate>
            <link>https://docs.spryker.com/docs/ca/dev/access/sso-access.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/ca/dev/access/sso-access.html</guid>
            
            
        </item>
        
        <item>
            <title>Service links</title>
            <description>The **Service Links** panel in [CloudHub](/docs/ca/dev/cloud-hub/cloud-hub.html) provides quick access to the services available in each of your target environments. Each service is displayed as a card with a direct link to open it.

{% info_block infoBox %}

This feature is part of a gradual rollout and will be available to everyone eventually. We will notify your team once your project is onboarded.

{% endinfo_block %}

{% info_block infoBox &quot;SSO access only&quot; %}

Service links are only available for SSO-enabled environments. For non-SSO environments, links are not working as the URLs differ.

{% endinfo_block %}

## Accessing service links

To access service links, do the following:

1. In CloudHub, go to **Service Links**.
2. In the top-right corner, select the target environment from the dropdown.
3. The panel displays all available services for the selected environment.
4. To open a service, click **Open** on the corresponding service card.

## Available services

The following services may be available depending on your environment configuration:

| Service | Description | VPN required |
| :--- | :--- | :--- |
| **Jenkins** | Provides access to the Jenkins dashboard for managing build and deployment pipelines. | Yes |
| **RabbitMQ** | Lets you monitor queues, exchanges, and message activity. | Yes |
| **AWS Console** | Provides access to the AWS Management Console for your environment. | No |
| **KeyCloak** | Lets you manage users, roles, and authentication settings. | No |

{% info_block warningBox &quot;VPN requirement&quot; %}

Jenkins and RabbitMQ are only accessible when your VPN connection is active. Make sure your VPN is connected before attempting to open these services. For instructions on setting up VPN access, see [User management (IAM)](/docs/ca/dev/cloud-hub/user-management.html).

{% endinfo_block %}

{% info_block infoBox &quot;Environment availability&quot; %}

The services shown depend on the selected environment and may vary. Note that this page displays all services available in that environment — it does not reflect the access granted to individual users.

{% endinfo_block %}
</description>
            <pubDate>Fri, 10 Jul 2026 11:14:34 +0000</pubDate>
            <link>https://docs.spryker.com/docs/ca/dev/cloud-hub/service-links.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/ca/dev/cloud-hub/service-links.html</guid>
            
            
        </item>
        
        <item>
            <title>Connecting to AWS CLI with an SSO user</title>
            <description>&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;
&lt;p&gt;This feature is part of a gradual rollout and will be available to everyone eventually. We will notify your team once your project is onboarded.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;p&gt;This document describes how to configure and use &lt;a href=&quot;https://github.com/Versent/saml2aws&quot;&gt;SAML2AWS&lt;/a&gt; to authenticate with the AWS CLI using your SSO credentials.&lt;/p&gt;
&lt;p&gt;SAML2AWS is a command-line tool that lets you authenticate against an identity provider (IdP) using SAML and obtain temporary AWS credentials. This gives you AWS CLI access to your cloud environment without managing long-lived AWS access keys.&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Versent/saml2aws#install&quot;&gt;SAML2AWS installed&lt;/a&gt; on your machine.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html&quot;&gt;AWS CLI installed&lt;/a&gt; on your machine.&lt;/li&gt;
&lt;li&gt;An SSO user. See &lt;a href=&quot;/docs/ca/dev/cloud-hub/sso-user-management.html&quot;&gt;User Management SSO&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Your SSO login page URL. To get it, see &lt;a href=&quot;/docs/ca/dev/access/sso-access.html&quot;&gt;SSO Access&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;step-1-configure-saml2aws&quot;&gt;Step 1: Configure SAML2AWS&lt;/h2&gt;
&lt;p&gt;To configure SAML2AWS, replace the placeholders with your actual values and execute the following:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;saml2aws configure &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--idp-provider&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Browser &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--browser-type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;BROWSER_TYPE&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;YOUR_SSO_LOGIN_PAGE_URL&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--profile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;YOUR_PROFILE&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--skip-prompt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--idp-provider=Browser&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Uses a browser-based login flow via your identity provider.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--browser-type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The browser to use for authentication. See &lt;a href=&quot;#supported-browser-types&quot;&gt;Supported browser types&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SSO login page URL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--profile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The AWS CLI profile name to store credentials under.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--skip-prompt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Skips interactive prompts and applies values directly.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;saml2aws configure &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--idp-provider&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Browser &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--browser-type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;chrome &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;https://auth.spryker.systems/realms/my-realm/protocol/saml/clients/my-aws-client &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--profile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;my-aws-profile &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--skip-prompt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;step-2-log-in-with-saml2aws&quot;&gt;Step 2: Log in with SAML2AWS&lt;/h2&gt;
&lt;p&gt;After configuring, run the login command to authenticate and retrieve temporary AWS credentials:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;saml2aws login &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--profile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;YOUR_PROFILE&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--skip-prompt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Add &lt;code&gt;--force&lt;/code&gt; to skip the expiry check and re-authenticate even if existing credentials are still valid:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;saml2aws login &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--profile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;YOUR_PROFILE&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--skip-prompt&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;section class=&apos;info-block &apos;&gt;&lt;i class=&apos;info-block__icon icon-info&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;Browser driver&lt;/div&gt;
&lt;p&gt;On some operating systems and browsers, SAML2AWS needs to download a browser driver automatically. If login fails or the browser does not open, add the &lt;code&gt;--download-browser-driver&lt;/code&gt; flag:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;saml2aws login &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--profile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;YOUR_PROFILE&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--download-browser-driver&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--skip-prompt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;You do not need this flag if you are on Linux and using Chrome.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;p&gt;On successful authentication, your terminal displays a confirmation and the credentials are saved under the specified profile.&lt;/p&gt;
&lt;h2 id=&quot;step-3-use-the-aws-cli&quot;&gt;Step 3: Use the AWS CLI&lt;/h2&gt;
&lt;p&gt;Pass &lt;code&gt;--profile {YOUR_PROFILE}&lt;/code&gt; to any AWS CLI command to use the credentials obtained from SAML2AWS:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;aws &lt;span class=&quot;nt&quot;&gt;--profile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;YOUR_PROFILE&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; s3 &lt;span class=&quot;nb&quot;&gt;ls
&lt;/span&gt;aws &lt;span class=&quot;nt&quot;&gt;--profile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;YOUR_PROFILE&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; ec2 describe-instances
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;To avoid specifying &lt;code&gt;--profile&lt;/code&gt; with every command, set the &lt;code&gt;AWS_PROFILE&lt;/code&gt; environment variable for your session:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;AWS_PROFILE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;YOUR_PROFILE&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
aws s3 &lt;span class=&quot;nb&quot;&gt;ls
&lt;/span&gt;aws ec2 describe-instances
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The temporary credentials expire after a set period. When they expire, re-run the login command from &lt;a href=&quot;#step-2-log-in-with-saml2aws&quot;&gt;Step 2&lt;/a&gt; to refresh them.&lt;/p&gt;
&lt;h2 id=&quot;supported-browser-types&quot;&gt;Supported browser types&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;--browser-type&lt;/code&gt; parameter accepts the following values (see the &lt;a href=&quot;https://github.com/Versent/saml2aws/blob/v2.36.19/cmd/saml2aws/main.go#L76&quot;&gt;full list in the saml2aws source&lt;/a&gt;):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Browser&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;chrome&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Google Chrome (stable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;chrome-beta&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Google Chrome Beta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;chrome-dev&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Google Chrome Dev&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;chrome-canary&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Google Chrome Canary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;chromium&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chromium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;firefox&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mozilla Firefox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;webkit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WebKit (Safari engine, macOS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;msedge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Microsoft Edge (stable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;msedge-beta&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Microsoft Edge Beta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;msedge-dev&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Microsoft Edge Dev&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;msedge-canary&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Microsoft Edge Canary&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;os-and-browser-combinations&quot;&gt;OS and browser combinations&lt;/h2&gt;
&lt;p&gt;The following combinations have been verified to work:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operating system&lt;/th&gt;
&lt;th&gt;Browser&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ubuntu&lt;/td&gt;
&lt;td&gt;Chrome, Chromium, Firefox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;WebKit, Chromium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows 10&lt;/td&gt;
&lt;td&gt;Chrome, Firefox, Microsoft Edge&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;section class=&apos;info-block info-block--warning&apos;&gt;&lt;i class=&apos;info-block__icon icon-warning&apos;&gt;&lt;/i&gt;&lt;div class=&apos;info-block__content&apos;&gt;&lt;div class=&quot;info-block__title&quot;&gt;Chrome on macOS&lt;/div&gt;
&lt;p&gt;Chrome on macOS may not work for all users. If you experience issues, use &lt;code&gt;webkit&lt;/code&gt; or &lt;code&gt;chromium&lt;/code&gt; instead.&lt;/p&gt;
&lt;/div&gt;&lt;/section&gt;
&lt;h2 id=&quot;troubleshooting&quot;&gt;Troubleshooting&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The browser does not open during login.&lt;/td&gt;
&lt;td&gt;Add &lt;code&gt;--download-browser-driver&lt;/code&gt; to the login command to let SAML2AWS download the required browser driver automatically.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentication fails or credentials are not saved.&lt;/td&gt;
&lt;td&gt;Verify that &lt;code&gt;--browser-type&lt;/code&gt; matches a browser installed on your machine and that the &lt;code&gt;--url&lt;/code&gt; value is correct.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The AWS CLI does not recognize the profile.&lt;/td&gt;
&lt;td&gt;Ensure the &lt;code&gt;--profile&lt;/code&gt; value in the login command matches the one used during configuration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Error authenticating to IDP.: please install the driver (vx.x.x) and browsers first: %!w(&amp;lt;nil&amp;gt;)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Add &lt;code&gt;--download-browser-driver&lt;/code&gt; to the login command to let SAML2AWS download the required browser driver automatically.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;next-steps&quot;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/access/sso-access.html&quot;&gt;SSO Access&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/ca/dev/access/access-the-aws-management-console.html&quot;&gt;Access AWS Management Console&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
            <pubDate>Fri, 10 Jul 2026 11:12:34 +0000</pubDate>
            <link>https://docs.spryker.com/docs/ca/dev/access/connecting-to-aws-cli-with-an-sso-user.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/ca/dev/access/connecting-to-aws-cli-with-an-sso-user.html</guid>
            
            
        </item>
        
        <item>
            <title>Search Statistics</title>
            <description>Search Statistics is a Back Office feature that gives business operators visibility into storefront search behavior. It uses Google Analytics 4 (GA4) as the underlying data collection and reporting layer, eliminating the need for custom per-project analytics implementations.

{% info_block warningBox &quot;Legal compliance&quot; %}

Search Statistics collects storefront search queries by using Google Analytics 4. To comply with privacy regulations such as the GDPR and ePrivacy Directive, inform storefront customers about this data collection. Update your cookie consent banner and privacy policy to explain that the search terms customers enter are collected and processed for analytics purposes. Obtain customer consent before you enable tracking.

{% endinfo_block %}

## Related developer guides

- [Install Search Statistics](/docs/pbc/all/miscellaneous/latest/third-party-integrations/marketing-and-conversion/analytics/google-analytics/install-search-statistics.html)

## Use Search Statistics

This section explains how to use Search Statistics in the Spryker Back Office. Search Statistics shows what customers are searching for and which searches return no results, so you can optimize your catalog, create synonyms, and improve product discoverability.

{% info_block infoBox &quot;Data availability&quot; %}

Google Analytics 4 processes incoming events with a delay of up to 48 hours. Search data collected on the storefront may not appear in the Back Office immediately after installation.

{% endinfo_block %}

### Access Search Statistics

To open the Search Statistics dashboard, in the Back Office, go to **Analytics &gt; Search Statistics**.

The dashboard displays the following:

- **Top 10 Frequent Searches**: the ten most searched terms for the selected period, ranked by search count.
- **Top 10 Zero-Result Searches**: the ten most frequently searched terms that returned no results, ranked by occurrence count.

### Select a date range

The dashboard and all detail views filter data by a date range. The currently active range is shown at the top of the page.

To change the date range, select the date range dropdown and choose one of the following options:

- **Last 24 hours**
- **Last 7 days**
- **Last 30 days**
- **Custom range**: opens a date picker where you can set a start and end date.

### Analyze frequent searches

The **Top 10 Frequent Searches** widget shows the most popular search terms. Use this data to:

- Understand buyer intent and prioritize catalog improvements.
- Identify high-volume terms to optimize product titles and descriptions.
- Discover seasonal or campaign-driven search trends.

To view all frequent searches beyond the top 10, click **View All**. The detail page shows a full list with the following columns:

| COLUMN        | DESCRIPTION                                                       |
| ------------- | ----------------------------------------------------------------- |
| Search Term   | The query customers entered.                                      |
| Store         | The store in which the search term was searched.                  |
| Locale        | The locale in which the search term was searched.                 |
| Search Count  | The number of times the term was searched during the selected period. |
| Last Occurred | The date when the term last occurred.                             |

On the detail page, you can:

- **Sort** the list by the **Count** column.
- **Filter** by date range using the date picker at the top of the page.
- **Filter** by store using the store select at the top of the page.
- **Filter** by locale using the locale select at the top of the page.
- **Paginate** through results using the controls at the bottom of the list.

### Identify zero-result searches

The **Top 10 Zero-Result Searches** widget shows the most frequently searched terms that returned no results. Use this data to:

- Create synonyms for terms that do not match existing product data.
- Identify gaps in the product catalog to fill with new products.
- Improve search relevance by adjusting search configuration.

To view all zero-result searches, click **View All**. The detail page shows a full list with the following columns:

| COLUMN | DESCRIPTION |
| --- | --- |
| Search Term | The query that returned no results. |
| Store | The store in which the search term was searched. |
| Locale | The locale in which the search term was searched. |
| Occurrence Count | The number of times customers searched for this term with zero results. |
| Last Occurred | The date when the term last occurred. |

On the detail page, you can:

- **Sort** the list by the **Count** column.
- **Filter** by a minimum occurrence threshold to focus on high-impact terms.
- **Filter** by date range using the date picker at the top of the page.
- **Filter** by store using the store select at the top of the page.
- **Filter** by locale using the locale select at the top of the page.
- **Paginate** through results using the controls at the bottom of the list.

### Limitations

- **Data delay**: Search events collected on the storefront appear in the dashboard after up to 48 hours of GA4 processing time.
- **Ad blockers**: Customers with ad blockers installed may not send events to GA4. This can cause search data to be underreported by an estimated 10–25%.
</description>
            <pubDate>Fri, 10 Jul 2026 09:29:49 +0000</pubDate>
            <link>https://docs.spryker.com/docs/pbc/all/miscellaneous/latest/third-party-integrations/marketing-and-conversion/analytics/google-analytics/search-statistics.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/pbc/all/miscellaneous/latest/third-party-integrations/marketing-and-conversion/analytics/google-analytics/search-statistics.html</guid>
            
            
        </item>
        
    </channel>
</rss>
