# Deploy — hurast.com

Este documento descreve como o **Party Explorer** (`2d-tilemap-performance-tests`) foi publicado em produção e como atualizar o site sem afetar os outros projetos no mesmo servidor.

## URL de produção

- **Site:** https://pkmn-open-wild.hurast.com/
- **Repositório:** https://github.com/huras/2d-tilemap-performance-tests (privado)
- **Branch em produção:** `master`

## Visão geral da infraestrutura

| Item | Valor |
|------|-------|
| Servidor | `191.101.78.194` |
| Usuário SSH | `root` |
| Diretório no servidor | `/var/www/html/pkmn-open-wild` |
| Web server | nginx 1.14 (Ubuntu) |
| SSL | Let's Encrypt (Certbot), renovação automática |
| Método de deploy | `git pull` no servidor (não há build) |

O subdomínio `pkmn-open-wild.hurast.com` tem **vhost nginx dedicado** e pasta própria em `/var/www/html/pkmn-open-wild`. Os outros sites no servidor (`pkmnow-demo`, `pkmn-perlin-world`, `pokemon-botw`, etc.) ficam em diretórios separados e **não são alterados** pelo deploy deste projeto.

## Pré-requisitos na sua máquina

1. **SSH com chave** já configurado para `root@191.101.78.194` (sem senha).
2. **Acesso ao repositório privado** no GitHub (push da sua máquina).
3. Node/npm instalados (só para rodar o script `npm run deploy`).

## Fluxo de atualização (dia a dia)

```bash
# 1. Commitar e enviar para o GitHub
git add .
git commit -m "sua mensagem"
git push origin master

# 2. Atualizar o servidor
npm run deploy
```

O script `deploy` no `package.json` executa:

```bash
ssh root@191.101.78.194 "cd /var/www/html/pkmn-open-wild && git fetch && git checkout master && git pull"
```

Equivalente manual:

```bash
ssh root@191.101.78.194
cd /var/www/html/pkmn-open-wild
git fetch
git checkout master
git pull
```

Não é necessário reiniciar nginx nem rodar build — o projeto é HTML/CSS/JS estático com ES modules.

## O que foi feito na configuração inicial (jun/2026)

### 1. Repositório privado

O código foi publicado em repositório privado no GitHub (`huras/2d-tilemap-performance-tests`). O servidor já tinha chave SSH autorizada na conta GitHub (`git@github.com`), o que permite `git clone`/`git pull` sem credenciais extras.

### 2. Clone no servidor

```bash
git clone git@github.com:huras/2d-tilemap-performance-tests.git /var/www/html/pkmn-open-wild
cd /var/www/html/pkmn-open-wild
git checkout master
```

Antes do clone, havia uma tentativa parcial de upload via `tar` (só `biomes/` e `css/`). O diretório foi removido e recriado com o clone completo (~28 MB).

### 3. Nginx

Arquivo: `/etc/nginx/sites-available/pkmn-open-wild.hurast.com`  
Symlink: `/etc/nginx/sites-enabled/pkmn-open-wild.hurast.com`

Configuração principal:

- `root /var/www/html/pkmn-open-wild`
- `try_files` para SPA estática (`/index.html` como fallback)
- Cache longo para assets estáticos (js, css, imagens, áudio, json)
- Bloqueio de acesso a `.git` e `.ht*`
- Headers `X-Frame-Options` e `X-Content-Type-Options`

Antes deste vhost, o domínio respondia com o `index.html` genérico de `/var/www/html` (página padrão de 2022). O vhost dedicado passou a servir só este projeto.

### 4. HTTPS (Certbot)

```bash
certbot --nginx -d pkmn-open-wild.hurast.com --non-interactive --redirect
```

- Certificado em `/etc/letsencrypt/live/pkmn-open-wild.hurast.com/`
- HTTP redireciona para HTTPS
- Renovação: `certbot renew` (cron do sistema)

### 5. Script `npm run deploy`

Adicionado `package.json` na raiz do projeto com o script de deploy documentado acima.

## Rodar localmente

O projeto usa **ES modules**; abrir `index.html` direto no disco (`file://`) costuma falhar. Use servidor HTTP local:

```bash
npm run dev
```

Abra `http://localhost:3056/game.html`.

Alternativa (pode dar `EMFILE` no Windows com muitos módulos ES):

```bash
npx --yes serve .
```

Alternativa: extensão **Live Server** no VS Code/Cursor.

## Notas e limitações

### Pasta `webgl-noise`

Existe localmente em `webgl-noise/` como cópia/vendor de shaders GLSL, mas **não está no repositório Git** (era um sub-repositório `.git` separado). O código em `js/` não importa arquivos dessa pasta em runtime, então o site em produção funciona sem ela. Se no futuro algum módulo passar a depender de `webgl-noise/`, commite a pasta (ou adicione como submodule) e rode `npm run deploy`.

### Outros sites no mesmo servidor

Exemplos de projetos **não afetados** por este deploy:

| URL / pasta | Observação |
|-------------|------------|
| `pkmnow-demo.hurast.com` → `/var/www/html/pkmnow-demo` | Deploy separado (`git pull` na branch `xaxim-1`) |
| `pkmn-perlin-world.hurast.com` → `/var/www/html/pkmn-perlin-world` | Outro vhost nginx |
| Demais pastas em `/var/www/html/` | `alpha_version`, `pokemon-botw`, `portifolio`, etc. |

### Troubleshooting

| Problema | O que verificar |
|----------|-----------------|
| `git pull` falha no servidor | Chave SSH do servidor ainda autorizada no GitHub? Repo ainda privado e acessível? |
| Site mostra página antiga/genérica | DNS apontando para `191.101.78.194`? Vhost `pkmn-open-wild.hurast.com` habilitado em `sites-enabled`? |
| 502 / nginx error | `nginx -t` e `systemctl status nginx` no servidor |
| SSL expirado | `certbot renew` no servidor |
| Mudanças não aparecem | `git push` feito antes do `npm run deploy`? Branch `master`? Cache do navegador (hard refresh) |

### Comandos úteis no servidor

```bash
# Status do clone
cd /var/www/html/pkmn-open-wild && git status && git log -1 --oneline

# Testar nginx
nginx -t && systemctl reload nginx

# Ver certificado
certbot certificates | grep -A5 pkmn-open-wild
```

## Referência rápida

```
Sua máquina                    Servidor hurast
─────────────                  ────────────────
git push origin master   →     git pull em /var/www/html/pkmn-open-wild
npm run deploy           →     (mesmo efeito via SSH)
                               nginx serve → https://pkmn-open-wild.hurast.com/
```
