71 lines
2.7 KiB
Docker
71 lines
2.7 KiB
Docker
# Patched OnlyOffice Document Server with configurable converter worker count.
|
|
#
|
|
# The Community Edition hardcodes the document converter to 1 worker,
|
|
# which creates a severe bottleneck under concurrent load.
|
|
# This image patches the open-source license.js to spawn a configurable
|
|
# number of converter workers (default 8).
|
|
#
|
|
# Build:
|
|
# docker build -t onlyoffice-cista docker/onlyoffice-converter-patch
|
|
#
|
|
# Run:
|
|
# docker run -d -p 8988:80 \
|
|
# -e WORKERS=16 \
|
|
# -e JWT_SECRET=your-strong-secret \
|
|
# --name onlyoffice onlyoffice-cista
|
|
#
|
|
# JWT:
|
|
# Set JWT_SECRET to the same value you pass to Cista as ONLYOFFICE_JWT_SECRET.
|
|
# OnlyOffice will enable token validation automatically.
|
|
#
|
|
# The ONLYOFFICE_VERSION build arg lets you target a specific release.
|
|
|
|
ARG ONLYOFFICE_VERSION=9.3.1
|
|
|
|
FROM onlyoffice/documentserver:${ONLYOFFICE_VERSION}
|
|
|
|
# Prevent interactive apt prompts
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
# Install Node.js, npm, and git so we can run the FileConverter from source.
|
|
RUN apt-get update -qq && \
|
|
apt-get install -y -qq --no-install-recommends \
|
|
nodejs \
|
|
npm \
|
|
git \
|
|
ca-certificates && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Clone the open-source server components (shallow, ~15 MB).
|
|
# The master branch is used because the Linux/web tags are not published
|
|
# in the server repo; the license.js file has been stable for years.
|
|
RUN git clone --depth 1 https://github.com/ONLYOFFICE/server.git /opt/oo-server
|
|
|
|
# Patch license.js so the converter worker count is read from an env var
|
|
# instead of being hardcoded to 1.
|
|
RUN sed -i \
|
|
's/count: 1,/count: parseInt(process.env.WORKERS, 10) || 8,/' \
|
|
/opt/oo-server/Common/sources/license.js
|
|
|
|
# Install npm dependencies for the modules the FileConverter touches.
|
|
# DocService deps are also needed because converter.js pulls in baseConnector.
|
|
RUN cd /opt/oo-server/Common && npm ci --no-audit --no-fund
|
|
RUN cd /opt/oo-server/FileConverter && npm ci --no-audit --no-fund
|
|
RUN cd /opt/oo-server/DocService && npm ci --no-audit --no-fund
|
|
|
|
# Back up the compiled pkg binary and replace it with our wrapper.
|
|
RUN mv /var/www/onlyoffice/documentserver/server/FileConverter/converter \
|
|
/var/www/onlyoffice/documentserver/server/FileConverter/converter.orig
|
|
|
|
COPY converter-wrapper.sh /var/www/onlyoffice/documentserver/server/FileConverter/converter
|
|
RUN chmod +x /var/www/onlyoffice/documentserver/server/FileConverter/converter
|
|
|
|
# Default worker count (override at runtime with -e WORKERS=16).
|
|
ENV WORKERS=8
|
|
|
|
# Use our custom entrypoint to persist the env var to a file that the
|
|
# non-root converter process (user=ds) can read.
|
|
COPY entrypoint.sh /app/ds/run-document-server-patched.sh
|
|
RUN chmod +x /app/ds/run-document-server-patched.sh
|
|
ENTRYPOINT ["/app/ds/run-document-server-patched.sh"]
|