Ir al contenido

Autoalojamiento

El autoalojamiento es para usuarios que desean controlar las rutas de datos, la política de autenticación, las bases de datos, los transportes privados y MCP/OAuth. El Gateway es un servicio Rust. Las API HTTP, WSS y MCP/OAuth comparten un escucha HTTP; QUIC y Raw TCP utilizan direcciones de escucha independientes.

  • No desea que la notificación, el evento o el estado de la entidad pasen por un Gateway público.
  • Necesita su propia base de datos, copias de seguridad, registros, monitoreo y política de capacidad.
  • Quieres una sincronización de transporte privado de Android con menor latencia.
  • Quieres MCP/OAuth en tu propio dominio.
  • Necesita un token Bearer a nivel de Gateway para restringir a las personas que llaman.

Si solo desea probar PushGo, utilice el Gateway público y siga Introducción.

NivelLo mejor paraConfiguración principal
MínimoPruebas locales, scripts de usuario únicoAPI SQLite + HTTP
Base de producciónDominio público de larga duraciónProxy inverso HTTPS + base de datos persistente + token Bearer
Transportes privadosSincronización de baja latencia de AndroidWSS, luego opcional QUIC / Raw TCP
Integración de IAClientes MCP y asistentes de IAMCP/OAuth + PUSHGO_PUBLIC_BASE_URL

La configuración mínima sólo necesita una base de datos y un oyente HTTP.

Ventana de terminal
mkdir -p /var/lib/pushgo
docker run -d --name pushgo-gateway \
-p 6666:6666 \
-e PUSHGO_HTTP_ADDR=0.0.0.0:6666 \
-e PUSHGO_DB_URL='sqlite:///var/lib/pushgo/pushgo.db?mode=rwc' \
-v /var/lib/pushgo:/var/lib/pushgo \
ghcr.io/aldenclark/pushgo-gateway:latest

Pruébalo:

Ventana de terminal
curl -X POST http://127.0.0.1:6666/message \
-H "Content-Type: application/json" \
-d '{
"channel_id": "YOUR_CHANNEL_ID",
"password": "YOUR_CHANNEL_PASSWORD",
"title": "Private Gateway test",
"body": "This message came from your own Gateway."
}'

La configuración mínima es útil para la validación. No lo exponga directamente a la Internet pública.

Para la producción, al menos:

  1. Vincule el Gateway al host local o a una red privada.
  2. Coloque Nginx, Caddy o un equilibrador de carga al frente con HTTPS.
  3. Configure PUSHGO_TOKEN para la autenticación Bearer a nivel de Gateway.
  4. Utilice almacenamiento persistente e inclúyalo en las copias de seguridad.
  5. Configure PUSHGO_PUBLIC_BASE_URL y PUSHGO_TOKEN_SERVICE_URL explícitamente.
Ventana de terminal
docker run -d --name pushgo-gateway \
-p 127.0.0.1:6666:6666 \
-e PUSHGO_HTTP_ADDR=0.0.0.0:6666 \
-e PUSHGO_DB_URL='postgres://user:pass@db:5432/pushgo' \
-e PUSHGO_TOKEN='replace-with-gateway-token' \
-e PUSHGO_PUBLIC_BASE_URL='https://gateway.example.com' \
-e PUSHGO_TOKEN_SERVICE_URL='https://token.pushgo.dev' \
ghcr.io/aldenclark/pushgo-gateway:latest

Después de configurar PUSHGO_TOKEN, las peticiones de API necesitan:

Authorization: Bearer replace-with-gateway-token

El ID de Channel y la contraseña de Channel aún pertenecen al cuerpo de la petición. Consulte Autenticación para conocer la diferencia entre las dos capas.

Si el Gateway necesita servicio de token, configure la región explícitamente.

RegiónGatewayservicio de token
Mundialhttps://gateway.pushgo.dev/https://token.pushgo.dev/
China continentalhttps://gateway.pushgo.cn/https://token.pushgo.cn/

Un Gateway privado aún puede usar el servicio de token público o cambiar a otro servicio a medida que evoluciona su implementación.

Las API HTTP, WSS y MCP/OAuth comparten el escucha HTTP. El proxy inverso debe admitir la actualización normal de HTTP y WebSocket.

server {
listen 443 ssl http2;
server_name gateway.example.com;
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
location / {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://127.0.0.1:6666;
}
}

PUSHGO_PUBLIC_BASE_URL debe ser la raíz HTTPS accesible externamente. De lo contrario, los metadatos del emisor MCP, los enlaces de enlace y las sugerencias del perfil del cliente pueden contener direcciones internas.

Los transportes privados están habilitados con PUSHGO_PRIVATE_TRANSPORTS. Comience con wss; Reutiliza HTTPS y es la opción menos compleja.

Ventana de terminal
PUSHGO_PRIVATE_TRANSPORTS=wss
PUSHGO_PUBLIC_BASE_URL=https://gateway.example.com

Agregue QUIC / Raw TCP cuando necesite una latencia más baja o opere en una red controlada.

Ventana de terminal
PUSHGO_PRIVATE_TRANSPORTS=quic,tcp,wss
PUSHGO_PRIVATE_QUIC_BIND=0.0.0.0:5223
PUSHGO_PRIVATE_QUIC_PORT=5223
PUSHGO_PRIVATE_TCP_BIND=0.0.0.0:5223
PUSHGO_PRIVATE_TCP_PORT=5223
PUSHGO_PRIVATE_TLS_CERT=/certs/fullchain.pem
PUSHGO_PRIVATE_TLS_KEY=/certs/privkey.pem
ConfiguraciónDescripción
PUSHGO_PRIVATE_TRANSPORTSfalse, true, none o lista explícita como wss o quic,tcp,wss.
PUSHGO_PRIVATE_QUIC_BINDDirección UDP local en la que escucha el Gateway.
PUSHGO_PRIVATE_QUIC_PORTPuerto QUIC anunciado a los clientes.
PUSHGO_PRIVATE_TCP_BINDDirección TCP local en la que escucha el Gateway.
PUSHGO_PRIVATE_TCP_PORTPuerto Raw TCP anunciado a los clientes.
PUSHGO_PRIVATE_TLS_CERT / PUSHGO_PRIVATE_TLS_KEYRequerido para QUIC; También se requiere para Raw TCP a menos que se descargue TLS.
PUSHGO_PRIVATE_TCP_TLS_OFFLOADSi la infraestructura de borde maneja Raw TCP TLS.
PUSHGO_PRIVATE_TCP_PROXY_PROTOCOLSi el punto de entrada Raw TCP espera el protocolo PROXY v1.

PushGo QUIC utiliza un ALPN personalizado (pushgo-quic) y no puede simplemente compartir el mismo punto de entrada UDP/443 con HTTP/3. Utilice un puerto UDP independiente o confirme que su proxy perimetral pueda enrutarse por protocolo correctamente.

##MCP / OAuth

Habilite MCP con:

Ventana de terminal
PUSHGO_MCP_ENABLED=true
PUSHGO_PUBLIC_BASE_URL=https://gateway.example.com

Configuraciones comunes:

Variable de entornoPredeterminadoDescripción
PUSHGO_MCP_DCR_ENABLEDtrueHabilita el registro dinámico de clientes.
PUSHGO_MCP_PREDEFINED_CLIENTSningunoClientes OAuth predefinidos en formato client_id:client_secret.
PUSHGO_MCP_ACCESS_TOKEN_TTL_SECS900Duración del token de acceso.
PUSHGO_MCP_REFRESH_TOKEN_ABSOLUTE_TTL_SECS2592000Actualizar la vida útil absoluta del token.
PUSHGO_MCP_REFRESH_TOKEN_IDLE_TTL_SECS604800Actualizar la vida útil del token inactivo.
PUSHGO_MCP_BIND_SESSION_TTL_SECS600Duración de la sesión de vinculación de Channel.

Consulte la Referencia MCP para conocer las herramientas y el flujo de autorización.

CLI/var entornoPredeterminadoDescripción
--http-addr / PUSHGO_HTTP_ADDR127.0.0.1:6666API HTTP, WSS y escucha MCP/OAuth.
--db-url / PUSHGO_DB_URLrequeridoURL de la base de datos; admite SQLite, PostgreSQL y MySQL.
--token / PUSHGO_TOKENningunoToken Bearer a nivel de Gateway. Vacío significa deshabilitado.
--token-service-url / PUSHGO_TOKEN_SERVICE_URLhttps://token.pushgo.devURL del servicio de token. Establecer explícitamente en producción.
--public-base-url / PUSHGO_PUBLIC_BASE_URLningunoURL raíz externa de HTTPS.
--sandbox-mode / PUSHGO_SANDBOX_MODEfalseModo Sandbox, incluido el punto final de Sandbox APNs.
--observability-profile / PUSHGO_OBSERVABILITY_PROFILEprod_minPerfil de observabilidad: prod_min, ops, incident, debug.
--observability-log-level / PUSHGO_OBSERVABILITY_LOG_LEVELwarnNivel de registro de seguimiento nativo.
  • Incluir la base de datos en las copias de seguridad; Los canales, los dispositivos, las concesiones MCP y el estado de la entidad dependen del almacenamiento persistente.
  • SQLite es adecuado para implementaciones personales o ligeras; prefiera PostgreSQL para uso multiusuario o de alta concurrencia.
  • Para cargas elevadas, inspeccione las colas de despacho y los trabajadores antes de asumir un problema con el proveedor o la base de datos.
  • Utilice PUSHGO_OBSERVABILITY_PROFILE=ops para solucionar problemas de producción; elevar temporalmente a incident o debug para una investigación más profunda.
  • Para problemas de transporte privado de Android, comience con /gateway/profile y puertos accesibles externamente.

Configuraciones relacionadas con la capacidad:

Variable de entornoDescripción
PUSHGO_DISPATCH_WORKER_COUNTAnula el recuento de trabajadores despachados.
PUSHGO_DISPATCH_QUEUE_CAPACITYAnula la capacidad de la cola de despacho.
PUSHGO_PRIVATE_FALLBACK_TASK_QUEUE_CAPACITYCapacidad de la cola de tareas de reserva de transporte privado.
PUSHGO_PRIVATE_CONNECTION_QUEUE_CAPACITYCapacidad de cola de entrega privada por conexión.
PUSHGO_APNS_MAX_IN_FLIGHTMax APNs envía en vuelo por proceso.
PUSHGO_DISPATCH_TARGETS_CACHE_TTL_MSEnviar caché de destino TTL.
PUSHGO_SQLITE_PAGE_CACHE_KIBDestino de caché de página SQLite.
PUSHGO_SQLITE_WAL_AUTOCHECKPOINTRecuento de páginas de punto de control automático SQLite WAL.
  • Haga una copia de seguridad de la base de datos y de la configuración del tiempo de ejecución antes de actualizar.
  • Mantenga rastreables la imagen/binario de Gateway, las variables de entorno y la configuración de proxy inverso.
  • Validar /message, /event/create y /thing/create con un canal de prueba.
  • Si los transportes privados están habilitados, verifique que los clientes de Android puedan recuperar el /gateway/profile actualizado.
  • Si MCP está habilitado, verifique que /.well-known/*, /oauth/* y /mcp sigan usando la dirección externa HTTPS.