|
| 1 | +# Desenvolvimento local |
| 2 | + |
| 3 | +Esse documento contém algumas dicas para auxiliar no desenvolvimento local. |
| 4 | + |
| 5 | +## Migrando de banco de dados |
| 6 | + |
| 7 | +Se alguém fez uma atualização do postgres nesse repositório e você já tinha dados rodando na versão anterior, ainda não |
| 8 | +atualize o código, pois o novo `compose.yml` irá definir o serviço `db` com a nova versão e seus dados estarão na |
| 9 | +antiga, o que gerará um conflito. Antes de atualizar o código, pare todos os containers e crie pastas para o banco |
| 10 | +antigo: |
| 11 | + |
| 12 | +```shell |
| 13 | +docker compose down |
| 14 | +cp -r docker/conf/db docker/conf/olddb |
| 15 | +cp -r docker/env/db docker/env/olddb |
| 16 | +mv docker/data/db docker/data/olddb |
| 17 | +mkdir docker/data/db |
| 18 | +``` |
| 19 | + |
| 20 | +Abra o `compose.yml`, copie a definição do serviço `db` e cole-o em outro arquivo temporário. Por exemplo, se a versão |
| 21 | +antiga era `postgres:15-bullseye`, adicione o seguinte: |
| 22 | + |
| 23 | +```yaml |
| 24 | + olddb: |
| 25 | + image: "postgres:15-bullseye" |
| 26 | + env_file: |
| 27 | + - "docker/env/olddb" |
| 28 | + - "docker/env/olddb.local" |
| 29 | + user: "${UID:-1000}:${GID:-1000}" |
| 30 | + shm_size: "4g" |
| 31 | + command: -c "config_file=/etc/postgresql/postgresql.conf" |
| 32 | + volumes: |
| 33 | + - ${PWD}/docker/data/olddb:/var/lib/postgresql/data |
| 34 | + - ${PWD}/docker/conf/olddb/postgresql.dev.conf:/etc/postgresql/postgresql.conf |
| 35 | + healthcheck: |
| 36 | + test: ["CMD-SHELL", "pg_isready -U postgres"] |
| 37 | + interval: 3s |
| 38 | + retries: 5 |
| 39 | +``` |
| 40 | +
|
| 41 | +Com o serviço de banco antigo definido, faça a atualização de código: |
| 42 | +
|
| 43 | +```shell |
| 44 | +git pull |
| 45 | +``` |
| 46 | + |
| 47 | +Edite o seu arquivo `compose.yml` atualizado e inclua o serviço `db` que você copiou na etapa anterior, mas dê o nome |
| 48 | +de `olddb` e nele troque as seguintes referências: |
| 49 | +- `docker/conf/db` para `docker/conf/olddb` |
| 50 | +- `docker/data/db` para `docker/data/olddb` |
| 51 | +- `docker/env/db` para `docker/env/olddb` |
| 52 | + |
| 53 | +Execute apenas os containers dos bancos de dados e verifique se eles estão rodando corretamente pelos logs: |
| 54 | + |
| 55 | +```shell |
| 56 | +docker compose up -d olddb db |
| 57 | +docker compose logs -ft |
| 58 | +``` |
| 59 | + |
| 60 | +> ATENÇÃO: não use `make start`, senão a aplicação Web irá iniciar e executar as migrações (precisamos que o novo banco |
| 61 | +> esteja vazio). |
| 62 | +
|
| 63 | +Agora, execute o `bash` no container `web`: |
| 64 | + |
| 65 | +```shell |
| 66 | +docker compose run -it --rm web bash |
| 67 | +``` |
| 68 | + |
| 69 | +E dentro do container, execute: |
| 70 | + |
| 71 | +```shell |
| 72 | +export NEW_DB_URL=$DATABASE_URL |
| 73 | +export OLD_DB_URL=$(echo $DATABASE_URL | sed 's/@db:/@olddb:/') |
| 74 | +echo 'select version()' | psql $OLD_DB_URL |
| 75 | +echo 'select version()' | psql $NEW_DB_URL |
| 76 | +``` |
| 77 | + |
| 78 | +Se os comandos acima não deram erro (e o `psql` conseguiu conectar corretamente em ambos os bancos), execute: |
| 79 | + |
| 80 | +```shell |
| 81 | +time pg_dump -F c -d $OLD_DB_URL | pg_restore -d $NEW_DB_URL |
| 82 | +``` |
| 83 | + |
| 84 | +Após o término, você pode executar `psql $NEW_DB_URL` e verificar se as tabelas existem (`\d`) e se possuem dados |
| 85 | +(`SELECT COUNT(*) FROM x`). Depois disso, saia do bash do container `web` e inicie todos os containers: |
| 86 | + |
| 87 | +```shell |
| 88 | +make start |
| 89 | +``` |
| 90 | + |
| 91 | +Para ter certeza de que o banco antigo não irá mais interferir, pare-o com: |
| 92 | + |
| 93 | +```shell |
| 94 | +docker compose stop olddb |
| 95 | +``` |
| 96 | + |
| 97 | +Agora teste a aplicação e verifique se os dados estão aparecendo corretamente. Em caso positivo, apague o serviço |
| 98 | +`olddb` do `compose.yml` e delete os arquivos: |
| 99 | + |
| 100 | +```shell |
| 101 | +rm -rf docker/conf/olddb docker/data/olddb docker/env/olddb |
| 102 | +``` |
| 103 | + |
| 104 | +Pronto! |
0 commit comments