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

# Configuração de Desenvolvimento com Docker

> Guia completo para configurar o ambiente de desenvolvimento do AirysChat usando Docker e Docker Compose.

# Configuração de Desenvolvimento com Docker

Este guia o ajudará a configurar um ambiente completo de desenvolvimento do AirysChat usando Docker e Docker Compose.

## Pré-requisitos

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

No momento, recomendamos uma versão igual ou superior à seguinte:

```bash theme={null}
$ docker --version
Docker version 25.0.4, build 1a576c5
$ docker compose --version
docker-compose version 2.24.7
```

### Instalar Docker

#### Windows

1. **Baixe o Docker Desktop** de [https://www.docker.com/products/docker-desktop/](https://www.docker.com/products/docker-desktop/)
2. **Execute o instalador** e siga as instruções de configuração
3. **Habilite o backend WSL2** (recomendado)
4. **Reinicie seu computador** quando solicitado

#### macOS

```bash theme={null}
# Opção 1: Download pelo site
# Acesse https://www.docker.com/products/docker-desktop/

# Opção 2: Usando Homebrew
brew install --cask docker
```

#### Linux (Ubuntu/Debian)

```bash theme={null}
# Atualize o índice de pacotes
sudo apt update

# Instale as dependências
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

# Adicione a chave GPG oficial do Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Adicione o repositório do Docker
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Instale o Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Adicione o usuário ao grupo docker
sudo usermod -aG docker $USER

# Inicie o serviço Docker
sudo systemctl start docker
sudo systemctl enable docker
```

<Warning>
  Após adicionar a si mesmo ao grupo docker no Linux, faça logout e login novamente para que as alterações tenham efeito.
</Warning>

## Ambiente de Desenvolvimento

1. **Clone o repositório.**

   ```bash theme={null}
   git clone https://github.com/airyschat/airyschat.git
   ```

2. **Faça uma cópia do arquivo de ambiente de exemplo e modifique-o conforme necessário.**

   ```bash theme={null}
   # Navegue para AirysChat
   cd airyschat
   cp .env.example .env
   # Atualize as senhas do redis e postgres
   nano .env
   # Atualize docker-compose.yaml com a mesma senha do postgres
   nano docker-compose.yaml
   ```

3. **Construa (build) as imagens.**

   ```bash theme={null}
   # Construa a imagem base primeiro
   docker compose build base

   # Construa o servidor e o worker
   docker compose build
   ```

4. **Após construir a imagem ou destruir a stack, você terá que redefinir o banco de dados usando o seguinte comando.**

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

5. **Para executar o app:**

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

   * Acesse o frontend do aplicativo rails visitando `http://0.0.0.0:3000/`
   * Acesse a caixa de entrada do Mailhog visitando `http://0.0.0.0:8025/` (Você receberá todos os e-mails enviados pelo aplicativo aqui)

   #### Login com credenciais

   ```
   url: http://localhost:3000
   user_name: john@acme.inc
   password: Password1!
   ```

6. **Para parar o app:**

   ```bash theme={null}
   docker compose down
   ```

## Executando Testes do RSpec

Para rodar todos os testes completos do RSpec:

```bash theme={null}
docker compose run --rm rails bundle exec rspec
```

Para rodar um teste específico:

```bash theme={null}
docker compose run --rm rails bundle exec rspec spec/<path-to-file>:<line-number>
```

## Ambiente de Produção

Para depurar a compilação (build) de produção localmente, defina a variável de ambiente `SECRET_KEY_BASE` em seu arquivo `.env` e, em seguida, execute os comandos abaixo:

```bash theme={null}
docker compose -f docker-compose.production.yaml build
docker compose -f docker-compose.production.yaml up
```

## Modo de Depuração

Para usar depuradores como `byebug` ou `binding.pry`, use o seguinte comando para iniciar o aplicativo em vez de `docker compose up`:

```bash theme={null}
docker compose run --rm --service-port rails
```

## Fluxo de Trabalho de Desenvolvimento

### Comandos de Desenvolvimento Diário

```bash theme={null}
# Inicie o ambiente de desenvolvimento
docker compose up

# Visualize os logs
docker compose logs -f rails

# Acesse o console Rails
docker compose exec rails bundle exec rails console

# Execute as migrações
docker compose exec rails bundle exec rails db:migrate

# Instale novas gems
docker compose exec rails bundle install

# Reinicie um serviço
docker compose restart rails

# Pare todos os serviços
docker compose down

# Pare e remova volumes (redefine o banco de dados)
docker compose down -v
```

## Resolução de Problemas

Se houver uma atualização em qualquer um dos seguintes:

* `dockerfile`
* `gemfile`
* `package.json`
* alteração no schema (esquema de dados)

Certifique-se de reconstruir os contêineres e executar `db:reset`.

```bash theme={null}
docker compose down
docker compose build
docker compose run --rm rails bundle exec rails db:reset
docker compose up
```

### Problemas Comuns

<Accordion title="O contêiner não inicia">
  **Solução**: Verifique as dependências e os logs do serviço:

  ```bash theme={null}
  # Verifique o status do serviço
  docker compose ps

  # Verifique os logs para serviços específicos
  docker compose logs rails

  # Reinicie o serviço problemático
  docker compose restart rails
  ```
</Accordion>

<Accordion title="Conexão com o banco de dados recusada">
  **Solução**: Certifique-se de que o contêiner do PostgreSQL esteja saudável (healthy):

  ```bash theme={null}
  # Verifique a integridade do postgres
  docker compose exec postgres pg_isready

  # Reinicie o postgres se necessário
  docker compose restart postgres
  ```
</Accordion>

<Accordion title="Porta já está em uso">
  **Solução**: Pare outros serviços que estão usando as mesmas portas:

  ```bash theme={null}
  # Verifique o que está usando a porta 3000
  lsof -i :3000

  # Ou altere as portas no arquivo docker-compose.yaml
  ```
</Accordion>

<Accordion title="Falta de espaço em disco">
  **Solução**: Limpe os recursos do Docker:

  ```bash theme={null}
  # Remova os contêineres, redes e imagens não usados
  docker system prune -f

  # Remova volumes (AVISO: Isso exclui dados)
  docker volume prune -f

  # Remova tudo (opção nuclear)
  docker system prune -a --volumes
  ```
</Accordion>

<Accordion title="Build falha">
  **Solução**: Limpe o cache do Docker e reconstrua (rebuild):

  ```bash theme={null}
  # Limpe o cache da compilação
  docker builder prune

  # Reconstrua sem cache
  docker compose build --no-cache
  ```
</Accordion>

## Obtendo Ajuda

Se você encontrar problemas específicos do Docker:

* **Documentação do Docker**: [https://docs.docker.com/](https://docs.docker.com/)
* **Referência do Docker Compose**: [https://docs.docker.com/compose/](https://docs.docker.com/compose/)
* **Issues do AirysChat**: [GitHub Issues](https://github.com/airyschat/airyschat/issues)
* **Suporte da Comunidade**: [Discord](https://discord.com/invite/cJXdrwS)

***

Seu ambiente de desenvolvimento Docker está agora pronto para desenvolvimento do AirysChat! 🐳
