{"id":17006851,"url":"https://github.com/malaskowski/aet-docker","last_synced_at":"2026-02-26T10:24:15.476Z","repository":{"id":44320888,"uuid":"143412813","full_name":"malaskowski/aet-docker","owner":"malaskowski","description":"Docker support for AET - easy to set up local/developer environment with example Docker Swarm configuration.","archived":false,"fork":false,"pushed_at":"2023-03-13T21:53:21.000Z","size":68075,"stargazers_count":8,"open_issues_count":2,"forks_count":9,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-30T04:42:22.470Z","etag":null,"topics":["aet","aet-browsermob","aet-client","aet-karaf","aet-report","docker","docker-swarm-cluster","hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/malaskowski.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"malaskowski"}},"created_at":"2018-08-03T10:17:53.000Z","updated_at":"2022-10-13T07:39:16.000Z","dependencies_parsed_at":"2025-04-12T06:42:53.810Z","dependency_job_id":null,"html_url":"https://github.com/malaskowski/aet-docker","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/malaskowski/aet-docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malaskowski%2Faet-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malaskowski%2Faet-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malaskowski%2Faet-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malaskowski%2Faet-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/malaskowski","download_url":"https://codeload.github.com/malaskowski/aet-docker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malaskowski%2Faet-docker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29856474,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T08:51:08.701Z","status":"ssl_error","status_checked_at":"2026-02-26T08:50:19.607Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aet","aet-browsermob","aet-client","aet-karaf","aet-report","docker","docker-swarm-cluster","hacktoberfest"],"created_at":"2024-10-14T05:23:48.511Z","updated_at":"2026-02-26T10:24:15.464Z","avatar_url":"https://github.com/malaskowski.png","language":"Dockerfile","funding_links":["https://github.com/sponsors/malaskowski"],"categories":[],"sub_categories":[],"readme":"# AET Docker\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/malaskowski/aet-docker/master/misc/aet-docker.png\" alt=\"AET Docker Logo\"/\u003e\n\u003c/p\u003e\n\nThis repository contains Dockerfiles of AET images and example Docker Swarm manifest that enables setting up simple AET instance.\nYou may find released versions of AET Docker images at [Docker Hub](https://cloud.docker.com/u/malaskowski/). \n\n## Try AET\nFollowing section describes how to run AET using Docker Swarm. Alternative to this is installing AET using Helm. See [AET Helm chart](https://github.com/malaskowski/aet-helm) repository for more deails.\n\n### Run local instance using Docker Swarm\nMake sure you have running Docker Swarm instance that has at least **`4 vCPU` and `8 GB of memory` available**. Read more in [Prerequisites](#prerequisites).\n\nFollow these instructions to set up local AET instance:\n1. Download the latest [`example-aet-swarm.zip`](https://github.com/malaskowski/aet-docker/releases/latest/download/example-aet-swarm.zip) and unzip the files to the folder from where docker stack will be deployed (from now on we will call it `AET_ROOT`).\n\n\u003cdetails\u003e\u003csummary\u003eSee details\u003c/summary\u003e\n\u003cp\u003e\n\n\u003e You may run following script to automate this step:\n\u003e ```bash\n\u003e curl -sS `curl -Ls -o /dev/null -w %{url_effective} https://github.com/malaskowski/aet-docker/releases/latest/download/example-aet-swarm.zip` \u003e aet-swarm.zip \\\n\u003e \u0026\u0026 unzip -q aet-swarm.zip \u0026\u0026 mv example-aet-swarm/* . \\\n\u003e \u0026\u0026 rm -d example-aet-swarm \u0026\u0026 rm aet-swarm.zip\n\u003e ```\n\u003e \n\u003e Contents of the `AET_ROOT` directory should look like:\n\u003e ```\n\u003e ├── aet-swarm.yml\n\u003e ├── bundles\n\u003e │   └── aet-lighthouse-extension.jar\n\u003e ├── configs\n\u003e │   ├── com.cognifide.aet.cleaner.CleanerScheduler-main.cfg\n\u003e │   ├── com.cognifide.aet.proxy.RestProxyManager.cfg\n\u003e │   ├── com.cognifide.aet.queues.DefaultJmsConnection.cfg\n\u003e │   ├── com.cognifide.aet.rest.helpers.ReportConfigurationManager.cfg\n\u003e │   ├── com.cognifide.aet.runner.MessagesManager.cfg\n\u003e │   ├── com.cognifide.aet.runner.RunnerConfiguration.cfg\n\u003e │   ├── com.cognifide.aet.vs.mongodb.MongoDBClient.cfg\n\u003e │   ├── com.cognifide.aet.worker.drivers.chrome.ChromeWebDriverFactory.cfg\n\u003e │   └── com.cognifide.aet.worker.listeners.WorkersListenersService.cfg\n\u003e ├── features\n\u003e │   └── healthcheck-features.xml\n\u003e ├── secrets\n\u003e │   └── KARAF_EXAMPLE_SECRET\n\u003e └── report\n\u003e ```\n\u003e   - If you are using docker-machine (otherwise ignore this point)\n\u003e    you should change `aet-swarm.yml` `volumes` section for the `karaf` service to:\n\u003e     ```yaml\n\u003e         volumes:\n\u003e           - /osgi-configs/configs:/aet/configs # when using docker-machine, use mounted folder\n\u003e     ```\n\u003e \n\u003e You can find older versions in the [release](https://github.com/malaskowski/aet-docker/releases) section.\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n2. From the `AET_ROOT` run `docker stack deploy -c aet-swarm.yml aet`.\n3. Wait about 1-2 minutes until instance is ready to work.\n\n\u003e Note, that you can always stop the instance by running 'docker stack rm aet' without loosing the data (volumes).\n\n\u003cdetails\u003e\u003csummary\u003eSee details\u003c/summary\u003e\n\u003cp\u003e\n\n\u003e When it is ready, you should see the `HEALTHY` information in the [Karaf health check](http://localhost:8181/health-check) \n\u003e  \n\u003e You may also check the status of Karaf by executing\n\u003e  \n\u003e ```bash\n\u003e docker ps --format \"table {{.Image}}\\t{{.Status}}\" --filter expose=8181/tcp\n\u003e ```\n\u003e  \n\u003e When you see status `healthy` it means Karaf is running correctly\n\u003e \n\u003e ```\n\u003e IMAGE                     STATUS\n\u003e malaskowski/aet_karaf:1.0.0   Up 3 minutes (healthy)\n\u003e ```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n### Run sample suite\nSimply run:\n```\ndocker run --rm malaskowski/aet_client\n```\n\nYou should see similar output:\n```\nSuite started with correlation id: example-example-example-1611937786395\n[16:29:46.578]: COMPARED: [success:   0, total:   0] ::: COLLECTED: [success:   0, total:   1]\nSuite processing finished\nReport url:\nhttp://localhost/report.html?company=example\u0026project=example\u0026correlationId=example-example-example-1611937786395\n```\n\nOpen the url which will show your first AET report! Find more about the report in the [AET Docs](https://github.com/wttech/aet/wiki/SuiteReport).\n\nRead more on how to run your custom suite in the [Running AET Suite](#running-aet-suite) section.\n\n**User Documentation**\n\n- [AET Docker](#aet-docker)\n  - [Try AET](#try-aet)\n    - [Run local instance using Docker Swarm](#run-local-instance-using-docker-swarm)\n    - [Run sample suite](#run-sample-suite)\n  - [Docker Images](#docker-images)\n    - [AET ActiveMq](#aet-activemq)\n    - [AET Browsermob](#aet-browsermob)\n    - [AET Karaf](#aet-karaf)\n    - [AET Report](#aet-report)\n    - [AET Docker Client](#aet-docker-client)\n  - [AET instance with Docker Swarm](#aet-instance-with-docker-swarm)\n    - [Prerequisites](#prerequisites)\n      - [Minimum requirements](#minimum-requirements)\n    - [Configuration](#configuration)\n      - [OSGi configs](#osgi-configs)\n      - [Throughput and scaling](#throughput-and-scaling)\n      - [Docker secrets](#docker-secrets)\n    - [Updating instance](#updating-instance)\n    - [Running AET Suite](#running-aet-suite)\n      - [Docker Client](#docker-client)\n      - [Other Clients](#other-clients)\n    - [Best practices](#best-practices)\n    - [Available consoles](#available-consoles)\n    - [Troubleshooting](#troubleshooting)\n      - [Example visualiser](#example-visualiser)\n      - [Debugging](#debugging)\n      - [Logs](#logs)\n  - [Common issues](#common-issues)\n    - [Error response 500 after sending suite to AET](#error-response-500-after-sending-suite-to-aet)\n  - [FAQ](#faq)\n    - [How to use external MongoDB](#how-to-use-external-mongodb)\n    - [How to use external Selenium Grid](#how-to-use-external-selenium-grid)\n    - [How to set report domain](#how-to-set-report-domain)\n    - [How to expose AET Web API](#how-to-expose-aet-web-api)\n    - [How to enable AET instance to run more tests simultaneously](#how-to-enable-aet-instance-to-run-more-tests-simultaneously)\n    - [How to use external Selenium Grid nodes](#how-to-use-external-selenium-grid-nodes)\n    - [Is there other way to run AET than with Docker Swarm cluster](#is-there-other-way-to-run-aet-than-with-docker-swarm-cluster)\n  - [Building](#building)\n    - [Prerequisites](#prerequisites-1)\n  - [Developer environment](#developer-environment)\n\n## Docker Images\n\n### AET ActiveMq\nHosts [Apache ActiveMQ](http://activemq.apache.org/) that is used as the communication bus by the AET components.\n### AET Browsermob\nHosts BrowserMob proxy that is used by AET to collect status codes and inject headers to requests.\n### AET Karaf\nHosts [Apache Karaf](https://karaf.apache.org/) OSGi applications container.\nIt contains all AET modules (bundles): Runner, Workers, Web-API, Datastorage, Executor, Cleaner and runs them within OSGi context\nwith all their dependencies required (no internet access required to provision).\n[AET application core](https://github.com/wttech/aet) is located in the `/aet/core` directory.\nAll custom AET extensions are kept in the `/aet/custom` directory.\nBefore the start of a Karaf service, Docker secrets are exported to environment variables. Read more in [secrets](#docker-secrets) section.\n### AET Report \nRuns [Apache Server](https://httpd.apache.org/) that hosts [AET Report](https://github.com/wttech/aet/wiki/SuiteReport).\nThe [AET report application](https://github.com/wttech/aet/tree/master/report) is placed under `/usr/local/apache2/htdocs`.\nDefines very basic `VirtualHost` (see [aet.conf](https://github.com/malaskowski/aet-docker/blob/master/report/aet.conf)).\n### AET Docker Client\n[AET bash client](https://github.com/wttech/aet/tree/master/client/client-scripts) embedded into Docker image with all its dependencies (`jq`, `curl`, `xmllint`).\n\n## AET instance with Docker Swarm\nTo see the details of what contains sample AET Docker Swarm instance, read the [example-aet-swarm readme](/blob/master/example-aet-swarm/README.md).\n\n\u003e **Notice - this instruction guides you on how to set up AET instance using single-node swarm cluster.** \n\u003e **This setup is not recommended for production use!**\n\n### Prerequisites\n- Docker installed on your host (either [\"Docker\"](https://docs.docker.com/install/) (e.g. Docker for Windows or Docker for Mac)\n- Docker swarm initialized. \nSee this [swarm-tutorial: create swarm](https://docs.docker.com/engine/swarm/swarm-tutorial/create-swarm/) for detailed instructions.\n  - **TLDR;** run command: `docker swarm init`.\n- Make sure your swarm have at least **`4 vCPU` and `8 GB of memory` available**. Read more in [Minimum requirements](#minimum-requirements) section.\n\n#### Minimum requirements\nTo run example AET instance make sure that machine you run it at has at least enabled:\n\n- `4 vCPU`\n- `8 GB of memory`\n\n**How to modify Docker resources**:\n- For *Docker for Windows* use [Advanced settings](https://docs.docker.com/docker-for-windows/#advanced) (if you are using Docker with WSL2, manage resources via WSL2 settings)\n- For *Docker for Mac* use [Advanced settings](https://docs.docker.com/docker-for-mac/#advanced)\n\n### Configuration\n\n#### OSGi configs\nThanks to the mounted OSGi configs you may now configure instance via `AET_ROOT/configs` configuration files.\n\n**com.cognifide.aet.cleaner.CleanerScheduler-main.cfg**\nRead more [here](https://github.com/wttech/aet/wiki/Cleaner).\n\n**com.cognifide.aet.proxy.RestProxyManager.cfg**\nConfigures Proxy Server address. AET uses proxy for some features such as collecting status codes or modyfing request's header.\nRead more [here](https://github.com/wttech/aet/wiki/SuiteStructure#proxy).\n\n**com.cognifide.aet.queues.DefaultJmsConnection.cfg**\nConfigures [JMS Server](https://github.com/wttech/aet/wiki/SystemComponents#jms-server) connection.\n\n**com.cognifide.aet.rest.helpers.ReportConfigurationManager.cfg**\nConfigures address for the Reports module. The `reportDomain` property should point to the externall address of the AET Reports service.\n\n**com.cognifide.aet.runner.MessagesManager.cfg**\nConfigures JMX endpoint of the [JMS Server](https://github.com/wttech/aet/wiki/SystemComponents#jms-server) for managing messages via API.\n\n**com.cognifide.aet.runner.RunnerConfiguration.cfg**\nConfigures [AET Runner](https://github.com/wttech/aet/wiki/Runner).\n\n**com.cognifide.aet.vs.mongodb.MongoDBClient.cfg**\nConfigures [Database](https://github.com/wttech/aet/wiki/DatabaseStructure) connection. Additionally, setting `allowAutoCreate` allows creating new databases by AET (no need to create them manually first, including indexes).\n\n**com.cognifide.aet.worker.drivers.chrome.ChromeWebDriverFactory.cfg**\nConfigures Selenium Grid Hub address. Additionally enables configuring [capabilities](https://chromedriver.chromium.org/capabilities) via `chromeOptions`.\n\n**com.cognifide.aet.worker.listeners.WorkersListenersService.cfg**\nConfigures number of [AET Workers](https://github.com/wttech/aet/wiki/Worker). Use those properties to scale up and down your AET instance's throughput. Read more below.\n\n#### Throughput and scaling\nAET instance speed depends on the direct number of browsers in the system and its configuration.\nLet's define a `TOTAL_NUMBER_OF_BROWSERS` which will be the number of selenium grid node instances\nmultiplied by `NODE_MAX_SESSION` set for each node. For this default configuration, we have `6`\nSelenium Nodee replicast with a single instance of browser available on each node:\n```yaml\n  chrome:\n...\n    environment:\n...\n      - NODE_MAX_SESSION=1\n...\n    deploy:\n      replicas: 6\n...\n```\nSo, the `TOTAL_NUMBER_OF_BROWSERS` is `6` (`6 replicas x 1 session`).\nThat number should be set for following configs:\n- `maxMessagesInCollectorQueue` in `com.cognifide.aet.runner.RunnerConfiguration.cfg`\n- `collectorInstancesNo` in `com.cognifide.aet.worker.listeners.WorkersListenersService.cfg`\n\n#### Docker secrets\nTo read secrets from `/run/secrets/` on Karaf startup, configure env `KARAF_SECRETS_ON_STARTUP=true`. This will enable scanning secrets from directory matching `KARAF_*` pattern and export them as environment variable.\nSee the [Karaf entrypoint](/blob/master/karaf/entrypoint.sh) for details.\n\nE.g.\nIf the file `/run/secrets/KARAF_MY_SECRET` is found, its content will be exported to `MY_SECRET` environment variable.\n\n### Updating instance\nYou may update configuration files directly from your host \n(unless you use docker-machine, see the workaround below).\nKaraf should automatically notice changes in the config files.\n\nTo update instance to the newer version\n1. Update `aet-swarm.yml` and/or configuration files in the `AET_ROOT`.\n2. Simply run `docker stack deploy -c aet-swarm.yml aet`\n\n**docker-machine config changes detection workaround**\n\u003e Please notice that when you are using docker-machine and Docker Tools, Karaf does not\ndetect automatic changes in the config. You will need to restart Karaf service after applying\nchanges in the configuration files (e.g. by removing `aet_karaf` service and running stack deploy).\n\n\n### Running AET Suite\nThere are couple of ways to start AET Suite.\n\n#### Docker Client\nYou may use an image that embeds AET Bash client together with its dependencies by running:\n\n\u003e `docker run --rm malaskowski/aet_client`\n\nThis will run a [sample AET Suite](https://github.com/malaskowski/aet-docker/blob/master/client/example.xml).\nYou should see the results in less than 30s.\n\nTo run your custom suite, let's say `my-suite.xml`, located in the current directory, you need to bind mount it as volume.\n\n\u003e `docker run --rm -v \"$(pwd)/my-suite.xml:/aet/suite/my-suite.xml\" malaskowski/aet_client http://host.docker.internal:8181 /aet/suite/my-suite.xml`\n\n\n\u003cdetails\u003e\u003csummary\u003eRead more\u003c/summary\u003e\n\u003cp\u003e\n\n\u003e The last 2 argumetns are AET Bash client arguments:\n\u003e - `http://host.docker.internal:8181` URL of the AET instance,\n\u003e - `/aet/suite/my-suite.xml` path to the suite XML file inside the container.\n\u003e \n\u003e \u003e Notice that we are using here `host.docker.internal:8181` as the address of AET instance - that works only for Docker for Mac/Win \n\u003e \u003e with local AET setup (this is also the default value for this property). In other cases, use the AET server's IP/domain.\n\u003e \n\u003e One more thing you may want to do is to preserve `redirect.html` and `xUnit.xml` files after the AET Client container's run ends its execution. Simply bind mound another volume e.g.:\n\u003e \n\u003e `docker run --rm -v \"$(pwd)/my-suite.xml:/aet/suite/my-suite.xml\" -v \"$(pwd)/report:/aet/report\" malaskowski/aet_client http://host.docker.internal:8181 /aet/suite/my-suite.xml`\n\u003e \n\u003e The results will be saved to the `report` directory:\n\u003e \n\u003e ```\n\u003e .\n\u003e ├── my-suite.xml\n\u003e ├── report\n\u003e │   ├── redirect.html\n\u003e │   └── xUnit.xml\n\u003e ```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n\n#### Other Clients\nTo run AET Suite simply define `endpointDomain` to AET Karaf IP with `8181` port, e.g.:\n\u003e `./aet.sh http://localhost:8181`\nor\n\u003e ` mvn aet:run -DendpointDomain=http://localhost:8181`\n\nRead more about running AET suite [here](https://github.com/wttech/aet/wiki/RunningSuite).\n\n### Best practices\n1. Control changes in `aet-swarm.yml` and config files over time! Use version control system \n(e.g. [GIT](https://git-scm.com/)) to keep tracking changes of `AET_ROOT` contents.\n2. If you value your data - reports results and history of running suites, remember about \n**backing up MongoDB volume**. If you use external MongoDB, also back up its `/data/db` regularly!\n3. Provide at least [minimum requirements](#minimum-requirements) machine for your docker cluster.\n\n### Available consoles\n- Selenium grid console: http://localhost:4444/grid/console\n- ActiveMQ console: http://localhost:8161/admin/queues.jsp (credentials: `admin/admin`)\n- Karaf console: http://localhost:8181/system/console/bundles (credentials: `karaf/karaf`)\n- AET Report: `http://localhost/report.html?params...`\n\u003e Note, that if you are using *Docker Tools* there will be your docker-machine ip instead of `localhost`\n\n### Troubleshooting\n#### Example visualiser\nIf you want to see what's deployed on your instance, you may use `dockersamples/visualizer` by running:\n\n```\ndocker service create \\\n  --name=viz \\\n  --publish=8090:8080/tcp \\\n  --constraint=node.role==manager \\\n  --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \\\n  dockersamples/visualizer\n ```\n\n- Visualizer console: `http://localhost:8090`\n\u003e Note, that if you are using *Docker Tools* there will be your docker-machine ip instead of `localhost`\n\n#### Debugging\nTo debug bundles on Karaf set environment vairable `KARAF_DEBUG=true` and expose port `5005` on karaf service.\n\n#### Logs\nYou may preview AET logs with `docker service logs aet_karaf -f`.\n\n---\n## Common issues\n\n### Error response 500 after sending suite to AET\nMake sure you have installed all [prerequisites](https://github.com/wttech/aet/tree/master/client/client-scripts#prerequisites) for the script client.\n\n---\n\n## FAQ\n### How to use external MongoDB\nSet the `mongoURI` property in the `configs/com.cognifide.aet.vs.mongodb.MongoDBClient.cfg` to point your mongodb instance uri.\n\n### How to use external Selenium Grid\nAfter you set up external Selenium Grid, update the `seleniumGridUrl` property in the `configs/com.cognifide.aet.worker.drivers.chrome.ChromeWebDriverFactory.cfg` to Grid address.\n\n### How to set report domain\nSet `report-domain` property in the `com.cognifide.aet.rest.helpers.ReportConfigurationManager.cfg` to point the domain.\n\n### How to expose AET Web API\n[AET Web API](https://github.com/wttech/aet/wiki/WebAPI) is hosed by the AET Karaf instance. \nIn order to avoid CORS errors from the Report Application, AET Web API is exposed by the AET Report Apache Server (`ProxyPass`).\nBy default it is set to work with Docker cluster managers such as Swarm or Kubernetes and points to `http://karaf:8181/api`.\nUse `AET_WEB_API` environment variable to change the URL of the AET Web API.\n\n### How to enable AET instance to run more tests simultaneously\n\u003e Notice: those changes will impact your machine resources, be sure to extend the number of CPUs and memory\n\u003e if you scale up a number of browsers.\n1. Spawn more browsers by increasing number of Selenium Grid nodes or adding sessions to existing nodes.\nCalculate new [`TOTAL_NUMBER_OF_BROWSERS`](#AET-throughput)\n2. Set `maxMessagesInCollectorQueue` in `configs/com.cognifide.aet.runner.RunnerConfiguration.cfg` to new `TOTAL_NUMBER_OF_BROWSERS`.\n3. Set `collectorInstancesNo` in `configs/com.cognifide.aet.worker.listeners.WorkersListenersService.cfg` to new `TOTAL_NUMBER_OF_BROWSERS`.\n4. Update instance (see [how to do it](#updating-example-instance).\n\n### How to use external Selenium Grid nodes\nExternal Selenium Grid node instance should have:\n   * [JDK 8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) installed\n   * [Chrome browser](https://www.google.com/chrome/browser/desktop/) installed\n   * [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/downloads) (at least version 2.40)\n   * [Selenium Standalone Server](http://www.seleniumhq.org/download/) (at least version 3.41)\n\nCheck the address of the machine, where AET stack is running. By default, Selenium Grid HUB should be\navailable on the `4444` port. Use this IP address when you run node, with command \n(replace `{SGRID_IP}` with this IP address): \n\n```bash\njava -Dwebdriver.chrome.driver=\"\u003cpath/to/chromedriver\u003e\" -jar \u003cpath/to/selenium-server-standalone.jar\u003e -role node -hub http://{SGRID_IP}:4444/grid/register -browser \"browserName=chrome,maxInstances=10\" -maxSession 10\n```\nYou should see the message that node joins selenium grid.\nCheck it via selenium grid console: `http://{SGRID_IP}:4444/grid/console`\n\nRead more about setting up your own Grid here:\n- https://selenium.dev/documentation/en/grid/setting_up_your_own_grid/#step-2-start-the-nodes\n\n### Is there other way to run AET than with Docker Swarm cluster\nYes, AET system is a group of containers that form an instance together.\nYou need a way to organize them and make visible to each other in order to have functional AET instance.\nThis repository contains **example** instance setup with Docker Swarm, which is the most basic\ncontainers cluster manager that comes OOTB with Docker.\n\nFor more advanced setups of AET instance I'd recommend to look at [Kubernetes](https://kubernetes.io/) \nor [OpenShift](https://www.openshift.com/) systems (including services provided by cloud vendors).\nIn that case you may find [AET Helm chart](https://github.com/malaskowski/aet-helm) helpful.\n\n---\n\n## Building\n### Prerequisites\n- Docker installed on your host.\n\n1. Clone this repository\n2. Build all images using `build.sh {tag}`.\nYou should see following images:\n```\n    malaskowski/aet_report:{tag}\n    malaskowski/aet_karaf:{tag}\n    malaskowski/aet_browsermob:{tag}\n    malaskowski/aet_activemq:{tag}\n```\n\n## Developer environment\nIn order to be able to easily deploy AET artifacts on your docker instance follow these steps:\n\n1. Follow the [Run local instance using Docker Swarm](#run-local-instance-using-docker-swarm) guide (check the [prerequisites](#prerequisites) first).\n2. In the `aet-swarm.yml` under `karaf` and `report` services there are volumes defined:\n  ```yaml\n    karaf:\n      ...\n      volumes:\n        - ./configs:/aet/custom/configs\n        - ./bundles:/aet/custom/bundles\n        - ./features:/aet/custom/features\n        \n     ...\n        \n     report:\n       ...\n       # volumes: \u003c- volumes not active by default, to develop the report, uncomment it before deploying\n       #  - ./report:/usr/local/apache2/htdocs\n  ```\n3. In order to add custom extensions, add proper artifacts to the volumes you need.\n- bundles (jar files) to the `bundles` directory\n- OSGi feature files into the `features`\n- `configs` directory already contains default configs\n- report files into the `report` directory\n\nTo develop [AET application core](https://github.com/wttech/aet), add additional volumes to the `karaf` service:\n  ```yaml\n    karaf:\n      ...\n      volumes:\n        ...\n        - ./core-configs:/aet/core/configs\n        - ./core-bundles:/aet/core/bundles\n        - ./core-features:/aet/core/features\n  ```\nand place proper AET artifacts accordingly to the `core-` directories.\n\n\u003e If you use build command with `-Pzip` parameter, all needed artifacts will be placed in `YOUR_AET_REPOSITORY/zip/target/packages-X.X.X-SNAPSHOT/`. You only need to unpack needed zip archives into proper catalogs described in step 3.\n\n4. To start the instance, just run `docker stack deploy -c aet-swarm.yml aet`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalaskowski%2Faet-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmalaskowski%2Faet-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalaskowski%2Faet-docker/lists"}