# 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.