Saltar a contenido

← Volver al índice

Gorush — Guía de Setup y Configuración

Tipo: Documentación Técnica — Infraestructura
Estado: ✅ Completo
Relacionado con: Auditoría dkv-notifications


1. ¿Qué es Gorush?

Gorush es un microservicio open source escrito en Go que actúa como gateway de notificaciones push. Es stateless, ultraligero (<20MB RAM) y soporta fan-out concurrente a gran escala.

Característica Valor
Lenguaje Go
Versión en DKV 1.16.0
Imagen ghcr.io/jaraxasoftware/gorush:1.16.0
Puerto 8088
API POST /send
Stateless Sí — no almacena estado
Memoria <20MB RAM

2. Plataformas soportadas

iOS — Apple Push Notification service (APNs)

Requisito Detalle Cómo obtenerlo
Certificado .pem Certificado de push firmado por Apple Apple Developer Console → Certificates → Push Notification
Password del cert Clave del archivo .pem Se define al exportar el certificado
Bundle ID Identificador de la app iOS Registrado en Apple Developer
Production true para producción, "" para sandbox Según el entorno
# gorush.config - sección iOS
ios:
  enabled: true
  key_path: "/certificates/dkv-push.pem"
  password: "[REDACTED]"
  production: ""      # sandbox
  voip_enabled: true   # llamadas VoIP push
  voip_key_path: "/certificates/dkv-push.pem"
  max_concurrent_pushes: 100

[!IMPORTANT] El certificado APNs caduca cada 12 meses. Hay que renovarlo anualmente en la Apple Developer Console. Verificar vigencia del push.pem existente.

Android — Firebase Cloud Messaging (FCM)

Requisito Detalle Cómo obtenerlo
API Key Server key de FCM Firebase Console → Project Settings → Cloud Messaging
Sender ID ID del proyecto Firebase Firebase Console → Project Settings → General
# gorush.config - sección Android
android:
  enabled: true
  apikey: "[REDACTED - FCM Server Key]"
  max_retry: 0

[!WARNING] La API key legacy de FCM está siendo deprecada por Google. Migrar a FCM v1 HTTP API (OAuth2) cuando se actualice Gorush.

Web Push — VAPID

Requisito Detalle Cómo obtenerlo
VAPID Public Key Clave pública Se genera con web-push generate-vapid-keys
VAPID Private Key Clave privada Se genera con el mismo comando
# gorush.config - sección Web Push
web:
  enabled: true
  vapid_public_key: "[auto-generated]"
  vapid_private_key: "[auto-generated]"

3. Configuración completa — gorush.config

core:
  enabled: true
  address: ""
  port: "8088"
  worker_num: 0        # 0 = auto (usa todos los cores)
  queue_num: 0          # 0 = auto
  max_notification: 100 # máx notificaciones en cola
  sync: true            # modo síncrono
  mode: "release"       # release | debug

api:
  push_uri: "/send"        # endpoint principal
  stat_go_uri: "/stat/go"  # runtime stats
  health_uri: "/healthz"   # health check
  metric_uri: "/metrics"   # prometheus metrics

stat:
  engine: "memory"   # memory | redis | boltdb | leveldb

4. Docker Compose — Despliegue

pet-notifications-gorush:
  image: ghcr.io/jaraxasoftware/gorush:1.16.0
  ports:
    - 0.0.0.0:8088:8088
  volumes:
    - ./docker/gorush/gorush.config:/config/config.yml
    - ./docker/gorush/push.pem:/certificates/dkv-push.pem
  depends_on:
    - pet-notifications
  networks:
    - monitoring
    - backend

Archivos necesarios

Archivo Descripción
docker/gorush/gorush.config Configuración YAML completa
docker/gorush/push.pem Certificado APNs de DKV

5. Payload de ejemplo

{
  "notifications": [
    {
      "tokens": ["device_token_1", "device_token_2"],
      "platform": 2,
      "message": "Tu mascota tiene una consulta pendiente",
      "title": "DKV Mascotas",
      "topic": "com.dkv.mascotas",
      "data": {
        "deep_link": "dkvpet://consultation/123",
        "consultation_id": "123"
      },
      "sound": "default",
      "badge": 1,
      "mutable_content": true
    }
  ]
}

Plataformas: 1 = iOS, 2 = Android, 5 = Web Push (Huawei = 3)


6. Para Pet Flows — Integración

Fase 1 (coexistencia): Pet Flows → dkv-notifications → Gorush

Pet Flows API (Quarkus)
    └── POST http://dkv-notifications:9111/api/v1
            └── dkv-notifications routea a Gorush
                    └── POST http://gorush:8088/send

Fase 2 (absorción): Pet Flows → Gorush directo

# dapr/components/gorush-binding.yaml
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: gorush-push
spec:
  type: bindings.http
  metadata:
    - name: url
      value: "http://gorush:8088/send"
    - name: direction
      value: "output"

Documentos Relacionados

Nivel Documento
Auditoría dkv-notifications
Arquitectura Arquitectura del Sistema