Pular para conteúdo

Instalando o Docker

Primeiramente, baixe o Docker Desktop no site do Docker:

https://www.docker.com/products/docker-desktop/

Nota

Para o sistema operacional Windows, existe duas versões para download, AMD64 e ARM64, contudo o Pix Verifier deve ser executado em uma plataforma AMD64!

Execute o instalador e basta seguir o padrão de instalação Windows (next, next, next e finish).

Preparando os arquivos

Docker Compose

Se você baixou o repositório do Github, localize dentro da pasta onde você baixou, o arquivo docker-compose.yaml, ou crie uma pasta e dentro dela crie um novo arquivo chamado docker-compose.yaml, abra o editor e cole o conteúdo abaixo:

docker-compose.yaml
services:
  pix-verifier:
    image: filipebezerrasantos/pix-verifier:v2.0.0-rc1
    hostname: pix-verifier
    container_name: pix-verifier
    restart: unless-stopped
    environment:
      - TZ=America/Fortaleza
      - DB_HOST=postgres
      - DB_NAME=pixverifier
      - DB_USER=dbadmin
      - DB_PASS=f|Vyi2LjVG8DO7%2)Tz>9PfA&F[2]jQ6
    volumes:
      - pixverifier_certs:/var/www/services/certs
    ports:
      - "80:80"
    networks:
      - pixverifier_network
    depends_on:
      postgres:
        condition: service_healthy 

  postgres:
    container_name: postgres
    image: postgres:16-alpine3.19
    hostname: postgres16
    restart: unless-stopped
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./conf/sql:/docker-entrypoint-initdb.d
    environment:
      - TZ=America/Fortaleza
      - POSTGRES_USER=dbadmin
      - POSTGRES_PASSWORD=f|Vyi2LjVG8DO7%2)Tz>9PfA&F[2]jQ6
    ports:
      - "5432:5432"
    networks:
      - pixverifier_network
    healthcheck:
          test: ["CMD-SHELL", "pg_isready -U dbadmin"]
          interval: 5s
          retries: 5
          start_period: 10s

volumes:
  postgres_data:
    name: postgres_data
  pixverifier_certs:
    name: pixverifier_certs

networks:
  pixverifier_network:
    name: pixverifier_network

Nesse arquivos estamos criando um serviço com dois containers, o postgres que é o nosso banco de dados, e o pix-verifier, que é o sistema em si.

Para melhorar a segurança, sugiro que altere as linhas abaixo no serviço do postgres:

docker-compose.yaml >> postgres
    environment:
        - TZ=America/Fortaleza
        - POSTGRES_USER=dbadmin
        - POSTGRES_PASSWORD=SENHA_BANCO_DE_DADOS

Crie uma senha segura para o Postgres, e coloque esse mesma senha nas variáveis do pix-service:

docker-compose.yaml >> pix-service
    environment:
      - TZ=America/Fortaleza
      - DB_HOST=postgres
      - DB_NAME=pixverifier
      - DB_USER=dbadmin
      - DB_PASS=SENHA_BANCO_DE_DADOS

Com isso finalizamos a configuração dos serviços.


Schema do banco de dados

Na mesma pasta onde criou o docker-compose.yaml, crie uma nova pasta e dentro dela crie um arquivo chamado database.sql e cole o conteúdo abaixo:

database.sql
--
-- PostgreSQL database dump
--

CREATE DATABASE pixverifier;

\c pixverifier

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

SET default_tablespace = '';

SET default_table_access_method = heap;

CREATE TABLE public.bank (
    bankid integer NOT NULL,
    bankname character varying(100) NOT NULL
);

ALTER TABLE public.bank OWNER TO dbadmin;

CREATE TABLE public.bankaccount (
    accountid integer NOT NULL,
    accountname character varying(30) NOT NULL,
    bankid integer NOT NULL,
    branchnumber character varying(10) NOT NULL,
    accountnumber character varying(20) NOT NULL,
    clientid character varying(100),
    clientsecret character varying(100),
    certfile character varying(100),
    certkeyfile character varying(100),
    accesstoken character varying(100),
    tokenexpireat timestamp without time zone,
    ignoredsenders text
);

ALTER TABLE public.bankaccount OWNER TO dbadmin;

CREATE SEQUENCE public.bankaccount_accountid_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER SEQUENCE public.bankaccount_accountid_seq OWNER TO dbadmin;

ALTER SEQUENCE public.bankaccount_accountid_seq OWNED BY public.bankaccount.accountid;

CREATE TABLE public.receivedpix (
    e2eid character varying(100) NOT NULL,
    date timestamp without time zone NOT NULL,
    value numeric(15,2) NOT NULL,
    payer character varying(100) NOT NULL,
    payerdoc character varying(100) NOT NULL,
    description character varying(140),
    payerbank character varying(100) NOT NULL,
    banktransaction text,
    accountid integer NOT NULL
);

ALTER TABLE public.receivedpix OWNER TO dbadmin;

ALTER TABLE ONLY public.bankaccount ALTER COLUMN accountid SET DEFAULT nextval('public.bankaccount_accountid_seq'::regclass);

ALTER TABLE ONLY public.bank
    ADD CONSTRAINT bank_pk PRIMARY KEY (bankid);

ALTER TABLE ONLY public.bankaccount
    ADD CONSTRAINT bankaccount_pk PRIMARY KEY (accountid);

ALTER TABLE ONLY public.receivedpix
    ADD CONSTRAINT receivedpix_pk PRIMARY KEY (e2eid);

CREATE INDEX receivedpix_accountid_idx ON public.receivedpix USING btree (accountid);

ALTER TABLE ONLY public.bankaccount
    ADD CONSTRAINT bankaccount_bank_fk FOREIGN KEY (bankid) REFERENCES public.bank(bankid) ON UPDATE CASCADE ON DELETE CASCADE;

ALTER TABLE ONLY public.receivedpix
    ADD CONSTRAINT receivedpix_bankaccount_fk FOREIGN KEY (accountid) REFERENCES public.bankaccount(accountid) ON UPDATE CASCADE ON DELETE CASCADE;

CREATE TABLE public.users (
    user_id serial PRIMARY KEY,
    username character varying(100) NOT NULL,
    pwd character varying(255) NOT NULL,
    useraccess integer NOT NULL
);

ALTER TABLE public.users OWNER TO dbadmin;

INSERT INTO public.users (username, pwd, useraccess) 
VALUES ('admin', '$2y$10$Ve1qGNP9X.7nThu4LXOwVuWc57jN3PhvYl.b/ABFEuw8nE3LPSDVe', 2);

INSERT INTO public.bank (bankid, bankname)
VALUES (77, 'Banco Inter');

Esse arquivo tem a estrutura do banco dados que o Pix Verifier precisa para funcionar. Ao final sua estrutura de diretórios deve estar mais ou menos assim:

pix-verifier/
├─ sql/
│  ├─ database.sql
├─ docker-compose.yaml

Iniciando o serviço

Primeiramente verifique se o Docker está em execução, depois clique com o botão direito dentro da pasta onde você criou os arquivos, no menu suspenso clique em Abrir no Terminal.

"Abrir terminal do Windows"

Abrindo a janela do terminal estando na mesma pasta dos arquivos criados, é só digitar o comando docker compose up -d e aguardar o download das imagens.

"Baixando imagem dos containers"

Quando terminar o download o Docker vai automaticamente subir os serviços, se você voltar lá no Docker Desktop deverá ver algo semelhante a imagem abaixo, agora acesse no seu navegador http://localhost, se aparecer a página inicial do Pix Verifier significa que os containers subiram corretamente, restando apenas agora a configuração final para começar a funcionar.

"Tela do Docker Desktop com o serviço em execução"

Iniciar o Docker junto ao Windows

No arquivo do docker-compose.yaml os containers estão configurados para iniciarem automaticamente a menos que você dê o comando para para o container, contudo, para que isso funcione o Docker Desktop também precisar ser habilitado junto ao Windows.

Abra o Docker Desktop e clique na engrenagem na barra superior, na tela que foi apresentada marque a caixa que diz Start Docker Desktop when you sign in to your computer e por último clique em Apply & Restart.

"Configurando o Docker para iniciar junto ao Windows"