You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
4.9 KiB
99 lines
4.9 KiB
# --- Base de datos -----------------------------------------------------------
|
|
# En local basta un archivo SQLite. En producción, la URL de Turso (libsql://…).
|
|
DATABASE_URL=postgresql://senza_paura_web:CLAVE@192.168.18.171:5432/senzapaura
|
|
|
|
# --- Audio -------------------------------------------------------------------
|
|
# Directorio privado con los archivos completos. NO debe servirse como estático:
|
|
# es lo que se entrega solo a quien ha comprado. Las canciones completas de
|
|
# escucha viven a menor calidad en static/escucha/ y son públicas.
|
|
MEDIA_DIR=./media/audio
|
|
|
|
# --- Pagos (Stripe) ----------------------------------------------------------
|
|
# Sin estas claves la tienda funciona salvo el cobro: el botón de pagar avisa.
|
|
STRIPE_SECRET_KEY=
|
|
# Secreto del endpoint /api/stripe/webhook. En local sale de:
|
|
# stripe listen --forward-to localhost:5173/api/stripe/webhook
|
|
STRIPE_WEBHOOK_SECRET=
|
|
|
|
# --- Entrar con Google / Facebook --------------------------------------------
|
|
# Sin estas claves, los botones no se pintan y solo queda el código por correo:
|
|
# un botón de «Continuar con Google» sin configurar solo lleva a un error.
|
|
#
|
|
# La dirección de retorno tiene que estar dada de alta EXACTA en cada consola,
|
|
# y ser la misma que ORIGIN de más abajo:
|
|
#
|
|
# https://senzapaura.es/acceso/google/retorno
|
|
# https://senzapaura.es/acceso/facebook/retorno
|
|
#
|
|
# En desarrollo, además, esta otra (Google la admite; Facebook no):
|
|
#
|
|
# http://localhost:5173/acceso/google/retorno
|
|
#
|
|
# Un aviso que cuesta días si se descubre tarde: Facebook exige HTTPS y, para
|
|
# que lo pueda usar cualquiera y no solo los administradores de la app, pasar
|
|
# su verificación de empresa y la revisión del permiso `email`. Google es más
|
|
# rápido, pero también pide pantalla de consentimiento y el dominio verificado
|
|
# en Search Console.
|
|
#
|
|
# Google: https://console.cloud.google.com/apis/credentials
|
|
# Tipo «ID de cliente de OAuth» → «Aplicación web».
|
|
# Facebook: https://developers.facebook.com/apps → producto «Inicio de sesión».
|
|
GOOGLE_CLIENT_ID=
|
|
GOOGLE_CLIENT_SECRET=
|
|
FACEBOOK_CLIENT_ID=
|
|
FACEBOOK_CLIENT_SECRET=
|
|
|
|
# --- Correo (Resend) ---------------------------------------------------------
|
|
# Manda los códigos de acceso y los mensajes del formulario de contacto.
|
|
# Sin RESEND_API_KEY, en desarrollo el código se imprime por consola.
|
|
RESEND_API_KEY=
|
|
CONTACTO_DESTINO=hola@senzapaura.es
|
|
CONTACTO_REMITENTE="Web Senza Paura <web@senzapaura.es>"
|
|
|
|
# --- Servidor ----------------------------------------------------------------
|
|
# adapter-node necesita conocer el origen público para validar los formularios.
|
|
# En el servidor va https://senzapaura.es; en local, el puerto de desarrollo.
|
|
# Si no coincide con la dirección por la que se entra de verdad, SvelteKit
|
|
# rechaza todos los formularios con un 403 y parece que la web está rota.
|
|
ORIGIN=http://localhost:3000
|
|
|
|
# --- Página de «muy pronto» --------------------------------------------------
|
|
# Con esto encendido, quien llegue de fuera ve la página de espera y nadie más
|
|
# que la lista de abajo ve la web. Apagado salvo que se diga: una web que se
|
|
# esconde sola porque falta una variable es peor fallo que una que se ve cuando
|
|
# no tocaba.
|
|
#
|
|
# La red local (192.168.x, 10.x, 172.16-31.x) y el propio equipo entran siempre,
|
|
# sin ponerlos aquí: encender el portón y quedarse fuera uno mismo es la forma
|
|
# más rápida de no poder comprobar si funciona.
|
|
#
|
|
# Aquí van las direcciones de fuera que sí pueden mirar: la tuya cuando estés en
|
|
# otro sitio, la de quien tenga que revisar. Direcciones sueltas o rangos:
|
|
# PROXIMAMENTE_PERMITIDAS=89.46.247.16,85.60.0.0/16
|
|
#
|
|
# En este montaje hay que poner ahí la IP pública de la propia línea —fija y
|
|
# contratada como tal— aunque se mire desde casa: el router hace NAT de retorno,
|
|
# así que una petición al dominio desde la red local llega al proxy con la IP
|
|
# pública y no con la 192.168. Sin ella verías tu propia página de espera.
|
|
#
|
|
# IMPORTANTE: con un proxy delante hay que poner también ADDRESS_HEADER y
|
|
# XFF_DEPTH, aquí abajo. Sin ellas todas las peticiones parecen venir del proxy
|
|
# —una IP local—, así que el portón deja pasar a todo el mundo y no se nota.
|
|
PROXIMAMENTE=
|
|
PROXIMAMENTE_PERMITIDAS=
|
|
|
|
# --- Detrás de un proxy inverso ----------------------------------------------
|
|
# Solo en el servidor, y solo si hay un proxy delante (Nginx, Nginx Proxy
|
|
# Manager, Caddy…). En local se dejan vacías.
|
|
#
|
|
# Sin esto, `getClientAddress()` devuelve la IP del proxy en vez de la de quien
|
|
# pide. Y esa función es la que usa el limitador del formulario de acceso: con
|
|
# todas las peticiones pareciendo venir de la misma dirección, el límite salta
|
|
# con una sola persona insistiendo y nadie más puede pedir su código.
|
|
#
|
|
# XFF_DEPTH es el número de proxies entre internet y Node, contando desde el
|
|
# final de la cadena. Uno solo → 1. Si algún día se mete un Cloudflare delante,
|
|
# pasa a 2; equivocarlo deja la IP a merced de quien mande su propia cabecera.
|
|
ADDRESS_HEADER=
|
|
XFF_DEPTH=
|