Files

104 lines
2.3 KiB
Markdown

# Org Social Push
Backend de push notifications para la app iOS de [Org Social](https://github.com/tanrax/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 defecto `false`. Usar `true` solo en builds instaladas directamente desde Xcode. TestFlight y App Store usan `false`.
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 `.p8` de APNs (Apple Developer → Keys → APNs)
### 1. Clonar y configurar
```bash
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
```bash
mkdir -p certs
cp /ruta/a/AuthKey_XXXXX.p8 certs/apns.p8
```
### 3. Arrancar
```bash
docker compose up -d --build
```
Servicios que levanta:
- `django`: API REST (migraciones + uvicorn)
- `listener`: proceso que escucha el SSE del relay y despacha pushes
- `nginx`: proxy en el puerto `NGINX_PORT` (por defecto 8080)
### Actualizar en producción
```bash
# Local
git push
# Servidor
ssh debian@home.server "cd ~/www/org-social-push && git pull && docker compose up -d --build"
```
## Desarrollo
```bash
# 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 .
```