Single Server Install with Containers

Single Server Install with Containers

Single Server Install with Containers

This guide explains how to start a small Eureka-based FOLIO environment on one machine using Docker Compose. It is intended for development, demos, and platform exploration. It is not a production deployment guide.

The setup is provided by the eureka-platform-bootstrap repository https://github.com/folio-org/eureka-platform-bootstrap . The normal installation path is the repository's ./start.sh script, which performs the bootstrap steps for you.

Overview

The local container environment includes:

  • PostgreSQL for platform and module databases

  • Kong as the API gateway

  • Keycloak for identity and access management

  • Kafka and Kafka UI

  • Vault for local secret storage

  • Eureka manager components:

    • mgr-applications

    • mgr-tenants

    • mgr-tenant-entitlements

  • app-platform-minimal, a small application set that includes users, login, roles, settings, notes, scheduler, and supporting sidecars

The bootstrap script starts the required services, registers the application, deploys the minimal module set, creates a test tenant, and entitles that tenant to the application.

System Requirements

Use a machine that can comfortably run a local multi-container Java stack. If containers are killed by Docker, fail health checks, or restart repeatedly, increase the CPU and memory available to Docker before debugging individual services.

Install these tools before starting:

  • Docker

  • Docker Compose v2

  • docker-compose compatibility command

  • Python 3.10 or later

  • Java 21 or later

  • Maven

  • jq

  • curl

The bootstrap script checks for both docker compose and the older docker-compose command. If your Docker installation only provides docker compose, install the compatibility command before using ./start.sh.

On macOS with Apple Silicon, the script may offer to build ARM-compatible images locally. Use that option if the published images do not run cleanly on your machine.

Installation Steps

Setting up Docker

Clone the repository and enter it:

git clone <https://github.com/folio-org/eureka-platform-bootstrap.git> cd eureka-platform-bootstrap

Make sure Docker is running:

docker version docker compose version

The local Keycloak and Kafka configuration expects these host names to resolve to the local machine:

127.0.0.1 keycloak 127.0.0.1 kafka

The ./start.sh script can add these entries for you. If you prefer to manage the hosts file yourself, add them before starting the containers.

Configuring Docker Compose

Most users do not need to edit Docker Compose files before the first run.

The main configuration files are in the docker directory:

  • docker/.env contains default image names, versions, credentials, service URLs, and Compose settings.

  • docker/.env.local is for local overrides such as image versions or repositories.

  • docker/.env.local.credentials is for local database and Keycloak secrets.

  • docker/dc.sh loads local configuration and runs Docker Compose with the repository's Compose files.

For the normal ./start.sh path, use the default local credentials that the script creates. Those defaults are intended for disposable local environments only.

The main Compose profiles are:

Profile

What it starts

Profile

What it starts

core

PostgreSQL, Kong, Keycloak, Kafka, Kafka UI, Vault

mgr-components

mgr-applications, mgr-tenants, mgr-tenant-entitlements

app-platform-minimal

Minimal FOLIO modules and their sidecars

Deploying FOLIO containers

From the repository root, run:

./start.sh

The script performs the local bootstrap flow:

  1. Checks required tools.

  2. Prepares local configuration and credentials.

  3. Builds the local Vault image.

  4. Starts the core services.

  5. Starts the manager components.

  6. Registers app-platform-minimal and its discovery data.

  7. Starts the application modules and sidecars.

  8. Creates a test tenant.

  9. Entitles app-platform-minimal to test tenant.

During startup the script may ask whether to update module versions in the application descriptor. On Apple Silicon, it may also ask whether to build ARM-compatible images locally.

If you need to run the same process step by step, use the manual flow in the repository README: Run applications in docker https://github.com/folio-org/eureka-platform-bootstrap#run-applications-in-docker .

Post-Installation Tasks

Verifying the deployment

After ./start.sh finishes, check the manager component health endpoints:

curl -sS -D - <http://localhost:9901/admin/health> curl -sS -D - <http://localhost:9902/admin/health> curl -sS -D - <http://localhost:9903/admin/health>

The responses should be successful HTTP responses.

Useful local URLs:

Service

URL

Service

URL

Kong proxy

http://localhost:8000

Kong admin API

http://localhost:8001

Kong Manager

http://localhost:8002

Keycloak

http://localhost:8080

Kafka UI

http://localhost:9080

Vault

http://localhost:8200

To inspect the running containers:

docker ps

To check logs for a service:

docker logs api-gateway docker logs keycloak docker logs mgr-applications

Managing containers

Run these commands from the root project directory.

Stop containers:

./docker/stop-containers.sh

Remove local deployment volumes when you need a clean restart:

./docker/remove-folio-platform-volumes.sh

Start the configured profiles again:

./start.sh

 

Troubleshooting common issues

Keycloak is not available

Confirm that the keycloak host name resolves locally:

curl -sS -D - <http://keycloak:8080/realms/master>

If Keycloak is not reachable or the browser shows 502 Bad Gateway, restart the Keycloak load balancer container:

cd docker ./dc.sh restart keycloak

Then check the logs:

./dc.sh logs keycloak ./dc.sh logs keycloak-s0

Kong is not available

Check the gateway container and logs:

cd docker ./dc.sh ps api-gateway ./dc.sh logs api-gateway

If the container is unhealthy, recreate it after the database is healthy:

./dc.sh up -d --force-recreate api-gateway

Manager components cannot read secrets

The manager components need a Vault token in local configuration. After the core profile is running, populate the token and restart the manager components:

cd docker bash ./misc/populate-vault-token.sh ./start-docker-containers.sh -p mgr-components

Requests fail through the gateway

If containers are running but gateway requests fail, check that application and discovery data were registered. The sidecars use discovery data from mgr-applications; routing will not work correctly if that data is missing.

For detailed registration commands, see the repository README: app-platform-minimal application registration https://github.com/folio-org/eureka-platform-bootstrap#registration-of-application-descriptor .

Apple Silicon image problems

If a Java module image fails immediately on Apple Silicon, build local images for the current architecture:

./misc/images-builder/build.sh

Then override the affected image repository or tag in docker/.env.local and start the relevant profile again.

A clean restart is needed

Stop the containers and remove deployment volumes:

./docker/stop-containers.sh ./docker/remove-folio-platform-volumes.sh

Then run the normal startup flow again:

./start.sh