Skip to content

Commit 52c7907

Browse files
committed
Adiciona instruções para migrar versão do BD
1 parent 1eba302 commit 52c7907

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

docs/local.pt.md

+104
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
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

Comments
 (0)