> For the complete documentation index, see [llms.txt](https://docs.skail.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.skail.dev/opere/configurar-e-hospedar/configurar-o-runtime.md).

# Configurar o runtime

As quatro configurações que o runtime precisa para subir, de onde ele as lê e como conferir que deu certo.

## De onde o runtime lê

O runtime lê as variáveis de ambiente com prefixo `SKAIL_`. Em C#, a ordem de leitura é `appsettings.json`, `appsettings.{DOTNET_ENVIRONMENT}.json` e as variáveis de ambiente; no `appsettings` as chaves ficam na seção `skail`, em minúsculo, sem o prefixo, e variável de ambiente sobrescreve arquivo. Em TypeScript, o host (`createSkailPlatform`) é configurado pelas variáveis `SKAIL_*`, e um valor passado no código para `createSkailPlatform` tem prioridade sobre a variável.

{% tabs %}
{% tab title="Variáveis de ambiente" %}

```bash
SKAIL_WORKLOAD=faturamento:v1.0.0
SKAIL_NAMESPACE=<namespace do environment>
SKAIL_KEY=<chave do environment>
SKAIL_SIDECAR=<endereço do skail>
```

{% endtab %}

{% tab title="appsettings.Development.json" %}

```json
{
  "skail": {
    "workload": "faturamento:v1.0.0",
    "namespace": "<namespace do environment>",
    "key": "<chave do environment>",
    "sidecar": "<endereço do skail>"
  }
}
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
Chave, namespace e endereço vêm do environment no portal. Não versione `SKAIL_KEY`; em produção, use o mecanismo de segredos do seu host (variáveis do container, Key Vault, secrets do Kubernetes).
{% endhint %}

## As quatro variáveis

| Variável          | Formato                                             | O que faz                                                                                                                                                                                                                                                                                                                                                                                                   |
| ----------------- | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SKAIL_WORKLOAD`  | `nome:versao`, por exemplo `faturamento:v1.0.0`     | Identifica a aplicação e a versão. O runtime monta o endereço de cada function e command como `nome:versao/NomeDoMetodo`; precisa bater com o workload criado no portal e com o caminho usado no trigger. Mudar a versão muda todos os endereços: ver [Versionamento](/construa/conceitos/versoes-com-execucoes-em-andamento.md). Em TypeScript, também precisa ser igual ao `--workload` do `skail build`. |
| `SKAIL_NAMESPACE` | `tenant/environment` (ids, como aparecem no portal) | Identifica o environment. Enviado em toda chamada no header `skail-namespace`.                                                                                                                                                                                                                                                                                                                              |
| `SKAIL_KEY`       | chave do environment                                | Autentica o runtime. Enviada no header `skail-key`. Segredo.                                                                                                                                                                                                                                                                                                                                                |
| `SKAIL_SIDECAR`   | host ou URL                                         | Endereço do skail com quem o runtime conversa. Copie da aba Connect do environment, junto com o namespace e a chave.                                                                                                                                                                                                                                                                                        |

Com essas quatro a aplicação sobe e passa a receber execuções.

## Execuções ao mesmo tempo

Por padrão, cada processo processa uma execução por vez; as outras prontas para rodar aguardam em Na fila até uma vaga abrir. Para processar mais de uma, configure `SKAIL_MAX_PARALLEL_TASKS` com o número de vagas por processo, por exemplo `8`. A vaga fica ocupada só enquanto a execução roda: uma execução em delay, esperando evento ou esperando uma function filha hiberna e libera a vaga. Os commands que a execução roda em paralelo com `SkailTask.WhenAll` (C#) ou `Skail.whenAll` (TypeScript) usam a vaga da própria execução. Uma function filha é outra execução e ocupa uma vaga enquanto roda. Para crescer além de um processo, suba mais réplicas da aplicação: ver [Como hospedar](/opere/configurar-e-hospedar/container-kubernetes-e-azure.md).

## A URL base da API HTTP

Quem dispara funções (`/api/v1/trigger/...`) e eventos (`/api/v1/fire/...`) de fora usa como URL base da API o mesmo endereço do environment, o valor de `SKAIL_SIDECAR`, com a mesma chave nos headers `Authorization` (`Bearer <chave>`) e `skail-key`, e o mesmo `Skail-namespace`. Quem chama é o seu código de integração (controllers, webhooks, jobs), que guarda esse endereço na própria configuração; nos exemplos da doc ele aparece como `SKAIL_BASE_URL`. Use o endereço sem `/api/v1` no final, porque as duas rotas começam com `/api/v1`.

## Verificando a configuração

Depois de configurar, rode a aplicação. Ela deve subir sem erro e ficar em espera por trabalho; dispare uma function pela API HTTP e a execução aparece no Monitor do environment. Se algo falhar, o log do processo mostra a causa:

| Sintoma                                                                        | Causa provável                                                                                                          |
| ------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| `Unauthenticated` ou HTTP 401 no log                                           | `SKAIL_KEY` vazia ou inválida, ou `SKAIL_NAMESPACE` de outro environment.                                               |
| `There is not Skail runtime available!` (C#)                                   | Faltou `builder.UseSkail()` (ou `services.AddSkail()`).                                                                 |
| `StateMachine not registered.` (C#)                                            | O assembly não tem `[assembly: VisibleToSkailPlatform]`, ou o método decorado não é `async` ou tem a assinatura errada. |
| `Specified method is not supported.` em `SkailTaskMethodBuilder.Create()` (C#) | O pacote de build (`Skail.Platform.Runtime.Build`) não rodou na compilação.                                             |
| Execução aparece no Monitor mas não avança (Na fila)                           | `SKAIL_WORKLOAD` do processo diferente do `nome:versao` usado no caminho do trigger.                                    |
| Execuções demoram em Na fila com a aplicação rodando                           | Todas as vagas do processo ocupadas: `SKAIL_MAX_PARALLEL_TASKS` não definida (padrão 1) ou baixa para o volume.         |
| Trigger aceito mas a execução não aparece no Monitor                           | O sistema que disparou usou a URL base, a chave e o namespace de outro environment; procure a execução lá.              |
| `Manifest workload ... does not match ...` (TypeScript)                        | `SKAIL_WORKLOAD` do processo diferente do `--workload` usado no `skail build`.                                          |
| Runtime não conecta                                                            | `SKAIL_SIDECAR` errado (host, porta ou esquema).                                                                        |

Mais casos em [Troubleshooting](/opere/troubleshooting.md).

## Próximos passos

[Como hospedar](/opere/configurar-e-hospedar/container-kubernetes-e-azure.md) mostra onde colocar essas variáveis em cada modelo de hospedagem, como container e Kubernetes. [Variáveis de ambiente do runtime](/referencia/variaveis-de-ambiente-do-runtime.md) é a referência. [Ambientes e promoção](/opere/configurar-e-hospedar/ambientes-e-promocao.md) explica o que muda entre dev, homologação e produção.
