Installing via Docker
The quickest way to run Euro-Office Document Server is via the official Docker image.
Prerequisites
Docker Engine 20.10 or later
4 GB RAM minimum
5 GB disk space for the image
Quick start
docker run -d \
--name euro-office \
--restart=unless-stopped \
-p 80:80 \
-e JWT_ENABLED=true \
-e JWT_SECRET=your-secret \
ghcr.io/euro-office/documentserver:latest
Warning
Replace your-secret with a strong random string. The JWT secret is shared between the
Document Server and the Nextcloud connector app — both must use the same value.
The server is ready when the health check returns true:
curl http://localhost/healthcheck
Persistent data
By default, documents and configuration are lost when the container is removed. Mount volumes to persist them:
docker run -d \
--name euro-office \
--restart=unless-stopped \
-p 80:80 \
-e JWT_ENABLED=true \
-e JWT_SECRET=your-secret \
-v /path/to/data:/var/lib/euro-office/documentserver \
-v /path/to/logs:/var/log/euro-office/documentserver \
-v /path/to/config:/etc/euro-office/documentserver \
ghcr.io/euro-office/documentserver:latest
Environment variables
Variable |
Default |
Description |
|---|---|---|
|
|
Enable JWT authentication |
|
— |
Shared secret — set this in production |
|
|
HTTP header carrying the JWT |
|
|
Separate headers per direction |
|
|
Accept the token in the request body |
|
|
Separate secrets per direction |
|
|
Enable JWT per direction |
|
|
Database engine (standalone image supports |
|
|
Database host |
|
|
Database port |
|
|
Database name |
|
|
Database user |
|
— |
Database password |
|
|
Redis host (for external Redis) |
|
|
Redis port |
|
— |
Redis password |
|
|
RabbitMQ host (for external RabbitMQ) |
|
|
RabbitMQ port |
|
|
RabbitMQ credentials |
|
|
Enable WOPI protocol support |
|
|
Enable editor plugins |
|
|
Regenerate font cache on startup |
|
|
Enable StatsD metrics collection |
|
|
Allow the Document Server to fetch files from private IP ranges |
|
|
Allow fetching documents from meta-private IPs (169.254.0.0/16) |
|
|
Allow fetching documents from HTTP (non-TLS) storage |
|
|
Enable SSL client certificate verification |
|
|
Enable HSTS headers |
|
|
HSTS max-age in seconds (default 1 year) |
|
|
Number of nginx worker processes |
|
|
Enable nginx access logging |
|
|
Nginx client max body size (upload limit for nginx) |
|
|
Max temp file upload size in bytes (default 100 MB) |
|
|
Max file download size for the FileConverter in bytes (default 500 MB) |
|
|
Max uncompressed zip size for office files (docx, xlsx, pptx, vsdx) |
Size limits
Each limit guards a different stage of the file lifecycle. Imagine a user tries to open a 200 MB `.pptx` file:
1. Nginx accepts the upload — NGINX_CLIENT_MAX_BODY_SIZE must be higher than
the file. Default is 100m. With a 200 MB file the user gets
413 Request Entity Too Large. Set it to 250m:
-e NGINX_CLIENT_MAX_BODY_SIZE=250m
2. Document Server temp file — MAX_FILE_SIZE gates the internal upload buffer
(bytes). Default is 104857600 (100 MB). A 200 MB file fails here too. Set it to
268435456 (256 MB):
-e MAX_FILE_SIZE=268435456
3. FileConverter downloads the file — FILECONVERTER_MAX_DOWNLOAD_BYTES is the
max bytes the converter will fetch (default 524288000 = 500 MB). Already
sufficient for a 200 MB file. No change needed.
4. FileConverter unzips the archive — FILECONVERTER_INPUT_LIMIT_UNCOMPRESSED
checks the internal XML size. A 200 MB .pptx on disk might contain 800 MB of
uncompressed XML data (especially with embedded images, shapes, or animations).
The 500 MB default may be too low. Set it to 800MB:
-e FILECONVERTER_INPUT_LIMIT_UNCOMPRESSED=800MB
Stage |
Variable |
Value for 200 MB PPTX |
|---|---|---|
Nginx upload |
|
|
Temp file buffer |
|
|
Converter download |
|
|
Uncompressed XML size |
|
|
Office files are ZIP archives containing XML. The uncompressed limit protects against files that blow up the converter’s memory when extracted. Adjust all four if your users work with large documents.
Updating
docker pull ghcr.io/euro-office/documentserver:latest
docker stop euro-office && docker rm euro-office
# re-run with the same docker run command used during installation
Uninstalling
docker stop euro-office
docker rm euro-office
docker rmi ghcr.io/euro-office/documentserver:latest