Pular para o conteúdo principal

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:
$ 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/
  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

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

# 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
Após adicionar a si mesmo ao grupo docker no Linux, faça logout e login novamente para que as alterações tenham efeito.

Ambiente de Desenvolvimento

  1. Clone o repositório.
    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.
    # 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.
    # 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.
    docker compose run --rm rails bundle exec rails db:airyschat_prepare
    
  5. Para executar o app:
    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:
    docker compose down
    

Executando Testes do RSpec

Para rodar todos os testes completos do RSpec:
docker compose run --rm rails bundle exec rspec
Para rodar um teste específico:
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:
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:
docker compose run --rm --service-port rails

Fluxo de Trabalho de Desenvolvimento

Comandos de Desenvolvimento Diário

# 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.
docker compose down
docker compose build
docker compose run --rm rails bundle exec rails db:reset
docker compose up

Problemas Comuns

Solução: Verifique as dependências e os logs do serviço:
# 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
Solução: Certifique-se de que o contêiner do PostgreSQL esteja saudável (healthy):
# Verifique a integridade do postgres
docker compose exec postgres pg_isready

# Reinicie o postgres se necessário
docker compose restart postgres
Solução: Pare outros serviços que estão usando as mesmas portas:
# Verifique o que está usando a porta 3000
lsof -i :3000

# Ou altere as portas no arquivo docker-compose.yaml
Solução: Limpe os recursos do Docker:
# 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
Solução: Limpe o cache do Docker e reconstrua (rebuild):
# Limpe o cache da compilação
docker builder prune

# Reconstrua sem cache
docker compose build --no-cache

Obtendo Ajuda

Se você encontrar problemas específicos do Docker:
Seu ambiente de desenvolvimento Docker está agora pronto para desenvolvimento do AirysChat! 🐳