Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
163 lines (143 loc) · 8.05 KB
/
Copy path.env.example
File metadata and controls
163 lines (143 loc) · 8.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# =========================================================================
# Mantra Core Technologies · ALOVIDA Health Ecosystem — Frontend
# Plantilla de entorno — copiar a .env y ajustar. Valores de desarrollo.
# No poner secretos acá: este archivo llega al navegador por definición.
#
# OJO, esto es un frontend Angular y funciona distinto al repo de la API:
# Angular no lee .env por su cuenta. Las variables `PUBLIC_*` de abajo las
# traduce `scripts/generate-env.mjs` a `src/environments/env.generated.ts`
# antes de cada `yarn start`, `build`, `watch` y `test`; el resto lo consumen el
# servidor de SSR y docker-compose, que leen el entorno directo.
#
# Todas las variables tienen valor por defecto: sin .env el proyecto levanta
# igual. Este archivo existe para poder cambiarlas sin editar código.
#
# NADA de lo que se ponga en una variable `PUBLIC_*` es secreto: se compila
# dentro del JavaScript que descarga el navegador y se lee con abrir las
# herramientas de desarrollo. El generador rechaza lo que parezca credencial
# (nombres tipo SECRET/PASSWORD/TOKEN/KEY, JWTs, claves PEM, URLs con
# usuario:contraseña@) para que el error salte al compilar y no en producción.
# Lo que necesite ser secreto va en el .env de la API, que no llega al cliente.
# =========================================================================
# --- Aplicación en el navegador (variables PUBLIC_*) -------------------------
# Las lee `scripts/generate-env.mjs` y terminan compiladas en el paquete.
# Son las únicas que cruzan del entorno al código del cliente: el generador
# tiene una lista fija (su MANIFIESTO) y no mira ninguna otra clave de este
# archivo, así que agregar variables acá no expone nada por accidente.
# Raíz de la API a la que pide el navegador.
#
# VACÍO (el valor recomendado, y el de por defecto) = rutas relativas: la
# aplicación pide a `/iam/...` sobre su propio origen, y eso lo resuelve el
# proxy en desarrollo o el mismo servidor web en un despliegue. Sin CORS y sin
# el dominio de la API quemado en el paquete.
#
# Solo se define si la API vive en otro dominio, y entonces va la raíz completa
# y absoluta: https://api.ejemplo.com. Sin barra final, sin query, sin
# fragmento y sin credenciales en la URL — el generador aborta si las lleva.
PUBLIC_API_BASE_URL=
# --- Servidor de SSR (producción) --------------------------------------------
# Puerto en el que escucha el Express de `src/server.ts`, el que sirve la
# aplicación ya construida (`yarn serve:ssr:mantra-core-health`).
# Es la ÚNICA variable de entorno que lee el código de este repo (server.ts:55).
# No afecta a `yarn start`: el dev server usa el 4200 de angular.json.
PORT=4000
# Dominios públicos que el servidor de SSR acepta atender, separados por coma.
#
# ESTA VARIABLE DECIDE SI HAY SSR. El motor de Angular compara el `Host` de cada
# petición contra su lista; si el dominio no está, **no falla**: responde 200
# degradando a renderizado de cliente. La página funciona, más lenta y sin
# prerenderizado, y nadie se entera. Este proyecto ya lo vivió.
#
# `angular.json` (`security.allowedHosts`) ya declara lo que se conoce al
# construir: localhost, 127.0.0.1, mantra-core-health.local y `frontend`, el
# servicio de compose. Lo de acá se SUMA a eso, y existe porque el dominio
# público cambia por entorno y no se sabe al compilar.
#
# Va sin esquema, sin ruta y sin barras. El comodín `*` se rechaza a propósito:
# apagaría la única comprobación que hay contra SSRF.
#
# SSR_ALLOWED_HOSTS=salud.example.bo,www.salud.example.bo
SSR_ALLOWED_HOSTS=
# --- Docker Compose ----------------------------------------------------------
# Solo las lee `docker-compose.yml`. Compose toma el `.env` de esta carpeta.
# Puerto del host donde queda publicado el dev server. Cambialo si el 4200 ya
# está ocupado; adentro del contenedor sigue siendo 4200.
FRONTEND_PORT=4200
# Origen al que el proxy reenvía /iam, /public, /terminology, /profiles,
# /identity y /common (la lista está en `proxy.conf.docker.json`).
#
# `host.docker.internal` es el host visto desde el contenedor: es lo correcto
# mientras la API corra con `yarn start:prod` en tu máquina. Dentro del
# contenedor `localhost` sería el contenedor mismo, y el proxy no encontraría
# nada.
#
# Si algún día la API corre como otro servicio del mismo compose, acá va el
# nombre de ese servicio (p. ej. http://api:3000).
BACKEND_ORIGIN=http://host.docker.internal:3000
# =========================================================================
# Telemetría (trazas OpenTelemetry → Collector → Jaeger)
# =========================================================================
#
# Todo esto se empaqueta en el JavaScript que descarga el navegador, igual que
# el resto de las `PUBLIC_*`. No hay ninguna clave acá y no puede haberla: el
# endpoint de trazas no se autentica desde el cliente. Lo protege el servidor.
#
# Apagada por defecto. Encenderla sin un Collector escuchando no rompe nada
# —la aplicación funciona igual y el fallo de exportación es silencioso— pero
# llena la pestaña de red de peticiones fallidas.
#
# Para verla funcionando en local:
# docker compose -f infra/otel-collector/docker-compose.observability.yml up -d
# PUBLIC_TELEMETRY_ENABLED=true en este archivo
# yarn start → Jaeger en http://localhost:16686
PUBLIC_TELEMETRY_ENABLED=false
# A dónde manda las trazas el navegador. Relativo: mismo origen, lo reenvía
# `src/server.ts` al Collector. Cambiarlo a otro origen obliga a abrir
# `connect-src` en src/server/security-headers.ts — el generador avisa.
PUBLIC_TELEMETRY_TRACES_ENDPOINT=/otel/v1/traces
# Proporción de trazas conservadas, de 0 a 1. La decisión se hereda: una traza
# muestreada llega completa hasta la base de datos del backend.
# desarrollo 1 · preproducción 1 · producción 0.1 como punto de partida
PUBLIC_TELEMETRY_SAMPLE_RATIO=1
# Cómo aparece el navegador en Jaeger. Distinto del servidor (mantra-angular-ssr)
# a propósito: Jaeger agrupa por este campo.
PUBLIC_TELEMETRY_SERVICE_NAME=mantra-angular-web
PUBLIC_TELEMETRY_NAMESPACE=mantra
PUBLIC_TELEMETRY_ENVIRONMENT=development
# --- Interacciones para los mapas de calor (navegador → API) ---
#
# Vistas de página, clics, foco de campos y abandono, en lotes a
# POST /telemetry/activity-events. Apagado por defecto. Necesita el id de un
# esquema registrado en la API (POST /telemetry/event-schemas, rol
# SECURITY_ADMIN); sin él no se enciende. Pasos y consulta del mapa en
# docs/observability/analytics-events.md.
PUBLIC_UX_ANALYTICS_ENABLED=false
# PUBLIC_UX_ANALYTICS_EVENT_SCHEMA_ID=00000000-0000-0000-0000-000000000000
# Proporción de SESIONES capturadas, de 0 a 1 (se decide una vez por pestaña).
PUBLIC_UX_ANALYTICS_SAMPLE_RATIO=1
# --- Solo del servidor: NO se empaqueta, no lleva prefijo PUBLIC_ ---
#
# A dónde manda las trazas el proceso de SSR, y a dónde reenvía las del
# navegador. Es una dirección interna que el navegador nunca ve.
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
OTEL_SSR_ENABLED=false
# =========================================================================
# Lo que NO se configura acá, y dónde vive
# =========================================================================
#
# Los valores por defecto de la aplicación (los que se usan si no hay .env)
# → src/environments/environment.ts (producción)
# → src/environments/environment.development.ts (desarrollo)
# `angular.json` intercambia uno por el otro con `fileReplacements`. Ninguno
# de los dos guarda valores concretos: solo el respaldo de lo que no venga
# por entorno. Los valores reales entran por `PUBLIC_*` (arriba), que el
# generador deja en `src/environments/env.generated.ts` — archivo generado,
# fuera del control de versiones, no se edita a mano.
#
# El proxy del host (`yarn start` sin Docker)
# → proxy.conf.json — JSON estático, apunta a localhost:3000.
# La variante del contenedor es proxy.conf.docker.json.
#
# Credenciales de la cuenta de demostración
# → las siembra la API con BOOTSTRAP_ADMIN_EMAIL / BOOTSTRAP_ADMIN_PASSWORD
# en el .env del repo mantra-core-health-redesa-api, no acá.