# Global Lineaje Open Source Intelligence (GLOSI) Deployment Guide

<div align="left"><figure><img src="/files/5C3F4hFUFJsG4peJ2gLd" alt="" width="375"><figcaption></figcaption></figure></div>

*© 2026 Lineaje, Inc. All rights reserved. Proprietary and Confidential.*

**Objective**: This guide helps you deploy GLOSI in your environment using Docker Compose.&#x20;

### What Is GLOSI?&#x20;

GLOSI is an intelligence data platform from Lineaje for open source components and vulnerabilities. It enables customers to look up open source intelligence (Package Attestation, Source Attestation, Vulnerability Info, Security Posture, Code Quality, Embedded Secrets, Mitre HipCheck, Source Code Metrics, Dependency Decomposition, EOL, Lineaje Reputation, and Geo Provenance) within their own environment. GLOSI supports a variety of environments, from cloud to on-premises. It publishes updated intelligence data regularly to keep pace with the latest changes.&#x20;

### How Is GLOSI Deployed On-Premises?&#x20;

GLOSI ships as a container image (tarball) and deploys using Docker Compose.&#x20;

### What Does GLOSI Contain?&#x20;

The GLOSI image bundles open source component data, vulnerability data, and a set of services with a user interface. It includes the following:&#x20;

* **Frontend UI** — React/Next.js application for querying open source components and vulnerabilities&#x20;
* **Data service** — FastAPI API layer providing access to the data&#x20;
* **Orchestration service** — FastAPI application that manages the database&#x20;
* **Elasticsearch 7.17.0 database** — stores the open source component data&#x20;

### How Can I Get Access to GLOSI?&#x20;

The GLOSI image is hosted in the Lineaje registry. Contact Lineaje support at <support@lineaje.com> to request access.&#x20;

### GLOSI Setup&#x20;

#### System Configuration&#x20;

You can deploy all containers on a single VM (Ubuntu or Alpine) or in a distributed configuration. For a single-VM deployment, the following minimum specifications are recommended.&#x20;

| **Deployment Type** | **Services** | **RAM** | **vCPU** | **Disk Size** |
| ------------------- | ------------ | ------- | -------- | ------------- |
| Single Node         | data-service | 32 GB   | 8        | 300 GB        |

#### Prerequisites&#x20;

1. Obtain the installation tarball, which contains the installation guide, API documentation, and a Resources folder with the docker-compose.yaml file.&#x20;
2. Obtain access to the Lineaje Amazon Elastic Container Registry (ECR) that hosts the GLOSI Docker image. If you do not have access, contact Lineaje Support at <support@lineaje.com> with your AWS Account ID. Once Lineaje grants ECR access to your account, proceed to Step 3.&#x20;
3. Install Docker on the host VM.&#x20;
4. Install the AWS CLI on the host VM.&#x20;
5. For automated installation, allowlist the gold.lineaje.com domain on the host VM.&#x20;

### Deployment

{% stepper %}
{% step %}

### Add AWS config

Add the following profile to `~/.aws/config`&#x20;

```ini
[profile LineajeGlosiRole]

role_arn = arn:aws:iam::<Lineaje AWS Account>:role/lineajeGlosiPullRole

credential_source = Ec2InstanceMetadata
```

{% endstep %}

{% step %}

### Login to AWS ECR

Login to AWS ECR using the following command. You can find the GLOSI repository ID in the docker-compose.yaml file under the Resources folder of the tarball.&#x20;

```bash
aws ecr get-login-password --region us-east-1 --profile LineajeGlosiRole | sudo docker login --username AWS --password-stdin <Lineaje AWS Account>.dkr.ecr.us-east-1.amazonaws.com
```

{% endstep %}

{% step %}

### Pull the image

Pull the GLOSI image to your host VM:&#x20;

```bash
docker pull <Lineaje AWS Account>.dkr.ecr.us-east-1.amazonaws.com/glosi:latest
```

{% endstep %}

{% step %}

### Deploy services

Deploy all services using the docker-compose.yaml file. This starts all services on the host VM.&#x20;

```bash
sudo docker compose -f <docker-compose.yaml> up -d
```

{% endstep %}
{% endstepper %}

### Custom Deployment&#x20;

The deployment can be customized using the following configuration files.&#x20;

#### Elasticsearch Configuration&#x20;

To deploy Elasticsearch on a separate VM, expose port 9200 to make it accessible from the data service. The following configuration runs Elasticsearch at the recommended port 9200, which you can change as needed:&#x20;

```yaml
elasticsearch:
  image: <Lineaje AWS Account Id>.dkr.ecr.us-east-1.amazonaws.com/glosi:latest
  container_name: elasticsearch
  command: ["/bin/sh", "-c", "/usr/share/elasticsearch/bin/elasticsearch"]
  user: "1001:1001" # Run as UID/GID defined in Dockerfile
  environment:
    - discovery.type=single-node
    - ES_JAVA_OPTS=-Xms512m -Xmx512m
  volumes:
    - elasticsearch_data:/usr/share/elasticsearch/data
  ports:
    - "9200:9200"
  restart: no
  healthcheck:
    test: ["CMD-SHELL", "curl --silent --fail http://elasticsearch:9200/_cluster/health || exit 1"]
    interval: 5s
    retries: 10
    timeout: 3s
```

#### Data Service Configuration&#x20;

The data service is a FastAPI application that connects to Elasticsearch and converts client requests into Elasticsearch queries. It runs on port 8000 by default. The Swagger UI is available at: `http://<data-service:VM_IP>:<port:8000>/docs`&#x20;

```yaml
data-service:
  image: <Lineaje AWS Account Id>.dkr.ecr.us-east-1.amazonaws.com/glosi:latest
  container_name: data-service
  working_dir: /app/data-service
  command: ["gunicorn", "main:app", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:8000", "--timeout", "2", "--graceful-timeout", "15", "--keep-alive", "10"]
  environment:
    - PATH=/app/data-service/venv/bin:$PATH
    - ELASTIC_AUTH_METHOD=NO_AUTH
    - OPENSEARCH_HOST=elasticsearch
    - OPENSEARCH_PORT=9200
    - USER_SSL=False
    - VERIFY_CERT=False
  depends_on:
    elasticsearch:
      condition: service_healthy
  ports:
    - "8000:8000"
  restart: always
```

#### Frontend&#x20;

The frontend is a React/Next.js application that calls backend APIs and displays data in the browser. It runs on port 3000 ([`http://localhost:3000`](http://localhost:3000/)) by default.&#x20;

```yaml
risklensui:
  image: <Lineaje AWS Account Id>.dkr.ecr.us-east-1.amazonaws.com/glosi:latest
  container_name: risklensui
  working_dir: /app/risklensui
  command: ["npm", "run", "start"]
  ports:
    - "3000:3000"
  restart: always
```

#### GLOSI Orchestration Service&#x20;

The orchestration service handles workflows, connects UI actions with the data service, and adds logic, routing, and validation. It runs on port 8500 by default. The Swagger UI is available at: `http://<orchestration-service:VM_IP>:<port:8000>/docs`&#x20;

```yaml
orchestration-service:
  image: <Lineaje AWS Account Id>.dkr.ecr.us-east-1.amazonaws.com/glosi:latest
  container_name: orchestration-service
  working_dir: /app/glosi-orchestration-service
  command: ["gunicorn", "main:app", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:8500", "--timeout", "2", "--graceful-timeout", "15", "--keep-alive", "10"]
  environment:
    - PATH=/app/glosi-orchestration-service/venv/bin:$PATH
    - DATA_SERVICE_HOST=data-service
    - DATA_SERVICE_PORT=8000
    - ELASTIC_AUTH_METHOD=NO_AUTH
    - OPENSEARCH_HOST=elasticsearch
    - OPENSEARCH_PORT=9200
    - USER_SSL=False
    - VERIFY_CERT=False
    - OSS_TENANT_ID=vdna_994mgmr65tculnfy
  depends_on:
    - data-service
  ports:
    - "8500:8500"
  restart: always
```

#### Data Persistence, Networking, and Volumes&#x20;

* **Volumes**&#x20;

Volumes ensure data inside containers persists when containers restart or rebuild. For example, the elasticsearch\_data volume stores all Elasticsearch index data. elasticsearch\_data — stores data generated by Elasticsearch after package and vulnerability index synchronization&#x20;

* **Networking**&#x20;

Docker Compose automatically creates an internal bridge network. Containers communicate using service names, which avoids hardcoding IP addresses and makes scaling or relocating services straightforward. &#x20;

* **Health checks**&#x20;

Health checks ensure each service is only marked healthy once it responds correctly, improving deployment reliability.&#x20;

#### Service Interaction&#x20;

The following describes how the GLOSI services communicate with each other:&#x20;

1. **Frontend** — The user opens the UI at [http://localhost:3000](http://localhost:3000/). The browser sends API requests (such as search queries) to the orchestration service at [http://localhost:8500](http://localhost:8500/).&#x20;
2. **Orchestration service** — Validates the request and forwards it to the appropriate backend service (typically the data service).&#x20;
3. **Data service** — Receives requests from the orchestration service, transforms them into Elasticsearch-compatible queries, and sends them to Elasticsearch.&#x20;
4. **Elasticsearch** — Performs search and indexing operations and returns results to the data service.&#x20;
5. **Response propagation** — The data service formats the Elasticsearch results and returns them to the orchestration service for any additional processing.&#x20;
6. **Frontend rendering** — The UI receives the final result and displays it to the user.&#x20;

The architecture follows this request loop:&#x20;

`UI ➝ Orchestration ➝ Data service ➝ Elasticsearch ➝ Data service ➝ Orchestration ➝ UI`&#x20;

Docker Compose starts services in dependency order, ensuring each service waits for its required dependencies to become healthy before starting.&#x20;

### Access URLs&#x20;

| **Service**                        | **URL**                                         |
| ---------------------------------- | ----------------------------------------------- |
| Frontend                           | [http://localhost:3000](http://localhost:3000/) |
| Data service — Swagger UI          | <http://localhost:8000/docs>                    |
| Orchestration service — Swagger UI | <http://localhost:8500/docs>                    |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.veedna.com/gold-open-source-gos/gold-catalog/container-images/global-lineaje-open-source-intelligence-glosi-deployment-guide.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
