<!-- BEGIN CHANGE: runbook cutover ot.whiteantidote.com = Novo Portal -->

# Cutover: portal em `ot.whiteantidote.com`

Migrar o front de `dev.whiteantidote.com` para o dominio principal **e** o cutover
de producao. Nao e so DNS: o Apache do `ot.` hoje serve o Gesior (PHP 5.6).

## Estrategia recomendada (coexistencia)

No dia 1:

| Path | Serve |
|---|---|
| `/` (UI) | Next static em `/home/ubuntu/portal/out` |
| `/api/` | PHP 8.3 em `127.0.0.1:8086` |
| `/mercadopago_*.php`, `/paypal_ipn.php` | Gesior em `/home/ubuntu/www/html` (mesmas URLs) |
| `/animatedOutfits1092`, `/images`, `/guild_logos`, `/Downloads` | Mesmas pastas do Gesior (Alias; logos em `/guild_logos` para nao sombrear a pagina `/guilds`) |

Assim **nao precisa mudar painel MP/PayPal** no dia do cutover. Outfits
continuam em `https://ot.whiteantidote.com/animatedOutfits1092/...`.

Arquivos no repo:

- `portal/deploy/ot.whiteantidote.com.conf`
- `portal/deploy/portal-api.service`

## Pre-requisitos

1. Portal estavel em `dev.whiteantidote.com` (smoke: login, shop, donate checkout, outfits).
2. Backup do vhost atual:
   ```bash
   sudo cp -a /etc/apache2/sites-available/ot.whiteantidote.com.conf \
     /home/ubuntu/backups/ot.whiteantidote.com.conf.$(date +%F)
   # ou o nome real do site (a2ensite -q / ls sites-enabled)
   ```
3. Certificado HTTPS do `ot.` ja existe (certbot) ? **preserve** o bloco SSL.
4. Pasta de producao (nao reusar `dev-portal` a medio prazo):
   ```bash
   sudo mkdir -p /home/ubuntu/portal/{out,api,cache}
   # copiar do que ja esta bom:
   rsync -a /home/ubuntu/dev-portal/out/ /home/ubuntu/portal/out/
   rsync -a /home/ubuntu/dev-portal/api/ /home/ubuntu/portal/api/
   # secret / env proprios (NAO copiar token do dev se quiser invalidar sessoes):
   sudo cp /home/ubuntu/dev-portal/secret.key /home/ubuntu/portal/secret.key
   sudo cp /home/ubuntu/dev-portal/env.php /home/ubuntu/portal/env.php
   sudo chown -R www-data:www-data /home/ubuntu/portal/cache
   sudo chmod 600 /home/ubuntu/portal/secret.key
   ```
5. `env.php` de producao com `OT_SERVER_PATH=/home/ubuntu/otx2_reseted/`,
   `WA_ALLOW_PAYMENTS` / `WA_ALLOW_SHOP_BUY` true.

## Passo a passo (servidor)

```bash
# 1) API systemd na porta 8086
sudo cp /home/ubuntu/html/portal/deploy/portal-api.service /etc/systemd/system/
# (ajuste path do conf se o repo estiver em outro lugar)
sudo systemctl daemon-reload
sudo systemctl enable --now portal-api
curl -sS http://127.0.0.1:8086/home.php | head

# 2) Mesclar vhost
# Abra o :443 atual do ot. (com SSLCertificate*).
# Troque DocumentRoot / Directory / ProxyPass / Alias conforme
# portal/deploy/ot.whiteantidote.com.conf ? NAO apague as linhas SSL*.

sudo apache2ctl configtest
sudo systemctl reload apache2
```

## Front build para producao

No PC (pasta `portal`):

```powershell
# bases absolutas no mesmo dominio (outfits/items ja em ot.)
$env:NEXT_PUBLIC_OUTFIT_BASE = "https://ot.whiteantidote.com/animatedOutfits1092/animoutfit.php"
$env:NEXT_PUBLIC_ITEM_BASE   = "https://ot.whiteantidote.com/images/items"
# API mesma origem:
$env:NEXT_PUBLIC_API_BASE = ""
npm run build
# depois rsync out/ + api/ para /home/ubuntu/portal/
```

(Ou estenda `deploy.ps1` com `-Target prod` apontando para `/home/ubuntu/portal`.)

## Smoke test pos-reload

- [ ] `https://ot.whiteantidote.com/` abre o portal (nao o Gesior)
- [ ] Login / account
- [ ] Outfit aparece (URL ainda `/animatedOutfits1092/...`)
- [ ] `https://ot.whiteantidote.com/api/home.php` JSON
- [ ] `https://ot.whiteantidote.com/mercadopago_webhook.php` responde (mesmo que erro de metodo)
- [ ] Doacao teste / sandbox se possivel
- [ ] Shop compra (fila `z_ots_comunication`)

## Rollback (minutos)

```bash
sudo cp /home/ubuntu/backups/ot.whiteantidote.com.conf.XXXX \
  /etc/apache2/sites-available/ot.whiteantidote.com.conf
sudo apache2ctl configtest && sudo systemctl reload apache2
```

Gesior volta como DocumentRoot; portal continua em `dev.`.

## O que NAO fazer no dia 1

- Apagar `/home/ubuntu/www/html`
- Mudar `notification_url` do MP/PayPal (deixe para fase de webhooks)
- Apontar `DocumentRoot` do `ot.` para `dev-portal` sem backup/SSL merge
- Servir `/api` com mod_php 5.6

## Depois do cutover UI (fases seguintes)

1. ~~Portar webhooks para `/api` (PHP 8.3)~~ - feito
2. ~~Copiar assets para portal e Alias interno~~ - feito (`/home/ubuntu/portal/assets`)
3. ~~Mail/config em `WA_HTML_ROOT` = portal/assets~~ - feito (SMTP nativo PHP 8.3 + mail_lib templates)
4. Opcional: arquivar `/home/ubuntu/www/html` quando nao houver mais dependencia
5. Hardening leve: CORS allowlist + rate-limit login

### Layout de assets (prod)

```
/home/ubuntu/portal/
  out/          Next static
  api/          PHP 8.3
  assets/
    animatedOutfits1092/   (+ animoutfit.php via mod_php)
    images/
    guild_logos/
    Downloads/
    trainingoffline/
    config/                (SMTP - NAO no git)
    system/mail_lib.php    (templates)
```

`env.php` define `WA_HTML_ROOT` e `WA_GUILD_LOGOS_PATH`.

## DNS

Se `ot.` e `dev.` ja apontam para o **mesmo** IP (`ot-arm`), **nao** precisa mudar DNS ?
so Apache. Se no futuro o portal for para outro host, ai sim A/AAAA + certbot.

## Neste servidor (ot-arm) ? vhosts reais

O dominio `ot.whiteantidote.com` **nao** tem `ot.whiteantidote.com.conf`.
Ele usa os defaults do Apache:

| Arquivo | Porta | Papel |
|---|---|---|
| `sites-available/000-default.conf` | 80 | DocumentRoot Gesior + redirect HTTPS (deixar) |
| `sites-available/000-default-le-ssl.conf` | 443 | Gesior + Let's Encrypt (**este e o que muda**) |

Conf pronto para colar no :443: `portal/deploy/000-default-le-ssl.portal.conf`

```bash
sudo mkdir -p /home/ubuntu/backups
sudo cp -a /etc/apache2/sites-available/000-default-le-ssl.conf \
  /home/ubuntu/backups/000-default-le-ssl.conf.$(date +%F-%H%M)

# depois de /home/ubuntu/portal + systemctl portal-api (:8086):
sudo cp /caminho/do/repo/html/portal/deploy/000-default-le-ssl.portal.conf \
  /etc/apache2/sites-available/000-default-le-ssl.conf

sudo a2enmod proxy proxy_http headers rewrite ssl
sudo apache2ctl configtest
sudo systemctl reload apache2
```

Rollback: restaurar o arquivo em `/home/ubuntu/backups/000-default-le-ssl.conf.*`

<!-- END CHANGE -->
