# Nova WoW

Portal web (Django) para un servidor de World of Warcraft basado en AzerothCore.

- **Python:** 3.14
- **Framework:** Django 6.0
- **Base de datos:** MySQL (4 bases: la del portal `django_wow` + las de AzerothCore `acore_auth`, `acore_characters`, `acore_world`)

---

## 1. Requisitos

- Python 3.14 y `venv`
- MySQL/MariaDB accesible
- Librerías de sistema para compilar algunas dependencias:

```bash
sudo apt install python3.14-venv python3.14-dev build-essential pkg-config \
    default-libmysqlclient-dev libgmp-dev libmpfr-dev libmpc-dev libjpeg-dev zlib1g-dev
```

---

## 2. Puesta en marcha (desarrollo)

```bash
git clone https://git.nightspire.gg/Inna/NovaWoW.git
cd NovaWoW

# Entorno virtual
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

# Variables de entorno
cp .env.example .env
# edita .env con tus credenciales reales (ver sección 3)

# Migraciones y arranque
python manage.py migrate
python manage.py createsuperuser        # opcional
python manage.py runserver
```

La app queda en http://127.0.0.1:8000

---

## 3. Configuración (`.env`)

Toda la configuración sensible se lee de variables de entorno mediante
[python-dotenv](https://pypi.org/project/python-dotenv/). Copia `.env.example`
a `.env` y rellena los valores. **El `.env` no se versiona.**

| Variable | Descripción |
|---|---|
| `DJANGO_SECRET_KEY` | Clave secreta de Django. Genera una nueva (ver abajo). |
| `DJANGO_DEBUG` | `True` en desarrollo, `False` en producción. |
| `DB_USER` / `DB_PASSWORD` | Credenciales MySQL (compartidas por las 4 BBDD). |
| `DB_HOST` / `DB_PORT` | Host y puerto de MySQL. |
| `DB_NAME_DEFAULT` | BD del portal (por defecto `django_wow`). |
| `DB_NAME_AUTH` / `DB_NAME_CHARACTERS` / `DB_NAME_WORLD` | BBDD de AzerothCore. |
| `AC_SOAP_*` | Conexión SOAP a AzerothCore (crear cuentas, etc.). |
| `SUMUP_*` / `STRIPE_*` | Pasarelas de pago. |
| `EMAIL_HOST_USER` / `EMAIL_HOST_PASSWORD` | SMTP de Gmail (App Password). |

Generar una `SECRET_KEY` nueva:

```bash
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
```

---

## 4. Producción

```bash
# Recopilar estáticos
python manage.py collectstatic --noinput

# Servir con gunicorn (4 workers)
gunicorn novawow.wsgi:application --bind 0.0.0.0:8000 --workers 4
```

Recomendaciones:

- `DJANGO_DEBUG=False` y una `DJANGO_SECRET_KEY` propia y secreta.
- Poner **Nginx** delante como proxy inverso y para servir `staticfiles/`.
- Revisar `ALLOWED_HOSTS` y `CSRF_TRUSTED_ORIGINS` en `novawow/settings.py`.

---

## 5. Docker

Alternativamente, se puede levantar todo con Docker (web + MySQL):

```bash
cp .env.example .env      # ajusta los secretos (no las variables DB_*, las fija compose)
docker compose up --build
```

- La web queda en http://127.0.0.1:8000
- El servicio `db` crea automáticamente las 4 bases de datos.
- El `entrypoint` espera a MySQL, aplica migraciones y recopila estáticos antes de arrancar gunicorn.

Ver `docker-compose.yml` y `Dockerfile` para los detalles.

---

## 6. Notas de seguridad

- Los secretos que estuvieron hardcodeados en el historial de git deben **rotarse**
  (contraseña MySQL/SOAP, App Password de Gmail, claves de Stripe/SumUp).
- Nunca subas el archivo `.env` al repositorio.
