================================ Referencia de Configuración ================================ NoxPanel se configura mediante variables de entorno definidas en el archivo ``.env`` en la raíz del proyecto. Este archivo es leído automáticamente por Docker Compose y por ``django-environ`` dentro de la aplicación. .. contents:: En esta página :local: :depth: 2 Configuración Django ===================== .. list-table:: :header-rows: 1 :widths: 30 40 30 * - Variable - Descripción - Valor por Defecto * - ``SECRET_KEY`` - Clave secreta de Django. **Obligatoria en producción.** - Auto-generada (dev) * - ``DEBUG`` - Modo debug. **Nunca True en producción.** - ``False`` * - ``ALLOWED_HOSTS`` - Hosts permitidos (separados por coma) - ``localhost,127.0.0.1,web,nginx`` * - ``LANGUAGE_CODE`` - Idioma por defecto - ``es`` * - ``TIME_ZONE`` - Zona horaria - ``UTC`` * - ``SITE_DOMAIN`` - Dominio público del panel - ``localhost`` * - ``SITE_NAME`` - Nombre del panel (UI) - ``NoxPanel`` * - ``SITE_DESCRIPTION`` - Descripción del panel - ``Panel de gestión de Proxmox`` * - ``SITE_VERSION`` - Versión del panel - ``1.0.0`` * - ``ENVIRONMENT`` - Entorno (development, staging, production) - ``development`` * - ``SECURE_SSL_REDIRECT`` - Redirigir HTTP a HTTPS - ``True`` (en prod) * - ``DJANGO_LOG_LEVEL`` - Nivel de log de Django - ``INFO`` Base de Datos ============== .. list-table:: :header-rows: 1 :widths: 30 40 30 * - Variable - Descripción - Valor por Defecto * - ``DATABASE_URL`` - URL de conexión PostgreSQL (formato dj-database-url) - ``postgres://noxpanel:noxpanel@db:5432/noxpanel`` * - ``POSTGRES_DB`` - Nombre de la base de datos - ``noxpanel`` * - ``POSTGRES_USER`` - Usuario de PostgreSQL - ``noxpanel`` * - ``POSTGRES_PASSWORD`` - Contraseña de PostgreSQL - ``noxpanel`` .. warning:: Cambia siempre ``POSTGRES_PASSWORD`` en producción. El valor por defecto es solo para desarrollo local. Proxmox ======== .. list-table:: :header-rows: 1 :widths: 32 38 30 * - Variable - Descripción - Valor por Defecto * - ``PROXMOX_API_INTERNAL`` - URL de la API de Proxmox (interna, desde Docker) - ``https://proxmox:8006`` * - ``PROXMOX_PUBLIC_PROXY`` - URL pública del proxy Proxmox (para VNC del cliente) - (vacío) * - ``PROXMOX_USER`` - Usuario de API de Proxmox (ej: ``root@pam``) - (vacío) * - ``PROXMOX_PASSWORD`` - Contraseña del usuario Proxmox - (vacío) * - ``PROXMOX_VERIFY_SSL`` - Verificar certificado SSL de Proxmox - ``False`` * - ``PROXMOX_SSH_PASSWORD`` - Contraseña SSH para operaciones de disco - Igual a ``PROXMOX_PASSWORD`` * - ``PROXMOX_API_PORT`` - Puerto de la API de Proxmox - ``8006`` * - ``PROXMOX_API_PROTOCOL`` - Protocolo (http/https) - ``https`` Motor de Hosting ================== .. list-table:: :header-rows: 1 :widths: 32 38 30 * - Variable - Descripción - Valor por Defecto * - ``HOSTING_PROVIDER`` - Proveedor de hosting (``ispconfig``, ``mock``) - ``mock`` * - ``ISPCONFIG_URL`` - URL del motor de hosting - ``http://hosting-core:8080`` * - ``ISPCONFIG_USERNAME`` - Usuario admin del motor de hosting - ``admin`` * - ``ISPCONFIG_PASSWORD`` - Contraseña del admin del motor de hosting - (vacío, se lee de archivo compartido) * - ``ISPCONFIG_ADMIN_PASSWORD`` - Contraseña inicial para instalación del motor de hosting - (auto-generada) * - ``HOSTING_ENABLED`` - Habilitar módulo de hosting - ``True`` * - ``MULTI_TENANT_ENABLED`` - Habilitar modo multi-tenant - ``True`` * - ``TENANT_ISOLATION_STRICT`` - Aislamiento estricto entre tenants - ``True`` * - ``SERVER_IP`` - IP pública del servidor (para registros DNS A) - ``0.0.0.0`` * - ``DEFAULT_HOSTING_QUOTA_SITES`` - Cuota por defecto de sitios - ``10`` * - ``DEFAULT_HOSTING_QUOTA_DATABASES`` - Cuota por defecto de bases de datos - ``5`` * - ``DEFAULT_HOSTING_QUOTA_DOMAINS`` - Cuota por defecto de dominios - ``5`` * - ``DEFAULT_HOSTING_QUOTA_STORAGE_GB`` - Cuota por defecto de almacenamiento (GB) - ``10`` .. note:: Si ``ISPCONFIG_PASSWORD`` no está definida en ``.env``, NoxPanel intentará leerla desde el archivo compartido ``/shared/ispconfig-passwords.env`` generado por el contenedor ``hosting-core`` durante la instalación de la plataforma de hosting. Celery (Tareas Asíncronas) ============================ .. list-table:: :header-rows: 1 :widths: 30 40 30 * - Variable - Descripción - Valor por Defecto * - ``CELERY_BROKER_URL`` - URL del broker Redis para Celery - ``redis://redis:6379/0`` * - ``CELERY_RESULT_BACKEND`` - Backend de resultados Celery - ``redis://redis:6379/0`` Tareas programadas por defecto: - ``track-vm-usage-hourly`` — Cada hora - ``track-hosting-usage-daily`` — Cada 24h - ``generate-monthly-invoices`` — Diario (genera mensualmente) - ``check-overdue-invoices`` — Cada hora - ``fetch-ticket-emails`` — Cada 5 minutos - ``check-sla-breaches`` — Cada 15 minutos - ``auto-close-resolved-tickets`` — Diariamente Stripe (Pasarela de Pago) =========================== .. list-table:: :header-rows: 1 :widths: 30 40 30 * - Variable - Descripción - Valor por Defecto * - ``STRIPE_SECRET_KEY`` - Clave secreta de Stripe - (vacío) * - ``STRIPE_PUBLISHABLE_KEY`` - Clave pública de Stripe - (vacío) * - ``STRIPE_WEBHOOK_SECRET`` - Secreto para verificar webhooks de Stripe - (vacío) PayPal (Pasarela de Pago) =========================== .. list-table:: :header-rows: 1 :widths: 30 40 30 * - Variable - Descripción - Valor por Defecto * - ``PAYPAL_MODE`` - Modo de PayPal (``sandbox`` o ``live``) - ``sandbox`` * - ``PAYPAL_CLIENT_ID`` - Client ID de PayPal - (vacío) * - ``PAYPAL_CLIENT_SECRET`` - Client Secret de PayPal - (vacío) Email (SMTP) ============= .. list-table:: :header-rows: 1 :widths: 30 40 30 * - Variable - Descripción - Valor por Defecto * - ``EMAIL_HOST`` - Servidor SMTP - ``smtp.gmail.com`` * - ``EMAIL_PORT`` - Puerto SMTP - ``587`` * - ``EMAIL_USE_TLS`` - Usar TLS - ``True`` * - ``EMAIL_HOST_USER`` - Usuario SMTP - (vacío) * - ``EMAIL_HOST_PASSWORD`` - Contraseña SMTP - (vacío) * - ``DEFAULT_FROM_EMAIL`` - Email remitente por defecto - ``noreply@`` .. note:: En modo debug (``DEBUG=True``), los emails se imprimen en la consola en lugar de enviarse por SMTP. Superusuario Inicial ===================== .. list-table:: :header-rows: 1 :widths: 35 35 30 * - Variable - Descripción - Valor por Defecto * - ``DJANGO_SUPERUSER_USERNAME`` - Nombre de usuario del superadmin - ``admin`` * - ``DJANGO_SUPERUSER_EMAIL`` - Email del superadmin - ``admin@noxpanel.local`` * - ``DJANGO_SUPERUSER_PASSWORD`` - Contraseña del superadmin - ``changeme`` * - ``DJANGO_SUPERUSER_FORCE_PASSWORD`` - Forzar cambio de contraseña al iniciar - ``False`` .. danger:: **Cambia SIEMPRE** ``DJANGO_SUPERUSER_PASSWORD`` y ``SECRET_KEY`` antes de desplegar en producción. Monitorización =============== .. list-table:: :header-rows: 1 :widths: 32 38 30 * - Variable - Descripción - Valor por Defecto * - ``SENTRY_DSN`` - DSN de Sentry para seguimiento de errores - (vacío, deshabilitado) * - ``SENTRY_TRACES_SAMPLE_RATE`` - Tasa de muestreo de trazas (0.0 - 1.0) - ``0.1`` CORS y CSRF ============= .. list-table:: :header-rows: 1 :widths: 30 40 30 * - Variable - Descripción - Valor por Defecto * - ``CORS_ALLOWED_ORIGINS`` - Orígenes permitidos para CORS - Basado en ``SITE_DOMAIN`` * - ``CSRF_TRUSTED_ORIGINS`` - Orígenes confiables para CSRF - Basado en ``SITE_DOMAIN`` * - ``COOKIE_DOMAIN`` - Dominio de cookies (ej: ``.example.com``) - (vacío) Ejemplo de Archivo .env ========================= .. code-block:: bash # === Django === SECRET_KEY=mi-clave-secreta-muy-larga-y-segura-aqui DEBUG=False ALLOWED_HOSTS=panel.example.com,localhost SITE_DOMAIN=panel.example.com SITE_NAME=NoxPanel ENVIRONMENT=production # === Base de Datos === POSTGRES_DB=noxpanel POSTGRES_USER=noxpanel POSTGRES_PASSWORD=password_seguro_aqui # === Proxmox === PROXMOX_API_INTERNAL=https://192.168.1.100:8006 PROXMOX_USER=root@pam PROXMOX_PASSWORD=proxmox_password PROXMOX_VERIFY_SSL=False # === Hosting Engine === HOSTING_PROVIDER=ispconfig SERVER_IP=203.0.113.10 # === Celery === CELERY_BROKER_URL=redis://redis:6379/0 # === Stripe === STRIPE_SECRET_KEY=sk_live_... STRIPE_PUBLISHABLE_KEY=pk_live_... STRIPE_WEBHOOK_SECRET=whsec_... # === PayPal === PAYPAL_MODE=live PAYPAL_CLIENT_ID=... PAYPAL_CLIENT_SECRET=... # === Email === EMAIL_HOST=smtp.example.com EMAIL_PORT=587 EMAIL_HOST_USER=noreply@example.com EMAIL_HOST_PASSWORD=smtp_password # === Superusuario === DJANGO_SUPERUSER_USERNAME=admin DJANGO_SUPERUSER_EMAIL=admin@example.com DJANGO_SUPERUSER_PASSWORD=password_muy_seguro