176 lines
4.7 KiB
Markdown
176 lines
4.7 KiB
Markdown
# Briefing de Site SeConectai
|
|
|
|
Sistema web para cadastro de clientes e preenchimento guiado do briefing de criação de sites.
|
|
|
|
As pastas `Conhecimento/` e `Schema/` ficam como documentação de referência. O sistema em si é criado na raiz do projeto, com `app/`, `components/`, `lib/`, `prisma/`, Docker e configurações do Next.js.
|
|
|
|
## Stack
|
|
|
|
- Next.js 14+ com App Router
|
|
- TypeScript
|
|
- Tailwind CSS
|
|
- shadcn/ui como padrão de componentes
|
|
- Prisma + PostgreSQL 16
|
|
- Auth.js v5
|
|
- React Hook Form + Zod
|
|
- Docker Compose
|
|
|
|
## Desenvolvimento
|
|
|
|
Crie um `.env` a partir do exemplo quando for implementar autenticação, banco e integrações reais:
|
|
|
|
```sh
|
|
cp .env.example .env
|
|
```
|
|
|
|
Instale as dependências:
|
|
|
|
```sh
|
|
npm install
|
|
```
|
|
|
|
Rode o app:
|
|
|
|
```sh
|
|
npm run dev
|
|
```
|
|
|
|
Ou suba com Docker:
|
|
|
|
```sh
|
|
docker compose up
|
|
```
|
|
|
|
## Estrutura inicial
|
|
|
|
- `app/`: rotas e layout base.
|
|
- `components/ui/`: componentes base no padrão shadcn.
|
|
- `lib/`: utilitários compartilhados.
|
|
- `prisma/briefing-seed.json`: cópia do seed usado para carregar as seções e perguntas do briefing.
|
|
- `Schema/`: documentação das etapas do backend e regras de negócio.
|
|
- `Conhecimento/`: guias de frontend, UI, responsividade, acessibilidade e revisão.
|
|
|
|
## Observação
|
|
|
|
O ambiente atual do shell não tem `node`, `npm` nem `docker` instalados, então a validação de instalação, lint, build e compose precisa ser feita em uma máquina com essas ferramentas disponíveis.
|
|
|
|
## Backup
|
|
|
|
Com `DATABASE_URL` e `UPLOAD_DIR` configurados:
|
|
|
|
```sh
|
|
sh scripts/backup.sh
|
|
```
|
|
|
|
Os arquivos são salvos em `./backups` por padrão, com rotação de 14 dias.
|
|
|
|
Para restaurar:
|
|
|
|
```sh
|
|
sh scripts/restore.sh backups/db-YYYYMMDD-HHMMSS.sql backups/uploads-YYYYMMDD-HHMMSS.tar.gz
|
|
```
|
|
|
|
## Produção
|
|
|
|
Crie o `.env` no servidor. Variáveis mínimas:
|
|
|
|
```sh
|
|
POSTGRES_DB=briefing
|
|
POSTGRES_USER=briefing
|
|
POSTGRES_PASSWORD=troque-esta-senha
|
|
DATABASE_URL=postgresql://briefing:troque-esta-senha@db:5432/briefing?schema=public
|
|
AUTH_SECRET=gere-um-segredo-forte
|
|
APP_URL=https://seu-dominio.com.br
|
|
APP_DOMAIN=seu-dominio.com.br
|
|
LETSENCRYPT_EMAIL=voce@dominio.com.br
|
|
CPF_ENC_KEY=chave-base64-com-32-bytes
|
|
CPF_HASH_KEY=segredo-hmac-forte
|
|
ADMIN_EMAIL=admin@dominio.com.br
|
|
ADMIN_INITIAL_PASSWORD=senha-inicial-forte
|
|
UPLOAD_DIR=/app/storage/uploads
|
|
UPLOAD_MAX_MB=25
|
|
```
|
|
|
|
Para gerar uma chave base64 de 32 bytes:
|
|
|
|
```sh
|
|
openssl rand -base64 32
|
|
```
|
|
|
|
Suba em produção:
|
|
|
|
```sh
|
|
docker compose -f docker-compose.prod.yml up -d --build
|
|
```
|
|
|
|
O serviço `release` roda `prisma migrate deploy` e o seed idempotente antes do app iniciar. O seed cria o admin inicial usando `ADMIN_EMAIL` e `ADMIN_INITIAL_PASSWORD` somente se o usuário ainda não existir.
|
|
|
|
### Instalador em um comando
|
|
|
|
Depois que o repositório estiver acessível pelo servidor, você pode instalar em uma máquina limpa com Docker usando:
|
|
|
|
```sh
|
|
curl -fsSL https://gitea.seconectai.com.br/tiago/SeConectai_Web/raw/branch/main/scripts/install-server.sh \
|
|
| APP_DOMAIN=seu-dominio.com.br \
|
|
LETSENCRYPT_EMAIL=voce@dominio.com.br \
|
|
ADMIN_EMAIL=admin@dominio.com.br \
|
|
ADMIN_INITIAL_PASSWORD='troque-esta-senha' \
|
|
sh
|
|
```
|
|
|
|
Opcionalmente defina também:
|
|
|
|
```sh
|
|
INSTALL_DIR=/opt/seconectai-web
|
|
POSTGRES_PASSWORD=senha-forte-do-banco
|
|
AUTH_SECRET=segredo-auth
|
|
CPF_ENC_KEY=base64-32-bytes
|
|
CPF_HASH_KEY=segredo-hmac
|
|
SMTP_HOST=smtp.exemplo.com
|
|
SMTP_PORT=587
|
|
SMTP_USER=usuario
|
|
SMTP_PASS=senha
|
|
SMTP_FROM=contato@dominio.com.br
|
|
```
|
|
|
|
Evite colocar senha em parâmetro de URL. URL pode ficar gravada em histórico, logs e proxy. Passe segredo por variável de ambiente no comando ou edite o `.env` no servidor.
|
|
|
|
Sem domínio, para testar por IP em HTTP na porta `3000`:
|
|
|
|
```sh
|
|
curl -fsSL https://gitea.seconectai.com.br/tiago/SeConectai_Web/raw/branch/main/scripts/install-server.sh \
|
|
| SERVER_IP=45.13.59.110 \
|
|
ADMIN_EMAIL=tiago27.dossantos@gmail.com \
|
|
ADMIN_INITIAL_PASSWORD='troque-esta-senha' \
|
|
sh
|
|
```
|
|
|
|
Depois acesse `http://45.13.59.110:3000`.
|
|
|
|
Para atualizar:
|
|
|
|
```sh
|
|
docker compose -f docker-compose.prod.yml pull
|
|
docker compose -f docker-compose.prod.yml up -d --build
|
|
```
|
|
|
|
O Postgres não publica porta externa no `docker-compose.prod.yml`; ele fica acessível apenas na rede interna do Compose. Os uploads ficam no volume nomeado `uploads`, e o banco no volume `pgdata`.
|
|
|
|
## HTTPS
|
|
|
|
O `docker-compose.prod.yml` usa Caddy com o `Caddyfile` da raiz. Configure `APP_DOMAIN` e `LETSENCRYPT_EMAIL` no `.env`; o Caddy emite e renova o certificado automaticamente e redireciona HTTP para HTTPS.
|
|
|
|
## Healthcheck
|
|
|
|
A aplicação expõe:
|
|
|
|
```sh
|
|
/api/health
|
|
```
|
|
|
|
Ela verifica app + conexão com o banco.
|
|
|
|
## E-mail
|
|
|
|
Configure `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASS` e `SMTP_FROM`. No DNS do remetente, confira SPF e DKIM do provedor SMTP para reduzir chance de spam. O sistema nunca envia CPF completo por e-mail.
|