Compare commits

...
41 Commits
Author SHA1 Message Date
Linus GasserandClaude Sonnet 5.5 7799588699 chore: update docker images and publish 16.2.0+35.0.2-fpm release
Bumps nextcloud to 35.0.2, nginx, mariadb, rabbitmq, elasticsearch, aio-talk and euro-office.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 15:27:18 +02:00
Linus GasserandClaude Sonnet 5 d08148be32 Update to Nextcloud 35.0.1 and merge upstream/main
Merges 49 commits from coop-cloud/nextcloud upstream: nginx 1.31.6, redis
8.10.2, whiteboard v2.0.0, postgres overlay on pgautoupgrade 17, MariaDB
auto-upgrade, an optional metrics overlay, a check_major_upgrade helper,
a fix for install_collabora, and smtp-in-cron wiring. See
release/16.1.0+35.0.1-fpm for details.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 16:23:01 +02:00
Amras a3959eb859 [doc] warning for AUTHENTIK_USER_PREFIX
[Discussion here](#106)
2026-09-25 09:22:22 +00:00
moritz 41e3e2bb33 chore: publish 14.5.0+33.0.9-fpm release
continuous-integration/drone/tag Build is passing
2026-09-24 15:01:40 +02:00
moritz 1af9dc1ace chore: publish 14.4.0+33.0.9-fpm release
continuous-integration/drone/tag Build is passing
2026-09-24 15:00:49 +02:00
moritz 2071a7dc2f fix new collabora installation by activating the config 2026-09-24 14:59:26 +02:00
renovate-bot b3c7aef2a9 chore(deps): update docker.elastic.co/elasticsearch/elasticsearch docker tag to v8.19.22 2026-09-23 09:17:13 +00:00
moritz 70f8ab4b56 chore: publish 14.3.0+33.0.9-fpm release
continuous-integration/drone/tag Build is passing
2026-09-22 11:14:32 +02:00
renovate-bot 0ba186b408 chore(deps): update ghcr.io/nextcloud-releases/whiteboard docker tag to v2 2026-09-22 08:52:22 +00:00
renovate-bot 445715e409 chore(deps): update redis docker tag to v8.10.2 2026-09-21 19:18:40 +00:00
simon e715938ebb chore: publish 14.2.0+33.0.9-fpm release
continuous-integration/drone/tag Build is passing
2026-09-21 17:03:43 +02:00
simon 12109fb122 Merge branch 'main' into nextcloud-metrics 2026-09-21 14:56:01 +00:00
simon 5b393d6194 use port 80 for metrics 2026-09-21 13:04:28 +02:00
Linus GasserandClaude Sonnet 5 b96aa84d7f Update to latest nextcloud v35.0.0
Euro-Office overlay is already at the latest published document server
image (v9.3.4-hotfix.1); documented that in the README instead of the
stale "latest tag, no pinning" note.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 08:00:20 +02:00
simon 2a2357142e replace sidecar metrics exporter with native metrics endpoint 2026-09-17 17:53:16 +02:00
simon f9203e5d7f docs: format readme 2026-09-17 15:24:48 +02:00
Linus Gasser d811dfa1cb Add warning about major dependency version updates 2026-09-16 20:33:31 +02:00
Linus Gasser ea487f93dd Details about semver of the recipe
Spell out how we update the release versions of the recipe, specifically
wrt dependencies.
Based on the text of @dannygroenewegen.
2026-09-16 20:33:31 +02:00
renovate-bot 1a43b8fe4f chore(deps): update nginx docker tag to v1.31.6 2026-09-15 23:21:13 +00:00
simon 768531d1a2 Merge branch 'nextcloud-metrics' of ssh://git.coopcloud.tech:2222/coop-cloud/nextcloud into nextcloud-metrics 2026-09-14 18:12:22 +02:00
simon 1d6ec8cf38 add nextcloud metrics exporter 2026-09-14 18:08:09 +02:00
Linus Gasser 3b6b667c13 chore: publish 15.1.3+34.0.4-fpm release 2026-09-14 09:17:20 +02:00
Linus Gasser 935ebd8acf Updating to 34.0.4 2026-09-14 09:10:01 +02:00
Linus Gasser 131054d234 chore: publish 14.1.2+33.0.9-fpm release
continuous-integration/drone/tag Build is passing
2026-09-12 10:48:38 +01:00
renovate-bot 785931c0de chore(deps): update nextcloud docker tag to v33.0.9 2026-09-12 02:26:35 +00:00
renovate-bot a7f5ec8506 chore(deps): update docker.elastic.co/elasticsearch/elasticsearch docker tag to v8.19.21 2026-09-10 08:16:50 +00:00
moritz 5990c68f23 fix(cron): parsing smtp settings from envs 2026-09-09 17:43:19 +02:00
Linus Gasser fb511d8d07 Set MARIADB_AUTO_UPGRADE=1
This will automatically upgrade the tables to the latest version of mariadb.
2026-09-08 08:17:42 +00:00
carla d019c23843 fixes copy paste 2026-09-07 08:57:08 +00:00
carla 59beed36a7 adds LIT to reviewers 2026-09-07 08:57:08 +00:00
carla d3afccfca9 adds Local IT to maintainers 2026-09-07 08:57:08 +00:00
renovate-bot 257a7ac3a1 chore(deps): update nginx docker tag to v1.31.5 2026-09-02 23:18:10 +00:00
simon d2560c9304 add option to expose metrics via nextcloud-exporter
continuous-integration/drone/pr Build is failing
2026-09-02 11:34:45 +02:00
renovate-bot 364e3088f7 chore(deps): update redis docker tag to v8.10.1 2026-08-28 15:47:54 +00:00
renovate-bot d40797dbda chore(deps): update nginx docker tag to v1.31.4 2026-08-19 20:18:48 +00:00
Linus Gasser 5e728e5141 Update to latest version
continuous-integration/drone/tag Build is passing
2026-07-25 22:26:09 +02:00
Linus Gasser 42506330f7 Merge remote-tracking branch 'upstream/main' 2026-07-25 22:20:24 +02:00
Linus Gasser f76245c34d Adding fixed tag to EuroOffice
continuous-integration/drone/pr Build is failing
continuous-integration/drone/tag Build is passing
2026-07-23 12:30:42 +02:00
Linus Gasser 4f4ba6db79 feat: add in-stack Euro-Office integration (15.1.0)
continuous-integration/drone/pr Build is failing
This adds an optional eurooffice instance to the recipe. Contrary to the
OnlyOffice integration, which is a separate recipe, I choose this way
because I suppose that most of the time the eurooffice instance will
only be used by Nextcloud.
There seems to be an error with the current EuroOffice official image
which fails to initialize their database. For this reason it also includes
a Postgres and a RabbitMQ service. Both are initialised upon first
usage.
2026-07-20 09:28:56 +02:00
Linus Gasser 93e8f638f9 chore: publish 15.0.0+34.0.1-fpm release
Updates to the latest 34 version docker containers
of nextcloud.
2026-07-20 09:28:35 +02:00
Linus Gasser c1e6292630 chore: publish 14.0.0+33.0.6-fpm release
Updates the container tags to the latest 33-version of nextcloud.
2026-07-20 09:27:41 +02:00
25 changed files with 489 additions and 15 deletions
+14 -1
View File
@@ -69,6 +69,13 @@ DEFAULT_QUOTA="10 GB"
# APPS="$APPS onlyoffice"
# SECRET_ONLYOFFICE_JWT_VERSION=v1
# Euro-Office runs its own document server in this stack; EUROOFFICE_DOMAIN
# needs its own DNS record pointing at this host.
# COMPOSE_FILE="$COMPOSE_FILE:compose.eurooffice.yml"
# EUROOFFICE_DOMAIN=eurooffice.example.com
# APPS="$APPS eurooffice"
# SECRET_EUROOFFICE_JWT_VERSION=v1
# COMPOSE_FILE="$COMPOSE_FILE:compose.bbb.yml"
# BBB_URL=https://talk.example.org/bigbluebutton/ # trailing slash!
# SECRET_BBB_SECRET_VERSION=v1
@@ -79,11 +86,14 @@ DEFAULT_QUOTA="10 GB"
# COMPOSE_FILE="$COMPOSE_FILE:compose.authentik.yml"
# APPS="$APPS sociallogin"
# AUTHENTIK_USER_PREFIX=authentik
# AUTHENTIK_DOMAIN=authentik.example.com
# SECRET_AUTHENTIK_SECRET_VERSION=v1
# SECRET_AUTHENTIK_ID_VERSION=v1
# Only change this if you've configured your authentik instance to use a non-default user prefix.
# If you're unsure, this should match the redirect_uri in authentik's nextcloud provider.
# AUTHENTIK_USER_PREFIX=authentik
#COMPOSE_FILE="$COMPOSE_FILE:compose.fulltextsearch.yml"
#SECRET_ELASTICSEARCH_PASSWORD_VERSION=v1
@@ -107,3 +117,6 @@ DEFAULT_QUOTA="10 GB"
#HSTS_ENABLED=1
# Uncomment this line to add the `preload` part
#HSTS_PRELOAD=1
# Metrics
# COMPOSE_FILE="$COMPOSE_FILE:compose.metrics.yml"
+35 -1
View File
@@ -38,7 +38,7 @@ In order to meet these responsibilities each maintainer:
## Release cadence
The intent is to **track Nextcloud's own release schedule** rather than invent
our own. In practice this means:
our own. In practice this means the following regarding new **nextcloud** releases:
- **Patch releases (e.g. `32.0.x`)**: published to this recipe shortly after
upstream, ideally within 1 week. `chore(deps)` opens the PRs; a maintainer
@@ -63,6 +63,40 @@ our own. In practice this means:
- **Co-installed components** (Talk HPB, OnlyOffice, Whiteboard, etc.) are
bumped alongside or shortly after the matching Nextcloud release.
## Semver versioning within this recipe
The recipe version itself is updated according to the following semver
rules, following
[How are recipes versioned](https://docs.coopcloud.tech/maintainers/handbook/#how-are-recipes-versioned):
These describe the minimum required bump for a given kind of change.
The actual impact of any change (an image update or, e.g. a compose or config change)
should always be considered, and the recipe version can always be bumped higher
than the guideline below to match the impact of the change.
- For updates of the image in the app container (nextcloud), we match the
recipe version bump to at least the image version bump.
- Other containers in this recipe are considered dependencies of the app container
unless they expose additional functionality directly.
- For image updates of dependency containers, we judge the recipe version bump
from the perspective of the app itself, but a minor or major update of a
dependent container is always reflected by at least a minor recipe version bump
to indicate a substantial update under the hood.
Temporary exception:
- In the past, there have been issues with upgrades from database containers
(before the `pgautoupgrade` image and `MARIADB_AUTO_UPGRADE` setting).
We continue treating a major update of a database container (postgresql, mariadb)
as a major recipe bump until that database has had two consecutive major upgrades
with no issues reported, building trust in its automatic upgrade.
Once that trust is established for a given database, we continue with the
default guidelines above.
WARNING:
When moving to a new major version of a dependency, the maintainer needs to make
sure that the version is supported!
Example: in June 2026, MariaDB got updated to version 12, but nextcloud suggests
only up to version 11.8 for best performance.
## Pull Requests
A pull request can be merged once it is approved by at least one maintainer.
+50 -1
View File
@@ -5,7 +5,7 @@
Fully automated luxury Nextcloud via docker-swarm.
<!-- metadata -->
* **Maintainer**: [@dannygroenewegen](https://git.coopcloud.tech/dannygroenewegen), [@ineiti](https://git.coopcloud.tech/ineiti), [@javielico](https://git.coopcloud.tech/javielico)
* **Maintainer**: [@dannygroenewegen](https://git.coopcloud.tech/dannygroenewegen), [@ineiti](https://git.coopcloud.tech/ineiti), [@javielico](https://git.coopcloud.tech/javielico), Local-IT: [@moritz](https://git.coopcloud.tech/moritz), [@msimon](https://git.coopcloud.tech/simon), [@carla](https://git.coopcloud.tech/carla)
* **Category**: Apps
* **Status**: 5
* **Image**: [`nextcloud`](https://hub.docker.com/_/nextcloud), 4, upstream
@@ -44,6 +44,40 @@ Then set the onlyoffice JWT secret from the onlyoffice installation:
* `abra app secret insert <app-name> onlyoffice_jwt v1 <jwt_secret>`
* `abra app cmd <app-name> app install_onlyoffice`
### Euro-Office Integration
Euro-Office is the AGPL fork of OnlyOffice that powers "Nextcloud Office" from
Nextcloud 34 onwards. Like OnlyOffice it uses a client-side document-server
architecture, so a separate document server is required — but this overlay runs
that document server **inside the same stack**, so there is no external host to
manage. The browser talks to it directly, so it needs its own public HTTPS
domain (`EUROOFFICE_DOMAIN`) with a DNS record pointing at this host.
`abra app config <app-name>`
Enable the overlay and set the document server's domain:
```
COMPOSE_FILE="$COMPOSE_FILE:compose.eurooffice.yml"
EUROOFFICE_DOMAIN=eurooffice.example.com
APPS="$APPS eurooffice"
SECRET_EUROOFFICE_JWT_VERSION=v1
```
The overlay runs the document server with its own Postgres and RabbitMQ services
(the image's bundled Postgres is unreliable). The document server schema is
seeded into that Postgres automatically on first init (see
`eurooffice-createdb.sql`). The Postgres is internal-only and uses trust auth, so
the only secret to manage is the JWT; generate it, deploy, then wire up the
Nextcloud app:
* `abra app secret generate -a <app-name>`
* `abra app deploy <app-name>`
* `abra app cmd <app-name> app install_eurooffice`
> Note: the document server needs ~4 GB RAM (8 GB for multi-user) and pulls the
> `ghcr.io/euro-office/documentserver` image, pinned to a semver tag
> (`v9.3.4-hotfix.1`). It is not tracked by Renovate, so upgrade it manually.
### BBB Integration
`abra app config <app-name>`
@@ -129,6 +163,21 @@ To disable dashboard app (since it is so corporate):
- Configure a `defaultapp` in your `config.php` or use [apporder](https://apps.nextcloud.com/apps/apporder)
## Metrics
Since Version 33, Nextcloud offers a /metrics endpoint (see [here](https://docs.nextcloud.com/server/stable/admin_manual/configuration_monitoring/index.html)).
Its configured via alloys label-based auto-discovery provided by the updated
[monitoring-stack](https://git.coopcloud.tech/coop-cloud/monitoring-ng).
To enable, uncomment
```
COMPOSE_FILE="$COMPOSE_FILE:compose.metrics.yml"
```
and run `configure_metrics`:
```
abra app cmd <domain> app configure_metrics
```
## Upgrading Nextcloud
Upgrading Nextcloud can be a hair raising experiance. They
+15 -1
View File
@@ -1,11 +1,13 @@
#!/bin/bash
export FPM_TUNE_VERSION=v5
export NGINX_CONF_VERSION=v8
export NGINX_CONF_VERSION=v9
export MY_CNF_VERSION=v6
export ENTRYPOINT_VERSION=v3
export ENTRYPOINT_WHITEBOARD_VERSION=v1
export ENTRYPOINT_TALK_VERSION=v1
export ENTRYPOINT_EUROOFFICE_VERSION=v3
export EUROOFFICE_CREATEDB_VERSION=v1
export CRONTAB_VERSION=v1
export PG_BACKUP_VERSION=v2
@@ -84,12 +86,20 @@ install_onlyoffice() {
set_app_config onlyoffice customizationForcesave true
}
install_eurooffice() {
install_apps eurooffice
set_app_config eurooffice DocumentServerUrl "https://${EUROOFFICE_DOMAIN}"
set_app_config eurooffice jwt_secret "$(cat /run/secrets/eurooffice_jwt)"
set_app_config eurooffice customizationForcesave true
}
install_collabora() {
install_apps richdocuments
set_app_config richdocuments wopi_url "$COLLABORA_URL"
# important for security reaosns
# https://docs.nextcloud.com/server/latest/admin_manual/office/configuration.html#wopi-settings
set_app_config richdocuments wopi_allowlist "$COLLABORA_ALLOWLIST"
run_occ "richdocuments:activate-config"
}
install_whiteboard() {
@@ -195,6 +205,10 @@ upgrade_mariadb() {
mariadb-upgrade -p`cat /run/secrets/db_root_password`
}
configure_metrics() {
run_occ "config:system:set openmetrics_allowed_clients 0 --value='10.0.0.0/8'"
}
# Checks whether this instance looks ready to update to the next Nextcloud
# major version.
#
+118
View File
@@ -0,0 +1,118 @@
version: "3.8"
services:
app:
secrets:
- eurooffice_jwt
environment:
- EUROOFFICE_DOMAIN
eurooffice:
image: ghcr.io/euro-office/documentserver:v9.3.5
stdin_open: true
depends_on:
- eurooffice-db
- eurooffice-rabbitmq
networks:
- proxy
- internal
environment:
- JWT_ENABLED=true
- JWT_SECRET_FILE=/run/secrets/eurooffice_jwt
# Use external Postgres + RabbitMQ instead of the flaky bundled ones.
# (The all-in-one image ships an uncleanly-shut-down Postgres data dir
# whose crash recovery exceeds pg_ctl's start timeout -> restart loop.)
- DB_TYPE=postgres
- DB_HOST=eurooffice-db
- DB_PORT=5432
- DB_NAME=eurooffice
- DB_USER=eurooffice
- AMQP_URI=amqp://guest:guest@eurooffice-rabbitmq
volumes:
- eurooffice_data:/var/lib/euro-office
- eurooffice_config:/etc/euro-office
- eurooffice_logs:/var/log/euro-office
- eurooffice_fonts:/usr/share/fonts/custom
secrets:
- eurooffice_jwt
configs:
- source: entrypoint_eurooffice
target: /custom-entrypoint.sh
mode: 555
entrypoint: /custom-entrypoint.sh
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/healthcheck"]
interval: 30s
timeout: 10s
retries: 10
start_period: 3m
deploy:
update_config:
failure_action: rollback
order: start-first
labels:
- "traefik.enable=true"
- "traefik.swarm.network=proxy"
- "traefik.http.services.${STACK_NAME}_eurooffice.loadbalancer.server.port=80"
- "traefik.http.routers.${STACK_NAME}_eurooffice.rule=Host(`${EUROOFFICE_DOMAIN}`)"
- "traefik.http.routers.${STACK_NAME}_eurooffice.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}_eurooffice.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "traefik.http.routers.${STACK_NAME}_eurooffice.middlewares=${STACK_NAME}_eurooffice-fwdproto"
- "traefik.http.middlewares.${STACK_NAME}_eurooffice-fwdproto.headers.customRequestHeaders.X-Forwarded-Proto=https"
eurooffice-db:
image: postgres:16-alpine
networks:
- internal
environment:
- POSTGRES_DB=eurooffice
- POSTGRES_USER=eurooffice
# Internal-only DB holding transient editing state; trust auth on the
# private overlay network avoids managing a Swarm secret for it.
- POSTGRES_HOST_AUTH_METHOD=trust
volumes:
- eurooffice_db:/var/lib/postgresql/data
configs:
# Seed the document server schema on first init. The all-in-one image only
# creates its schema in the *bundled* Postgres; with an external DB the
# docservice starts against an empty DB, errors on missing task_result /
# doc_changes, never binds its port, and gets healthcheck-killed in a loop.
- source: eurooffice_createdb
target: /docker-entrypoint-initdb.d/createdb.sql
healthcheck:
test: ["CMD", "pg_isready", "-U", "eurooffice"]
interval: 30s
timeout: 10s
retries: 10
start_period: 1m
eurooffice-rabbitmq:
image: rabbitmq:4.3.6
networks:
- internal
healthcheck:
test: rabbitmq-diagnostics -q ping
interval: 30s
timeout: 10s
retries: 10
start_period: 1m
secrets:
eurooffice_jwt:
external: true
name: ${STACK_NAME}_eurooffice_jwt_${SECRET_EUROOFFICE_JWT_VERSION}
volumes:
eurooffice_data:
eurooffice_config:
eurooffice_logs:
eurooffice_fonts:
eurooffice_db:
configs:
entrypoint_eurooffice:
name: ${STACK_NAME}_entrypoint_eurooffice_${ENTRYPOINT_EUROOFFICE_VERSION}
file: entrypoint.eurooffice.sh.tmpl
template_driver: golang
eurooffice_createdb:
name: ${STACK_NAME}_eurooffice_createdb_${EUROOFFICE_CREATEDB_VERSION}
file: eurooffice-createdb.sql
+2 -2
View File
@@ -2,7 +2,7 @@ version: "3.8"
services:
elasticsearch:
image: "docker.elastic.co/elasticsearch/elasticsearch:8.19.20"
image: "docker.elastic.co/elasticsearch/elasticsearch:8.19.23"
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
@@ -29,7 +29,7 @@ services:
mode: 0600
searchindexer:
image: nextcloud:33.0.8-fpm
image: nextcloud:35.0.2-fpm
volumes:
- nextcloud:/var/www/html/
- nextapps:/var/www/html/custom_apps:cached
+2 -1
View File
@@ -9,7 +9,7 @@ services:
- MYSQL_PASSWORD_FILE=/run/secrets/db_password
db:
image: "mariadb:12.3"
image: "mariadb:12.3.3"
environment:
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
@@ -17,6 +17,7 @@ services:
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_root_password
- MAX_DB_CONNECTIONS=${MAX_DB_CONNECTIONS:-100}
- INNODB_BUFFER_POOL_SIZE=${INNODB_BUFFER_POOL_SIZE:-1G}"
- MARIADB_AUTO_UPGRADE=1
configs:
- source: my_tune
target: /etc/mysql/conf.d/my-tune.cnf
+8
View File
@@ -0,0 +1,8 @@
version: "3.8"
services:
web:
environment:
- METRICS_ENABLED=true
deploy:
labels:
- "prometheus.io/scrape=true"
+13
View File
@@ -13,6 +13,19 @@ services:
- MAIL_FROM_ADDRESS
- MAIL_DOMAIN
cron:
secrets:
- smtp_password
environment:
- SMTP_AUTHTYPE
- SMTP_HOST
- SMTP_SECURE
- SMTP_NAME
- SMTP_PORT
- SMTP_PASSWORD_FILE=/run/secrets/smtp_password
- MAIL_FROM_ADDRESS
- MAIL_DOMAIN
secrets:
smtp_password:
external: true
+1 -1
View File
@@ -2,7 +2,7 @@ version: "3.8"
services:
talk:
image: "nextcloud/aio-talk:20251128_084214"
image: "nextcloud/aio-talk:20261014_095932"
environment:
- NC_DOMAIN=${DOMAIN}
- TALK_HOST=${TALK_DOMAIN}
+1 -1
View File
@@ -6,7 +6,7 @@ services:
- whiteboard_jwt
whiteboard:
image: ghcr.io/nextcloud-releases/whiteboard:v1.5.9
image: ghcr.io/nextcloud-releases/whiteboard:v2.0.0
deploy:
labels:
- traefik.enable=true
+5 -5
View File
@@ -1,7 +1,7 @@
version: "3.8"
services:
web:
image: nginx:1.31.3
image: nginx:1.31.7
depends_on:
- app
configs:
@@ -48,7 +48,7 @@ services:
start_period: 5m
app:
image: nextcloud:33.0.8-fpm
image: nextcloud:35.0.2-fpm
depends_on:
- db
configs:
@@ -95,7 +95,7 @@ services:
failure_action: rollback
order: start-first
labels:
- "coop-cloud.${STACK_NAME}.version=14.1.1+33.0.8-fpm"
- "coop-cloud.${STACK_NAME}.version=16.2.0+35.0.2-fpm"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT}"
- "backupbot.backup=${ENABLE_BACKUPS:-true}"
- "backupbot.backup.volumes.redis=false"
@@ -109,7 +109,7 @@ services:
start_period: 15m
cron:
image: nextcloud:33.0.8-fpm
image: nextcloud:35.0.2-fpm
volumes:
- nextcloud:/var/www/html/
- nextapps:/var/www/html/custom_apps:cached
@@ -125,7 +125,7 @@ services:
cache:
image: redis:8.8.1-alpine
image: redis:8.10.2-alpine
networks:
- internal
volumes:
+30
View File
@@ -0,0 +1,30 @@
#!/bin/bash
set -eu
# Read a Swarm secret file (<VAR>_FILE) into the plain env var the
# Euro-Office document server expects, then hand off to its own entrypoint.
file_env() {
local var="$1"
local fileVar="${var}_FILE"
local def="${2:-}"
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
exit 1
fi
local val="$def"
if [ "${!var:-}" ]; then
val="${!var}"
elif [ "${!fileVar:-}" ]; then
val="$(< "${!fileVar}")"
fi
export "$var"="$val"
unset "$fileVar"
}
file_env "JWT_SECRET"
exec /entrypoint.sh
+73
View File
@@ -0,0 +1,73 @@
--
-- Create schema onlyoffice
--
-- CREATE DATABASE onlyoffice ENCODING = 'UTF8' CONNECTION LIMIT = -1;
-- ----------------------------
-- Table structure for doc_changes
-- ----------------------------
CREATE TABLE IF NOT EXISTS "doc_changes" (
"tenant" varchar(255) COLLATE "default" NOT NULL,
"id" varchar(255) COLLATE "default" NOT NULL,
"change_id" int4 NOT NULL,
"user_id" varchar(255) COLLATE "default" NOT NULL,
"user_id_original" varchar(255) COLLATE "default" NOT NULL,
"user_name" varchar(255) COLLATE "default" NOT NULL,
"change_data" text COLLATE "default" NOT NULL,
"change_date" timestamp without time zone NOT NULL,
PRIMARY KEY ("tenant", "id", "change_id")
)
WITH (OIDS=FALSE);
-- ----------------------------
-- Table structure for task_result
-- ----------------------------
CREATE TABLE IF NOT EXISTS "task_result" (
"tenant" varchar(255) COLLATE "default" NOT NULL,
"id" varchar(255) COLLATE "default" NOT NULL,
"status" int2 NOT NULL,
"status_info" int4 NOT NULL,
"created_at" timestamp without time zone DEFAULT NOW(),
"last_open_date" timestamp without time zone NOT NULL,
"user_index" int4 NOT NULL DEFAULT 1,
"change_id" int4 NOT NULL DEFAULT 0,
"callback" text COLLATE "default" NOT NULL,
"baseurl" text COLLATE "default" NOT NULL,
"password" text COLLATE "default" NULL,
"additional" text COLLATE "default" NULL,
PRIMARY KEY ("tenant", "id")
)
WITH (OIDS=FALSE);
CREATE OR REPLACE FUNCTION merge_db(_tenant varchar(255), _id varchar(255), _status int2, _status_info int4, _last_open_date timestamp without time zone, _user_index int4, _change_id int4, _callback text, _baseurl text, OUT isupdate char(5), OUT userindex int4) AS
$$
DECLARE
t_var "task_result"."user_index"%TYPE;
BEGIN
LOOP
-- first try to update the key
-- note that "a" must be unique
IF ((_callback <> '') IS TRUE) AND ((_baseurl <> '') IS TRUE) THEN
UPDATE "task_result" SET last_open_date=_last_open_date, user_index=user_index+1,callback=_callback,baseurl=_baseurl WHERE tenant = _tenant AND id = _id RETURNING user_index into userindex;
ELSE
UPDATE "task_result" SET last_open_date=_last_open_date, user_index=user_index+1 WHERE tenant = _tenant AND id = _id RETURNING user_index into userindex;
END IF;
IF found THEN
isupdate := 'true';
RETURN;
END IF;
-- not there, so try to insert the key
-- if someone else inserts the same key concurrently,
-- we could get a unique-key failure
BEGIN
INSERT INTO "task_result"(tenant, id, status, status_info, last_open_date, user_index, change_id, callback, baseurl) VALUES(_tenant, _id, _status, _status_info, _last_open_date, _user_index, _change_id, _callback, _baseurl) RETURNING user_index into userindex;
isupdate := 'false';
RETURN;
EXCEPTION WHEN unique_violation THEN
-- do nothing, and loop to try the UPDATE again
END;
END LOOP;
END;
$$
LANGUAGE plpgsql;
+11
View File
@@ -184,5 +184,16 @@ http {
location / {
try_files $uri $uri/ /index.php$request_uri;
}
{{ if env "METRICS_ENABLED" }}
location = /metrics {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param SCRIPT_NAME /index.php;
fastcgi_param REQUEST_URI /metrics;
fastcgi_param HTTP_HOST {{ env "DOMAIN" }};
fastcgi_pass php-handler;
}
{{ end }}
}
}
+10
View File
@@ -0,0 +1,10 @@
Upgrades Nextcloud from 32.0.11 to 33.0.6 (major version upgrade).
IMPORTANT:
- Nextcloud does NOT support downgrades. Take a backup before deploying.
- Do not skip major versions: your instance must be on the latest 32.x before
upgrading to 33. If you are on an older 32.x, deploy 32.0.11 first.
- After deploying, check the logs and run any pending repair/upgrade steps:
`abra app cmd <app> app run_occ '"app:update --all"'`
- Review app (plug-in) compatibility with Nextcloud 33 before upgrading; some
apps may need to be updated or temporarily disabled.
+1
View File
@@ -0,0 +1 @@
add option to scrape native /metrics endpoint via alloys auto-discovery
+13
View File
@@ -0,0 +1,13 @@
Upgrades Nextcloud from 33.0.6 to 34.0.1 (major version upgrade).
IMPORTANT:
- Nextcloud does NOT support downgrades. Take a backup before deploying.
- Do not skip major versions: your instance must be on the latest 33.x before
upgrading to 34. If you are on 32.x, deploy 14.0.0+33.0.6-fpm first.
- After deploying, check the logs and run any pending repair/upgrade steps:
`abra app cmd <app> app run_occ '"app:update --all"'`
- Review app (plug-in) compatibility with Nextcloud 34 before upgrading; some
apps may need to be updated or temporarily disabled.
- PostgreSQL: Nextcloud 34 requires PostgreSQL >= 14 (the recipe already ships
pgautoupgrade 14). PostgreSQL 14 is now the minimum, so plan a bump to a newer
PostgreSQL before the next Nextcloud major.
+25
View File
@@ -0,0 +1,25 @@
Adds an optional Euro-Office integration (compose.eurooffice.yml).
Euro-Office is the AGPL fork of OnlyOffice that powers "Nextcloud Office" from
Nextcloud 34 onwards. This overlay runs the Euro-Office document server inside
the stack, so there is no external document server to manage.
This change is additive: existing installs are unaffected unless you opt in.
To enable it (`abra app config <app>`):
- COMPOSE_FILE="$COMPOSE_FILE:compose.eurooffice.yml"
- EUROOFFICE_DOMAIN=eurooffice.example.com
- APPS="$APPS eurooffice"
- SECRET_EUROOFFICE_JWT_VERSION=v1
Then:
- Create a DNS record for EUROOFFICE_DOMAIN pointing at this host (the browser
talks to the document server directly over HTTPS).
- `abra app secret generate -a <app>`
- `abra app deploy <app>`
- `abra app cmd <app> app install_eurooffice`
Notes:
- The document server needs ~4 GB RAM (8 GB recommended for multi-user).
- The `ghcr.io/euro-office/documentserver` image currently only publishes a
`latest` tag (no semver pinning yet), so it is not tracked by Renovate.
+2
View File
@@ -0,0 +1,2 @@
Upgrade to latest nextcloud v34.0.2
Merge latest origin from coop-cloud/nextcloud:13.1.4
+3
View File
@@ -0,0 +1,3 @@
Upgrade to latest nextcloud v34.0.4, nginx 1.31.5, redis 8.8.2 and,
in the eurooffice overlay, euro-office/documentserver v9.3.4-hotfix.1
and rabbitmq 4.3.5.
+17
View File
@@ -0,0 +1,17 @@
Upgrades Nextcloud from 34.0.4 to 35.0.0 (major version upgrade).
Euro-Office (compose.eurooffice.yml) is already at the latest published
document server image, v9.3.4-hotfix.1 — no change needed there.
IMPORTANT:
- Nextcloud does NOT support downgrades. Take a backup before deploying.
- Do not skip major versions: your instance must be on the latest 34.x
(34.0.4) before upgrading to 35. If you are on an older 34.x, deploy
34.0.4 first.
- Nextcloud 35 drops support for MariaDB < 10.11 and MySQL < 8.4. This
recipe's mariadb overlay already runs MariaDB 12.3, so no action is
needed there.
- After deploying, check the logs and run any pending repair/upgrade steps:
`abra app cmd <app> app run_occ '"app:update --all"'`
- Review app (plug-in) compatibility with Nextcloud 35 before upgrading; some
apps may need to be updated or temporarily disabled.
+29
View File
@@ -0,0 +1,29 @@
Upgrades Nextcloud from 35.0.0 to 35.0.1 (patch release), and merges in a
batch of upstream coop-cloud/nextcloud recipe improvements:
- nginx bumped to 1.31.6.
- redis bumped to 8.10.2.
- Whiteboard overlay (compose.whiteboard.yml) bumped to v2.0.0 (major
version). If you use the whiteboard overlay, check the app still behaves
as expected after upgrading — this is a major version jump upstream.
- Postgres overlay now runs `pgautoupgrade/pgautoupgrade:17-debian` (up from
14) and no longer overrides `max_connections` via `-c`, since that flag
broke pgautoupgrade; the image's own healthcheck is used instead.
- MariaDB overlay sets `MARIADB_AUTO_UPGRADE=1` so minor/patch MariaDB
upgrades happen automatically on deploy.
- New optional metrics overlay (`compose.metrics.yml`): enables Nextcloud's
`/metrics` endpoint for Prometheus-style scraping. See README for how to
enable it.
- New `check_major_upgrade` abra.sh helper to sanity-check readiness before
a major Nextcloud upgrade (`abra app cmd <app> app check_major_upgrade`).
- `install_collabora` now runs `richdocuments:activate-config` so a fresh
Collabora install is actually activated.
- smtp overlay now also wires SMTP env/secrets into the `cron` service (it
was previously only applied to `app`).
- `AUTHENTIK_USER_PREFIX` documented in `.env.sample`.
IMPORTANT:
- Nextcloud does NOT support downgrades. Take a backup before deploying.
- If you use compose.postgres.yml, this recipe now runs Postgres major
version 17 via pgautoupgrade (auto-upgrading from whatever major you were
on); take a backup first.
+9
View File
@@ -0,0 +1,9 @@
Upgrades Nextcloud from 35.0.1 to 35.0.2 (patch release) and updates the
other images:
- nginx 1.31.7
- MariaDB overlay pinned to 12.3.3
- RabbitMQ 4.3.6 (Euro-Office overlay)
- Euro-Office documentserver v9.3.5
- Elasticsearch 8.19.23 (fulltextsearch overlay)
- Nextcloud Talk (aio-talk) 20261014_095932
+2 -1
View File
@@ -5,5 +5,6 @@
],
"extends": [
"config:base"
]
],
"reviewers": ["moritz","simon","carla"]
}