Files
bot-pontos/secrets/README.md
2026-10-23 22:31:02 -03:00

71 lines
2.7 KiB
Markdown

# Segredos
Esta pasta guarda os arquivos lidos como Docker secrets. **Nunca** coloque o conteúdo deles em Markdown, no `.env`, em logs ou no chat.
| Arquivo | Uso | Obrigatório |
| --- | --- | --- |
| `pg_password` | Senha do usuário dono do banco (`botpontos`), usado só pelas migrations e pelo backup | sim |
| `pg_app_password` | Senha do usuário da aplicação (`botpontos_app`), usado pela API e pelo worker | sim |
| `encryption_key` | Chave AES-256 das senhas da PontoMais (mínimo 32 caracteres). **Guarde uma cópia fora do servidor** | sim |
| `telegram_token` | Token do bot criado no @BotFather | sim (o worker não sobe sem ele) |
| `holiday_api_key` | Chave da API feriadosapi.com | o arquivo precisa existir, mas pode ficar vazio |
## Gerar os arquivos
No Git Bash ou no Debian, a partir da pasta do projeto:
```bash
openssl rand -base64 32 | tr -d '\n' > secrets/pg_password
```
```bash
openssl rand -base64 32 | tr -d '\n' > secrets/pg_app_password
```
```bash
openssl rand -base64 48 | tr -d '\n' > secrets/encryption_key
```
O token do Telegram e a chave da feriadosapi.com são colados à mão, sem quebra de linha no final:
```bash
printf '%s' 'COLE_O_TOKEN_AQUI' > secrets/telegram_token
```
```bash
printf '%s' 'COLE_A_CHAVE_AQUI' > secrets/holiday_api_key
```
Sem chave de feriados, crie o arquivo vazio:
```bash
: > secrets/holiday_api_key
```
## Permissões no servidor Debian
Restrinja **pela pasta**, não pelos arquivos:
```bash
chmod 700 secrets
```
```bash
chmod 644 secrets/*
```
O Docker Compose monta cada arquivo dentro do container mantendo dono e permissões do host. Os arquivos precisam ser legíveis pelos usuários dos containers (Postgres usa UID 70; a API e o worker, UID 65532). Com `chmod 600`, eles não conseguiriam ler. Quem protege os segredos no host é a pasta com `700`.
## Atenção
- `pg_password` e `pg_app_password` são lidas pelo Postgres **apenas na primeira inicialização** do volume `pgdata`. Trocar os arquivos depois não troca as senhas no banco.
- **Sem a `encryption_key`, as senhas da PontoMais gravadas não podem ser recuperadas.** Guarde uma cópia num cofre de senhas.
## Trocar a chave de criptografia
1. Copie a chave atual para `secrets/encryption_key_previous` e gere uma nova `secrets/encryption_key`.
2. No `.env`, aumente `BP_ENCRYPTION_KEY_VERSION` (ex.: de 1 para 2).
3. No `docker-compose.yml`, adicione o segredo `encryption_key_previous` e as variáveis `BP_ENCRYPTION_PREVIOUS_KEY_FILE` e `BP_ENCRYPTION_PREVIOUS_KEY_VERSION` (com a versão antiga) aos serviços `api` e `worker`.
4. Suba os containers e rode `docker compose run --rm api admin rotate-key`.
5. Depois que o comando informar que tudo foi recifrado, remova a chave anterior do Compose e da pasta.