Docker
Ejecuta ObjectOS en un contenedor — para evaluación, staging o producción.
Docker
Docker es el camino que la mayoría de los equipos toman hacia producción. Se ajusta a la forma en que el runtime está diseñado para operarse: un contenedor sin estado por instancia, una base de datos externa, un almacén de objetos externo para los archivos y secretos inyectados en tiempo de ejecución.
Descarga la imagen precompilada
Publicamos la imagen del runtime en GitHub Container Registry en cada
push a main y en las releases etiquetadas:
docker pull ghcr.io/objectstack-ai/objectos:latestTags disponibles:
| Tag | Canal |
|---|---|
latest | Última compilación de main (recomendado para una primera evaluación) |
main | Igual que latest, pero explícito |
sha-<short> | Fijado a un commit específico (recomendado para producción) |
vX.Y.Z, X.Y, X | Releases etiquetadas |
Para producción, fija a sha-<short> o a un tag semver — latest irá
cambiando con el tiempo.
Ejecuta con el ejemplo incluido
docker run --rm -p 3000:3000 \
-e OS_AUTH_SECRET="$(openssl rand -hex 32)" \
ghcr.io/objectstack-ai/objectos:latestLuego abre http://localhost:3000. La imagen incluye una app de ejemplo vacía para que puedas verificar que el runtime arranca y que Console/Account se renderizan antes de apuntarla a tu propio artefacto.
OS_AUTH_SECRET es obligatorio para arrancar. Rotarlo invalida las sesiones
existentes.
Ejecuta con tu propio artefacto
La definición de tu app es un único archivo: dist/objectstack.json. Se
produce mediante:
| Origen | Cómo |
|---|---|
| Tu propio proyecto | pnpm exec objectstack compile después de editar objectstack.config.ts |
| Una plantilla | Clónala desde el repo de plantillas, ejecuta pnpm install && pnpm exec objectstack compile |
| App del marketplace | Se proporciona como parte de la app publicada |
Monta el archivo en /artifacts/objectstack.json y apunta el runtime
a él:
docker run --rm -p 3000:3000 \
-e OS_AUTH_SECRET="$(openssl rand -hex 32)" \
-e OS_ARTIFACT_FILE=/artifacts/objectstack.json \
-v "$PWD/dist:/artifacts:ro" \
-v objectos-data:/var/lib/objectos \
ghcr.io/objectstack-ai/objectos:latestEl volumen objectos-data contiene la base de datos SQLite (cuando no hay
una BD externa configurada) y cualquier archivo subido almacenado
localmente.
Usa Postgres en lugar de SQLite
docker run --rm -p 3000:3000 \
-e OS_AUTH_SECRET="$(openssl rand -hex 32)" \
-e OS_ARTIFACT_FILE=/artifacts/objectstack.json \
-e OS_DATABASE_DRIVER=postgres \
-e OS_DATABASE_URL='postgres://user:pass@db.internal:5432/myapp' \
-v "$PWD/dist:/artifacts:ro" \
ghcr.io/objectstack-ai/objectos:latestConsulta Runtime Configuration para ver la matriz completa de drivers y opciones de conexión.
Docker Compose
En el repo hay un docker-compose.yml de referencia dentro de docker/:
git clone https://github.com/objectstack-ai/objectos.git
cd objectos
mkdir -p docker/artifacts
cp /path/to/your/objectstack.json docker/artifacts/
export OS_AUTH_SECRET="$(openssl rand -hex 32)"
docker compose -f docker/docker-compose.yml upEl puerto por defecto es 3000; sobrescríbelo con OBJECTOS_PORT=3200 docker compose ....
Construye tu propia imagen
Si necesitas incrustar un artefacto, plugins personalizados o tu propio bundle SSL/CA:
git clone https://github.com/objectstack-ai/objectos.git
cd objectos
docker build -f docker/Dockerfile -t myorg/objectos:custom .El Dockerfile incluido es una compilación multi-etapa que produce una imagen de runtime ligera sobre Node 20 Alpine.
Lo que debes mantener separado
| Recurso | Dónde debería residir |
|---|---|
Artefacto (objectstack.json) | Imagen (inmutable) o volumen montado |
| Base de datos de negocio | Postgres / MySQL / Mongo gestionado externamente |
| Identidad y sesiones | La misma base de datos |
| Archivos subidos | S3 / R2 / volumen de disco gestionado externamente |
Secretos (OS_AUTH_SECRET, URL de BD, claves de API) | Tu gestor de secretos, inyectados como variables de entorno |
| Logs | stdout — recopilados por tu driver de logs |
Verifica
Tras el arranque:
curl -fsS http://localhost:3000/health
# {"status":"ok",...}Luego inicia sesión en http://localhost:3000/_account/register y confirma que la API responde:
curl http://localhost:3000/api/v1/data/<your-object>Siguiente
- Kubernetes — orquestación de nivel producción
- Air-gapped — ejecución sin salida a internet
- Production Readiness — checklist previo al despliegue
- Observability — logs, métricas, auditoría