🧚 Ei! O Beekeeper Studio é uma GUI de banco de dados rápida, moderna e open source Baixar
21 de setembro de 2024 Por Matthew Rathbone

Se você está criando uma aplicação que usa PostgreSQL em produção para armazenar dados, em algum momento provavelmente vai precisar rodar o PostgreSQL para desenvolvimento na sua máquina local.

Às vezes é possível usar algo como SQLite em desenvolvimento e Postgres em produção, mas quando seu app fica sério, você vai querer que os ambientes sejam iguais.

Exemplo de Postgres no Docker para desenvolvimento local

Eu prefiro usar o docker-compose em vez da CLI do docker, mas a escolha é sua. Apresento as duas opções aqui.

Recomendo trocar a imagem usada aqui pela mesma versão que você usa em produção, por exemplo postgres:9.4 em vez de postgres:latest.

PostgreSQL com a CLI do Docker

docker run -d \
  --name psql \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=example \
  -v psql:/var/lib/postgresql/data \
  -p 5555:5432 \
  postgres:latest

Isso vai iniciar seu servidor PostgreSQL e deixá-lo disponível em localhost:5555. Coloque em um script como dev/postgres e execute sempre que iniciar seu app.

PostgreSQL com Docker Compose

Eu prefiro usar o Docker Compose, porque ele facilita mudar a configuração do banco de dados e adicionar mais serviços (ex.: Redis) sempre que eu precisar.

version: '3'
volumes:
  psql:
services:
  psql:
    image: postgres:latest
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: example # only do this in development
    volumes:
      - psql:/var/lib/postgresql/data # save data between restarts
    ports:
      - 5555:5432 # binds port 5555 on your computer to the postgres port!

Novamente, seu banco de dados de desenvolvimento ficará disponível em localhost:5555

Recomendações para desenvolvimento local com Postgres

Recomendamos gerenciar o postgres de desenvolvimento das seguintes formas:

  1. Garanta que você está usando a imagem oficial do Postgres.
  2. Guarde a configuração do postgres em um arquivo do Docker Compose (veja um exemplo abaixo).
  3. Faça commit do arquivo do docker compose no controle de versão (como Git) junto com o código-fonte do projeto.
  4. Faça com que todos do time usem as mesmas configurações do postgres em desenvolvimento.
  5. Faça o bootstrap da sua imagem do postgres (se precisar), usando alguns dos recursos mais avançados da imagem docker.
  6. Não deixe de especificar um volume para o contêiner armazenar os dados, assim eles persistem entre execuções.
  7. Use os recursos nativos da imagem para rodar SQL de bootstrap, definir credenciais e criar bancos de dados.

Docker vs. instalação do Postgres no sistema

É possível simplesmente instalar o Postgres no seu computador. Há builds para os três principais sistemas operacionais. Parece o caminho mais fácil, mas essa abordagem tem alguns problemas.

Problemas de instalar o Postgres no sistema

  • O Postgres vai ficar sempre rodando como serviço do sistema
  • Na prática, só dá para ter uma versão do Postgres instalada e rodando por vez
  • Todo app que precisa do próprio banco Postgres terá que compartilhar a mesma instância
  • Exige acesso root/admin à sua máquina
  • Se você trabalha em equipe, cada setup pode ser um pouco diferente, o que dificulta compartilhar configurações de desenvolvimento.

O Docker resolve (a maioria) desses problemas

Com o Docker, cada projeto em desenvolvimento pode ter seu próprio Postgres fixado na versão correta, com um setup padrão compartilhado entre os colegas de equipe e versionado no controle de código.

O maior problema de rodar o Postgres em um contêiner Docker é, bem, aprender Docker se você nunca usou antes.

Usando Docker para Postgres em produção

Se você usa Docker puro em produção, ter um banco Postgres é bem parecido com a nossa configuração de desenvolvimento

version: '3.8'
volumes:
  psql_data:
    driver: local
services:
  postgres:
    image: postgres:14
    container_name: postgres
    restart: always
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mysecurepassword
      POSTGRES_DB: mydatabase
    volumes:
      - psql_data:/var/lib/postgresql/data
      - ./backups:/backups
    ports:
      - 5432:5432
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U myuser"]
      interval: 30s
      timeout: 10s
      retries: 5

Backup e restauração de bancos Postgres no Docker

O conteúdo abaixo não é um guia completo de como gerenciar Postgres em produção, mas deve servir como ponto de partida para uma estratégia de backup simples.

Em um ambiente de produção, os backups do PostgreSQL podem ser automatizados exportando o banco periodicamente para um arquivo de backup. Isso pode ser feito agendando um cron job ou um contêiner de backup dedicado que execute periodicamente um comando pg_dump para exportar os dados do banco para um diretório (ex.: /backups) montado no sistema host. A pasta backups na configuração acima é montada em um diretório da máquina host, onde os arquivos de backup podem ser armazenados com segurança.

Criando backups do Postgres no Docker

Para uma estratégia de backup básica:

  1. Execute pg_dump para exportar o banco de dados:
    docker exec postgres pg_dump -U myuser mydatabase > ./backups/backup_$(date +%F).sql
    

    Esse comando cria um backup do banco de dados dentro do diretório backups.

  2. Você pode configurar um cron job ou usar outro mecanismo de agendamento para rodar esse comando em intervalos regulares (ex.: diariamente ou semanalmente).
      0 2 * * * docker exec postgres pg_dump -U myuser mydatabase > /path/to/backups/backup_$(date +\%F).sql
    
  3. Envie o backup para o S3 ou outro local de armazenamento semelhante
      aws s3 cp ./backups/backup_$(date +%F).sql s3://your-bucket-name/path/to/backup/
    

    Além disso, você pode configurar o arquivamento de WAL (Write-Ahead Logging) para criar backups contínuos das alterações, permitindo recuperação point-in-time, mas isso foge do escopo deste artigo. Confira a documentação oficial para mais informações.

Restaurando um backup

  1. Baixe o backup do S3
      aws s3 cp s3://your-bucket-name/path/to/backup/backup_YYYY-MM-DD.sql ./backups/
    

    Esse comando baixa o arquivo de backup do S3 para o seu diretório local de backups.

  2. Restaure-o no seu banco de dados
      docker exec -i postgres psql -U myuser -d mydatabase < ./backups/backup_YYYY-MM-DD.sql
    

    Esse comando usa o psql para restaurar o arquivo de backup no seu contêiner PostgreSQL em execução.

Conclusão

Agora você já conhece o básico de como iniciar e gerenciar um contêiner Docker do Postgres. Lembre-se de que há muitas outras coisas necessárias para rodar um cluster Postgres em produção (ex.: monitoramento, alertas), mas esperamos que o conteúdo acima ajude você a começar.

Beekeeper Studio é um cliente de banco de dados gratuito e open source

A melhor ferramenta de consultas e edição de SQL que já usei. Tem tudo o que preciso para gerenciar meu banco de dados. - ⭐⭐⭐⭐⭐ Mit

O Beekeeper Studio é rápido, intuitivo e fácil de usar. Ele suporta vários bancos de dados e funciona muito bem no Windows, Mac e Linux.

A versão do Beekeeper para Linux tem 100% dos recursos, sem atalhos e sem concessões.

O que os usuários dizem sobre o Beekeeper Studio

★★★★★
"O Beekeeper Studio substituiu completamente meu antigo fluxo de trabalho com PostgreSQL. É rápido, intuitivo e torna o trabalho com bancos de dados prazeroso de novo."
— Alex K., desenvolvedor de banco de dados
★★★★★
"Já testei muitas GUIs de banco de dados, mas o Beekeeper encontra o equilíbrio perfeito entre recursos e simplicidade. Simplesmente funciona."
— Sarah M., engenheira full stack

Pronto para melhorar seu fluxo de trabalho com PostgreSQL?

download Baixar grátis