Ir al contenido

Infraestructura externa

Lista exhaustiva de todos los servicios externos que usa el sistema, organizados por propósito. Para cada uno indico el panel de admin, qué hace exactamente y dónde están las credenciales (sin ponerlas en plano acá).

Para quéCloud Run sirve tcgcards-api. Cloud Scheduler dispara los cron jobs. Secret Manager guarda credenciales.
Project IDapi-cards-prod
Project Number1033181994095
Regionus-central1
Panelhttps://console.cloud.google.com/?project=api-cards-prod
Cuenta adminyoeldts2@gmail.com
Costo aprox.Free tier + pequeños cobros por Cloud Run requests

Recursos clave:

  • Cloud Run service tcgcards-api
  • Cloud Scheduler jobs: orders-tick, orders-awaiting-payment-cleanup, wallet-reconcile-daily, refunds-reconcile-daily, mongo-backup-hourly
  • Secret Manager con secrets de la app (ver más abajo)
  • IAM service accounts: mongo-backup-scheduler@api-cards-prod.iam.gserviceaccount.com (dispara los crons con OIDC)

Comandos útiles:

Ventana de terminal
# Ver Cloud Run service
gcloud run services describe tcgcards-api --region us-central1 --project api-cards-prod
# Ver jobs de scheduler
gcloud scheduler jobs list --project api-cards-prod --location us-central1
# Leer un secret
gcloud secrets versions access latest --secret=<nombre> --project api-cards-prod
Para quéSirve tcgcards-web en producción. CDN propio, auto-deploy desde GitHub.
Panelhttps://vercel.com
CuentaVinculada a yoeldts2@gmail.com
PlanHobby (gratis)
Producciónhttps://tcgcards.cl
Env varsConfiguradas en Settings → Environment Variables
Para quéSirve tcgcards-docs en docs.tcgcards.cl. Protegido por Cloudflare Access.
Panelhttps://dash.cloudflare.com → Pages
PlanFree
Para quéDNS de tcgcards.cl. CDN delante del sitio. Email Routing para recibir correo. Zero Trust Access para el sitio de docs.
Panelhttps://dash.cloudflare.com
Cuentayoeldts2@gmail.com
PlanFree

Email Routing inbound:

  • soporte@tcgcards.cl → reenvía a la casilla personal
  • disputas@tcgcards.cl → reenvía a la casilla personal

Zero Trust (Access):

  • Aplicación: docs.tcgcards.cl
  • Identity provider: Google
  • Policy: whitelist por email
Para quéBase de datos primaria. Una sola colección de datos productivos (api-cards).
Panelhttps://cloud.mongodb.com
ClusterProductivo
Cuenta adminyoeldts2@gmail.com
BackupsHourly via Cloud Scheduler (job mongo-backup-hourly)
Retention objetivo (RPO)~1 hora
Connection stringVive en GCP Secret Manager como MONGODB_URI. NO hardcodeada.
Para quéCobros y reembolsos. Único procesador de pagos.
Panelhttps://www.mercadopago.cl/developers/panel
CuentaVinculada a la cuenta de tcgcards en MP
CredencialesMP_ACCESS_TOKEN y MP_WEBHOOK_SECRET en GCP Secret Manager
Webhook URLhttps://tcgcards-api-1033181994095.us-central1.run.app/v1/webhooks/mp
EntornoProducción (PROD). El TEST usa prefijo APP_USR- desde 2026.
Para quéStorage + CDN de imágenes subidas por usuarios (fotos de listings, foto de perfil). Transformaciones automáticas (resize, crop, format webp).
Panelhttps://cloudinary.com/console
Cloud nameVive en CLOUDINARY_CLOUD_NAME (Secret Manager)
PlanFree tier
UploadsFirmados desde el backend (/v1/uploads/...)
Para quéEnvío de correos transaccionales (órdenes, disputas, etc.).
Panelhttps://resend.com
API keyRESEND_API_KEY en Secret Manager
From emailnotificaciones@tcgcards.cl (configurado en RESEND_FROM_EMAIL)
Dominio verificadotcgcards.cl (SPF + DKIM en Cloudflare DNS)

Para envío manual de correos (avisos, comunicaciones): se usa Gmail con “Send As” desde la cuenta personal, configurada para enviar como notificaciones@tcgcards.cl via SMTP de Resend.

Para quéErrores frontend (web) + backend (api).
Panelhttps://sentry.io
Cuentayoeldts2@gmail.com
Proyectosuno para web, uno para api
DSNEn env vars de Vercel (web) y Secret Manager (api)
Para quéEventos de producto y analytics. Solo en frontend.
Panelhttps://app.posthog.com
Cuentayoeldts2@gmail.com
API keyEnv var pública en Vercel (NEXT_PUBLIC_POSTHOG_KEY)
Para quéMétricas web (tráfico, web vitals).
Panelhttps://vercel.com/dashboard → Analytics
PlanFree tier (incluido)
Para quéProvider de OAuth para login con Google.
Panelhttps://console.cloud.google.com/apis/credentials?project=api-cards-prod
OAuth Client IDConfigurado en AUTH_GOOGLE_ID (Vercel env)
OAuth Client SecretConfigurado en AUTH_GOOGLE_SECRET (Vercel env)
Redirect URIs autorizadoshttps://tcgcards.cl/api/auth/callback/google, http://localhost:3000/api/auth/callback/google

Para evitar confusión cuando alguien pregunte “¿no usamos X?”:

  • Stripe / Webpay / Flow — solo Mercado Pago
  • S3 / Cloud Storage para imágenes — solo Cloudinary
  • Redis / Memcached — sin cache de aplicación (solo Next.js fetch cache)
  • Kafka / SQS / colas — todas las acciones son síncronas o cron
  • CI/CD propio — Vercel (auto) y Cloud Run (manual)
  • Docker compose local — Mongo local con Atlas connection string o mongodb-memory-server para tests

Quick reference de dónde está guardada cada credencial:

CredencialUbicación primaria
MONGODB_URIGCP Secret Manager (api-cards-prod)
ADMIN_TOKENGCP Secret Manager
INTERNAL_JWT_SECRETGCP Secret Manager (mismo valor en Vercel)
INTERNAL_AUTH_SECRETGCP Secret Manager (mismo valor en Vercel)
INTERNAL_CRON_SECRETGCP Secret Manager (también en Cloud Scheduler como X-Internal-Cron-Secret header)
CLOUDINARY_API_SECRETGCP Secret Manager
RESEND_API_KEYGCP Secret Manager
MP_ACCESS_TOKENGCP Secret Manager
MP_WEBHOOK_SECRETGCP Secret Manager
BANK_ACCOUNT_ENCRYPTION_KEYGCP Secret Manager
AUTH_SECRET (Auth.js)Vercel env
AUTH_GOOGLE_ID / AUTH_GOOGLE_SECRETVercel env (config en Google Cloud Console)
SENTRY_DSN (web)Vercel env
SENTRY_DSN (api)GCP Secret Manager

Ver runbooks para cómo rotar cada una.