Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementação para setup com docker compose #7

Merged
merged 2 commits into from
Jul 17, 2024

Conversation

mffonseca
Copy link
Collaborator

@mffonseca mffonseca commented Jul 14, 2024

Descrição

Este pull request introduz a configuração de Docker Compose para o projeto. A principal melhoria é a capacidade de orquestrar múltiplos serviços, como PostgreSQL, pgAdmin e Jaeger, facilitando o processo de desenvolvimento e testes.

Mudanças Realizadas

  1. Configuração do Docker Compose:
    • Adicionado um arquivo docker-compose.yml que define e configura os serviços necessários: PostgreSQL, pgAdmin, Jaeger e a aplicação principal.
    • Criação de um script de entrada (entrypoint.sh) para gerenciar a execução das migrações do banco de dados antes de iniciar a aplicação.

Arquivos Adicionados/Modificados

  • docker-compose.yml: Definição dos serviços e suas configurações.
  • entrypoint.sh: Script de inicialização para executar migrações e iniciar a aplicação.
  • Dockerfile: Arquivo de configuração Docker para a aplicação principal.

Mudanças Detalhadas

  • docker-compose.yml:

    • Definido os serviços postgres, pgadmin, jaeger e app.
    • Configurações de ambiente e volumes para cada serviço.
    • Dependências configuradas para garantir a ordem correta de inicialização dos serviços.
  • entrypoint.sh:

    • Script que executa go run cmd/migrate/main.go para aplicar migrações no banco de dados.
    • Inicia a aplicação principal com go run cmd/api/main.go utilizando reflex para monitorar mudanças no código.
  • Dockerfile:

    • Instalação da ferramenta reflex.
    • Configuração do ponto de entrada para utilizar entrypoint.sh.

Antes e Depois

Antes

Não havia uma configuração padronizada e automatizada para orquestrar múltiplos serviços, dificultando o processo de desenvolvimento e testes.

Depois

Com o Docker Compose, todos os serviços necessários são configurados e orquestrados automaticamente, facilitando o desenvolvimento e testes da aplicação.

Motivação e Contexto

A configuração manual de múltiplos serviços e dependências pode ser trabalhosa e propensa a erros. Usando Docker Compose, podemos definir e gerenciar todos os serviços necessários em um único arquivo, simplificando o processo de desenvolvimento e testes.

Como Isso Foi Testado?

  • Testado manualmente executando docker-compose up e verificando se todos os serviços foram iniciados corretamente.
  • Verificação das migrações aplicadas e da aplicação principal funcionando conforme esperado.
  • Acesso à interface do pgAdmin e Jaeger para confirmar a configuração correta.

Issue Relacionada

Tipos de Mudanças

  • Correção de bug (mudança que não quebra a compatibilidade e corrige um problema)
  • Nova funcionalidade (mudança que não quebra a compatibilidade e adiciona uma funcionalidade)
  • Mudança que quebra a compatibilidade (correção ou funcionalidade que causa uma mudança em funcionalidades existentes)

Checklist

  • Meu código segue o estilo de código deste projeto.
  • Minha mudança requer uma mudança na documentação.
  • Eu atualizei a documentação conforme necessário.
  • Eu adicionei testes para cobrir minhas mudanças.
  • Todos os novos e antigos testes passaram.

Notas Adicionais

  • Para acessar o pgAdmin, use o endereço http://localhost:5050 com as credenciais admin@admin.com / admin.
  • Para acessar o Jaeger, use o endereço http://localhost:16686.
  • Certifique-se de ter o Docker e Docker Compose instalados e configurados corretamente.

Arquivo docker-compose.yml

version: '3.9'

services:
  postgres:
    image: postgres:13
    container_name: postgres
    environment:
      POSTGRES_USER: userpostgres
      POSTGRES_PASSWORD: passwordpostgres
      POSTGRES_DB: faladev
    ports:
      - "5432:5432"
    volumes:
      - postgres-data:/var/lib/postgresql/data

  pgadmin:
    image: dpage/pgadmin4
    container_name: pgadmin
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@admin.com
      PGADMIN_DEFAULT_PASSWORD: admin
    ports:
      - "5050:80"
    volumes:
      - ./servers.json:/pgadmin4/servers.json

  jaeger:
    image: jaegertracing/all-in-one:1.31
    container_name: jaeger
    ports:
      - "5775:5775/udp"
      - "6831:6831/udp"
      - "6832:6832/udp"
      - "5778:5778"
      - "16686:16686"
      - "14268:14268"
      - "14250:14250"
      - "9411:9411"

  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: faladev
    environment:
      DB_HOST: postgres
      DB_PORT: 5432
      DB_USER: userpostgres
      DB_PASSWORD: passwordpostgres
      DB_NAME: faladev
      DATABASE_URL: postgres://userpostgres:passwordpostgres@postgres:5432/faladev?sslmode=disable
      OTEL_EXPORTER_JAEGER_ENDPOINT: http://jaeger:14268/api/traces
    ports:
      - "8080:8080"
    volumes:
      - .:/app
    depends_on:
      - postgres
      - jaeger

volumes:
  postgres-data:

@mffonseca mffonseca changed the title Feature/docker compose setup Implementação para setup com docker compose Jul 14, 2024
@@ -13,8 +13,6 @@ func main() {

db := database.GetDB()

db.Exec("CREATE DATABASE faladev;")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Talvez podemos manter essa linha usando um workaround para o postgres para criar o banco somente se ele não existir, pra melhorar a DevEx.

SELECT 'CREATE DATABASE mydb'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'mydb')\gexec

Fonte: https://stackoverflow.com/questions/18389124/simulate-create-database-if-not-exists-for-postgresql

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tenlisboa a ideia é subir tudo pelo docker-compose. O docker compose já cria a base.

@mffonseca mffonseca merged commit 932c979 into main Jul 17, 2024
1 check passed
@Guilhermefariah Guilhermefariah deleted the feature/docker-compose-setup branch December 19, 2024 20:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants