main
manage.py check booted a full Django interpreter every 30s (~1.5s CPU per run) and never verified the server was actually responding. Probe the HTTP endpoint directly instead and relax the interval.
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 .
Languages
Python
96.9%
Dockerfile
1.9%
Shell
1.2%