# Instalação pelo responsável técnico

Use Node.js 24, um único processo e disco local persistente com permissão de escrita
para o usuário do serviço. O adaptador em `portable/server.mjs` usa SQLite e arquivos
locais para executar o Worker já compilado, sem dependência de D1, R2 ou ChatGPT.
O serviço deve permanecer ativo. Em hospedagem compartilhada, confirme suporte a
Node.js 24, processos persistentes e SQLite nativo antes de contratar ou instalar.

## Domínio e HTTPS

Configure `PUBLIC_URL=https://jogo.seudominio.com.br` no `.env`. Mantenha
`HOST=127.0.0.1` no modo direto. Use um proxy na mesma máquina para encaminhar as
requisições à porta 3000. Não publique essa porta diretamente na internet.
Exemplo de bloco Nginx, a incorporar na configuração HTTPS do domínio:

```nginx
location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_read_timeout 130s;
    client_max_body_size 16m;
}
```

O certificado HTTPS e o redirecionamento HTTP → HTTPS devem ser configurados pelo
provedor ou responsável técnico. Preserve o cabeçalho Origin original. Não injete
cabeçalhos de identidade: o adaptador remove os cabeçalhos externos e determina a
identidade apenas pela sessão autenticada local. O limitador básico de tentativas
usa o IP da conexão; atrás de proxy, aplique também proteção no proxy. Não confie
em X-Forwarded-For vindo diretamente do público.

## Execução permanente

Exemplo de unit systemd; adapte os caminhos e crie antes um usuário `prevgame`:

```ini
[Unit]
Description=PrevGame Jornada
After=network.target

[Service]
User=prevgame
WorkingDirectory=/opt/prevgame
ExecStart=/usr/bin/node --env-file=/opt/prevgame/.env /opt/prevgame/portable/server.mjs
Restart=on-failure
Environment=NODE_ENV=production
UMask=0077
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
```

Confirme o caminho real do Node.js com `command -v node`. Dê ao usuário do serviço
acesso à pasta do aplicativo e escrita apenas em `DATA_DIR`. Restrinja `.env` ao
usuário responsável. O diretório de dados não pode estar em `dist/client`.

## Persistência e atualização

- Migrations SQL incluídas são aplicadas uma única vez por banco.
- Não substitua o diretório `dados` por uma pasta vazia ao atualizar.
- Pare o processo antes de copiar banco e uploads para backup consistente.
- Em Docker, use o volume nomeado definido em `compose.yaml`; não use `down -v`.
- As dependências dos leitores de PDF/DOCX já estão em `dist/client/vendor`.
- Para recompilar: `npm ci` e `npm run build`. A execução usa `npm start`.
- O código-fonte original continua disponível em `public` e `server`; mudanças
  nesses diretórios precisam de nova compilação.
- `README.md` contém histórico técnico do jogo original; este guia prevalece para
  instalação fora do ChatGPT.

## Conferência no destino

1. Entrar como admin e enviar um TXT ou PDF com texto selecionável.
2. Conferir o texto, salvar e ativar regras e perguntas revisadas.
3. Criar duas contas de participantes; verificar que uma não acessa a outra.
4. Concluir uma jornada e abrir o relatório individual.
5. Reiniciar o serviço e verificar persistência da partida e do arquivo.
6. Verificar HTTPS, celulares e tamanho máximo de upload na hospedagem.

Indicadores agregados exigem pelo menos cinco participantes distintos no filtro.
As contas locais não validam identidade civil e não há recuperação de senha por
e-mail. Uma implantação institucional que exija SSO ou cadastro restrito deve
integrar o provedor de identidade da entidade antes de abrir acesso ao público.
