Installing Euro-Office via Docker¶
The quickest way to run Euro-Office Document Server is via the official Docker image.
Prerequisites¶
- Docker Engine 20.10 or later
- 5 GB disk space for the image
- 4 GB RAM minimum
Quick start¶
docker run -d \
--name euro-office \
--restart=unless-stopped \
-p 80:80 \
-e JWT_ENABLED=true \
-e JWT_SECRET=at-least-32-chars-long-for-hs256 \
ghcr.io/euro-office/documentserver:latest
The server is ready when the health check returns true:
Image tags¶
| Tag | Use |
|---|---|
latest |
Most recent release — use in production |
nightly |
Nightly builds from main — not for production |
latest-dev |
Development image with build tools included |
Pin to a specific version in production:
Verify with the example app¶
To test the editor in a browser, enable the built-in example app:
docker run -d \
--name euro-office \
--restart=unless-stopped \
-p 8080:80 \
-e JWT_ENABLED=true \
-e JWT_SECRET=at-least-32-chars-long-for-hs256 \
-e EXAMPLE_ENABLED=true \
ghcr.io/euro-office/documentserver:latest
Then open http://localhost:8080/example/ in your browser.
Warning
Disable EXAMPLE_ENABLED in production. The example app has no access control.
Persistent data¶
By default, documents, configuration, and the secrets generated on first start 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=at-least-32-chars-long-for-hs256 \
-v /path/to/data:/var/lib/euro-office/documentserver \
-v /path/to/private:/var/www/euro-office/Data \
-v /path/to/logs:/var/log/euro-office/documentserver \
-v /path/to/config:/etc/euro-office/documentserver \
ghcr.io/euro-office/documentserver:latest
/var/www/euro-office/Data holds state the container creates at run time and is easy to
overlook, because it is a separate tree from /var/lib/euro-office/documentserver:
runtime.json— the administration panel password and any settings changed at run time.private/jwt_secret— only created whenJWT_SECRETis not supplied.private/secure_link_secret— only created whenSECURE_LINK_SECRETis not suppliedwopi_private.keyandwopi_public.key— only created whenWOPI_ENABLED=true
Without this volume all of it is discarded when the container is recreated, and the generated values differ on the next start. Secrets you pass in as environment variables are not affected, but a regenerated JWT secret no longer matches the one configured in the Nextcloud connector app, and the connection stays broken until the new value is copied over.
Environment variables¶
The most common variables are listed below. For the full set, including the
local.json keys each one maps to, see Server configuration.
| Variable | Default | Description |
|---|---|---|
JWT_ENABLED |
true |
Enable JWT authentication |
JWT_SECRET |
— | Shared secret — set this in production |
JWT_HEADER |
Authorization |
HTTP header carrying the JWT |
EXAMPLE_ENABLED |
false |
Enable the built-in example app |
WOPI_ENABLED |
false |
Enable WOPI protocol support |
ALLOW_PRIVATE_IP_ADDRESS |
false |
Allow document server to fetch from private IPs |
NGINX_WORKER_PROCESSES |
1 |
Number of nginx worker processes |
GENERATE_FONTS |
true |
Regenerate font cache on startup |
DB_HOST |
localhost |
PostgreSQL host (for external DB) |
DB_NAME |
eurooffice |
PostgreSQL database name |
DB_USER |
eurooffice |
PostgreSQL user |
REDIS_SERVER_HOST |
localhost |
Redis host (for external Redis) |
AMQP_HOST |
localhost |
RabbitMQ host (for external RabbitMQ) |
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