← 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 |
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