Thin layer on top of the official nextcloud
image (*-apache) that only bakes in the entrypoint hooks, so the
Euro-Office integration is
automatically installed, enabled and configured on first container start.
Nothing in the Nextcloud image itself is changed – only a script under
/docker-entrypoint-hooks.d/post-installation/ is added
(hook mechanism).
The workflow .github/workflows/build.yml builds the image and publishes it to
GHCR:
schedule(every 12 h): checks vialucacome/docker-image-update-checkerwhether the base image behindnextcloud:stable-apachechanged, and only builds then – so new Nextcloud releases are picked up automatically without unnecessary builds.pushtomainandworkflow_dispatch(manual): always build.
Tags: ghcr.io/mittwald/nextcloud-eurooffice:stable-apache, :latest and the
concrete major (e.g. :34-apache) for pinning/rollback.
Tags built from this workflow are multi-platform manifests for
linux/amd64 and linux/arm64, so the image also runs on Apple Silicon
and arm64 servers. Tags published before this change stay amd64-only until they
are rebuilt. Since the Dockerfile only copies files onto the multi-arch base
image, no emulation is involved in the build.
The built Nextcloud major is pinned via NEXTCLOUD_VERSION in the workflow
(currently 34). Since Nextcloud only migrates one major at a time, bump it one
major at a time so none is skipped.
Quick try with the bundled demo stack (docker-compose.yaml):
docker compose up -d # -> http://localhost:8080Or use the image directly:
services:
nextcloud-app:
image: ghcr.io/mittwald/nextcloud-eurooffice:stable-apache
# ... rest of the Nextcloud configurationdocker-compose.prod.yaml for running behind a TLS-terminating reverse proxy
(e.g. Mittwald container hosting). Secrets/domains come from a .env (see the
file header):
docker compose -f docker-compose.prod.yaml up -dSince the proxy speaks plain HTTP internally, the prod compose sets
OVERWRITEPROTOCOL, OVERWRITECLIURL and TRUSTED_PROXIES (otherwise URLs are
generated as http:// → mixed content). These are applied directly by the
nextcloud image into config.php.
The hook evaluates these variables (each only applied when set):
| Variable | Effect (occ config:app:set eurooffice …) |
|---|---|
EUROOFFICE_DOMAIN |
DocumentServerUrl (browser → Office); https:// is prepended unless a scheme is already given |
EUROOFFICE_JWT_SECRET |
jwt_secret (min. 32 characters) |
EUROOFFICE_INTERNAL_URL |
DocumentServerInternalUrl (Nextcloud → Office, internal) |
NEXTCLOUD_INTERNAL_URL |
StorageUrl (Office → Nextcloud, internal) |
Config keys per https://github.com/Euro-Office/eurooffice-nextcloud.
The Euro-Office app is only in the app store from Nextcloud 34 on. On 33 the hook tolerates the missing package (
|| true), so the start does not abort.
docker build -t nextcloud-eurooffice:34-apache .
# or pin another version:
docker build --build-arg NEXTCLOUD_VERSION=33 -t nextcloud-eurooffice:33 .For both platforms at once (result stays in the build cache unless you add
--push or --load):
docker buildx build --platform linux/amd64,linux/arm64 -t nextcloud-eurooffice:34-apache .