b43b888f53
- README.md: guía de instalación (venv, .env, migraciones, gunicorn) y notas de producción/seguridad - Dockerfile: imagen Python 3.14 con deps de sistema para mysqlclient/Pillow - docker-compose.yml: servicios web (Django+gunicorn) y db (MySQL 8.4) con las 4 BBDD - docker/entrypoint.sh: espera a MySQL, migra, collectstatic y arranca gunicorn - docker/mysql-init.sql: crea django_wow + bases acore_* - .dockerignore y gunicorn en requirements Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
116 lines
3.3 KiB
Markdown
116 lines
3.3 KiB
Markdown
# 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.
|