This document describes configuration options of the services shipped with Spryker in Docker by default. Find the list of the services below:
-
[Database](#database)
-
[ElasticSearch](#elasticsearch)
-
[OpenSearch](#opensearch)
-
[Kibana UI](#kibana-ui)
-
[RabbitMQ](#rabbitmq)
-
[Swagger UI](#swagger-ui)
-
[Redis](#redis)
-
[Redis GUI](#redis-gui)
-
[MailHog](#mailhog)
-
[Blackfire](#blackfire)
-
[New Relic](#new-relic)
-
[WebDriver](#webdriver)
-
[Dashboard](#dashboard)
-
[Tideways](#tideways)
Install or update the Docker SDK to the latest version:
git clone https://github.com/spryker/docker-sdk.git ./docker
All services are optional, but each application requires certain services to work properly. Dependencies per service:
Service name | Application Dependencies |
---|---|
database | backoffice, backend-gateway, zed, merchant-portal, glue-backend |
broker | backoffice, backend-gateway, zed, merchant-portal, glue-backend |
key_value_store | backoffice, backend-gateway, zed, yves, merchant-portal, glue, glue-storefront, glue-backend |
session | backoffice, zed, yves, merchant-portal, glue-backend |
search | backoffice, backend-gateway, zed, yves, merchant-portal, glue, glue-storefront, glue-backend |
MariaDB is provided as a service by default, but you can switch to MySQL or PostgreSQL as described below.
MariaDB is a community-developed, commercially supported fork of the MySQL relational database management system.
See MariaDB knowledge base for more details.
:::(Warning) (Default service) 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. :::
Follow the steps below to switch the database service to MariaDB:
- Adjust
deploy.*.yml
in theservices:
section:
...
services:
database:
engine: mysql
version: mariadb-10.11
...
endpoints:
localhost:3306:
...
- Bootstrap the docker setup, regenerate demo data, and rebuild the application:
docker/sdk boot deploy.*.yml
docker/sdk clean-data
docker/sdk up --build --data
MySQL is an open source relational database management system based on Structured Query Language (SQL). MySQL enables data to be stored and accessed across multiple storage engines, including InnoDB, CSV and NDB. MySQL is also capable of replicating data and partitioning tables for better performance and durability.
See MySQL documentation for more details.
Follow the steps below to switch database engine to MySQL:
- Adjust
deploy.*.yaml
in theservices:
section:
...
services:
database:
engine: mysql
...
endpoints:
localhost:3306:
...
- Bootstrap the docker setup, regenerate demo data, and rebuild the application:
docker/sdk boot deploy.*.yml
docker/sdk clean-data
docker/sdk up --build --data
PostgreSQL PostgreSQL is a powerful, 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.
See PostgreSQL documentation for more details.
Follow the steps below to switch database engine to PostgreSQL:
- Adjust
deploy.*.yml
in theservices:
section:
...
services:
database:
engine: postgres
...
endpoints:
localhost:5432:
...
- Bootstrap the docker setup, regenerate demo data, and rebuild the application:
docker/sdk boot deploy.*.yml
docker/sdk clean-data
docker/sdk up --build --data
Elasticsearch 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.
See:
- Configuring Elasticsearch to learn more about Elastcisearch configuration in Spryker.
- Elasticsearch documentation for more information on Elasticsearch.
- Adjust
deploy.*.yml
in theservices:
section to open the port used for accessing ElasticSearch:
services:
search:
engine: elastic
endpoints:
localhost:9200
protocol: tcp
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up
## OpenSearch
[OpenSearch](https://opensearch.org/docs/1.3/) 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.
### Configuration
1. Adjust `deploy.*.yml` in the `services:` section to open the port used for accessing OpenSearch:
```yaml
services:
search:
engine: opensearch
endpoints:
localhost:9200
protocol: tcp
2. Bootstrap the docker setup and rebuild the application:
```bash
docker/sdk boot deploy.*.yml &&\
docker/sdk up
Kibana 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.
See Kibana documentation to learn more.
In Docker SDK, Kibana UI is provided as a service by default.
Follow the steps to configure an endpoint for Kibana UI:
- Adjust
deploy.*.yml
in theservices:
section:
services:
...
kibana:
engine: kibana
endpoints:
{custom_endpoint}:
- Adjust host file, if
{custom_endpoint}
aren't ending on.localhost
:
echo "127.0.0.1 {custom_endpoint}" | sudo tee -a /etc/hosts
-
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up
RabbitMQ 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.
- Adjust
deploy.*.yml
in theservices:
section to open the port used for accessing RabbitMQ:
services:
broker:
...
endpoints:
...
localhost:5672:
protocol: tcp
api.queue.spryker.local:
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up
Swagger UI 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 back end implementation and client-side consumption.
See Swagger UI documentation for more details.
In Docker SDK, Swagger UI is provided as a service by default.
Spryker provides the basic functionality to generate OpenApi schema specification for REST API endpoints. This document provides an overview of REST API endpoints. For each endpoint, you will find the URL, REST request parameters as well as the appropriate request and response data formats.
Follow the steps to configure an endpoint for Swagger UI:
- Adjust
deploy.*.yml
in theservices:
section:
services:
...
swagger:
engine: swagger-ui
endpoints:
{custom_endpoint}:
- Adjust the
host
file, if{custom_endpoint}
aren't ending on.localhost
:
echo "127.0.0.1 {custom_endpoint}" | sudo tee -a /etc/hosts
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up
Redis 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.
See Redis documentation for more details.
- Adjust
deploy.*.yml
in theservices:
section to open the port used for accessing Redis:
services:
key_value_store:
engine: redis
endpoints:
localhost:16379:
protocol: tcp
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up
Redis Commander 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/export databases.
Follow the steps to configure an endpoint for Redis Commander:
- Adjust
deploy.*.yml
in theservices:
section:
services:
...
redis-gui:
engine: redis-commander
endpoints:
{custom_endpoint}: //redis-commander.spryker.local:
- Adjust hosts file, if
{custom_endpoint}
aren't ending on.localhost
:
echo "127.0.0.1 {custom_endpoint}" | sudo tee -a /etc/hosts
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up
MailHog 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.
With the MailHog service, developers can:
- configure an application to use MailHog for SMTP delivery;
- view messages in the web UI or retrieve them via JSON API.
:::(Info) () By default the following applies:
http://mail.demo-spryker.com/
is used to see incoming emails.- Login is not required :::
- Adjust
deploy.*.yml
in theservices:
section to specify a custom endpoint:
services:
...
mail_catcher:
engine: mailhog
endpoints:
{custom_endpoint}:
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up
Blackfire is a tool used to profile, test, debug, and optimize 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 via Blackfire web interface.
Follow the steps to enable Blackfire:
- Adjust
deploy.*.yml
in theimage:
section to enable the Blackfire PHP extension:
image:
tag: spryker/php:7.3 # Use the same tag you had in `image:`
php:
...
enabled-extensions:
- blackfire
- Adjust
deploy.*.yml
in theservices:
section to configure Blackfire client:
services:
...
blackfire:
engine: blackfire
server-id: {server_id}
server-token: {server_token}
client-id: {client_id}
client-token: {client-token}
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up
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.
Follow the steps to enable Blackfire:
- Adjust
deploy.*.yml
in theimage:
section to enable the Blackfire PHP extension:
image:
tag: spryker/php:7.3 # Use the same tag you had in `image:`
php:
...
enabled-extensions:
- blackfire
- Adjust
deploy.*.yml
in theservices:
section to enable Blackfire service:
services:
...
blackfire:
engine: blackfire
- Pass Blackfire client details:
BLACKFIRE_CLIENT_ID={client_id} BLACKFIRE_CLIENT_TOKEN={client-token} docker/sdk cli
- Pass Blackfire server details:
BLACKFIRE_SERVER_ID={client-token} BLACKFIRE_SERVER_TOKEN={server_token} docker/sdk up
:::(Warning) (Note)
You can pass the server details only with the docker/sdk up
command.
:::
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up
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.
New Relic is a tool used to track the performance of services and the environment to quickly find and fix issues.
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.
- Access to New Relic with an APM account.
- Local: New Relic license key.
- The New Relic module.
Spryker provides its own New Relic licenses for use with its PaaS environments. A New Relic license key is only required if you wish to set up your own local monitoring.
While most environments come with New Relic already available, you may need to add the module to your project. Add the module to your composer.json
:
composer require spryker-eco/new-relic
- Adjust
deploy.*.yml
in theimage:
section:
image:
tag: spryker/php:7.4 # the image tag that has been previously used in `image`
php:
...
enabled-extensions:
...
- newrelic
- Push and deploy the changes using one of the following guides:
- Submit an infrastructure change request via the Support Portal. We will confirm that a New Relic APM account is available for you and ensure that the correct application naming convention is set up to cascade to the appropriate APM.
Once New Relic is enabled, in the New Relic dashboard, you may see either company-staging-newrelic-app
or YVES-DE (docker.dev)
. New Relic displays these APM names by the application name setup in the configuration files.
{% info_block infoBox %}
If you update the name of an application, contact support to update the changes in your APM.
{% endinfo_block %}
- In
deploy.*.yml
, adjust thedocker
section:
docker:
newrelic:
license: {new_relic_license}
distributed tracing:
enabled: true
- In the
deploy.*.yml
, adjust theimage
section:
image:
tag: spryker/php:7.4 # the image tag that has been previously used in `image`
php:
...
enabled-extensions:
...
- newrelic
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up
By default, in the New Relic dashboard, the APM is displayed as company-staging-newrelic-app
. To improve visibility, you may want to configure each application as a separate APM. For example, YVES-DE (docker.dev)
.
To do it, adjust the Monitoring service in src/Pyz/Service/Monitoring/MonitoringDependencyProvider.php
:
<?php declare(strict_types = 1);
/**
* This file is part of the Spryker Commerce OS.
* For full license information, please view the LICENSE file that was distributed with this source code.
*/
namespace Pyz\Service\Monitoring;
use Spryker\Service\Monitoring\MonitoringDependencyProvider as SprykerMonitoringDependencyProvider;
use SprykerEco\Service\NewRelic\Plugin\NewRelicMonitoringExtensionPlugin;
class MonitoringDependencyProvider extends SprykerMonitoringDependencyProvider
{
/**
* @return \Spryker\Service\MonitoringExtension\Dependency\Plugin\MonitoringExtensionPluginInterface[]
*/
protected function getMonitoringExtensions(): array
{
return [
new NewRelicMonitoringExtensionPlugin(),
];
}
}
{% info_block infoBox %}
-
Some builds have the Monitoring service built into the Yves application. If
src/Pyz/Service/Monitoring/MonitoringDependencyProvider.php
does not exist, you may want to checksrc/Pyz/Yves/Monitoring/
. -
If the class is missing from the Monitoring service, create it.
{% endinfo_block %}
With new \SprykerEco\Service\NewRelic\Plugin\NewRelicMonitoringExtensionPlugin()
being returned with the getMonitoringExtensions()
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.
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up
PhantomJS is provided as a webdriver service by default, but you can switch to ChromeDriver as described below.
ChromeDriver is a thin wrapper on WebDriver and Chromium 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.
To enable Chromedriver, adjust deploy.*.yml
as follows:
services:
webdriver:
engine: chromedriver
PhantomJS is a headless browser for automating web page interaction. It ships with a WebDriver based on Selenium.
To enable PhantomJS, adjust deploy.*.yml
as follows:
services:
webdriver:
engine: phantomjs
Dashboard is a tool that helps to monitor logs in real time. You can monitor logs in all or a particular container.
- Adjust your
deploy.*.yml
as follows:
dashboard:
engine: dashboard
endpoints:
{custom_endpoint}:
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up
Tideways is an application profiler used for testing and debugging. Its main functions are profiling, monitoring, and exception tracking.
- Adjust your
deploy.*.yml
as follows:
tideways:
apikey: {tideways_api_key}
environment-name: {tideways_environment_name}
cli-enabled: {true|false}
- Bootstrap the docker setup and rebuild the application:
docker/sdk boot deploy.*.yml &&\
docker/sdk up