Variables definidas en Terraform
Objetivo: describir de forma detallada todas las variables definidas en
variables.tf, sus usos dentro de la infraestructura, implicaciones de seguridad y buenas prácticas.
1) Rol del archivo
El archivo variables.tf centraliza todas las variables de configuración que parametrizan la infraestructura de MediaWiki y servicios relacionados.
Estas variables permiten reutilizar módulos, controlar entornos (dev, production), y manejar credenciales/secretos sin hardcodearlos en los recursos.
Terraform las obtiene de:
- Valores por defecto (cuando existen en la definición).
- Variables de entorno (
TF_VAR_nombre). - Spacelift / CI/CD: asignadas como secretos y parámetros.
terraform.tfvarso-varen CLI.
2) Variables principales
🔹 Entorno y namespaces
-
environment_name- Nombre del entorno actual (ej:
dev,staging,prod). - Default:
"dev". - Se usa para identificar despliegues y diferenciar stacks.
- Nombre del entorno actual (ej:
-
kubeconfig_path- Ruta del archivo kubeconfig que Terraform usará para conectarse al cluster.
- Default:
~/.kube/config. - ⚠️ En CI/Spacelift debe configurarse con ruta absoluta o mediante
KUBECONFIG.
-
infra_namespace- Namespace donde viven recursos de infraestructura compartida (ej. cert-manager, monitoring).
- Default:
"infra".
-
mw_namespace- Namespace dedicado a MediaWiki.
- Default:
"mediawiki-dev". - En producción debería ajustarse a
"mediawiki-production".
-
analytics_namespace- Namespace para recursos de analítica (ej. Plausible, bases de datos).
- Default:
"analytics".
🔹 Configuración de MariaDB (MediaWiki DB)
mw_mariadb_name→ nombre de la instancia MariaDB (default"mariadb").mw_mariadb_user→ usuario principal de MediaWiki DB (default"mediawiki").mw_mariadb_password→ contraseña de usuario MediaWiki (default"mediawiki").mw_mariadb_readonly_user→ usuario de solo lectura (default"mediawiki-ro").mw_mariadb_readonly_password→ contraseña del usuario readonly (default"mediawiki-ro").mw_mariadb_database→ nombre de la base de datos a crear (default"mediawiki").mw_mariadb_root_password→ contraseña root de MariaDB (default"r00t").
⚠️ Riesgo alto: nunca usar los valores por defecto en producción. Deben sobreescribirse con secretos en Spacelift.
🔹 Cache y frontend
mw_keydb_name→ nombre de la instancia KeyDB (default"mediawiki-cache").mw_varnish_name→ nombre de la instancia Varnish (default"varnish").mw_secret_key→ clave secreta de MediaWiki para firmar cookies/tokens. Default"secret".
⚠️ Debe configurarse con un valor fuerte y seguro en producción.
🔹 Ingress y dominios
cluster_domain→ dominio interno del cluster. Default"cluster.local".base_ingress_domain→ dominio base público (ej."wikimysite.org"). Obligatorio en despliegues productivos.letsencrypt_email→ correo para certificados Let's Encrypt. Obligatorio.
🔹 Cloudflare
cf_account_id→ ID de la cuenta Cloudflare.cf_api_token→ API Token con permisos para R2 y DNS.cf_zone_name→ zona DNS (ej."wikimysite.org").
⚠️ Guardar estos valores como secretos en Spacelift. El token debe tener permisos mínimos (Buckets R2 + Zone DNS).
🔹 Grafana (OAuth GitHub)
grafana_github_client_id→ ID del cliente OAuth.grafana_github_client_secret→ secreto OAuth.- Permiten que Grafana use autenticación GitHub.
🔹 AWS / R2
Aunque el proyecto usa Cloudflare R2, la API es compatible con S3, por eso existen estas variables:
aws_endpoint→ endpoint (ej.https://<accountid>.r2.cloudflarestorage.com).aws_region→ región S3/R2. Default"us-east-1".aws_access_key_idyaws_secret_access_key→ credenciales de acceso R2.
⚠️ Nunca usar las credenciales por defecto en código. Guardarlas como secretos.
🔹 hCaptcha
hcaptcha_site_key→ clave pública del captcha.hcaptcha_secret→ clave privada para validar.
🔹 SMTP (correo saliente)
smtp_host→ host del servidor SMTP.smtp_port→ puerto.smtp_user→ usuario autenticado.smtp_password→ contraseña.
Se usa para notificaciones de MediaWiki y otros servicios.
🔹 Plausible (Analytics)
plausible_postgres_user→ usuario Postgres (default"plausible").plausible_postgres_password→ contraseña Postgres.plausible_secret_key→ clave interna de Plausible.
🔹 Better Stack (Logging/Monitoring externo)
better_stack_token→ token de la API de Better Stack. Default de ejemplo:"better-stack-token-example".
⚠️ Reemplazar por secreto real en producción.
3) Riesgos de seguridad en los defaults
El archivo define contraseñas por defecto inseguras (r00t, mediawiki, secret, etc.).
- Nunca desplegar en producción con defaults.
- Obligatorio sobreescribirlas en Spacelift (variables seguras) o en
terraform.tfvars. - Auditar que en el state de Terraform no queden secretos expuestos en texto plano.
4) Buenas prácticas aplicadas a este repo
- Guardar todas las credenciales en Spacelift → Environment Variables (Secret).
- Usar nombres distintos por entorno (
mw_namespace,environment_name) para evitar colisiones. - Rotar periódicamente contraseñas y tokens (
mw_mariadb_password,cf_api_token,aws_secret_access_key). - Usar
sopsovaultsi en algún momento se guardan.tfvarslocales.
5) Checklist de seguridad antes de despliegues
- [] Todas las contraseñas (mariadb, smtp, grafana, plausible) definidas como secrets.
- [] Token de Cloudflare (cf_api_token) actualizado y con permisos mínimos.
- [] letsencrypt_email válido (evita fallas de certificados).
- [] base_ingress_domain definido correctamente en producción.
- [] aws_access_key_id y aws_secret_access_key válidos.