---
title: "OEM"
description: "OEM kit enables developers to build and test Cloud CMS extensions with UI, API, MongoDB, and Elasticsearch services. (Gitana 4.0)"
product: "Gitana"
version: "4.0"
url: "/documentation/gitana/4.0/self-managed/kits/oem"
---

# OEM

The `OEM` kit provides a way for developers, integrators, partners and those who embed Cloud CMS in custom solutions to build and test extensions. These extensions include UI extensions as well as API extensions in the form of Java / Spring beans.

The kit consists of the following services:

- `ui`
- `api`
- `mongodb`
- `elasticsearch`

These are connected like this:

![diagram.png](/documentation/gitana/4.0/self-managed/kits/oem/diagram.png)

## Running

Use the following commands:

```
docker-compose build --force-rm
docker-compose up
```

And then open a browser to:

```
http://localhost
```

To access the API directly:

```
https://localhost:8080
```

## Development Mounts

The following is mounted into the Cloud CMS UI Server:

- UI source code from `~/projects/cloudcms-ui-server`
- UI extensions from `./ui/ext`

The following is mounted into the Cloud CMS API Server:

- API war file from `~/projects/gitana-distributions/api-docker/target/api-docker-2.5.war`
- API extensions (jar files) from `./api/ext/lib`
- API extensions (classes) from `./api/ext/classes`

## docker-compose.yml

```
version: "2"

services:

  ui:
    build: ./ui
    networks:
      - cloudcms
    depends_on:
      - api
    env_file:
      - ./ui/ui.env
    ports:
      - "80:80"
    volumes:
      - ~/projects/cloudcms-ui-server/public_build:/var/app/current/public_build
      - ~/projects/cloudcms-ui-server/public:/var/app/current/public
      - ./ui/ext:/var/app/current/ext

  api:
    build: ./api
    networks:
      - cloudcms
    depends_on:
      - mongodb
      - elasticsearch
    env_file:
      - ./api/api.env
    ports:
      - "8080:8080"
      - "5005:5005"
    volumes:
      - ~/projects/gitana-distributions/api-docker/target/api-docker-2.5.war:/opt/tomcat/webapps/ROOT.war

  mongodb:
    image: ${kit.images.mongodb.name}
    networks:
      - cloudcms
    ports:
      - "27017:27017"
    command: mongod --smallfiles --storageEngine=mmapv1

  elasticsearch:
    image: ${kit.images.elasticsearch.name}
    networks:
      - cloudcms
    ports:
      - "9300:9300"
    command: elasticsearch -Des.cluster.name=cloudcms-docker

networks:
  cloudcms:
    driver: bridge
```
