Operação
No servidor
Esta página explica como o lets-work roda por dentro: o container, as rotinas diárias, as cópias de segurança e a atualização.
Visão geral
O lets-work roda num servidor próprio da byescaleira, num container Docker. Um proxy na frente dele, o Caddy, recebe o tráfego de letswork.byescaleira.com com HTTPS e repassa para o container. O container só aceita conexões do próprio servidor.
O login é feito pelo byescaleira-auth. No servidor não roda nenhum Claude: a triagem e a análise vêm do Claude de cada pessoa, pelo MCP.
O container
A imagem tem dois estágios: um compila o site com Node 22 e Next.js, e o outro leva só o resultado e as ferramentas que leem os editais:
bsdtar, para abrir ZIP, RAR, 7z e TAR;pdftotextepdftoppm, para ler PDF e transformar páginas escaneadas em imagem;catdoceunrtf, para DOC e RTF.
O container roda endurecido:
| Proteção | O que faz |
|---|---|
| Usuário sem privilégio | O processo não roda como administrador |
| Raiz só de leitura | O código não pode ser alterado por dentro; só a pasta de dados aceita escrita |
| Sem capacidades extras | O processo não ganha nenhum poder especial do sistema |
| Sem novos privilégios | Nenhum programa dentro do container sobe de nível |
| Limites | 1 GB de memória e um teto de processos |
| Pasta temporária sem execução | Os arquivos baixados não podem rodar como programa |
| Verificação de saúde | A cada 30 segundos, o container confere se o banco abre, pelo endereço /api/health |
| Reinício automático | Se o processo cair, o Docker sobe de novo |
Os conversores dos editais recebem só o mínimo do ambiente, nunca as configurações secretas do servidor.
Os dados
Uma pasta de dados fica fora do container e guarda:
- o banco, um arquivo SQLite;
- os editais preparados, um diretório por contratação;
- as cópias de segurança.
A imagem nunca leva dados, segredos nem documentos da empresa.
Rotinas diárias
As rotinas rodam pelo agendador do servidor. Os horários abaixo são de Campo Grande (UTC-4).
| Rotina | Quando | O que faz |
|---|---|---|
| Cópia de segurança | Todo dia, 03:30 | Copia o banco, confere e guarda as 14 mais recentes |
| Coleta do PNCP | Todo dia, 04:00 | Busca as contratações abertas. Veja Coleta do PNCP |
| Limpeza dos editais | Domingo, 05:30 | Apaga os editais preparados há mais de 30 dias |
Cada rotina escreve num log próprio. Os logs giram toda semana e guardam 8 semanas.
Cópia de segurança conferida
Todo dia, o lets-work faz uma cópia completa do banco e confere antes de aceitar:
- Copia o banco para um arquivo temporário.
- Roda a verificação de integridade do SQLite na cópia.
- Confere que a cópia tem oportunidades e não tem menos que o banco tinha na hora da cópia.
- Só então dá o nome final à cópia e apaga as mais antigas, deixando 14.
Se qualquer conferência falhar, a cópia temporária é apagada e as anteriores ficam intactas. As cópias só podem ser lidas pelo dono da pasta. Hoje elas ficam no próprio servidor.
Limpeza semanal
Os editais baixados ocupam espaço. Aos domingos, a limpeza apaga as pastas de editais preparados há mais de 30 dias, pela data do preparo. Ela só mexe em pastas com o nome de um edital. As análises gravadas no banco continuam.
Atualização
O código chega ao servidor por uma lista de arquivos permitidos: os arquivos de configuração do build, o código, os arquivos públicos, os scripts e as rotinas. Nada fora da lista vai, e a raiz do projeto nunca é enviada inteira, porque a pasta local tem documentos da empresa.
- Simular o envio pela lista e conferir o que mudaria.
- Enviar de verdade, pela mesma lista.
- Reconstruir e subir o container.
- Conferir que
/api/healthresponde.
O que esperar
- O lets-work fica no ar sozinho: coleta, cópia e limpeza não precisam de ninguém.
- Uma coleta agendada não roda se já houver uma em andamento.
- Durante uma atualização, o site pode ficar fora por alguns segundos enquanto o container sobe de novo.