# Deploy — Sudoku Studio

Instruções para instalar e atualizar o Sudoku Studio em um VPS com Apache e Node.js.

---

## Requisitos

- VPS com Ubuntu 22.04+
- Node.js 18+
- Apache 2.4+
- PM2
- Certbot

---

## Primeira instalação

### 1. Instale o Node.js

```bash
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
node -v  # deve retornar v20.x.x
```

### 2. Instale o PM2

```bash
sudo npm install -g pm2
```

### 3. Clone o repositório

```bash
cd /var/www
git clone https://github.com/seu-usuario/sudoku-studio.git sudoku.brchad.com
cd sudoku.brchad.com
```

### 4. Instale as dependências

```bash
npm install
```

### 5. Configure o ambiente

```bash
cp .env.example .env
vim .env
```

Preencha os valores conforme o exemplo abaixo. Veja a seção [Exemplo de .env](#exemplo-de-env).

### 6. Inicie o servidor

```bash
pm2 start server/index.js --name sudoku-studio
pm2 save
pm2 startup  # rode o comando que ele mostrar
```

Verifique se subiu corretamente:

```bash
pm2 logs sudoku-studio --lines 20 --nostream
```

Deve aparecer `Auth inicializado.` e `Sudoku Studio rodando em http://localhost:3000`.

### 7. Configure o Apache

Instale os módulos necessários:

```bash
sudo a2enmod proxy proxy_http rewrite headers ssl
sudo systemctl restart apache2
```

Instale o certbot:

```bash
sudo apt install certbot python3-certbot-apache
```

Crie o virtual host em `/etc/apache2/sites-available/sudoku.brchad.com.conf`:

```apache
<VirtualHost *:80>
    ServerName sudoku.brchad.com

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =sudoku.brchad.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
```

Ative o site e gere o certificado SSL:

```bash
sudo a2ensite sudoku.brchad.com.conf
sudo systemctl reload apache2
sudo certbot --apache -d sudoku.brchad.com
```

O certbot vai criar automaticamente o bloco `*:443`. Edite o arquivo SSL gerado (`sudoku.brchad.com-le-ssl.conf`) e adicione o proxy e os headers de segurança dentro do bloco `<VirtualHost *:443>`:

```apache
# Proxy para o Node.js
ProxyPreserveHost On
ProxyPass        / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Real-IP %{REMOTE_ADDR}s

# Segurança de iframe
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "frame-ancestors 'self'"

# Domínios autorizados a embedar o player
<LocationMatch "^/embed\.html$">
    Header always unset X-Frame-Options
    Header always set Content-Security-Policy "frame-ancestors 'self' https://caiomga.com https://www.caiomga.com https://*.brchad.com https://brchad.com https://cruzadinha.com.br https://www.cruzadinha.com.br"
</LocationMatch>
```

Teste e recarregue:

```bash
sudo apache2ctl configtest
sudo systemctl reload apache2
```

---

## Atualizar o site (deploys futuros)

```bash
cd /var/www/sudoku.brchad.com
git pull origin main
npm install
pm2 restart sudoku-studio
```

Se houver mudanças no Apache:

```bash
sudo apache2ctl configtest
sudo systemctl reload apache2
```

---

## Exemplo de .env

Crie o arquivo `.env` na raiz do projeto com este conteúdo:

```env
# Senha de acesso ao editor (admin.html)
# Use apenas letras, números, hífens e underscores
# Gere um valor seguro com: openssl rand -base64 32 | tr -d '/+='
ADMIN_PASSWORD=coloque_uma_senha_forte_aqui

# Segredo para assinar os tokens JWT
# Gere um valor seguro com: openssl rand -base64 64 | tr -d '/+='
JWT_SECRET=coloque_uma_string_longa_e_aleatoria_aqui

# Porta do servidor Node.js
PORT=3000

# Ambiente de execução
NODE_ENV=production
```

> **Atenção:** o arquivo `.env` está no `.gitignore` e nunca deve ser commitado.
> Guarde os valores em local seguro — se perder, será necessário redefinir a senha e reautenticar.

---

## Estrutura de pastas

```
sudoku.brchad.com/
├── .env                       ← não commitado (criar manualmente)
├── .env.example               ← template do .env
├── .gitignore
├── package.json
├── README.md
├── DEPLOY.md                  ← este arquivo
├── sudoku-studio.conf         ← config Apache (referência)
├── server/
│   ├── index.js               ← entry point
│   ├── db.js                  ← SQLite
│   ├── auth.js                ← JWT + bcrypt
│   ├── games.db               ← banco de dados (não commitado)
│   └── routes/
│       ├── auth.js            ← /api/auth/*
│       ├── admin.js           ← /api/admin/*
│       └── games.js           ← /api/games/*
└── public/
    ├── index.html             ← galeria pública
    ├── login.html             ← login do editor
    ├── player.html            ← player completo
    ├── embed.html             ← player para iframe
    ├── admin.html             ← editor (protegido)
    └── src/
        ├── api.js             ← cliente HTTP
        ├── storage.js         ← localStorage (progresso)
        └── sudoku.js          ← engine do jogo
```

---

## Logs e monitoramento

```bash
# Ver logs em tempo real
pm2 logs sudoku-studio

# Ver últimas linhas sem ficar monitorando
pm2 logs sudoku-studio --lines 50 --nostream

# Status do processo
pm2 status

# Reiniciar
pm2 restart sudoku-studio

# Logs do Apache
sudo tail -f /var/log/apache2/sudoku.brchad_error.log
```
