{"id":23122588,"url":"https://github.com/folio-org/eureka-platform-bootstrap","last_synced_at":"2026-03-05T14:31:14.134Z","repository":{"id":251925730,"uuid":"835753224","full_name":"folio-org/eureka-platform-bootstrap","owner":"folio-org","description":"Provides docker-based minimal eureka platform","archived":false,"fork":false,"pushed_at":"2025-12-03T09:32:00.000Z","size":111,"stargazers_count":5,"open_issues_count":0,"forks_count":4,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-12-06T11:54:07.087Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":false,"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/folio-org.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-07-30T13:15:03.000Z","updated_at":"2025-12-03T09:32:05.000Z","dependencies_parsed_at":"2025-03-26T10:22:10.734Z","dependency_job_id":"ec37d64d-b5dc-46b0-9509-2670d0d6377d","html_url":"https://github.com/folio-org/eureka-platform-bootstrap","commit_stats":null,"previous_names":["folio-org/eureka-platform-bootstrap"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/folio-org/eureka-platform-bootstrap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folio-org%2Feureka-platform-bootstrap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folio-org%2Feureka-platform-bootstrap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folio-org%2Feureka-platform-bootstrap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folio-org%2Feureka-platform-bootstrap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/folio-org","download_url":"https://codeload.github.com/folio-org/eureka-platform-bootstrap/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folio-org%2Feureka-platform-bootstrap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30130321,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T12:40:50.676Z","status":"ssl_error","status_checked_at":"2026-03-05T12:39:32.209Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":[],"created_at":"2024-12-17T07:28:18.888Z","updated_at":"2026-03-05T14:31:14.056Z","avatar_url":"https://github.com/folio-org.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# eureka-platform-bootstrap\n\nProvides docker-based minimal eureka platform\n\n# Table of contents\n\n\u003c!-- TOC --\u003e\n* [eureka-platform-bootstrap](#eureka-platform-bootstrap)\n* [Table of contents](#table-of-contents)\n* [Run applications in docker](#run-applications-in-docker)\n  * [Script environment variables](#script-environment-variables)\n    * [Module versions](#module-versions)\n  * [Hosts file configuration](#hosts-file-configuration)\n  * [Additional images build](#additional-images-build)\n  * [Generate local credentials and configuration](#generate-local-credentials-and-configuration)\n  * [Update module versions](#update-module-versions)\n  * [Deploying core services](#deploying-core-services)\n  * [Deploying mgr-components](#deploying-mgr-components)\n  * [app-platform-minimal application registration](#app-platform-minimal-application-registration)\n  * [Registration of application descriptor](#registration-of-application-descriptor)\n    * [app-platform-minimal discovery information](#app-platform-minimal-discovery-information)\n  * [app-platform-minimal deployment](#app-platform-minimal-deployment)\n    * [Running containers](#running-containers)\n  * [Create a tenant](#create-a-tenant)\n    * [Enable (entitle) app-platform-minimal for tenant](#enable-entitle-app-platform-minimal-for-tenant)\n  * [Creating a user](#creating-a-user)\n    * [Generate a module-to-module client secret](#generate-a-module-to-module-client-secret)\n      * [Vault service client secret retrieval](#vault-service-client-secret-retrieval)\n      * [Keycloak service client retrieval](#keycloak-service-client-retrieval)\n      * [Generating service access token](#generating-service-access-token)\n    * [Create a user: folio](#create-a-user-folio)\n    * [Create folio user credentials](#create-folio-user-credentials)\n    * [Login folio user](#login-folio-user)\n* [Additional images](#additional-images)\n  * [folio-module-sidecar](#folio-module-sidecar)\n* [Miscellaneous scripts](#miscellaneous-scripts)\n  * [module-updater](#module-updater)\n  * [images-builder](#images-builder)\n  * [Remove all docker volumes related to the deployment](#remove-all-docker-volumes-related-to-the-deployment)\n  * [Module version actualizer](#module-version-actualizer)\n  * [Single command to deploy local environment](#single-command-to-deploy-local-environment)\n  * [Verified versions](#verified-versions)\n      * [Docker version](#docker-version)\n      * [Docker-compose CLI version](#docker-compose-cli-version)\n      * [Python](#python)\n\u003c!-- TOC --\u003e\n\n# Run applications in docker\n\nRequired tools:\n\n- Docker\n- Python v3.10+ and pip\n- Java 17\n- Maven\n\n## Script environment variables\n\nThis variables can be overwritten in `.env.local.credentials`\n\n| Variable                               | Default value                 | Description                                                                                    |\n|----------------------------------------|-------------------------------|------------------------------------------------------------------------------------------------|\n| POSTGRES_PASSWORD                      | postgres_admin                | Postgres Database password                                                                     |\n| KC_DB_PASSWORD                         | keycloak_admin                | Keycloak database password                                                                     |\n| KONG_DB_PASSWORD                       | kong_admin                    | Kong database password                                                                         |\n| OKAPI_DB_PASSWORD                      | okapi_admin                   | Okapi database password (all modules will use this database to create tenant specific schemas) |\n| MGR_APPLICATIONS_DB_PASSWORD           | mgr_applications_admin        | mgr-applications database password                                                             |\n| MGR_TENANTS_DB_PASSWORD                | mgr_tenants_admin             | mgr-tenants database password                                                                  |\n| MGR_TENANT_ENTITLEMENTS_DB_PASSWORD    | mgr_tenant_entitlements_admin | mgr-tenant-entitlements database password                                                      |\n| KC_ADMIN_PASSWORD                      | admin                         | Keycloak admin password                                                                        |\n| KC_ADMIN_CLIENT_SECRET                 | be-admin-client-secret        | Keycloak admin client secret                                                                   |\n\n\u003e **_NOTE:_**  _It is recommended to generate your own set of credentials for a new deployment instead of using default\n\u003e values, see how to generate [deployment credentials](#generate-local-credentials-and-configuration)._\n\nThis variables can be overwritten in `.env.local`:\n\n### Module versions\n| Variable                           | Default value                   | Description                                                                                  |\n|------------------------------------|---------------------------------|----------------------------------------------------------------------------------------------|\n| KC_LOGIN_CLIENT_SUFFIX             | -login-app                      | a suffix for a tenant client that will perform all authentication and authorization requests |\n| KC_SERVICE_CLIENT_ID               | m2m-client                      | Name of service client (participated in module-to-module requests)                           |\n| KC_ADMIN_CLIENT_ID                 | be-admin-client                 | Keycloak admin client id                                                                     |\n| MGR_TENANTS_VERSION                | latest                          | Docker image version for `mgr-tenants`                                                       |\n| MGR_TENANTS_VERSION                | latest                          | Docker image version for `mgr-tenants`                                                       |\n| MGR_TENANTS_REPOSITORY             | folioci/mgr-tenants             | Docker repository for `mgr-tenants`                                                          |\n| MGR_APPLICATIONS_VERSION           | latest                          | Docker image version for `mgr-applications`                                                  |\n| MGR_APPLICATIONS_REPOSITORY        | folioci/mgr-applications        | Docker repository for `mgr-applications`                                                     |\n| MGR_TENANT_ENTITLEMENTS_VERSION    | latest                          | Docker image version for `mgr-tenant-entitlements`                                           |\n| MGR_TENANT_ENTITLEMENTS_REPOSITORY | folioci/mgr-tenant-entitlements | Docker repository for `mgr-tenant-entitlements`                                              |\n| FOLIO_MODULE_SIDECAR_VERSION       | latest                          | Docker image version for `folio-module-sidecar`                                              |\n| FOLIO_MODULE_SIDECAR_REPOSITORY    | folioci/folio-module-sidecar    | Docker repository for `folio-module-sidecar`                                                 |\n\n\u003e **_NOTE:_** _Folio module versions are populated with the following script (based on application descriptor):_\n\u003e ```shell\n\u003e python ./misc/docker-module-updater/run.py\n\u003e ```\n\n## Hosts file configuration\n\nKeycloak and kafka uses specific settings in this deployment that prevents them accessing locally. To make it possible,\n`hosts` file must be updated with following lines:\n\n```text\n127.0.0.1     keycloak\n127.0.0.1     kafka\n```\n\n## Additional images build\n\nAdditional images are required to built before running `eureka-platform-bootstrap` in docker.\n\nThis command will build custom vault image, with autoconfiguration for initial credentials:\n\n```shell\nsh ./misc/build-images.sh\n```\n\nBefore all the steps, make sure that you are in the `docker` directory:\n\n```shell\ncd docker\n```\n\n## Generate local credentials and configuration\n\nTo set local credentials and configuration a following script must be executed:\n\n```shell\nsh ./set-local-credentials.sh\n```\n\n\u003e **_NOTE:_** _This step is optional, however it will provide more secure deployment for local development_\n\u003e In addition, once credentials is set and core profile is running - changing them will break deployment, and the\n\u003e workaround is to manually update them in `.env.local.crendentials` and in corresponding container or to start\n\u003e deployment from scratch by removing docker volumes (before executing a script - deployment must be stopped with\n\u003e ```./stop-docker-containers.sh```):\n\u003e ```shell\n\u003e docker volume rm -f folio-platform-minimal_db folio-platform-minimal_kafka-data folio-platform-minimal_vault-data\n\u003e ```\n\n## Update module versions\n\n\u003e **_NOTE:_** _This step is optional, execute the following command only if you have modified app-platform-miniaml\nmodule\n\u003e descriptor_\n\n```shell\npython ../misc/docker-module-updater/run.py\n```\n\n## Deploying core services\n\nExecuting the following command will run containers for core infrastructure for Eureka deployment:\n\n- Database (PosgreSQL with configured databases and credentials)\n- api-gateway: Kong\n- Keycloak (cluster deployment 1 node + load balancer (nginx))\n- Apache Kafka + Kafka UI\n\n```shell\n./start-docker-containers.sh -p core\n```\n\n_Checklist before going to the next step:_\n\n1. _Database must be available with configured admin client (credentials: `postgres:{{POSTGRES_PASSWORD}}`):_\n   ```\n   jdbc:postgresql://localhost:5432/postgres\n   ```\n\n2. _Check Keycloak admin dashboard (credentials: `admin:{{KC_ADMIN_PASSWORD}}`):_\n   ```\n   http://localhost:8080\n   ```\n   \u003e **_NOTE:_**  _If keycloak is not available (502 Bad Gateway), try to execute:\\\n   \u003e `./dc.sh restart keycloak`_\n\n3. _Check Kong Manager Dashboard:_\n   ```\n   http://localhost:8002\n   ```\n   \u003e **_NOTE:_** _If kong is not available, removing it by ```./dc.sh down api-gateway``` and then enabling it again\n   \u003e with ```./dc.sh up --data api-gateway``` should resolve this issue_\n\n4. _Check Kafka UI:_\n   ```\n   http://localhost:9080\n   ```\n5. _Check Vault:_\n  ```\n  http://localhost:8200/\n  ```\n  _Unseal token can be retrieved with script:_\n  ```\n  sh ./misc/get-vault-token.sh\n  ```\n\n## Deploying mgr-components\n\nBefore initializing `mgr-components`, Vault access must be provided via env variable - `SECRET_STORE_VAULT_TOKEN`. The\nfollowing script will populate it in `.env.local`:\n\n```\nsh ./misc/populate-vault-token.sh\n```\n\n\u003e **_NOTE:_** _All local configuration lives in `.env.local` file, in the `docker/` directory, if you want to customize\n\u003e deployment - use this file, it is excluded from git, so pulling latest changes from master or other branches will be\n\u003e simple._\n\n\u003e **_NOTE:_** _mgr-components versions can be re-configured with following env variables in `.env.local`:_\n\u003e ```\n\u003e export MGR_TENANTS_VERSION={{newVersion}}\n\u003e export MGR_TENANTS_REPOSITORY={{newRepositoryName}}\n\u003e export MGR_APPLICATIONS_VERSION={{newVersion}}\n\u003e export MGR_APPLICATIONS_REPOSITORY={{newRepositoryName}}\n\u003e export MGR_TENANT_ENTITLEMENTS_VERSION={{newVersion}}\n\u003e export MGR_TENANT_ENTITLEMENTS_REPOSITORY={{newRepositoryName}}\n\u003e ```\n\u003e _`eureka-platform-bootstrap` uses the latest tag from folioci docker public registry, to update and pull the latest\n\u003e tags `sh ./docker/dc.sh pull` can be used._\n\nExecuting this command will run containers for:\n\n- mgr-tenants (tenant management)\n- mgr-applications (application management + discovery management)\n- mgr-tenant-entitlements (tenant application management)\n\n```shell\n./start-docker-containers.sh -p mgr-components\n```\n\nWait until they are available:\n\n```shell\ncurl -w\"\\n\\n\" -sS --retry-all-errors --retry 10 -D - http://localhost:9901/admin/health\ncurl -w\"\\n\\n\" -sS --retry-all-errors --retry 8 -D - http://localhost:9902/admin/health\ncurl -w\"\\n\\n\" -sS --retry-all-errors --retry 8 -D - http://localhost:9903/admin/health\n```\n\nAdding a new application to `mgr-applications` will require following steps:\n\n* To expose your pre-defined variables to current terminal\n  ```shell\n  source .env.local\n  ```\n\n* Get system access token:\\\n  _This token is used to communicate with mgr-components_\n  ```shell\n  export KC_ADMIN_CLIENT_ID={{value from .env.local, if not defined - from .env}}\n  export KC_ADMIN_CLIENT_SECRET={value from .env.local.credentials, if not defined - from .env}\n  ```\n\n*  _If you have not set up local credentials, you can use default values:_\n  ```shell\n  export KC_ADMIN_CLIENT_ID=be-admin-client\n  export KC_ADMIN_CLIENT_SECRET=be-admin-client-secret\n  ```\n\n\n  ```shell\n  systemAccessToken=$(curl -X POST --silent \\\n    --header \"Content-Type: application/x-www-form-urlencoded\" \\\n    --data-urlencode \"client_id=${KC_ADMIN_CLIENT_ID}\" \\\n    --data-urlencode \"grant_type=client_credentials\" \\\n    --data-urlencode \"client_secret=${KC_ADMIN_CLIENT_SECRET}\" \\\n    \"http://keycloak:8080/realms/master/protocol/openid-connect/token\" \\\n    | jq -r \".access_token\")\n  ```\n  \u003e **_NOTE:_** _Access token lifespan can be increased in Keycloak to 30 minutes:_\n  \u003e - Login to keycloak\n  \u003e - Select master realm\n  \u003e - Then go to Realm Settings -\u003e Tokens -\u003e Access Tokens\n  \u003e - Increase the value of `Access Token Lifespan`\n\n  The following command will print access token value (Optional):\n  ```shell\n  echo \"$systemAccessToken\"\n  ```\n\n* Verify that mgr-components are available (Optional)\n  ```shell\n  curl -X GET --silent \\\n    --header \"Content-Type: application/json\" \\\n    --header \"x-okapi-token: ${systemAccessToken}\" \\\n    \"http://localhost:8000/tenants\" | jq\n  ```\n\n  ```shell\n  curl -X GET --silent \\\n    --header \"Content-Type: application/json\" \\\n    --header \"x-okapi-token: ${systemAccessToken}\" \\\n    \"http://localhost:8000/applications\" | jq\n  ```\n\n  ```shell\n  curl -X GET --silent \\\n    --header \"Content-Type: application/json\" \\\n    --header \"x-okapi-token: ${systemAccessToken}\" \\\n    \"http://localhost:8000/entitlements\" | jq\n  ```\n\n  \u003e **_NOTE:_** _Responses must be `200 OK`, if not - check the container logs to find the issue_\n\n## app-platform-minimal application registration\n\n`app-platform-minimal` contains basic functionality for Eureka platform:\n\n* User and AuthUsers management (`mod-users-keycloak` + `mod-users` + `mod-users-bl`)\n* Authentication and authorization (`keycloak` + `mod-login-keycloak` + sidecars)\n* Capability/Role/Policy management (`mod-roles-keycloak`)\n* Scheduled timers support (`mod-scheduler`)\n* Notes (`mod-notes`)\n* Tenant settings management (`mod-settings`)\n\nWhen the previous step is finished, `mgr-applications` is ready to accept applications, and sidecars will require\npre-defined application to load bootstrap information.\n\n## Registration of application descriptor\n\nThis command adds app-platform-minimal to `mgr-applications`:\n\n```shell\ncurl -X POST --silent \\\n  --header \"Content-Type: application/json\" \\\n  --header \"x-okapi-token: ${systemAccessToken}\" \\\n  --data \"@../descriptors/app-platform-minimal/descriptor.json\" \\\n  \"http://localhost:8000/applications\" | jq\n```\n\n\u003e **_NOTE:_** Created application can be retrieved using the following command:\n\u003e\n\u003e ```shell\n\u003e curl -X GET --silent \\\n\u003e   --header \"Content-Type: application/json\" \\\n\u003e   --header \"x-okapi-token: ${systemAccessToken}\" \\\n\u003e   \"http://localhost:8000/applications/app-platform-minimal-0.0.17-SNAPSHOT.2?full=true\" | jq\n\u003e ```\n\n### app-platform-minimal discovery information\n\nThis command will provide discovery information for all modules in `app-platform-minimal`:\n\n```shell\ncurl -X POST --silent \\\n  --header \"Content-Type: application/json\" \\\n  --header \"x-okapi-token: ${systemAccessToken}\" \\\n  --data \"@../descriptors/app-platform-minimal/discovery.json\" \\\n  \"http://localhost:8000/modules/discovery\" | jq\n```\n\n\u003e **_NOTE:_** Created application discovery data can be retrieved using the following command:\n\u003e\n\u003e\n\u003e (Optional) Stored application discovery information\n\u003e ```shell\n\u003e curl -X GET --silent \\\n\u003e   --header \"Content-Type: application/json\" \\\n\u003e   --header \"x-okapi-token: ${systemAccessToken}\" \\\n\u003e   \"http://localhost:8000/applications/app-platform-minimal-0.0.17-SNAPSHOT.2/discovery?limit=100\" | jq\n\u003e ```\n\n## app-platform-minimal deployment\n\n\u003e **_NOTE:_** _it's also possible to run native image build by following the instruction in `folio-module-sidecar`\nproject, image values can be customized in `.env.local`_:\n\u003e ```shell\n\u003e export FOLIO_MODULE_SIDECAR_VERSION={{folio-module-sidecar-version}}\n\u003e export FOLIO_MODULE_SIDECAR_REPOSITORY={{folio-module-sidecar-repostitory}}\n\u003e ```\n\n### Running containers\n\nThe following command will run containers that belongs to `app-platform-minimal`:\n\n```shell\n./start-docker-containers.sh -p app-platform-minimal\n```\n\n\u003e **_NOTE:_** _Verify manually that all containers started without any errors by checking logs of each container and\n\u003e sidecars (`mod-` and `sc-` prefixes in search)_\n\n## Create a tenant\n\nThe following command will create and save tenant id as variable:\n\n```shell\ncurl -X POST --silent \\\n  --header \"Content-Type: application/json\" \\\n  --header \"x-okapi-token: ${systemAccessToken}\" \\\n  --data '{\"name\": \"test\", \"description\": \"Test Tenant\"}' \\\n  \"http://localhost:8000/tenants\" | jq\n```\n\nCommand to get test tenant id:\n\n```shell\ntestTenantId=$(curl -X GET --silent \\\n  --header \"Content-Type: application/json\" \\\n  --header \"x-okapi-token: ${systemAccessToken}\" \\\n  \"http://localhost:8000/tenants?query=name==test\" | jq -r \".tenants[0].id\")\n```\n\nThis command should print tenant identifier\n\n```shell\necho \"${testTenantId}\"\n```\n\n### Enable (entitle) app-platform-minimal for tenant\n\nThe following command will install `app-platform-minimal` for prepared `test` tenant:\n\n```shell\ncurl -X POST --silent \\\n  --header \"Content-Type: application/json\" \\\n  --header \"x-okapi-token: ${systemAccessToken}\" \\\n  --data '{\"tenantId\": \"'\"${testTenantId}\"'\", \"applications\": [ \"app-platform-minimal-0.0.17-SNAPSHOT.2\" ] }' \\\n  \"http://localhost:8000/entitlements?ignoreErrors=true\" | jq\n```\n\nAwait for successful result, entitlements for tenant can be checked with command\n\n```shell\ncurl -X GET --silent \\\n  --header \"Content-Type: application/json\" \\\n  --header \"x-okapi-token: ${systemAccessToken}\" \\\n  \"http://localhost:8000/entitlements?query=tenantId=${testTenantId}\" | jq\n```\n\n## Creating a user\n\n### Generate a module-to-module client secret\n\nThis JWT token provides admin access to folio system (all permissions included)\n\n\n\u003e **_NOTE:_** _By default name of client is: ```sidecar-module-access-client```, but it can be redefined by\nvariable: ```KC_SERVICE_CLIENT_ID```_\n\n`{{KC_SERVICE_CLIENT_SECRET}}` can be obtained from Vault or from Keycloak.\n\n#### Vault service client secret retrieval\n\nTo retrieve service client secret from vault\n\n- Open Vault at ```http://localhost:8200/ui/vault/secrets```\n- Open following folder in sequence: `secret/` -\u003e `folio/` -\u003e `test/`\n- Copy data from `${KC_SERVICE_CLIENT_ID}` field (`m2m-client` by default)\n\n#### Keycloak service client retrieval\n\nTo retrieve service token from Keycloak:\n\n- Login to keycloak\n- Select `test` realm\n- Then go to Clients -\u003e `${KC_SERVICE_CLIENT_ID}` Client (`m2m-client` by default) -\u003e Credentials\n- Copy value from `Client Secret` field\n\n#### Generating service access token\n\nexport environment variables:\n\n```shell\nexport KC_SERVICE_CLIENT_ID={{value from .env.local, if not defined - from .env}}\nexport KC_SERVICE_CLIENT_SECRET={{value from previous step}}\n```\n\n```shell\naccessToken=$(curl -X POST --silent \\\n  --header \"Content-Type: application/x-www-form-urlencoded\" \\\n  --data-urlencode \"client_id=${KC_SERVICE_CLIENT_ID}\" \\\n  --data-urlencode \"grant_type=client_credentials\" \\\n  --data-urlencode \"client_secret=${KC_SERVICE_CLIENT_SECRET}\" \\\n  \"http://keycloak:8080/realms/test/protocol/openid-connect/token\" \\\n  | jq -r \".access_token\")\n```\n\n### Create a user: folio\n\n```shell\nuser=$(curl -X POST --silent \\\n  --header 'x-okapi-tenant: test' \\\n  --header 'Content-Type: application/json' \\\n  --header \"x-okapi-token: ${accessToken}\" \\\n  --data-raw '{\n      \"active\": true,\n      \"departments\": [],\n      \"proxyFor\": [],\n      \"type\": \"patron\",\n      \"username\": \"folio\",\n      \"personal\": {\n        \"lastName\": \"Test\",\n        \"firstName\": \"Test\",\n        \"email\": \"test_user@example.com\",\n        \"addresses\": []\n      }\n    }' \\\n  'http://localhost:8000/users-keycloak/users')\n\necho $user | jq\n```\n\n### Create folio user credentials\n\n```shell\nuser_id=$(echo $user | jq -r \".id\")\n\ncurl -X POST --silent  \\\n  --header 'x-okapi-tenant: test' \\\n  --header 'Content-Type: application/json' \\\n  --header \"x-okapi-token: ${accessToken}\" \\\n  --data '{ \"username\": \"folio\", \"userId\": \"'${user_id}'\", \"password\": \"folio\" }' \\\n  'http://localhost:8000/authn/credentials' | jq\n```\n\n### Login folio user\n\n```shell\ncurl -X POST --silent  \\\n  --header 'x-okapi-tenant: test' \\\n  --header 'Content-Type: application/json' \\\n  --data '{ \"username\": \"folio\", \"password\": \"folio\" }' \\\n  'http://localhost:8000/authn/login' | jq\n```\n\n# Additional images\n\nAdditional images are build with the following command:\n\n```shell\nsh ./misc/build-images.sh\n```\n\nThis image provides HashiCorp Vault container (with some automation) to store secret for Folio platform\n\n## folio-module-sidecar\n\n# Miscellaneous scripts\n\n## module-updater\n\nUpdates docker deployment and discovery information versions according\nto the [Application Descriptor](descriptors/app-platform-minimal/descriptor.json)\n\n```shell\npython ./misc/docker-module-updater/run.py\n```\n\n## images-builder\nRun the following command to build the images for you current platform architecture from the `eureka-platform-bootstrap` folder:\nMore: [Images Builder](misc/images-builder/README.md)\n\n```bash\n./misc/images-builder/build.sh\n```\n\n## Remove all docker volumes related to the deployment\nRun the following command to remove all docker volumes related to the deployment:\n\n```shell\n./docker/remove-folio-platform-volumes.sh\n````\n\n## Module version actualizer\nThis script updates module versions in the application descriptor (descriptor.json) to the latest SNAPSHOT or release versions available in the FOLIO Registry.\nChoose whether to use SNAPSHOT versions (y) or stable releases (n).\n```shell\npython3 misc/module-version-actualizer/run.py\n```\n\n## Single command to deploy local environment\nThe script deploys local environment with default settings. Covered steps:\n- Start `core` services\n- Start `mgr-components`\n- Register `app-platform-minimal` application\n- Deploy `app-platform-minimal`\n- Create a `test` tenant\n- Enable `app-platform-minimal` application for tenant\n\nRun the following command to deploy local environment:\n\n```shell\n./start.sh\n```\n\n## Verified versions\n\n#### Docker version\n\n```shell\n\u003e docker version\n\nClient: Docker Engine - Community\n Version:           27.1.1\n\nServer: Docker Engine - Community\n Engine:\n  Version:          27.1.1\n  API version:      1.46 (minimum version 1.24)\n```\n\n#### Docker-compose CLI version\n\n```shell\n\u003e docker compose version\nDocker Compose version v2.29.1\n```\n\n#### Python\n\n```shell\n\u003e python --version\nPython 3.10.12\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffolio-org%2Feureka-platform-bootstrap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffolio-org%2Feureka-platform-bootstrap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffolio-org%2Feureka-platform-bootstrap/lists"}