> ## 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.

# Guia de implantação em Produção do AirysChat com Docker

> Implante o AirysChat usando contêineres Docker para ambientes de produção

## Pré-requisitos

Antes de prosseguir, certifique-se de ter a versão mais recente do `docker` e do `docker-compose` instalada.

A partir de agora \[no momento em que este documento foi escrito], recomendamos uma versão igual ou superior à seguinte.

```bash theme={null}
$ docker --version
Docker version 20.10.10, build b485636
$ docker compose version
Docker Compose version v2.14.1
```

<Note>
  O nome do contêiner usa traços em vez de sublinhados por padrão com as novas versões do docker/compose. Se você estiver usando uma versão mais antiga do docker/compose, substitua `-` por `_`. Além disso, use `docker-compose` em vez de `docker compose`.
</Note>

## Passos para implantar o AirysChat usando docker-compose

### 1. Instale o Docker em sua VM

```bash theme={null}
# exemplo no ubuntu
apt-get update
apt-get upgrade
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
apt install docker-compose-plugin
```

### 2. Baixe os arquivos necessários

```bash theme={null}
# Baixar o template do arquivo de ambiente
wget -O .env https://raw.githubusercontent.com/airyschat/airyschat/develop/.env.example
# Baixar o template do Docker compose
wget -O docker-compose.yaml https://raw.githubusercontent.com/airyschat/airyschat/develop/docker-compose.production.yaml
```

### 3. Configurar variáveis de ambiente

Ajuste o `.env` e o `docker-compose.yaml` de acordo com suas preferências. Consulte as [variáveis de ambiente](/self-hosted/configuration/environment-variables) disponíveis. Você também pode remover os serviços dependentes como `Postgres`, `Redis` etc., em favor de serviços gerenciados configurados via variáveis de ambiente.

```bash theme={null}
# atualizar senhas do redis e postgres
nano .env
# atualizar docker-compose.yaml com a mesma senha do postgres
nano docker-compose.yaml
```

### 4. Preparar o banco de dados

```bash theme={null}
docker compose run --rm rails bundle exec rails db:airyschat_prepare
```

### 5. Iniciar os serviços

```bash theme={null}
docker compose up -d
```

### 6. Acesse sua instalação

Sua instalação do AirysChat está concluída. Observe que os contêineres não estão expostos à internet e eles se vinculam apenas ao host local. Configure algo como Nginx ou qualquer outro servidor proxy para fazer o proxy das solicitações para o contêiner.

Se você quiser verificar se a instalação está funcionando, tente `curl -I localhost:3000/api` para ver se ele retorna `200`. Além disso, você pode descartar temporariamente o `127.0.0.1:3000:3000` para o rails por `3000:3000` no arquivo compose para acessar sua instância em `http://<your-external-ip>:3000`. É recomendável reverter essa alteração e usar o Nginx ou algum servidor proxy na frente.

## Etapas Adicionais

1. Tenha um servidor web `Nginx` atuando como um proxy reverso para a instalação do AirysChat. Para que você possa acessar o AirysChat a partir de `https://chat.yourdomain.com`
2. Execute `docker compose run --rm rails bundle exec rails db:airyschat_prepare` sempre que você decidir atualizar as imagens do AirysChat para lidar com as migrações.

### Configurar o Nginx e Let's Encrypt

#### 1. Configure o Nginx para servir como um proxy frontend

```bash theme={null}
sudo apt-get install nginx
cd /etc/nginx/sites-enabled
nano yourdomain.com.conf
```

#### 2. Use a seguinte configuração do Nginx

Use a seguinte configuração do Nginx após substituir `yourdomain.com` em `server_name`.

```nginx theme={null}
server {
  server_name <yourdomain.com>;

  # Aponta o upstream para o Servidor de Aplicativo AirysChat
  set $upstream 127.0.0.1:3000;

  # Nginx remove o sublinhado nos cabeçalhos por padrão
  # AirysChat depende de sublinhado nos cabeçalhos para a API
  # Certifique-se de que a configuração esteja definida como on.
  underscores_in_headers on;
  location /.well-known {
    alias /var/www/ssl-proof/airyschat/.well-known;
  }

  location / {
    proxy_pass_header Authorization;
    proxy_pass http://$upstream;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Ssl on; # Opcional

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_http_version 1.1;
    proxy_buffering off;

    client_max_body_size 0;
    proxy_read_timeout 36000s;
    proxy_redirect off;
  }
  listen 80;
}
```

#### 3. Verificar e recarregar a configuração do Nginx

```bash theme={null}
nginx -t
systemctl reload nginx
```

#### 4. Execute o Let's Encrypt para configurar o certificado SSL

```bash theme={null}
apt install certbot
apt-get install python3-certbot-nginx
mkdir -p /var/www/ssl-proof/airyschat/.well-known
certbot --webroot -w /var/www/ssl-proof/airyschat/ -d yourdomain.com -i nginx
```

#### 5. Acesse sua instalação

Sua instalação do AirysChat deve estar acessível em `https://yourdomain.com` agora.

## Passos para construir imagens você mesmo

Nós publicamos nossas imagens base no Docker hub. Você deve ser capaz de construir suas imagens web/worker do AirysChat a partir dessas imagens base.

### Web

```dockerfile theme={null}
FROM airyschat/airyschat:latest
RUN chmod +x docker/entrypoints/rails.sh
ENTRYPOINT ["docker/entrypoints/rails.sh"]
CMD bundle exec bundle exec rails s -b 0.0.0.0 -p 3000
```

### Worker

```dockerfile theme={null}
FROM airyschat/airyschat:latest
RUN chmod +x docker/entrypoints/rails.sh
ENTRYPOINT ["docker/entrypoints/rails.sh"]
CMD bundle exec sidekiq -C config/sidekiq.yml
```

Os servidores de aplicativo serão executados disponíveis na porta `3000`. Certifique-se de que as imagens se conectem aos mesmos servidores de banco de dados e Redis. Forneça a configuração para esses serviços por meio de [variáveis de ambiente](/self-hosted/configuration/environment-variables).

### Configuração inicial do banco de dados

Para configurar o banco de dados pela primeira vez, você deve executar `rails db:airyschat_prepare`. Você pode obter erros se tentar executar `rails db:migrate` neste ponto.

## Atualizando

Se você não estiver usando a tag `latest` ou `latest-ce`, primeiro você precisa alterar a tag desejada em seu arquivo docker-compose.

Depois disso você pode baixar a nova imagem e começar a usá-las:

```bash theme={null}
docker compose pull
docker compose up -d
```

Finalmente você pode precisar atualizar o banco de dados:

```bash theme={null}
docker compose run --rm rails bundle exec rails db:airyschat_prepare
```

## Executando o Console do Rails

```bash theme={null}
docker exec -it $(basename $(pwd))-rails-1 sh -c 'RAILS_ENV=production bundle exec rails c'
```

## Imagens docker do AirysChat CE edition

Se você quiser executar a edição AirysChat CE, substitua a tag da imagem do docker pela tag da versão foss equivalente. A tag do docker para a versão atual `master` seria `latest-ce`. Tags específicas de versão seguiriam o padrão `v*-ce`. Por exemplo, a tag da edição ce do docker para o AirysChat `v2.3.2` seria `v2.3.2-ce`.
