Pipeline de deploy — permissões do utilizador coaching
A página de administração Deploy executa comandos como o mesmo utilizador Unix que o Next.js / pm2 (normalmente coaching). Segue-se o que esse utilizador precisa de poder fazer.
Versão do Node.js (npm warn EBADENGINE)
O package.json declara "engines": { "node": ">=22.0.0", "npm": ">=10.0.0" }. Parte da toolchain Prisma também espera Node ≥ 22.
Se em produção estiveres em Node 20 (ou mais antigo), o npm install no Deploy mostra EBADENGINE Unsupported engine — por defeito o npm continua a instalar, mas estás fora do intervalo suportado e deves actualizar.
Corrigir no servidor
- Instala Node.js 22 LTS (a mesma major na shell e no pm2 — o pm2 usa o binário
nodecom que foi iniciado).
Opção A — nvm (utilizador coaching ou de deploy):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.nvm/nvm.sh
nvm install 22
nvm alias default 22
node -v # v22.x
Opção B — NodeSource / pacotes da distro — usa pacotes Node 22 para /usr/bin/node ser v22.
-
Reinstala globais se precisares (
npm i -g pm2), depoispm2 restart/pm2 reloadna mesma sessão ondenode -vé 22. -
Opcional:
engine-strict=trueno.npmrcno CI — não recomendado no servidor até o Node estar actualizado.
Não “corrigir” só o package.json
Baixar engines para Node 20 remove o aviso do pacote coach-studio, mas dependências transitivas (ex.: @prisma/streams-local) podem continuar a reportar EBADENGINE até o Node ser realmente ≥ 22.
Se o PM2 corre sob systemd, coloca o bin do Node no início do PATH da unidade — ver PM2 systemd e Node.js.
Repositório e ficheiros gerados
- Leitura e escrita em todo o clone (p.ex.
/var/www/coaching), incluindo: documentation/site/— recriado pormkdocs buildem cada deploy.- O ideal é o clone ser dono
coachingpara o build não precisar desudopara escrever HTML.
O que cada área precisa
| Área | Requisito |
|---|---|
| Git / npm / Node / Prisma / Next | Comandos no PATH; sem privilégio Unix extra. |
MkDocs (documentation/build-from-deploy.sh) |
python3, python3 -m pip, permissão de escrita em documentation/site/. Escrita opcional para instalações pip (ver secção seguinte). |
Cron systemd (deploy/cron/install-from-deploy.sh) |
sudo só se configuraste install.sh sem palavra-passe — ver deploy/cron/README.md. Caso contrário o passo imprime SKIP e termina com sucesso. |
Python / pip e --break-system-packages
O script de deploy executa:
python3 -m pip install -r documentation/requirements.txt --break-system-packages -q
mkdocs build -q
Em Debian / Ubuntu recentes, o Python do sistema está externamente gerido (PEP 668), pelo que pip install sem venv falha a menos que uses --break-system-packages ou um ambiente virtual.
A flag permite ao utilizador coaching instalar MkDocs, mkdocs-material e mkdocs-static-i18n nesse Python sem sudo. Contrapartida: os pacotes ficam no Python partilhado usado por python3 (aceitável num servidor dedicado à app).
Alternativa com isolamento
Para maior isolamento, cria documentation/.venv uma vez (como coaching), corre pip install -r requirements.txt dentro dele e altera documentation/build-from-deploy.sh para fazer source .venv/bin/activate antes de mkdocs build, sem --break-system-packages.
Resumo
| Privilégio | Para quê |
|---|---|
Utilizador normal (coaching) dono do repo |
git pull, npm, build Next, saída MkDocs, reload pm2 |
pip install … --break-system-packages |
Dependências MkDocs em máquinas PEP 668 sem venv |
sudo sem palavra-passe só para deploy/cron/install.sh |
Opcional — actualizar unidades systemd no deploy |
Root (sudo) não é necessário para o build da documentação se coaching puder escrever em documentation/site/.