⠀⠀⠀
⠀⠀⠀Descarga y empaqueta varios instaladores en un solo trabajo. La interfaz queda disponible en http://localhost:3000.
Antes del primer arranque, copia .env.example como .env y cambia sus credenciales.
docker compose up --build --force-recreate# Ver los nombres disponibles
docker compose config --services
# Arrancar un componente y sus dependencias
docker compose up --build --force-recreate core-api
docker compose up --build --force-recreate mysql
# Arrancar un solo contenedor
docker compose up --build --force-recreate --no-deps core-apiSustituye core-api por cualquier nombre devuelto por docker compose config --services; usa mysql o postgres para las BBDD y core-api, scraper-api o semantic-service para las API.
Los comandos asumen que las dependencias Python y Node ya están instaladas. Maven se ejecuta en Docker para no exigir una instalación local.
docker run --rm -v "${PWD}:/workspace" -w /workspace maven:3.9.16-eclipse-temurin-26 mvn -B test
.\.venv\Scripts\python.exe -m pytest -q api/scraper
.\.venv\Scripts\python.exe -m pytest -q services/semantic-service
npm --prefix services/webapp/src/main/resources/frontend test -- --run
python -m unittest discover -s scripts/tests -v| Servicio | Comando |
|---|---|
| Java | docker run --rm -v "${PWD}:/workspace" -w /workspace maven:3.9.16-eclipse-temurin-26 mvn -B -pl services/core-api -am test |
| Scraper | .\.venv\Scripts\python.exe -m pytest -q api/scraper |
| Semántico | .\.venv\Scripts\python.exe -m pytest -q services/semantic-service |
| Frontend | npm --prefix services/webapp/src/main/resources/frontend test -- --run |
En el comando Java, cambia services/core-api por services/download-worker, services/notification-service o services/translation-service.
# Java: clase#método
docker run --rm -v "${PWD}:/workspace" -w /workspace maven:3.9.16-eclipse-temurin-26 mvn -B -pl services/core-api -am "-Dtest=DownloadJobServiceTest#createsPartialAnonymousJobWithOmittedItem" "-Dsurefire.failIfNoSpecifiedTests=false" test
# Python: archivo::test
.\.venv\Scripts\python.exe -m pytest -q "api/scraper/tests/test_internal_routes.py::test_internal_resolution_requires_constant_time_service_token"
# Frontend: archivo y nombre
npm --prefix services/webapp/src/main/resources/frontend test -- --run src/api/domainClients.test.ts -t "maps the anonymous 204 response to null"Permisos:
- Público no requiere sesión;
- Propietario exige la sesión
USERo la cookie anónimaBATCH_DOWNLOAD_OWNER; - Interno exige
X-Internal-Service-Token; - Operativo no tiene autenticación de aplicación y debe restringirse por red. Todas las operaciones
POST,PUT,PATCHyDELETErealizadas desde el navegador requieren además el token obtenido enGET /api/v1/auth/csrf; los endpoints internos no usan CSRF.
El contrato público versionado está en shared/contracts/openapi/batch-downloader-api.yaml.
API pública y de usuario
| Método | Ruta | Permiso | Descripción |
|---|---|---|---|
GET |
/api/health |
Público | Comprueba la salud básica de Core API. |
GET |
/api/v1/auth/csrf |
Público | Entrega el token CSRF para operaciones mutables. |
POST |
/api/v1/auth/magic-link/request |
Público | Solicita un enlace de acceso por correo. |
POST |
/api/v1/auth/magic-link/confirm, /api/v1/auth/logout |
Público | Consume el enlace o cierra la sesión de usuario. |
GET |
/api/v1/auth/me |
Público | Devuelve la sesión actual o 204. |
GET, PATCH |
/api/v1/users/me |
USER |
Consulta o actualiza el perfil propio. |
GET |
/api/v1/users/me/dashboard, /api/v1/users/me/downloads |
USER |
Consulta el resumen y el historial propios. |
GET, POST |
/api/v1/users/me/bundles |
USER |
Lista o crea bundles privados propios. |
GET, PATCH, DELETE |
/api/v1/users/me/bundles/{bundleId} |
USER |
Consulta, actualiza o elimina un bundle propio. |
GET |
/api/v1/apps, /api/v1/apps/stats, /api/v1/apps/facets |
Público | Busca aplicaciones y obtiene estadísticas o facetas. |
GET |
/api/v1/apps/{appId} |
Público | Obtiene el detalle de una aplicación. |
GET |
/api/v1/bundles, /api/v1/bundles/{bundleId} |
Público | Lista bundles visibles u obtiene uno visible/propio. |
POST |
/api/v1/download-jobs |
Público | Crea un trabajo y asigna su propietario. |
GET, DELETE |
/api/v1/download-jobs/{jobId} |
Propietario | Consulta o cancela un trabajo. |
GET |
/api/v1/download-jobs/{jobId}/events |
Propietario | Emite el progreso por SSE. |
GET, HEAD |
/api/v1/download-jobs/{jobId}/file |
Propietario | Entrega ZIP por streaming 200/206 y admite un rango; HEAD consulta metadatos. |
GET |
/api/v1/download-jobs/{jobId}/file-link |
Propietario | Devuelve la ruta del archivo del mismo origen. |
POST |
/api/v1/download-jobs/{jobId}/activity, /complete |
Propietario + CSRF | Registra espera/guardado y confirma automáticamente el archivo cerrado para limpiar. |
GET |
/api/v1/locales/{locale} |
Público | Devuelve el catálogo publicado del idioma solicitado. |
WS |
/api/v1/catalog/ws |
Público | Notifica cambios del catálogo. |
API administrativa
Todas estas rutas exigen sesión ADMIN, salvo el login.
| Método | Ruta | Permiso | Descripción |
|---|---|---|---|
POST |
/api/v1/admin/auth/login |
Público | Abre una sesión administrativa. |
GET, POST |
/api/v1/admin/auth/me, /api/v1/admin/auth/logout |
ADMIN |
Consulta o cierra la sesión administrativa. |
GET, POST |
/api/v1/admin/bundles |
ADMIN |
Lista o crea bundles administrados. |
PATCH, DELETE |
/api/v1/admin/bundles/{bundleId} |
ADMIN |
Actualiza o elimina un bundle administrado. |
GET, POST, DELETE |
/api/v1/admin/apps |
ADMIN |
Lista, crea o elimina todo el catálogo de aplicaciones. |
GET |
/api/v1/admin/apps/export.csv |
ADMIN |
Exporta el catálogo en CSV. |
PATCH, DELETE |
/api/v1/admin/apps/{appId} |
ADMIN |
Actualiza o elimina una aplicación. |
PUT |
/api/v1/admin/apps/{appId}/tags |
ADMIN |
Reemplaza sus etiquetas. |
PATCH |
/api/v1/admin/apps/{appId}/sources/{sourceId} |
ADMIN |
Actualiza una fuente de descarga. |
POST |
/api/v1/admin/apps/{appId}/generate-description |
ADMIN |
Encola la generación de descripción. |
GET |
/api/v1/admin/apps/absence-verifications/summary |
ADMIN |
Resume ausencias verificadas y pendientes. |
GET, POST |
/api/v1/admin/apps/{appId}/absence-verification |
ADMIN |
Consulta o confirma la ausencia de instaladores. |
POST |
/api/v1/admin/apps/{appId}/manual-installer-inspections |
ADMIN |
Inicia una inspección manual. |
GET |
/api/v1/admin/apps/{appId}/manual-installer-inspections/current |
ADMIN |
Recupera la inspección abierta. |
GET |
/api/v1/admin/apps/{appId}/manual-installer-inspections/{inspectionId} |
ADMIN |
Consulta una inspección. |
POST |
/api/v1/admin/apps/{appId}/manual-installer-inspections/{inspectionId}/apply |
ADMIN |
Revalida y publica sus resultados. |
POST |
/api/v1/admin/app-discoveries |
ADMIN |
Analiza una web oficial. |
GET, POST |
/api/v1/admin/app-discoveries/{discoveryId}, /api/v1/admin/app-discoveries/{discoveryId}/apply |
ADMIN |
Consulta o aplica un descubrimiento. |
GET, POST |
/api/v1/admin/scraper/runs |
ADMIN |
Lista o crea ejecuciones del scraper. |
GET |
/api/v1/admin/scraper/current, /api/v1/admin/scraper/logs, /api/v1/admin/scraper/queues, /api/v1/admin/scraper/event |
ADMIN |
Consulta ejecución, logs, colas o el último evento. |
POST |
/api/v1/admin/scraper/queues/recover-stuck, /api/v1/admin/scraper/queues/retry-failed, /api/v1/admin/scraper/queues/prune-terminal |
ADMIN |
Recupera, reintenta o limpia elementos de cola. |
POST |
/api/v1/admin/scraper/commands |
ADMIN |
Envía un comando durable al scraper. |
POST |
/api/v1/admin/scraper/descriptions/enqueue-missing |
ADMIN |
Encola descripciones ausentes. |
GET |
/api/v1/admin/audit |
ADMIN |
Consulta la auditoría administrativa. |
GET |
/api/v1/admin/semantic/overview |
ADMIN |
Consulta salud, modelo aprovisionado, cobertura e indexador. |
WS |
/api/v1/admin/scraper/ws |
ADMIN |
Notifica cambios del scraper. |
Endpoints internos y operativos
| Servicio | Método y ruta | Permiso | Descripción |
|---|---|---|---|
| Core | POST /internal/v1/download-jobs/{jobId}/item-metadata |
Interno | Entrega al worker metadatos seguros de items fallidos. |
| Core | POST /internal/v1/download-jobs/{jobId}/storage |
Interno | Reserva global FIFO, identificada por el intento del worker. |
| Download Worker | GET /internal/v1/storage/inventory, DELETE /internal/v1/jobs/{jobId}/files |
Interno | Reconcilia espacio y confirma limpieza después de detener escritores. |
| Scraper | GET /api/health, /api/health/live, /api/health/ready |
Operativo | Salud general, liveness y readiness. |
| Scraper | GET /internal/v1/metrics |
Interno | Expone métricas Prometheus del pool. |
| Scraper | GET /internal/v1/semantic/documents |
Interno | Pagina documentos para el índice semántico. |
| Scraper | GET /internal/v1/sources/{sourceRef}/resolution |
Interno | Resuelve una fuente validada para descarga. |
| Scraper | GET /internal/v1/sources/{sourceRef}/size |
Interno | Revalida tamaño con HEAD sin retener conexión SQL durante la red; devuelve sourceRef y expectedSizeBytes, o null si no puede conocerlo. |
| Scraper | POST /internal/v1/content/descriptions/enqueue-missing, /internal/v1/content/descriptions/generate |
Interno | Encola descripciones o genera una concreta. |
| Scraper | POST /internal/v1/admin/apps/{appId}/manual-installer-inspections |
Interno | Crea una inspección de instaladores. |
| Scraper | GET /internal/v1/admin/apps/{appId}/manual-installer-inspections/current, /internal/v1/admin/apps/{appId}/manual-installer-inspections/{inspectionId} |
Interno | Recupera la inspección actual o una concreta. |
| Scraper | POST /internal/v1/admin/apps/{appId}/manual-installer-inspections/{inspectionId}/apply |
Interno | Aplica una inspección revalidada. |
| Scraper | POST /internal/v1/admin/app-discoveries |
Interno | Inicia el descubrimiento de una aplicación. |
| Scraper | GET /internal/v1/admin/app-discoveries/{discoveryId} |
Interno | Consulta el descubrimiento. |
| Scraper | POST /internal/v1/admin/app-discoveries/{discoveryId}/apply |
Interno | Aplica un descubrimiento revalidado. |
| Semántico | GET /semantic/health, /semantic/health/live, /semantic/health/ready |
Operativo | Salud general, liveness y readiness. |
| Semántico | GET /internal/v1/metrics |
Interno | Expone métricas Prometheus. |
| Semántico | POST /internal/v1/semantic/search |
Interno | Ejecuta la búsqueda semántica. |
| Webapp | GET /healthz |
Público | Comprueba Nginx y el frontend. |
| Java | GET /actuator/health, /actuator/health/liveness, /actuator/health/readiness, /actuator/info, /actuator/prometheus |
Operativo | Salud, información y métricas de Core, Worker, Notification y Translation. |
| Documentación | GET /v3/api-docs, /swagger-ui/index.html |
Público en Core | OpenAPI y Swagger UI de Core. |
| Documentación | GET /openapi.json, /docs, /redoc |
Operativo | OpenAPI, Swagger UI y ReDoc de Scraper y Semántico. |
Globales — .env.example
| Variables | Uso |
|---|---|
GHCR_REGISTRY, GHCR_OWNER, GHCR_IMAGE_PREFIX, GHCR_IMAGE_TAG |
Nombre y etiqueta de las imágenes publicadas. |
MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST_PORT |
Credenciales, base y puerto host de MySQL. |
SCRAPER_ALEMBIC_TARGET, CORE_API_FLYWAY_TARGET |
Puertas de migración del esquema compartido: 20260914_0021/20; Core añade reservas FIFO y entrega de descargas. |
POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_HOST_PORT |
Credenciales, base y puerto host de PostgreSQL/pgvector. |
RABBITMQ_DEFAULT_USER, RABBITMQ_DEFAULT_PASS, RABBITMQ_HOST, RABBITMQ_PORT, RABBITMQ_HOST_PORT, RABBITMQ_MANAGEMENT_HOST_PORT, RABBITMQ_COMMAND_EXCHANGE, RABBITMQ_EVENT_EXCHANGE |
Acceso, puertos y exchanges de RabbitMQ. |
MINIO_ROOT_USER, MINIO_ROOT_PASSWORD, MINIO_CORE_ACCESS_KEY, MINIO_CORE_SECRET_KEY, MINIO_WORKER_ACCESS_KEY, MINIO_WORKER_SECRET_KEY |
Identidades de administración, lectura y escritura de MinIO. |
MINIO_API_HOST_PORT, MINIO_CONSOLE_HOST_PORT, MINIO_DOWNLOAD_HOST_PORT, MINIO_ENDPOINT, MINIO_PUBLIC_ENDPOINT, MINIO_ZIP_BUCKET, MINIO_ZIP_QUOTA, MINIO_REGION, MINIO_STALE_UPLOADS_EXPIRY, MINIO_STALE_UPLOADS_CLEANUP_INTERVAL |
Red, bucket, cuota y limpieza de artefactos. |
APP_PUBLIC_BASE_URL, RESEND_API_KEY, RESEND_FROM_EMAIL, NOTIFICATION_TOKEN_ENCRYPTION_KEY, SCRAPER_INTERNAL_SERVICE_TOKEN, SCRAPER_URL_PROTECTION_SECRET, SCRAPER_LLM_GROQ_API_KEY, SCRAPER_LLM_DEEPSEEK_API_KEY |
URL pública, integraciones y secretos compartidos. |
CORE_API_ADMIN_USERNAME, CORE_API_ADMIN_EMAIL, CORE_API_ADMIN_PASSWORD, CORE_API_DOWNLOAD_OWNER_SECRET |
Bootstrap de administrador y firma de propietarios anónimos. Define CORE_API_ADMIN_PASSWORD antes de arrancar: entre 8 caracteres y 72 bytes UTF-8, con mayúscula, minúscula, número y carácter especial. |
WEBAPP_HOST_PORT, CORE_API_HOST_PORT, SEMANTIC_SERVICE_HOST_PORT, NOTIFICATION_SERVICE_HOST_PORT, DOWNLOAD_WORKER_HOST_PORT, TRANSLATION_SERVICE_HOST_PORT |
Puertos publicados en el host. |
Scraper — api/scraper/.env.example
| Variables | Uso |
|---|---|
SCRAPER_APP_NAME, SCRAPER_WINSTALL_BASE_URL, SCRAPER_WINSTALL_API_BASE_URL |
Identidad del servicio y orígenes de Winstall. |
SCRAPER_REQUEST_TIMEOUT_SECONDS, SCRAPER_MAX_REDIRECTS, SCRAPER_MAX_DOWNLOAD_SIZE_BYTES, SCRAPER_ICON_MAX_BYTES, SCRAPER_ALLOWED_DOWNLOAD_SCHEMES, SCRAPER_PLAYWRIGHT_TIMEOUT_MS |
Límites de red, descargas, iconos y navegador. |
SCRAPER_MANUAL_INSPECTION_TTL_HOURS, SCRAPER_MANUAL_INSPECTION_MAX_ATTEMPTS, SCRAPER_MANUAL_PAGE_MAX_BYTES |
Caducidad y límites de inspecciones manuales. |
SCRAPER_SO_FILTER_CONCURRENCY, SCRAPER_SO_FILTER_MAX_ATTEMPTS |
Concurrencia y reintentos del filtro por sistema operativo. |
SCRAPER_SCRAPE_CONCURRENCY, SCRAPER_CPU_THREAD_WORKERS, SCRAPER_SCHEDULER_TIMEZONE, SCRAPER_SCHEDULER_HOUR, SCRAPER_SCHEDULER_MINUTE, SCRAPER_RUN_ON_STARTUP, SCRAPER_SCRAPE_MAX_APPS, SCRAPER_SCRAPE_APP_TIMEOUT_SECONDS |
Workers, horario y alcance de cada barrido. |
SCRAPER_WORKER_HEARTBEAT_INTERVAL_SECONDS, SCRAPER_WORKER_HEARTBEAT_STALE_SECONDS, SCRAPER_WORKER_FAILURE_THRESHOLD |
Salud de scheduler y workers. |
SCRAPER_LLM_GROQ_BASE_URL, SCRAPER_LLM_GROQ_MODEL, SCRAPER_LLM_GROQ_FALLBACK_MODELS, SCRAPER_LLM_DEEPSEEK_BASE_URL, SCRAPER_LLM_DEEPSEEK_MODEL, SCRAPER_LLM_MAX_CONCURRENCY, SCRAPER_LLM_MAX_APPS_PER_RUN, SCRAPER_LLM_REQUEST_TIMEOUT_SECONDS |
Proveedores, modelos y límites de generación. |
SCRAPER_DATABASE_POOL_MAX, SCRAPER_DATABASE_MAX_OVERFLOW, SCRAPER_DATABASE_POOL_TIMEOUT_SECONDS, SCRAPER_DATABASE_POOL_RECYCLE_SECONDS |
Pool MySQL: scraper-api 4+2 y scraper-scheduler 8+4 en Compose. |
SCRAPER_ALEMBIC_TARGET |
Objetivo de migración: 20260914_0021 durante compatibilidad; usar head sólo tras aprobar la fase contractiva. |
Core API — services/core-api/.env.example
| Variables | Uso |
|---|---|
CORE_API_SERVER_PORT, CORE_API_SCRAPER_API_URL, CORE_API_SEMANTIC_SERVICE_URL, CORE_API_DOWNLOAD_WORKER_URL, CORE_API_DOWNLOAD_WORKER_CAPACITY_TIMEOUT, CORE_API_SEMANTIC_REQUEST_TIMEOUT, CORE_API_SEMANTIC_ADMIN_REQUEST_TIMEOUT |
Puerto, servicios internos y timeouts HTTP. |
CORE_API_BCRYPT_STRENGTH, CORE_API_DB_POOL_MIN, CORE_API_DB_POOL_MAX, CORE_API_DB_POOL_TIMEOUT, CORE_API_AUTH_HASH_CONCURRENCY, CORE_API_AUTH_HASH_QUEUE, CORE_API_AUTH_HASH_WAIT |
Coste de hash, pool MySQL (2–5) y admisión de autenticación. |
CORE_API_FLYWAY_TARGET |
Objetivo de migración: 20, que añade reservas FIFO, entrega y limpieza de descargas. |
CORE_API_AUTH_LOGIN_MAX_PER_MINUTE, CORE_API_AUTH_MAGIC_LINK_MAX_PER_EMAIL_HOUR, CORE_API_AUTH_MAGIC_LINK_MAX_PER_IP_HOUR, CORE_API_SESSION_TIMEOUT, CORE_API_MAGIC_LINK_TTL, CORE_API_MAGIC_LINK_PENDING_CLEANUP_INTERVAL |
Rate limits de autenticación, caducidad de enlaces/sesiones y limpieza de solicitudes pendientes. |
CORE_API_OUTBOX_DELAY, CORE_API_OUTBOX_CLAIM_LEASE, CORE_API_OUTBOX_CONFIRM_TIMEOUT, CORE_API_RETENTION_INTERVAL, CORE_API_REQUIRE_HTTPS, CORE_API_COOKIE_SECURE |
Outbox, retención y seguridad HTTP/cookies. |
DOWNLOAD_MAX_APPS, DOWNLOAD_ANONYMOUS_MAX_CREATES_PER_HOUR, DOWNLOAD_ANONYMOUS_MAX_CREATES_PER_IP_HOUR, DOWNLOAD_SSE_HEARTBEAT |
Tamaño de selección, frecuencia de creación y SSE; la concurrencia depende de bytes, sin cuotas por cantidad de trabajos. |
CORE_API_CATALOG_CACHE_MAXIMUM_SIZE, CORE_API_CATALOG_CACHE_TTL, CORE_API_DOWNLOAD_EVENTS_QUEUE |
Caché de catálogo y cola de eventos. |
Download Worker — services/download-worker/.env.example
| Variables | Uso |
|---|---|
DOWNLOAD_WORKER_SERVER_PORT, DOWNLOAD_WORKER_INBOX_URL, DOWNLOAD_WORKER_INBOX_USERNAME |
Puerto e inbox idempotente H2. |
DOWNLOAD_WORKER_COMMAND_EXCHANGE, DOWNLOAD_WORKER_EVENT_EXCHANGE, DOWNLOAD_WORKER_INPUT_ROUTING_KEY, DOWNLOAD_WORKER_INPUT_QUEUE, DOWNLOAD_WORKER_CANCELLATION_ROUTING_KEY, DOWNLOAD_WORKER_CANCELLATION_QUEUE, DOWNLOAD_WORKER_DLX, DOWNLOAD_WORKER_DLQ, DOWNLOAD_WORKER_CAPACITY_WAIT_QUEUE, DOWNLOAD_WORKER_SOURCE_RESOLVER_URL, DOWNLOAD_WORKER_CORE_API_URL |
Topología RabbitMQ y servicios internos. |
DOWNLOAD_WORKER_CAPACITY_WAIT_DELAY, DOWNLOAD_WORKER_CANCELLATION_CONCURRENCY, DOWNLOAD_WORKER_RETRY_ATTEMPTS, DOWNLOAD_WORKER_RETRY_INITIAL_INTERVAL, DOWNLOAD_WORKER_RETRY_MULTIPLIER, DOWNLOAD_WORKER_RETRY_MAX_INTERVAL |
Espera de capacidad, cancelaciones y reintentos. |
DOWNLOAD_WORKER_ARTIFACT_RETENTION, DOWNLOAD_WORKER_SOURCE_RESOLVER_TIMEOUT, DOWNLOAD_WORKER_CORE_API_TIMEOUT |
Retención y timeouts internos. |
DOWNLOAD_WORKER_MAX_ITEMS, DOWNLOAD_WORKER_MAX_FILE_SIZE, DOWNLOAD_WORKER_MAX_TOTAL_SIZE, DOWNLOAD_WORKER_MAX_REDIRECTS, DOWNLOAD_WORKER_CONNECT_TIMEOUT, DOWNLOAD_WORKER_REQUEST_TIMEOUT |
Límites de cada descarga. |
DOWNLOAD_WORKER_PER_JOB_CONCURRENCY, DOWNLOAD_WORKER_PACKAGING_CONCURRENCY, DOWNLOAD_WORKER_ZIP_LEVEL |
Conexiones por trabajo y control de CPU: Oracle usa dos empaquetados y nivel ZIP cero. |
DOWNLOAD_WORKER_MIN_FREE_SPACE, DOWNLOAD_WORKER_MULTIPART_PART_SIZE, DOWNLOAD_WORKER_TEMP_DIRECTORY |
Margen libre del host, subida multipart y temporal; no hay exclusividad por tamaño. |
DOWNLOAD_WORKER_INBOX_LEASE, DOWNLOAD_WORKER_RETENTION_INTERVAL, DOWNLOAD_WORKER_HEARTBEAT_INTERVAL, DOWNLOAD_WORKER_HEARTBEAT_STALE_AFTER |
Lease, limpieza y salud del worker. |
Notification Service — services/notification-service/.env.example
| Variables | Uso |
|---|---|
NOTIFICATION_SERVICE_SERVER_PORT, NOTIFICATION_RETRY_MAX_ATTEMPTS, NOTIFICATION_RETRY_INITIAL_INTERVAL, NOTIFICATION_RETRY_MULTIPLIER, NOTIFICATION_RETRY_MAX_INTERVAL |
Puerto y política de reintentos. |
NOTIFICATION_SERVICE_INBOX_URL, NOTIFICATION_SERVICE_INBOX_USERNAME, NOTIFICATION_SERVICE_INBOX_LEASE_DURATION, NOTIFICATION_SERVICE_RETENTION_INTERVAL, NOTIFICATION_SERVICE_HEARTBEAT_INTERVAL, NOTIFICATION_SERVICE_HEARTBEAT_STALE_AFTER |
Inbox H2, lease, limpieza y salud. |
NOTIFICATION_SERVICE_TRANSLATION_URL, NOTIFICATION_SERVICE_TRANSLATION_CONNECT_TIMEOUT, NOTIFICATION_SERVICE_TRANSLATION_REQUEST_TIMEOUT, NOTIFICATION_SERVICE_TRANSLATION_CACHE_TTL, NOTIFICATION_SERVICE_TRANSLATION_FALLBACK_LOCALE |
Endpoint interno, timeouts, caché y fallback del servicio de traducciones. |
NOTIFICATION_SERVICE_RESEND_BASE_URL, NOTIFICATION_SERVICE_RESEND_CONNECT_TIMEOUT, NOTIFICATION_SERVICE_RESEND_REQUEST_TIMEOUT |
Endpoint y timeouts de Resend. |
Semantic Service — services/semantic-service/.env.example
| Variables | Uso |
|---|---|
SEMANTIC_MODEL_DIR, SEMANTIC_MODEL_RUNTIME_CACHE_DIR, SEMANTIC_MODEL_MANIFEST_NAME, SEMANTIC_DEVICE |
Ranura local, caché de inferencia y contrato del modelo aprovisionado. |
SEMANTIC_CANDIDATE_LIMIT, SEMANTIC_INDEX_BATCH_SIZE, SEMANTIC_INDEX_INTERVAL_SECONDS, SEMANTIC_INDEX_LEASE_SECONDS, SEMANTIC_SEARCH_TIMEOUT_SECONDS |
Búsqueda e indexación. |
SEMANTIC_API_DB_POOL_MIN, SEMANTIC_API_DB_POOL_MAX, SEMANTIC_INDEXER_DB_POOL_MIN, SEMANTIC_INDEXER_DB_POOL_MAX, SEMANTIC_DB_POOL_TIMEOUT_SECONDS, SEMANTIC_DB_POOL_MAX_LIFETIME_SECONDS |
Pools PostgreSQL por proceso. |
SEMANTIC_SEARCH_CONCURRENCY, SEMANTIC_SEARCH_CAPACITY_WAIT_SECONDS, SEMANTIC_BACKGROUND_TIMEZONE, SEMANTIC_BACKGROUND_START_HOUR, SEMANTIC_BACKGROUND_END_HOUR |
Admisión y ventana de fondo. |
SEMANTIC_WORKER_HEARTBEAT_INTERVAL_SECONDS, SEMANTIC_WORKER_HEARTBEAT_STALE_SECONDS, SEMANTIC_WORKER_FAILURE_THRESHOLD |
Salud del indexador. |
SEMANTIC_DATABASE_ROLE |
Rol del proceso: api o indexer. |
Translation y Frontend
| Servicio | Variables | Uso |
|---|---|---|
| Translation | TRANSLATION_SERVICE_SERVER_PORT, TRANSLATION_SERVICE_LOCALES_PATH, TRANSLATION_SERVICE_CACHE_MAX_AGE |
Puerto, directorio de traducciones y caché HTTP. |
| Frontend | VITE_API_BASE_URL |
Base opcional de la API; vacía usa el mismo origen. |
El presupuesto global de 10 GiB incluye temporales, ZIP, multipart y reservas.
Los trabajos esperan en FIFO estricto si su pico estimado no cabe; crear uno
devuelve 202 también en ese caso. estimatedBytes, reservedBytes y
queuePosition muestran esta admisión. Funcionamiento y limpieza.
| Estado | Preparación terminada | Descargable | Descripción |
|---|---|---|---|
QUEUED |
No | No | Aceptado y esperando worker o capacidad. |
RESOLVING |
No | No | Resolviendo fuentes verificadas. |
DOWNLOADING |
No | No | Descargando y validando instaladores. |
PACKAGING |
No | No | Generando y subiendo el ZIP. |
READY |
Sí | Sí | Todos los instaladores están disponibles. |
PARTIAL |
Sí | Sí | El ZIP existe, pero algún item falló o requiere descarga manual. |
MANUAL_ONLY |
Sí | Sí | El ZIP contiene solamente accesos a descargas manuales. |
FAILED |
Sí | No | El trabajo terminó sin un artefacto utilizable. |
CANCELLED |
Sí | No | El propietario canceló el trabajo. |
EXPIRED |
Sí | No | El artefacto se ha retirado durante la limpieza. |
READY significa ZIP preparado. deliveryStatus distingue WAITING,
TRANSFERRING, SAVED y CLEANING; deliveryBytes informa del avance de entrega.
Solo el cierre correcto del archivo gestionado confirma el guardado. SSE sigue
durante la entrega y emite removed después de limpiar; las lecturas posteriores
devuelven 404. Sin conexión se limpia tras un minuto, o tras cinco minutos de
transferencia sin avance; esperar conectado en FIFO mantiene el trabajo.
| Estado | Descripción |
|---|---|
QUEUED |
Espera procesamiento. |
RESOLVING |
Busca la fuente del instalador. |
DOWNLOADING |
Transfiere y valida el archivo. |
COMPLETED |
Archivo listo para empaquetar. |
FAILED |
No pudo completarse. |
CANCELLED |
Se canceló con el trabajo. |
Este proyecto está bajo la Licencia GNU GENERAL PUBLIC LICENSE 3.0. Para más detalles, consulte el archivo LICENSE.
José Gallardo Caballero |
José Manuel Aroca Fernández |
Rodrigo Pascual García |
Volver al índice.
