# 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.