> ## Documentation Index
> Fetch the complete documentation index at: https://docs.airys.chat/llms.txt
> Use this file to discover all available pages before exploring further.

# Implantar o AirysChat no Kubernetes usando Helm Charts

> Implante o AirysChat no Kubernetes usando nossos Helm charts oficiais

Este guia o ajudará a implantar uma instância do AirysChat pronta para produção com Helm Charts.

Para experimentar rapidamente os charts, siga as duas etapas abaixo. Para uma implantação em produção, certifique-se de passar os argumentos necessários para o helm usando seu arquivo `values.yaml` personalizado.

```bash theme={null}
helm repo add airyschat https://airyschat.github.io/charts
helm install airyschat airyschat/airyschat
```

<iframe frameborder="0" scrolling="no" marginheight="0" marginwidth="0" width="100%" height="443" type="text/html" src="https://www.youtube-nocookie.com/embed/o1jnYfy8CCo" />

## Pré-requisitos

* Kubernetes 1.16+
* Helm 3.1.0+
* Suporte a provisionador de PV na infraestrutura subjacente

A instalação do helm criará 3 "Persistent Volume Claims" para redis, rails e postgres. Configure um "Storage Class" padrão (para PV automático) ou crie 3 "Persistent Volumes" com o tamanho de 8 GB, antes de instalar o airyschat. Se os "Persistent Volume Claims" não reivindicarem os "Persistent Volumes", deixe o storageClassName em branco (dentro dos arquivos .yaml do PV).

## Instalando o chart

Para instalar o chart com o nome da release `airyschat`, use o seguinte. Para implantá-lo no namespace `airyschat`, passe `-n airyschat` no comando.

```bash theme={null}
helm install airyschat airyschat/airyschat -f <your-custom-values.yaml> #-n airyschat
```

O comando implanta o AirysChat no cluster Kubernetes na configuração padrão. A seção de [parâmetros](#parameters) lista os parâmetros que podem ser configurados durante a instalação.

<Tip>
  Liste todos os releases usando `helm list`
</Tip>

## Desinstalando o chart

Para desinstalar/excluir a implantação `airyschat`:

```bash theme={null}
helm delete airyschat
```

O comando remove todos os componentes do Kubernetes associados ao chart e exclui a release.

<Note>
  Volumes persistentes não são excluídos automaticamente. Eles precisam ser removidos manualmente.
</Note>

## Parâmetros

### Parâmetros da imagem do AirysChat

| Nome               | Descrição                                                    | Valor                 |
| ------------------ | ------------------------------------------------------------ | --------------------- |
| `image.repository` | Repositório da imagem do AirysChat                           | `airyschat/airyschat` |
| `image.tag`        | Tag da imagem do AirysChat (tags imutáveis são recomendadas) | `v2.16.0`             |
| `image.pullPolicy` | Política de pull da imagem do AirysChat                      | `IfNotPresent`        |

### Variáveis de Ambiente do AirysChat

| Nome                                  | Tipo                                                                                                                                                                                                                            | Valor Padrão                                    |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| `env.ACTIVE_STORAGE_SERVICE`          | Serviço de armazenamento. `local` para disco. `amazon` para s3.                                                                                                                                                                 | `"local"`                                       |
| `env.ASSET_CDN_HOST`                  | Definir se um CDN é usado para entrega de assets.                                                                                                                                                                               | `""`                                            |
| `env.INSTALLATION_ENV`                | Define o método de instalação do airyschat.                                                                                                                                                                                     | `"helm"`                                        |
| `env.ENABLE_ACCOUNT_SIGNUP`           | `true` : permite cadastros, `false` : (opção padrão) desativa todos os endpoints relacionados a cadastros, `api_only`: desativa a interface do usuário para cadastro, mas você pode criar cadastros por meio das APIs da conta. | `"false"`                                       |
| `env.FORCE_SSL`                       | Forçar todo acesso ao aplicativo por SSL, o padrão é definido como false.                                                                                                                                                       | `"false"`                                       |
| `env.FRONTEND_URL`                    | Substitua pela URL que você planeja usar para o seu aplicativo.                                                                                                                                                                 | `"http://0.0.0.0:3000/"`                        |
| `env.IOS_APP_ID`                      | Altere esta variável apenas se estiver usando uma build personalizada para o aplicativo móvel.                                                                                                                                  | `"6C953F3RX2.com.airyschat.app"`                |
| `env.ANDROID_BUNDLE_ID`               | Altere esta variável apenas se estiver usando uma build personalizada para o aplicativo móvel.                                                                                                                                  | `"com.airyschat.app"`                           |
| `env.ANDROID_SHA256_CERT_FINGERPRINT` | Altere esta variável apenas se estiver usando uma build personalizada para o aplicativo móvel.                                                                                                                                  | `"AC:73:8E:DE:EB:5............"`                |
| `env.MAILER_SENDER_EMAIL`             | O e-mail do qual todos os e-mails de saída são enviados.                                                                                                                                                                        | `""`                                            |
| `env.RAILS_ENV`                       | Define o ambiente rails.                                                                                                                                                                                                        | `"production"`                                  |
| `env.RAILS_MAX_THREADS`               | Número de threads que cada worker usará.                                                                                                                                                                                        | `"5"`                                           |
| `env.SECRET_KEY_BASE`                 | Usado para verificar a integridade de cookies assinados. Certifique-se de definir um valor seguro.                                                                                                                              | `replace_with_your_super_duper_secret_key_base` |
| `env.SENTRY_DSN`                      | Nome da fonte de dados do Sentry.                                                                                                                                                                                               | `""`                                            |
| `env.SMTP_ADDRESS`                    | Defina seu endereço smtp.                                                                                                                                                                                                       | `""`                                            |
| `env.SMTP_AUTHENTICATION`             | Valores permitidos: `plain`, `login`, `cram_md5`                                                                                                                                                                                | `"plain"`                                       |
| `env.SMTP_ENABLE_STARTTLS_AUTO`       | Padrão é true.                                                                                                                                                                                                                  | `"true"`                                        |
| `env.SMTP_OPENSSL_VERIFY_MODE`        | Pode ser: `none`, `peer`, `client_once`, `fail_if_no_peer_cert`                                                                                                                                                                 | `"none"`                                        |
| `env.SMTP_PASSWORD`                   | Senha SMTP                                                                                                                                                                                                                      | `""`                                            |
| `env.SMTP_PORT`                       | Porta SMTP                                                                                                                                                                                                                      | `"587"`                                         |
| `env.SMTP_USERNAME`                   | Nome de usuário SMTP                                                                                                                                                                                                            | `""`                                            |
| `env.USE_INBOX_AVATAR_FOR_BOT`        | Personalizações do bot                                                                                                                                                                                                          | `"true"`                                        |

### Configuração de e-mail para continuidade da conversa (e-mails recebidos)

| Nome                               | Tipo                                                                                                                                                            | Valor Padrão |
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
| `env.MAILER_INBOUND_EMAIL_DOMAIN`  | Este é o domínio definido para os e-mails de resposta quando a continuidade da conversa está habilitada.                                                        | `""`         |
| `env.RAILS_INBOUND_EMAIL_SERVICE`  | Defina isso para o canal de entrada apropriado em relação aos e-mails recebidos. Valores possíveis são `relay`, `mailgun`, `mandrill`, `postmark` e `sendgrid`. | `""`         |
| `env.RAILS_INBOUND_EMAIL_PASSWORD` | Senha para o serviço de e-mail.                                                                                                                                 | `""`         |
| `env.MAILGUN_INGRESS_SIGNING_KEY`  | Defina se estiver usando mailgun para conversas recebidas.                                                                                                      | `""`         |
| `env.MANDRILL_INGRESS_API_KEY`     | Defina se estiver usando mandrill para conversas recebidas.                                                                                                     | `""`         |

### Variáveis do Postgres

| Nome                               | Tipo                                                                          | Valor Padrão           |
| ---------------------------------- | ----------------------------------------------------------------------------- | ---------------------- |
| `postgresql.enabled`               | Defina como `false` se usar postgres externo e modifique as variáveis abaixo. | `true`                 |
| `postgresql.auth.database`         | Nome do banco de dados do AirysChat                                           | `airyschat_production` |
| `postgresql.postgresqlHost`        | Host do Postgres. Edite se usar postgres externo.                             | `""`                   |
| `postgresql.auth.postgresPassword` | Senha do Postgres. Edite se usar postgres externo.                            | `postgres`             |
| `postgresql.postgresqlPort`        | Porta do Postgres                                                             | `5432`                 |
| `postgresql.auth.username`         | Nome de usuário do Postgres.                                                  | `postgres`             |

### Variáveis do Redis

| Nome                             | Tipo                                                                                 | Valor Padrão |
| -------------------------------- | ------------------------------------------------------------------------------------ | ------------ |
| `redis.auth.password`            | Senha usada para o cluster redis interno                                             | `redis`      |
| `redis.enabled`                  | Defina como `false` se usar redis externo e modifique as variáveis abaixo.           | `true`       |
| `redis.host`                     | Nome do host Redis                                                                   | `""`         |
| `redis.port`                     | Porta Redis                                                                          | `""`         |
| `redis.password`                 | Senha Redis                                                                          | `""`         |
| `env.REDIS_TLS`                  | Defina como `true` se o TLS (`rediss://`) for necessário                             | `false`      |
| `env.REDIS_SENTINELS`            | O Sentinel do Redis pode ser usado passando uma lista de hosts e portas do sentinel. | `""`         |
| `env.REDIS_SENTINEL_MASTER_NAME` | O nome mestre do sentinel do Redis é necessário ao usar o sentinel.                  | `""`         |

### Variáveis de registro (Logging)

| Nome                      | Tipo   | Valor Padrão |
| ------------------------- | ------ | ------------ |
| `env.RAILS_LOG_TO_STDOUT` | string | `"true"`     |
| `env.LOG_LEVEL`           | string | `"info"`     |
| `env.LOG_SIZE`            | string | `"500"`      |

### Credenciais de terceiros

| Nome                          | Tipo                                                                                                                  | Valor Padrão |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------- | ------------ |
| `env.S3_BUCKET_NAME`          | Nome do bucket S3                                                                                                     | `""`         |
| `env.AWS_ACCESS_KEY_ID`       | ID da chave de acesso da Amazon                                                                                       | `""`         |
| `env.AWS_REGION`              | Região da Amazon                                                                                                      | `""`         |
| `env.AWS_SECRET_ACCESS_KEY`   | Chave secreta da Amazon                                                                                               | `""`         |
| `env.FB_APP_ID`               | Para canal do facebook [https://www.airyschat.com/docs/facebook-setup](https://www.airyschat.com/docs/facebook-setup) | `""`         |
| `env.FB_APP_SECRET`           | Para canal do facebook                                                                                                | `""`         |
| `env.FB_VERIFY_TOKEN`         | Para canal do facebook                                                                                                | `""`         |
| `env.SLACK_CLIENT_ID`         | Para integração do slack                                                                                              | `""`         |
| `env.SLACK_CLIENT_SECRET`     | Para integração do slack                                                                                              | `""`         |
| `env.TWITTER_APP_ID`          | Para canal do twitter                                                                                                 | `""`         |
| `env.TWITTER_CONSUMER_KEY`    | Para canal do twitter                                                                                                 | `""`         |
| `env.TWITTER_CONSUMER_SECRET` | Para canal do twitter                                                                                                 | `""`         |
| `env.TWITTER_ENVIRONMENT`     | Para canal do twitter                                                                                                 | `""`         |

### Escalonamento Automático (Autoscaling)

| Nome                      | Tipo                                                  | Valor Padrão |
| ------------------------- | ----------------------------------------------------- | ------------ |
| `web.hpa.enabled`         | Horizontal Pod Autoscaling para o web do AirysChat    | `false`      |
| `web.hpa.cputhreshold`    | Limite de CPU para o web do AirysChat                 | `80`         |
| `web.hpa.minpods`         | Número mínimo de pods para o web do AirysChat         | `1`          |
| `web.hpa.maxpods`         | Número máximo de pods para o web do AirysChat         | `10`         |
| `web.replicaCount`        | Nº de pods web se o hpa não estiver habilitado        | `1`          |
| `worker.hpa.enabled`      | Horizontal Pod Autoscaling para o worker do AirysChat | `false`      |
| `worker.hpa.cputhreshold` | Limite de CPU para o worker do AirysChat              | `80`         |
| `worker.hpa.minpods`      | Número mínimo de pods para o worker do AirysChat      | `2`          |
| `worker.hpa.maxpods`      | Número máximo de pods para o worker do AirysChat      | `10`         |
| `worker.replicaCount`     | Nº de pods worker se o hpa não estiver habilitado     | `1`          |

## Instalar com parâmetros personalizados

Especifique cada parâmetro usando o argumento `--set key=value[,key=value]` no `helm install`. Por exemplo,

```bash theme={null}
helm install my-release \
  --set env.FRONTEND_URL="chat.yourdomain.com"\
    airyschat/airyschat
```

O comando acima define a URL do frontend do servidor AirysChat para `chat.yourdomain.com`.

Como alternativa, um arquivo YAML que especifica os valores para os parâmetros pode ser fornecido durante a instalação do chart. Por exemplo,

```bash theme={null}
helm install my-release -f values.yaml airyschat/airyschat
```

<Tip>
  Você pode usar o arquivo `values.yaml` padrão.
</Tip>

## Postgres

O PostgreSQL é instalado junto com o chart se você escolher a configuração padrão. Para usar um BD Postgres externo, defina `postgresql.enabled` como `false` e defina as variáveis na seção do Postgres acima.

## Redis

O Redis é instalado junto com o chart se você escolher a configuração padrão. Para usar um BD Redis externo, defina `redis.enabled` como `false` e defina as variáveis na seção do Redis acima.

## Escalonamento Automático

Para habilitar o escalonamento horizontal de pods, defina `web.hpa.enabled` e `worker.hpa.enabled` como `true`. Certifique-se também de descomentar os valores em, `resources.limits` e `resources.requests`. Isso pressupõe que o seu cluster k8s já tenha um metrics-server. Caso contrário, implante o metrics-server com o seguinte comando.

```bash theme={null}
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
```

## Atualizando

Faça `helm repo update` e verifique a versão dos charts que será instalada. Os Helm charts seguem o versionamento semântico, portanto, se a versão MAIOR (MAJOR) for diferente da versão instalada, pode haver alterações de quebra (breaking changes). Consulte o changelog antes de atualizar.

```bash theme={null}
# atualizar repositórios helm
helm repo update
# listar a versão instalada atualmente
helm list
# mostrar a versão mais recente dos charts que será instalada
helm search repo airyschat
```

```bash theme={null}
# se for uma atualização de versão maior, consulte o changelog antes de prosseguir
helm upgrade airyschat airyschat/airyschat -f <your-custom-values>.yaml
```

## Solução de problemas

### pod has unbound immediate PersistentVolumeClaims

Certifique-se de que os "Persistent Volume Claims" possam ser satisfeitos. Consulte [pré-requisitos](#prerequisites).

### ActionController::InvalidAuthenticityToken HTTP Origin header

```
ActionController::InvalidAuthenticityToken HTTP Origin header (https://mydomain.com) didn't match request.base_url (http://mydomain.com)
```

Se você estiver recebendo o erro acima ao tentar acessar o painel de superadmin, configure seu ingress controller para encaminhar o protocolo da solicitação de origem. Para o ingress `nginx`, você pode fazer isso definindo a configuração `proxy_set_header X-Forwarded-Proto https;`. Consulte esta [issue](https://github.com/airyschat/airyschat/issues/5506) para saber mais.
