DEV Community

Marcio Vinicius
Marcio Vinicius

Posted on

Parte 2: Resolvendo o Desafio Técnico de Backend do PicPay

Iniciando o projeto. Pra iniciar o projeto, use o comando

npm init -y

Por que usaremos o docker para o banco?

Ao inves de instalar o postgres na nossa maquina(é um inferno instalar isso), a gente subimos ele pra dentro de um container, um ambiente isolado, facil de criar e destruir, e o melhor, ja vem tudo configurado kaka.

O arquivo que vamos criar é o docker-compose.yml

Esse arquivo vai descrever os "serviços" que vamos rodar, que por enquanto é so o banco. Esse arquivo fica na raiz do projeto.

docker run:
Você quer subir um container do Postgres. Com docker run, você precisaria digitar um comando gigante toda vez, tipo:
docker run -d --name meu-postgres -e POSTGRES_PASSWORD=123 -e POSTGRES_DB=picpay -p 5432:5432 postgres

Funciona? funciona, mas é chato e facil de errar, sem contar que nao escala quando tu tem varios containers.

docker compose:
ele ja resolve isso. Quando tu escreve o arquivo docker-compose.yml descrevendo o que voce quer rodar, e o Docker ele cuida de criar/subir parar tudo com um unico comando.

vamos colocar nele só o serviço do banco de dados Postgres. Pra isso, precisamos definir:

-Qual imagem usar (a "base" do container, no caso, postgres)
-Variáveis de ambiente (usuário, senha, nome do banco o Postgres usa isso pra se configurar sozinho na primeira vez que sobe)
-Porta (pra você conseguir acessar o banco de fora do container, tipo pelo Prisma)
-Volume (pra os dados não sumirem quando você reiniciar o container)

vamos criar o docker-compose.yml

services:
  db:
    image: postgres:16
    container_name: picpay_db
    restart: always
    environment:
      POSTGRES_USER: picpay
      POSTGRES_PASSWORD: picpay123
      POSTGRES_DB: picpay_simplificado
    ports:
      - "5432:5432"
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:
Enter fullscreen mode Exit fullscreen mode

services: Lista dos "programas" que vamos rodar. Por enquanto só um: o banco.

db: Nome que você escolheu pra esse serviço (podia ser qualquer nome, tipo banco ou postgres). Vamos usar esse nome depois pra referenciar o banco.

image: postgres:16 Diz "use a imagem oficial do Postgres, versão 16" — o Docker baixa isso automaticamente do Docker Hub.

container_name: picpay_db Nome do container quando você rodar docker ps — só facilita identificar.

restart: always Se o container cair ou você reiniciar o PC, ele sobe de novo sozinho.

environment: Variáveis que o Postgres lê na primeira inicialização pra se auto-configurar.

POSTGRES_USER/PASSWORD/DB Usuário, senha e nome do banco que serão criados automaticamente. Guarda esses valores, vamos usar no .env do Prisma daqui a pouco.

ports: "5432:5432" Formato porta_da_sua_máquina:porta_do_container. Isso permite você (ou o Prisma) acessar o banco em localhost:5432.

volumes: (dentro de db) Liga uma pasta dentro do container a um "volume" gerenciado pelo Docker, pra não perder os dados quando o container for recriado.

volumes: (no final, fora de db) Declaração do volume db_data que foi referenciado acima — é o Docker que cuida de onde isso fica salvo de verdade.

Vamos subir tudo isso para o banco.

Crie o arquivo docker-compose.yml na raiz do projeto, na mesma pasta onde fica o package.json.
Depois rode:

docker compose up -d

docker compose up → lê o docker-compose.yml e sobe os serviços descritos nele

-d → "detached", ou seja, roda em segundo plano

Por hoje é so isso, te vejo na proxima!

Top comments (0)