Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/alfonsoolavarria/florilegio/llms.txt

Use this file to discover all available pages before exploring further.

Desplegar Florilegio de la Fe en producción requiere atención cuidadosa a la configuración de seguridad, el servicio de archivos estáticos y la conectividad con servicios externos (Brevo, PayPal, API Bíblica). El archivo settings.py ya incluye lógica condicional para activar automáticamente las protecciones de seguridad de Django cuando DJANGO_DEBUG es False, por lo que el punto de partida es asegurarse de que las variables de entorno de producción estén correctamente configuradas.

Variables de entorno de producción

Configura las siguientes variables en el entorno del servidor (o en el archivo .env del directorio de despliegue):
DJANGO_DEBUG=False
SECRET_KEY=clave-aleatoria-larga-y-segura-de-produccion

DB_NAME=florilegiofe_prod
DB_USER=florife_user
DB_PASSWORD=contraseña-segura-de-produccion
DB_HOST=localhost
DB_PORT=5432

BREVO_API_KEY=xkeysib-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
BREVO_TEMPLATE_ID=1
BREVO_SENDER_EMAIL=noreply@florilegiodelafe.com
BREVO_SENDER_NAME=Florilegio de la Fe

PAYPAL_CLIENT_ID=AYxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PAYPAL_PLAN_PREMIUM=P-xxxxxxxxxxxxxxxxxxxxxxxx
PAYPAL_PLAN_PRO=P-xxxxxxxxxxxxxxxxxxxxxxxx
PAYPAL_PLAN_DONATION_MONTHLY=P-xxxxxxxxxxxxxxxxxxxxxxxx
PAYPAL_PLAN_DONATION_ANNUAL=P-xxxxxxxxxxxxxxxxxxxxxxxx

BIBLE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
YVP_APP_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Nunca ejecutes Florilegio con DJANGO_DEBUG=True en producción. El modo debug expone tracebacks completos con variables locales, configuración interna y rutas del sistema de archivos en cualquier página de error. Esto constituye una fuga crítica de información sensible.

ALLOWED_HOSTS

En settings.py, ALLOWED_HOSTS está definido de forma fija como:
ALLOWED_HOSTS = ['florilegiodelafe.com', 'www.florilegiodelafe.com', 'localhost', '127.0.0.1']
Si despliegas Florilegio bajo un dominio diferente, debes actualizar esta lista directamente en settings.py antes del despliegue, ya que actualmente no se configura a través de una variable de entorno.

Archivos estáticos con WhiteNoise

WhiteNoise ya está integrado en el middleware (whitenoise.middleware.WhiteNoiseMiddleware) y configurado con compresión mediante CompressedStaticFilesStorage. Antes de iniciar el servidor en producción, recolecta todos los archivos estáticos:
python manage.py collectstatic --noinput
Esto copia todos los archivos estáticos al directorio staticfiles/ en la raíz del proyecto, que es donde WhiteNoise los sirve. No se requiere un servidor web adicional (como Nginx) únicamente para servir estáticos.

Servidor WSGI con Gunicorn

Django incluye un servidor de desarrollo (runserver) que no es apto para producción. Usa Gunicorn como servidor WSGI:
pip install gunicorn
gunicorn florilegiofe.wsgi:application --bind 0.0.0.0:8000 --workers 4
El punto de entrada WSGI es florilegiofe.wsgi:application, definido en florilegiofe/wsgi.py. Ajusta --workers según los núcleos disponibles (regla general: 2 × núcleos + 1). Para un despliegue más robusto, configura Gunicorn como servicio systemd o usa un gestor de procesos como Supervisor. Complementa con Nginx como proxy inverso para gestionar conexiones SSL y cabeceras de reenvío.

HTTPS y seguridad

Cuando DJANGO_DEBUG=False, settings.py activa automáticamente las siguientes protecciones:
SECURE_SSL_REDIRECT = True           # Redirige HTTP → HTTPS
SECURE_HSTS_SECONDS = 31536000       # HSTS por 1 año
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SESSION_COOKIE_SECURE = True         # Cookies solo por HTTPS
CSRF_COOKIE_SECURE = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
El CSRF_TRUSTED_ORIGINS está configurado para el dominio de producción:
CSRF_TRUSTED_ORIGINS = [
    'https://florilegiodelafe.com',
    'https://www.florilegiodelafe.com',
]
Si usas un dominio personalizado, actualiza también esta lista en settings.py. Adicionalmente, el middleware main_florife.middleware.SecurityHeadersMiddleware (middleware personalizado del proyecto) agrega cabeceras de seguridad HTTP adicionales a todas las respuestas.

Configuración de allauth en producción

Florilegio usa django-allauth para autenticación, incluyendo inicio de sesión con Google. En producción:
  1. SITE_ID = 1 ya está definido en settings.py.
  2. Accede al panel de administración → Sites y actualiza el objeto Site con ID 1 para que el dominio sea florilegiodelafe.com (o tu dominio de producción). Allauth usa este valor para construir los enlaces en correos de verificación y callbacks OAuth.
  3. En el panel de administración → Social Applications, configura las credenciales de Google OAuth (Client ID y Secret Key) obtenidas en Google Cloud Console.
Antes de lanzar en producción, asegúrate de tener configuradas todas las credenciales de servicios externos: Brevo (para verificación de correo), PayPal (para suscripciones y donaciones), BIBLE_API_KEY (para sincronización de versiones bíblicas) y YVP_APP_KEY (para integración con YouVersion Platform). Sin estas credenciales, las funcionalidades de registro, pagos y el lector bíblico con versiones API no estarán operativas.

Sitemap

El sitemap XML está disponible en /sitemap.xml y es generado dinámicamente por django.contrib.sitemaps. Incluye las siguientes secciones:
  • Artículos (ArticleSitemap) — todas las entradas de artículos publicados.
  • Ensayos (EssaySitemap) — todos los ensayos publicados.
  • Páginas estáticas (StaticSitemap) — páginas principales del sitio.

robots.txt

El archivo robots.txt se sirve dinámicamente en /robots.txt e incluye las siguientes directivas:
User-agent: *
Disallow: /admin/
Disallow: /api/
Disallow: /accounts/
Disallow: /mis-estudios/
Disallow: /perfil/

Sitemap: https://florilegiodelafe.com/sitemap.xml
Esto protege las rutas privadas y de administración del indexado por motores de búsqueda, mientras que el enlace al sitemap ayuda a los crawlers a descubrir el contenido público.

Build docs developers (and LLMs) love