Semana de projeto · desenvolvimento
Colocando o toolkit de pé
Hoje não há conteúdo novo. A aula inteira é tempo de trabalho, com o professor circulando para
destravar o que emperrar. A meta é sair daqui com o deploy.sh funcionando.
Por onde começar
A ordem que funciona
deploy.sh — transforme os comandos que funcionaram num script, acrescentando as verificações.backup.sh — depende de já existir dado no volume, ou seja, do deploy funcionando.monitor.sh — depende do container estar no ar para haver o que monitorar.Regra de ouro: nunca escreva um script para automatizar comandos que você ainda não viu funcionar manualmente. Automatizar algo quebrado só produz um script quebrado mais difícil de depurar.
Destravando sozinho
Erros comuns e onde está a resposta
| Sintoma | Causa provável | Onde revisar |
|---|---|---|
| Permission denied ao rodar o script | Faltou chmod +x | Enc. 13, passo 1 |
| "command not found" numa atribuição | Espaço em volta do = | Enc. 13, passo 2 |
Erro de sintaxe no if | Faltam espaços dentro de [ ] | Enc. 13, passo 3 |
| docker run falha: nome já em uso | Container parado, não removido | use docker ps -aq |
| Dados somem ao recriar o container | Falta volume montado | Enc. 11, passos 6–7 |
| Container morre com código 137 | Se docker inspect mostrar OOMKilled: true, limite de memória baixo demais | Enc. 9 e 10 |
| Funciona no terminal, não no cron | Caminho relativo, comando fora do PATH do cron ou % na linha do crontab | Enc. 14, passo 3 |
[: 12.34: integer expected | O -gt só compara inteiros, e a porcentagem veio com decimal | Corte com cut -d. -f1 |
| Página nova não aparece depois do deploy | Volume montado sobre a pasta das páginas guarda a versão antiga | Ponha no volume só o que é dado, não o que vem na imagem |
$'\r': command not found | Script editado no Windows (fim de linha diferente) | sed -i 's/\r$//' script.sh |
[[: not found | Script rodado com sh, que no Ubuntu não é o bash | Rode com bash script.sh ou ./script.sh |
address already in use | Outro processo ou container na mesma porta | sudo ss -tlnp | grep 8080 |
Trabalho em equipe
Todo mundo precisa entender tudo
Como a equipe se divide
Padrão de risco
"Fulano faz os scripts porque manja mais, a gente ajuda no README." Resultado: uma pessoa sobrecarregada, o resto sem conseguir defender o trabalho.
Padrão que funciona
Cada um escreve um script, mas todos leem e testam os três. Ao fim de cada encontro, quem escreveu explica seu script para os demais — em 5 minutos.
Checklist do encontro
- Subimos o serviço manualmente, com volume e limite de memória
- O
deploy.shsobe o serviço com sucesso - O
deploy.shroda duas vezes seguidas sem erro - Começamos o
backup.sh - Todos da equipe entendem o que cada script faz até aqui
- Combinamos o que cada um traz pronto no próximo encontro