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.
helm repo add airyschat https://airyschat.github.io/charts
helm install airyschat airyschat/airyschat
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.
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 lista os parâmetros que podem ser configurados durante a instalação.
Liste todos os releases usando helm list
Desinstalando o chart
Para desinstalar/excluir a implantação airyschat:
O comando remove todos os componentes do Kubernetes associados ao chart e exclui a release.
Volumes persistentes não são excluídos automaticamente. Eles precisam ser removidos manualmente.
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 | "" |
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 |
Especifique cada parâmetro usando o argumento --set key=value[,key=value] no helm install. Por exemplo,
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,
helm install my-release -f values.yaml airyschat/airyschat
Você pode usar o arquivo values.yaml padrão.
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.
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.
# 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
# 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
Certifique-se de que os “Persistent Volume Claims” possam ser satisfeitos. Consulte pré-requisitos.
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 para saber mais.