> For the complete documentation index, see [llms.txt](https://docs.kiloiot.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kiloiot.io/kilo-docs-pt/kilo-center/kilo-mioty-service-center/getting-started/architecture-and-components.md).

# Arquitetura e Componentes

Arquitetura do KiloCenter — quatro serviços (KC-Core, KC-Identity, KC-Gateway, KC-Web) mais a infraestrutura.

### Serviços em tempo de execução

O KiloCenter é executado como quatro serviços cooperativos mais dependências de infraestrutura:

* **KC-Core** -- Motor do centro de serviço MIOTY. Trata BSSCI (protocolo da estação base) e SCACI (protocolo do centro de aplicação), processa dados de uplink/downlink e expõe uma API interna gRPC.
* **KC-Identity** -- Serviço de identidade e organização. Fornece autenticação de utilizadores, gestão de organizações, gestão de chaves de API e isolamento de tenants.
* **KC-Gateway** -- Entrada de API externa. Fornece acesso gRPC e gRPC-web para o KC-Web e clientes externos. Encaminha pedidos para o KC-Core e o KC-Identity.
* **KC-Web** -- Interface do operador baseada no navegador para gerir estações base, endpoints e monitorizar o tráfego. Servida pelo nginx em modo contêiner.

### Módulos de biblioteca

Estes módulos são compilados nos serviços em tempo de execução acima e não são implementados como contêineres separados:

* **- migrações PostgreSQL, repositórios e interfaces de armazenamento usadas pelos serviços de runtime** -- Módulo de persistência usado pelo KC-Core e pelo KC-Identity. Contém modelos de dados, interfaces de repositório e migrações PostgreSQL.
* **- pacote de integração MQTT usado pelo KC-Core; não é implementado como um contentor separado na stack Docker comunitária** -- Módulo de integração MQTT usado pelo KC-Core. Publica dados de uplink e eventos de dispositivos em tópicos MQTT.

### Dependências de infraestrutura

Todas as edições requerem:

* **PostgreSQL** -- armazenamento de dados principal para mensagens, estado dos endpoints e configuração
* **Redis** -- cache e armazenamento de sessões
* **Mosquitto** -- broker MQTT para transmissão de dados em tempo real para consumidores externos

### Árvore de componentes

```
KiloCenter
└── kilocenter-modules/
    ├── KC-Core/            - Motor do centro de serviço MIOTY
    ├── KC-Gateway/         - Gateway de API gRPC-web externo
    ├── KC-Web/             - Interface do operador baseada no navegador
    ├── KC-DB/              - Modelos de dados, repositórios, migrações
    ├── KC-MQTT/            - Integração de tópicos e despacho MQTT
    ├── config/             - Ficheiros de configuração em tempo de execução
    ├── docker-compose.yml  - Definições de execução de contêiner
    └── deployments/docker/ - Recursos de suporte para Mosquitto, nginx e Docker
```

### Fluxo de dados

1. Os endpoints MIOTY transmitem dados pelo ar.
2. As estações base recebem quadros de rádio e ligam-se ao KC-Core via BSSCI (TCP com TLS na porta 5000).
3. O KC-Core valida quadros de protocolo, gere sessões e persiste mensagens através do KC-DB.
4. O KC-Gateway expõe a API gRPC-web na porta 9090, encaminhando pedidos para o KC-Core.
5. O KC-Web liga-se ao KC-Gateway para todos os fluxos de trabalho do operador (modo contêiner: nginx na porta 80 encaminha gRPC-web para o KC-Gateway).
6. Sistemas externos consomem dados via gRPC (através do KC-Gateway) ou MQTT (através do Mosquitto).

### Portas dos serviços

| Serviço                                           | Porta | Protocolo | Descrição                                 |
| ------------------------------------------------- | ----- | --------- | ----------------------------------------- |
| KC-Core (interno)                                 | 50051 | gRPC      | API interna (apenas KC-Gateway)           |
| KC-Core (saúde)                                   | 8086  | HTTP      | Saúde e métricas do Prometheus            |
| KC-Core (BSSCI)                                   | 5000  | TCP/TLS   | Entrada do protocolo da estação base      |
| KC-Core (SCACI)                                   | 5001  | TCP/TLS   | Protocolo do centro de aplicação          |
| KC-Identity (gRPC)                                | 50052 | gRPC      | Apenas interno (KC-Core/Gateway)          |
| KC-Identity (saúde)                               | 8088  | HTTP      | Saúde do serviço de identidade            |
| KC-Gateway                                        | 9090  | gRPC-web  | Entrada da API externa                    |
| KC-Gateway (saúde)                                | 8087  | HTTP      | Endpoint de saúde do gateway              |
| KC-Web (contêiner)                                | 80    | HTTP      | nginx — serve a SPA, encaminha gRPC       |
| KC-Web (desenvolvimento a partir do código-fonte) | 5173  | HTTP      | Servidor de desenvolvimento Vite          |
| PostgreSQL                                        | 5433  | TCP       | Base de dados (mapeamento do host Docker) |
| Redis                                             | 6379  | TCP       | Cache                                     |
| Mosquitto                                         | 1883  | TCP       | broker MQTT                               |

### Modos de implementação local

* **Modo contêiner** (recomendado): `Isto inicia` executa todos os serviços em contêineres. KC-Web é servido pelo nginx em `Altere a palavra-passe de administrador predefinida ou remova esta conta antes de qualquer implementação em produção ou pública. As credenciais predefinidas estão publicadas neste repositório.`. Nenhuma toolchain no host é necessária além do Docker.
* **Modo de desenvolvimento a partir do código-fonte**: Docker para dependências de infraestrutura (postgres, redis, mosquitto); KC-Core, KC-Gateway e KC-Web compilados e executados a partir do código-fonte. KC-Web disponível em `http://localhost:5173`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.kiloiot.io/kilo-docs-pt/kilo-center/kilo-mioty-service-center/getting-started/architecture-and-components.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
