2.3 KiB
2.3 KiB
Org Social Push
Backend de push notifications para la app iOS de Org Social. Escucha el stream SSE del relay y envía notificaciones APNs cuando llega una notificación para un usuario suscrito.
Endpoints
Suscribir dispositivo
POST /subscribe/
Content-Type: application/json
{
"feed": "https://example.com/social.org",
"device_token": "<iOS device token>",
"sandbox": false
}
sandbox: opcional, por defectofalse. Usartruesolo en builds instaladas directamente desde Xcode. TestFlight y App Store usanfalse.
Respuesta 201 (nuevo) o 200 (actualizado).
Desuscribir dispositivo
DELETE /unsubscribe/
Content-Type: application/json
{
"device_token": "<iOS device token>"
}
Respuesta 200 o 404 si no existe.
Despliegue
Requisitos
- Docker y Docker Compose
- Archivo
.p8de APNs (Apple Developer → Keys → APNs)
1. Clonar y configurar
git clone ssh://git@ssh.git.andros.dev:8622/org-social/org-social-push.git
cd org-social-push
cp envExample .env
nano .env
Variables obligatorias en .env:
| Variable | Descripción |
|---|---|
SECRET_KEY |
Clave secreta Django |
APNS_KEY_ID |
ID de la clave APNs (10 caracteres) |
APNS_TEAM_ID |
Team ID de Apple Developer |
APNS_BUNDLE_ID |
Bundle ID de la app iOS |
APNS_PRIVATE_KEY_PATH |
Ruta al .p8 (por defecto /app/certs/apns.p8) |
APNS_SANDBOX |
Obsoleto, ignorado. El entorno se gestiona por dispositivo con el campo sandbox del endpoint /subscribe/ |
RELAY_BASE_URL |
URL del relay (por defecto https://relay.org-social.org) |
2. Colocar la clave APNs
mkdir -p certs
cp /ruta/a/AuthKey_XXXXX.p8 certs/apns.p8
3. Arrancar
docker compose up -d --build
Servicios que levanta:
django: API REST (migraciones + uvicorn)listener: proceso que escucha el SSE del relay y despacha pushesnginx: proxy en el puertoNGINX_PORT(por defecto 8080)
Actualizar en producción
# Local
git push
# Servidor
ssh debian@home.server "cd ~/www/org-social-push && git pull && docker compose up -d --build"
Desarrollo
# Tests
docker compose run --rm django pytest app/ -v
# Lint
docker compose run --rm django ruff check .
docker compose run --rm django ruff format --check .