Fix container crash on startup: onnxruntime-node requires glibc (switch Alpine → Debian slim) (#97)
* docker fixes * fix(worker): default COMPUTE_PREWARM_MODELS to false and update docs, env, and compose Set COMPUTE_PREWARM_MODELS to false by default in runtime, docker-compose, and .env.example to avoid pre-downloading ONNX models during worker startup. Update Dockerfile and deployment documentation to reflect this change and clarify configuration for model prewarming. * fix(docker): downgrade pnpm version to 10.33.4 for compatibility --------- Co-authored-by: Richard R <me@richardr.dev>
This commit is contained in:
parent
470898627d
commit
beea1961bf
5 changed files with 10 additions and 8 deletions
10
Dockerfile
10
Dockerfile
|
|
@ -11,10 +11,10 @@ RUN cp "$(command -v nats-server)" /tmp/nats-server
|
||||||
|
|
||||||
|
|
||||||
# Stage 2: build the Next.js app
|
# Stage 2: build the Next.js app
|
||||||
FROM node:lts-alpine AS app-builder
|
FROM node:lts-slim AS app-builder
|
||||||
|
|
||||||
# Install pnpm globally
|
# Install pnpm globally
|
||||||
RUN npm install -g pnpm@11.1.2
|
RUN npm install -g pnpm@10.33.4
|
||||||
|
|
||||||
# Create app directory
|
# Create app directory
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
@ -44,12 +44,14 @@ RUN mkdir -p /app/THIRD_PARTY_LICENSES && \
|
||||||
|
|
||||||
|
|
||||||
# Stage 3: minimal runtime image
|
# Stage 3: minimal runtime image
|
||||||
FROM node:lts-alpine AS runner
|
FROM node:lts-slim AS runner
|
||||||
|
|
||||||
# Add runtime OS dependencies:
|
# Add runtime OS dependencies:
|
||||||
# - libreoffice-writer: required for DOCX → PDF conversion
|
# - libreoffice-writer: required for DOCX → PDF conversion
|
||||||
# ffmpeg is provided by ffmpeg-static from node_modules.
|
# ffmpeg is provided by ffmpeg-static from node_modules.
|
||||||
RUN apk add --no-cache ca-certificates libreoffice-writer
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends ca-certificates libreoffice-writer && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Install pnpm for runtime process commands.
|
# Install pnpm for runtime process commands.
|
||||||
RUN npm install -g pnpm@10.33.4
|
RUN npm install -g pnpm@10.33.4
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ S3_ENDPOINT=http://host.docker.internal:8333
|
||||||
S3_FORCE_PATH_STYLE=true
|
S3_FORCE_PATH_STYLE=true
|
||||||
|
|
||||||
# Optional tuning
|
# Optional tuning
|
||||||
# COMPUTE_PREWARM_MODELS=true
|
# COMPUTE_PREWARM_MODELS=false
|
||||||
# COMPUTE_JOB_CONCURRENCY=1
|
# COMPUTE_JOB_CONCURRENCY=1
|
||||||
# COMPUTE_WHISPER_TIMEOUT_MS=30000
|
# COMPUTE_WHISPER_TIMEOUT_MS=30000
|
||||||
# COMPUTE_PDF_TIMEOUT_MS=300000
|
# COMPUTE_PDF_TIMEOUT_MS=300000
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ services:
|
||||||
PORT: ${PORT:-8081}
|
PORT: ${PORT:-8081}
|
||||||
COMPUTE_WORKER_TOKEN: ${COMPUTE_WORKER_TOKEN:-local-compute-token}
|
COMPUTE_WORKER_TOKEN: ${COMPUTE_WORKER_TOKEN:-local-compute-token}
|
||||||
S3_PREFIX: ${S3_PREFIX:-openreader}
|
S3_PREFIX: ${S3_PREFIX:-openreader}
|
||||||
COMPUTE_PREWARM_MODELS: ${COMPUTE_PREWARM_MODELS:-true}
|
COMPUTE_PREWARM_MODELS: ${COMPUTE_PREWARM_MODELS:-false}
|
||||||
ports:
|
ports:
|
||||||
- "8081:8081"
|
- "8081:8081"
|
||||||
develop:
|
develop:
|
||||||
|
|
|
||||||
|
|
@ -510,7 +510,7 @@ export async function createComputeWorkerApp(options: CreateComputeWorkerAppOpti
|
||||||
const pdfTimeoutMs = timeoutConfig.pdfTimeoutMs;
|
const pdfTimeoutMs = timeoutConfig.pdfTimeoutMs;
|
||||||
const pdfHardCapMs = timeoutConfig.pdfHardCapMs;
|
const pdfHardCapMs = timeoutConfig.pdfHardCapMs;
|
||||||
const pdfAttempts = readIntEnv('COMPUTE_PDF_JOB_ATTEMPTS', 1);
|
const pdfAttempts = readIntEnv('COMPUTE_PDF_JOB_ATTEMPTS', 1);
|
||||||
const prewarmModels = parseBoolEnv('COMPUTE_PREWARM_MODELS', true);
|
const prewarmModels = parseBoolEnv('COMPUTE_PREWARM_MODELS', false);
|
||||||
const jobsStreamMaxBytes = readIntEnv('COMPUTE_JOBS_STREAM_MAX_BYTES', 256 * 1024 * 1024);
|
const jobsStreamMaxBytes = readIntEnv('COMPUTE_JOBS_STREAM_MAX_BYTES', 256 * 1024 * 1024);
|
||||||
const eventsStreamMaxBytes = readIntEnv('COMPUTE_EVENTS_STREAM_MAX_BYTES', 128 * 1024 * 1024);
|
const eventsStreamMaxBytes = readIntEnv('COMPUTE_EVENTS_STREAM_MAX_BYTES', 128 * 1024 * 1024);
|
||||||
const jobStatesMaxBytes = readIntEnv('COMPUTE_JOB_STATES_MAX_BYTES', 64 * 1024 * 1024);
|
const jobStatesMaxBytes = readIntEnv('COMPUTE_JOB_STATES_MAX_BYTES', 64 * 1024 * 1024);
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ Common optional variables:
|
||||||
- `COMPUTE_WORKER_HOST=0.0.0.0`
|
- `COMPUTE_WORKER_HOST=0.0.0.0`
|
||||||
- `PORT=8081` for local/manual runs. Platforms like Railway usually inject `PORT`.
|
- `PORT=8081` for local/manual runs. Platforms like Railway usually inject `PORT`.
|
||||||
- `LOG_FORMAT=json` and `COMPUTE_LOG_LEVEL=info`
|
- `LOG_FORMAT=json` and `COMPUTE_LOG_LEVEL=info`
|
||||||
- `COMPUTE_PREWARM_MODELS=true`
|
- `COMPUTE_PREWARM_MODELS=false` by default. Set it to `true` to pre-download ONNX models during worker startup.
|
||||||
- `COMPUTE_JOB_CONCURRENCY=1`
|
- `COMPUTE_JOB_CONCURRENCY=1`
|
||||||
- `COMPUTE_WHISPER_TIMEOUT_MS=30000`
|
- `COMPUTE_WHISPER_TIMEOUT_MS=30000`
|
||||||
- `COMPUTE_PDF_TIMEOUT_MS=300000`
|
- `COMPUTE_PDF_TIMEOUT_MS=300000`
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue