Compare commits

...

107 Commits

Author SHA1 Message Date
Simon L.
56453b81ad wip 2026-03-18 18:27:05 +01:00
dependabot[bot]
428a5489aa build(deps-dev): bump vimeo/psalm from 6.15.1 to 6.16.0 in /php
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 6.15.1 to 6.16.0.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/6.15.1...6.16.0)

---
updated-dependencies:
- dependency-name: vimeo/psalm
  dependency-version: 6.16.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-18 18:05:51 +01:00
Simon L.
d6981be067 Merge pull request #7768 from nextcloud/fix-streaming-responses-in-caddy
aio-interface: fix streaming responses in Caddy
2026-03-18 18:00:38 +01:00
Simon L.
0755000456 fix typo
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-18 17:56:37 +01:00
Pablo Zmdl
b169790488 Fix streaming responses in Caddy
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-03-18 17:53:54 +01:00
Simon L.
9a6b74dd16 Merge pull request #7771 from nextcloud/enh/noid/fix-psalm-2
second attempt to fix psalm
2026-03-18 17:53:42 +01:00
Simon L.
b28572e67f second attempt to fix psalm
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-18 17:50:34 +01:00
Simon L.
8b2a4c057a Merge pull request #7770 from nextcloud/enh/7766/fix-psalm
try to fix psalm
2026-03-18 17:42:45 +01:00
Simon L.
669ea45749 fix psalm
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-18 17:42:05 +01:00
Simon L.
c2e7990d33 increase to 12.9.0
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-17 13:10:37 +01:00
Simon L.
1821e695aa Merge pull request #7753 from Fs00/collabora-flags
Tweak Collabora params to disable background update checks and notifications
2026-03-17 12:08:16 +01:00
Simon L.
3738890c05 Merge pull request #7754 from nextcloud/dependabot/docker/Containers/collabora/collabora/code-25.04.9.3.1
build(deps): bump collabora/code from 25.04.9.2.1 to 25.04.9.3.1 in /Containers/collabora
2026-03-17 09:22:25 +01:00
dependabot[bot]
726e639f0b build(deps): bump collabora/code in /Containers/collabora
Bumps collabora/code from 25.04.9.2.1 to 25.04.9.3.1.

---
updated-dependencies:
- dependency-name: collabora/code
  dependency-version: 25.04.9.3.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-17 04:06:30 +00:00
Francesco Saltori
8bac8f029f Remove unused MKNOD capability from Collabora container
Signed-off-by: Francesco Saltori <francescosaltori@gmail.com>
2026-03-16 22:01:14 +01:00
Francesco Saltori
828b7784f7 Disable Collabora update checks and notifications
Signed-off-by: Francesco Saltori <francescosaltori@gmail.com>
2026-03-16 22:00:01 +01:00
Simon L.
0cb0d86471 Merge pull request #7705 from nextcloud/enh/noid/show-stop-and-starting-state
DockerController: refactor `StartBackupContainerBackup` to show the stopping and starting state
2026-03-16 18:03:25 +01:00
Simon L.
6fd537cd5d Merge pull request #7749 from nextcloud/aio-dependency-update
PHP dependency updates
2026-03-16 13:59:22 +01:00
szaimen
11dbc4978d php dependency updates
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-16 12:12:24 +00:00
Simon L.
43de29e071 Merge pull request #7743 from nextcloud/dependabot/docker/Containers/mastercontainer/php-8.5.4-fpm-alpine3.23
build(deps): bump php from 8.5.3-fpm-alpine3.23 to 8.5.4-fpm-alpine3.23 in /Containers/mastercontainer
2026-03-13 08:30:26 +01:00
Simon L.
eed853e942 Merge pull request #7744 from nextcloud/dependabot/docker/Containers/talk/strukturag/nextcloud-spreed-signaling-2.1.1
build(deps): bump strukturag/nextcloud-spreed-signaling from 2.1.0 to 2.1.1 in /Containers/talk
2026-03-13 08:27:01 +01:00
dependabot[bot]
bdb8e171f7 build(deps): bump strukturag/nextcloud-spreed-signaling
Bumps strukturag/nextcloud-spreed-signaling from 2.1.0 to 2.1.1.

---
updated-dependencies:
- dependency-name: strukturag/nextcloud-spreed-signaling
  dependency-version: 2.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-13 04:08:31 +00:00
dependabot[bot]
68c5dc8d60 build(deps): bump php in /Containers/mastercontainer
Bumps php from 8.5.3-fpm-alpine3.23 to 8.5.4-fpm-alpine3.23.

---
updated-dependencies:
- dependency-name: php
  dependency-version: 8.5.4-fpm-alpine3.23
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-13 04:07:53 +00:00
Simon L.
dfe7eb7ec1 Merge pull request #7721 from nextcloud/enh/7664/backup-restore
DockerController: refactor `StartBackupContainerRestore` to show the stopping and starting state
2026-03-12 18:35:47 +01:00
Simon L.
2016789bea Merge pull request #7741 from nextcloud/hide-from-list
Give all containers a display_name, hide from list by dedicated attribute
2026-03-12 18:31:14 +01:00
Simon L.
b0969d9644 Merge pull request #7723 from nextcloud/enh/7664/backup-list
DockerController: refactor `StartBackupContainerList` to show the starting state
2026-03-12 18:24:09 +01:00
Pablo Zmdl
6e8c8dab19 Reorder arguments
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-03-12 17:34:51 +01:00
Simon L.
1e23c1a6dd apply suggestions by @pabzm
Co-authored-by: Pablo Zmdl <57864086+pabzm@users.noreply.github.com>
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-12 16:20:17 +01:00
Simon L.
c4f4ff22c9 Merge pull request #7724 from nextcloud/enh/7664/backup-check-repair
DockerController: refactor `StartBackupContainerCheckRepair` show the starting state
2026-03-12 16:13:36 +01:00
Simon L.
a7703283dc Merge pull request #7722 from nextcloud/enh/7664/backup-test
DockerController: refactor `StartBackupContainerTest` to show the stopping and starting state
2026-03-12 16:01:09 +01:00
Pablo Zmdl
9ce33d1d1d Fix JSON syntax error
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-03-12 15:55:56 +01:00
Pablo Zmdl
d86eee5847 Give all containers a display_name, hide from list by dedicated attribute
We want a display-name for all containers in the overlay-log, but still want
to exclude some containers from the list on top of the web UI.

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-03-12 15:44:19 +01:00
Simon L.
eda48383b4 update zizmor config
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-12 15:30:10 +01:00
Simon L.
7302b48fcf Merge pull request #7716 from nextcloud/enh/7709/fix-css-styling
aio-interface: fix progress box and log view on mobile
2026-03-12 12:46:43 +01:00
Simon L.
26c0d6204b Merge pull request #7738 from nextcloud/dependabot/composer/php/guzzlehttp/psr7-2.9.0
build(deps): bump guzzlehttp/psr7 from 2.8.1 to 2.9.0 in /php
2026-03-11 16:27:33 +01:00
dependabot[bot]
4ee7f573e6 build(deps): bump guzzlehttp/psr7 from 2.8.1 to 2.9.0 in /php
Bumps [guzzlehttp/psr7](https://github.com/guzzle/psr7) from 2.8.1 to 2.9.0.
- [Release notes](https://github.com/guzzle/psr7/releases)
- [Changelog](https://github.com/guzzle/psr7/blob/2.9/CHANGELOG.md)
- [Commits](https://github.com/guzzle/psr7/compare/2.8.1...2.9.0)

---
updated-dependencies:
- dependency-name: guzzlehttp/psr7
  dependency-version: 2.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 12:03:53 +00:00
Simon L.
04e424b3a7 Merge pull request #7737 from nextcloud/upgrade-exclude-lost+found
Exclude /lost+found from rsync
2026-03-11 12:37:31 +01:00
Pablo Zmdl
ba3ee91c35 Exclude /lost+found from rsync
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-03-11 12:27:05 +01:00
Simon L.
c24f9c1642 Merge pull request #7735 from nextcloud/dependabot/github_actions/dot-github/workflows/actions/setup-node-6.3.0
build(deps): bump actions/setup-node from 6.2.0 to 6.3.0 in /.github/workflows
2026-03-10 13:31:22 +01:00
Simon L.
50b309c5a2 Merge pull request #7736 from nextcloud/aio-dependency-update
PHP dependency updates
2026-03-10 13:30:55 +01:00
szaimen
1419f29d2b php dependency updates
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-10 12:07:18 +00:00
dependabot[bot]
9a37170f08 build(deps): bump actions/setup-node in /.github/workflows
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.2.0 to 6.3.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](6044e13b5d...53b83947a5)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 6.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-10 12:07:11 +00:00
jameskimmel
1e4e040dad Merge pull request #7733 from jameskimmel/patch-4
Signed-off-by: jameskimmel <17176225+jameskimmel@users.noreply.github.com>
2026-03-10 12:23:03 +01:00
Simon L.
ad534c83cc Merge pull request #7730 from nextcloud/enh/noid/rename-collabora-to-office
languagetool: rename mentioning of `Collabora` to `Nextcloud Office`
2026-03-10 11:06:13 +01:00
Simon L.
26aced2126 languagetool: rename mentioning of Collabora to Nextcloud Office
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-10 11:04:46 +01:00
Simon L.
2ce73190e2 Merge pull request #7718 from nextcloud/dependabot/github_actions/dot-github/workflows/astral-sh/setup-uv-7.3.1
build(deps): bump astral-sh/setup-uv from 7.3.0 to 7.3.1 in /.github/workflows
2026-03-10 10:42:30 +01:00
dependabot[bot]
585a8ef13b build(deps): bump astral-sh/setup-uv in /.github/workflows
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 7.3.0 to 7.3.1.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](eac588ad8d...5a095e7a20)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 7.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-10 10:39:23 +01:00
Simon L.
a97877ee6b Merge pull request #7729 from nextcloud/enh/noid/github-token-workflows
add github token to all workflows
2026-03-10 10:36:35 +01:00
Simon L.
203b1a335e add github token to all workflows
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-10 10:35:28 +01:00
Simon L.
109f2493af Merge pull request #7728 from nextcloud/enh/7725/improve-rp-docs
rp-docs: document new header_up requirement for proxying the aio-interface
2026-03-10 10:31:59 +01:00
Simon L.
9ed23f1952 rp-docs: document new header_up requirement for proxying the aio-interface
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-10 10:27:12 +01:00
Simon L.
385eeb1621 Merge pull request #7727 from nextcloud/dependabot/docker/Containers/talk/nats-2.12.5-scratch
build(deps): bump nats from 2.12.4-scratch to 2.12.5-scratch in /Containers/talk
2026-03-10 08:06:31 +01:00
Simon L.
ee4df40708 Merge pull request #7726 from nextcloud/dependabot/docker/Containers/docker-socket-proxy/haproxy-3.3.5-alpine
build(deps): bump haproxy from 3.3.4-alpine to 3.3.5-alpine in /Containers/docker-socket-proxy
2026-03-10 08:06:11 +01:00
dependabot[bot]
2999fb4413 build(deps): bump nats in /Containers/talk
Bumps nats from 2.12.4-scratch to 2.12.5-scratch.

---
updated-dependencies:
- dependency-name: nats
  dependency-version: 2.12.5-scratch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-10 04:08:20 +00:00
dependabot[bot]
1620f83bf7 build(deps): bump haproxy in /Containers/docker-socket-proxy
Bumps haproxy from 3.3.4-alpine to 3.3.5-alpine.

---
updated-dependencies:
- dependency-name: haproxy
  dependency-version: 3.3.5-alpine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-10 04:07:33 +00:00
Simon L.
eccfa8b9d9 Merge pull request #7715 from nextcloud/dependabot/docker/Containers/mastercontainer/caddy-2.11.2-builder-alpine
build(deps): bump caddy from 2.11.1-builder-alpine to 2.11.2-builder-alpine in /Containers/mastercontainer
2026-03-09 18:16:48 +01:00
Simon L.
9b64fff193 Merge pull request #7714 from nextcloud/dependabot/docker/Containers/apache/caddy-2.11.2-alpine
build(deps): bump caddy from 2.11.1-alpine to 2.11.2-alpine in /Containers/apache
2026-03-09 18:16:34 +01:00
Simon L.
349443c240 Merge pull request #7711 from nextcloud/aio-dependency-update
PHP dependency updates
2026-03-09 18:16:19 +01:00
Simon L.
49d743c17c DockerController: refactor StartBackupContainerCheckRepair show the starting state
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-09 18:13:21 +01:00
Simon L.
c45913a6ff DockerController: refactor StartBackupContainerListto show the starting state
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-09 18:07:46 +01:00
Simon L.
7f394f5297 DockerController: refactor StartBackupContainerTest to show the stopping and starting state
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-09 18:03:05 +01:00
Simon L.
e561fad2af DockerController: refactor StartBackupContainerRestore to show the stopping and starting state
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-09 17:55:50 +01:00
Simon L.
eb9cb26ff1 aio-interface: fix progress box and log view on mbile
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-09 12:16:05 +01:00
dependabot[bot]
1022b408a7 build(deps): bump caddy in /Containers/mastercontainer
Bumps caddy from 2.11.1-builder-alpine to 2.11.2-builder-alpine.

---
updated-dependencies:
- dependency-name: caddy
  dependency-version: 2.11.2-builder-alpine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 04:09:59 +00:00
dependabot[bot]
ee137e497a build(deps): bump caddy in /Containers/apache
Bumps caddy from 2.11.1-alpine to 2.11.2-alpine.

---
updated-dependencies:
- dependency-name: caddy
  dependency-version: 2.11.2-alpine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 04:09:36 +00:00
szaimen
71b384be64 php dependency updates
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-07 12:03:50 +00:00
Simon L.
7922d38aa6 Merge pull request #7684 from michnovka/talk-trust-custom-ca
feat(talk): trust custom CA certificates via NEXTCLOUD_TRUSTED_CACERTS_DIR
2026-03-06 15:10:32 +01:00
michnovka
dd103fa0f1 Update Containers/talk/start.sh
Co-authored-by: Simon L. <szaimen@e.mail.de>
Signed-off-by: michnovka <16553087+michnovka@users.noreply.github.com>
2026-03-06 14:58:08 +01:00
Tomas
909ef96748 Use mountpoint check and add util-linux-misc dependency
Address review feedback: use `mountpoint -q` instead of find to
detect mounted CA directory, add set -x/+x for debug logging,
broaden glob to accept any file extension, and add util-linux-misc
package to Dockerfile for the mountpoint command.

Signed-off-by: Tomas <16553087+michnovka@users.noreply.github.com>
2026-03-06 14:44:09 +01:00
Simon L.
978a4ce282 Merge pull request #7706 from nextcloud/fix-missing-characters-in-recorded-video
talk-recording: fix missing characters in recorded video
2026-03-06 14:25:16 +01:00
Zoey
b972c5703f mastercontainer: replace apache with a second caddy (#7006)
Signed-off-by: Zoey <zoey@z0ey.de>
Signed-off-by: Simon L. <szaimen@e.mail.de>
Co-authored-by: Simon L. <szaimen@e.mail.de>
2026-03-06 14:23:52 +01:00
Daniel Calviño Sánchez
8c3b5b2e21 fix: Fix missing characters in recorded video
The recording server uses a browser to join the call and records the
browser UI, which renders text like the display name of users or the
name of the Nextcloud instance. By default Firefox provides its own font
but, even if broad, it still has limited character coverage, so the
unsupported characters are shown as ".notdef" glyph (rectangular
boxes).

Fortunately Firefox also uses more complete fonts automatically when
they are available, so now the noto font, which seems to be the most
complete font available in Alpine Linux, is installed and used instead.

Note that "font-noto-cjk" provides regular and bold fonts, while
"font-noto-cjk-extra" provides all weights.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2026-03-06 11:13:37 +01:00
Simon L.
6e87758ba9 DockerController: refactor StartBackupContainerBackup to show the stopping and starting state
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-06 10:42:08 +01:00
Simon L.
4b1c7286bc Merge pull request #7675 from nextcloud/enh/7664/backup-check
DockerController: refactor `StartBackupContainerCheck` to show the starting state
2026-03-06 10:38:39 +01:00
Simon L.
510032d7a1 Merge pull request #7676 from nextcloud/enh/7675/refactor-stop-of-containers
DockerController: refactor stopping of containers to show the current process
2026-03-06 10:31:42 +01:00
Simon L.
b248710803 DockerController: refactor StartBackupContainerCheck to show the starting state
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-06 10:16:50 +01:00
Simon L.
9040ccdab8 DockerController: refactor stopping of containers to show the current process
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-06 10:16:08 +01:00
Simon L.
c7041c4f6f Merge pull request #7674 from nextcloud/enh/7664/start-watchtower
Dockercontroller: refactor streaming responses into dedicated functions and use them  in StartWatchtowerContainer method
2026-03-06 10:13:34 +01:00
Simon L.
23f5ae2a10 Dockercontroller: refactor streaming responses into dedicated functions and use them in StartWatchtowerContainer method
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-06 10:02:47 +01:00
Simon L.
ea326ba723 Merge pull request #7652 from nextcloud/enh/noid/redis-tls-support
redis.config.php: allow to enable tls
2026-03-06 10:00:32 +01:00
Simon L.
b4db823d9b Merge pull request #7701 from nextcloud/dependabot/docker/Containers/watchtower/golang-1.26.1-alpine3.23
build(deps): bump golang from 1.26.0-alpine3.23 to 1.26.1-alpine3.23 in /Containers/watchtower
2026-03-06 09:58:44 +01:00
Simon L.
61e6e233f4 Merge pull request #7700 from nextcloud/dependabot/docker/Containers/onlyoffice/onlyoffice/documentserver-9.3.1.2
build(deps): bump onlyoffice/documentserver from 9.3.0.1 to 9.3.1.2 in /Containers/onlyoffice
2026-03-06 09:58:33 +01:00
Simon L.
1abb0e2b94 Merge pull request #7699 from nextcloud/dependabot/docker/Containers/mastercontainer/docker-29.3.0-cli
build(deps): bump docker from 29.2.1-cli to 29.3.0-cli in /Containers/mastercontainer
2026-03-06 09:58:21 +01:00
Simon L.
31999ade2e Merge pull request #7698 from nextcloud/dependabot/docker/Containers/imaginary/golang-1.26.1-alpine3.23
build(deps): bump golang from 1.26.0-alpine3.23 to 1.26.1-alpine3.23 in /Containers/imaginary
2026-03-06 09:58:05 +01:00
Simon L.
744efad0f4 Merge pull request #7688 from nextcloud/watchtower-container-update
watchtower container update
2026-03-06 09:57:53 +01:00
Simon L.
11553a3c0f Merge pull request #7672 from nextcloud/dependabot/docker/Containers/whiteboard/nextcloud-releases/whiteboard-v1.5.7
build(deps): bump nextcloud-releases/whiteboard from v1.5.6 to v1.5.7 in /Containers/whiteboard
2026-03-06 09:57:42 +01:00
Simon L.
0cdbf3aa96 Merge pull request #7671 from nextcloud/dependabot/docker/Containers/postgresql/postgres-17.9-alpine
build(deps): bump postgres from 17.8-alpine to 17.9-alpine in /Containers/postgresql
2026-03-06 09:57:32 +01:00
Simon L.
2d4903492b Merge pull request #7670 from nextcloud/dependabot/docker/Containers/fulltextsearch/elasticsearch-8.19.12
build(deps): bump elasticsearch from 8.19.11 to 8.19.12 in /Containers/fulltextsearch
2026-03-06 09:57:21 +01:00
Simon L.
8cd82a6fb8 Merge pull request #7669 from nextcloud/dependabot/docker/Containers/collabora/collabora/code-25.04.9.2.1
build(deps): bump collabora/code from 25.04.8.3.1 to 25.04.9.2.1 in /Containers/collabora
2026-03-06 09:57:10 +01:00
Simon L.
c5e20e3024 Merge pull request #7663 from nextcloud/aio-dependency-update
PHP dependency updates
2026-03-06 09:56:58 +01:00
Simon L.
b82e34ddef Merge pull request #7704 from Maximilian-Maag/fix-yml
fix yml port mappings
2026-03-06 09:51:14 +01:00
Maximilian Jakob Maag
e910c0c21a fix yml port mappings 2026-03-06 09:43:52 +01:00
Simon L.
d5b334177c Merge pull request #7703 from nextcloud/aio-helm-update
Helm Chart updates
2026-03-06 09:18:17 +01:00
szaimen
ea52b11c7b Helm Chart updates
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-06 08:15:38 +00:00
Simon L.
825787e228 Merge pull request #7633 from nextcloud/aio-yaml-update
Yaml updates
2026-03-06 09:14:27 +01:00
dependabot[bot]
c827221188 build(deps): bump golang in /Containers/watchtower
Bumps golang from 1.26.0-alpine3.23 to 1.26.1-alpine3.23.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.1-alpine3.23
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 04:08:33 +00:00
dependabot[bot]
78cfc91d1e build(deps): bump onlyoffice/documentserver in /Containers/onlyoffice
Bumps onlyoffice/documentserver from 9.3.0.1 to 9.3.1.2.

---
updated-dependencies:
- dependency-name: onlyoffice/documentserver
  dependency-version: 9.3.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 04:08:14 +00:00
dependabot[bot]
0048e46272 build(deps): bump docker in /Containers/mastercontainer
Bumps docker from 29.2.1-cli to 29.3.0-cli.

---
updated-dependencies:
- dependency-name: docker
  dependency-version: 29.3.0-cli
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 04:07:42 +00:00
dependabot[bot]
fc6626918d build(deps): bump golang in /Containers/imaginary
Bumps golang from 1.26.0-alpine3.23 to 1.26.1-alpine3.23.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.1-alpine3.23
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 04:07:40 +00:00
szaimen
50b89ba7d8 watchtower-update automated change
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-05 12:18:25 +00:00
szaimen
31c30cce9d Yaml updates
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-03 12:07:24 +00:00
szaimen
2ef20b2937 php dependency updates
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-03 12:06:58 +00:00
michnovka
7cd2ac1bbd feat(talk): trust custom CA certificates via NEXTCLOUD_TRUSTED_CACERTS_DIR
When NEXTCLOUD_TRUSTED_CACERTS_DIR is set on the mastercontainer,
the custom CA certificates are now also mounted into the Talk container.

Since the Talk container runs with a read-only root filesystem,
update-ca-certificates cannot be used. Instead, the startup script
copies the system CA bundle to /tmp (tmpfs), appends any custom
certificates from /usr/local/share/ca-certificates/, and sets
SSL_CERT_FILE to point Go's TLS stack at the extended bundle.

This allows the signaling server to verify TLS connections to
Nextcloud instances that use private/internal CA certificates,
without requiring skipverify=true.

Signed-off-by: Tomas <16553087+michnovka@users.noreply.github.com>
2026-03-03 00:11:27 +01:00
dependabot[bot]
a58edd9a64 build(deps): bump nextcloud-releases/whiteboard
Bumps nextcloud-releases/whiteboard from v1.5.6 to v1.5.7.

---
updated-dependencies:
- dependency-name: nextcloud-releases/whiteboard
  dependency-version: v1.5.7
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 04:08:10 +00:00
dependabot[bot]
f5810bd601 build(deps): bump postgres in /Containers/postgresql
Bumps postgres from 17.8-alpine to 17.9-alpine.

---
updated-dependencies:
- dependency-name: postgres
  dependency-version: 17.9-alpine
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 04:07:46 +00:00
dependabot[bot]
6734ff4c7f build(deps): bump elasticsearch in /Containers/fulltextsearch
Bumps elasticsearch from 8.19.11 to 8.19.12.

---
updated-dependencies:
- dependency-name: elasticsearch
  dependency-version: 8.19.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 04:07:04 +00:00
dependabot[bot]
96de08456d build(deps): bump collabora/code in /Containers/collabora
Bumps collabora/code from 25.04.8.3.1 to 25.04.9.2.1.

---
updated-dependencies:
- dependency-name: collabora/code
  dependency-version: 25.04.9.2.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 04:06:59 +00:00
Simon L.
d11650f798 redis.config.php: allow to enable tls
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-02-25 10:41:03 +01:00
68 changed files with 465 additions and 402 deletions

View File

@@ -20,6 +20,7 @@ jobs:
- name: Create Pull Request
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: collabora-seccomp-update automated change
signoff: true
title: collabora seccomp update

View File

@@ -43,9 +43,19 @@ jobs:
| tail -1
)"
sed -i "s|pecl install APCu.*\;|pecl install APCu-$apcu_version\;|" ./Containers/mastercontainer/Dockerfile
# CADDY_REMOTE_HOST_HASH
CADDY_REMOTE_HOST_HASH="$(
git ls-remote https://github.com/muety/caddy-remote-host master \
| cut -f1 \
| tail -1
)"
sed -i "s|^ARG CADDY_REMOTE_HOST_HASH.*$|ARG CADDY_REMOTE_HOST_HASH=$CADDY_REMOTE_HOST_HASH|" ./Containers/mastercontainer/Dockerfile
- name: Create Pull Request
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: php dependency updates
signoff: true
title: PHP dependency updates

View File

@@ -24,6 +24,7 @@ jobs:
- name: Create Pull Request
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: imaginary-update automated change
signoff: true
title: Imaginary update

View File

@@ -36,7 +36,7 @@ jobs:
line-length: warning
- name: Install the latest version of uv
uses: astral-sh/setup-uv@eac588ad8def6316056a12d4907a9d4d84ff7a3b # v7.3.0
uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098 # v7.3.1
- name: Check GitHub actions
run: uvx zizmor --min-severity medium .github/workflows/*.yml

View File

@@ -81,6 +81,7 @@ jobs:
- name: Create Pull Request
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: nextcloud-update automated change
signoff: true
title: Nextcloud dependency update

View File

@@ -26,7 +26,7 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
with:
node-version: lts/*

View File

@@ -15,7 +15,7 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
with:
node-version: lts/*

View File

@@ -18,6 +18,11 @@ jobs:
php-version: 8.5
extensions: apcu
coverage: none
ini-file: development
jit: false
ini_values: |
opcache.jit=0
opcache.jit_buffer_size=0
- name: Run script
run: |
@@ -32,7 +37,7 @@ jobs:
- name: Create Pull Request
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v7
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: Update psalm baseline
committer: GitHub <noreply@github.com>
author: nextcloud-command <nextcloud-command@users.noreply.github.com>

View File

@@ -43,8 +43,11 @@ jobs:
extensions: apcu
coverage: none
ini-file: development
# Temporary workaround for missing pcntl_* in PHP 8.3
ini-values: disable_functions=
jit: false
ini_values: |
opcache.jit=0
opcache.jit_buffer_size=0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -47,6 +47,7 @@ jobs:
- name: Create Pull Request
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: talk-update automated change
signoff: true
title: talk container update

View File

@@ -28,6 +28,7 @@ jobs:
- name: Create Pull Request
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: watchtower-update automated change
signoff: true
title: watchtower container update

View File

@@ -1,5 +1,5 @@
# syntax=docker/dockerfile:latest
FROM caddy:2.11.1-alpine AS caddy
FROM caddy:2.11.2-alpine AS caddy
# From https://github.com/docker-library/httpd/blob/master/2.4/alpine/Dockerfile
FROM httpd:2.4.66-alpine3.23

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:latest
# From a file located probably somewhere here: https://github.com/CollaboraOnline/online/blob/master/docker/from-packages/Dockerfile
FROM collabora/code:25.04.8.3.1
FROM collabora/code:25.04.9.3.1
USER root
ARG DEBIAN_FRONTEND=noninteractive

View File

@@ -1,5 +1,5 @@
# syntax=docker/dockerfile:latest
FROM haproxy:3.3.4-alpine
FROM haproxy:3.3.5-alpine
# hadolint ignore=DL3002
USER root

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:latest
# Probably from here https://github.com/elastic/elasticsearch/blob/main/distribution/docker/src/docker/Dockerfile
FROM elasticsearch:8.19.11
FROM elasticsearch:8.19.12
USER root

View File

@@ -1,5 +1,5 @@
# syntax=docker/dockerfile:latest
FROM golang:1.26.0-alpine3.23 AS go
FROM golang:1.26.1-alpine3.23 AS go
ENV IMAGINARY_HASH=6a274b488759a896aff02f52afee6e50b5e3a3ee

View File

@@ -1,37 +0,0 @@
{
# auto_https will create redirects for https://{host}:8443 instead of https://{host}
# https redirects are added manually in the http://:80 block
auto_https disable_redirects
storage file_system {
root /mnt/docker-aio-config/caddy/
}
log {
level ERROR
}
servers {
protocols h1 h2 h2c
}
on_demand_tls {
ask http://127.0.0.1:9876/
}
}
http://:80 {
redir https://{host}{uri} permanent
}
https://:8443 {
reverse_proxy 127.0.0.1:8000
tls {
on_demand
issuer acme {
disable_tlsalpn_challenge
}
}
}

View File

@@ -1,12 +1,17 @@
# syntax=docker/dockerfile:latest
# Docker CLI is a requirement
FROM docker:29.2.1-cli AS docker
FROM docker:29.3.0-cli AS docker
ARG CADDY_REMOTE_HOST_HASH=b21775afa730ffb52a24ddff310c8a6d1fd37276
# Caddy is a requirement
FROM caddy:2.11.1-alpine AS caddy
FROM caddy:2.11.2-builder-alpine AS caddy
RUN set -ex; \
xcaddy build --with github.com/muety/caddy-remote-host@"$CADDY_REMOTE_HOST_HASH"; \
/usr/bin/caddy list-modules
# From https://github.com/docker-library/php/blob/master/8.5/alpine3.23/fpm/Dockerfile
FROM php:8.5.3-fpm-alpine3.23
FROM php:8.5.4-fpm-alpine3.23
EXPOSE 80
EXPOSE 8080
@@ -21,9 +26,8 @@ COPY --from=docker /usr/local/bin/docker /usr/local/bin/docker
COPY community-containers /var/www/docker-aio/community-containers
COPY php /var/www/docker-aio/php
COPY --chmod=775 Containers/mastercontainer/*.sh /
COPY --chmod=664 Containers/mastercontainer/Caddyfile /Caddyfile
COPY --chmod=664 Containers/mastercontainer/*.Caddyfile /
COPY --chmod=664 Containers/mastercontainer/supervisord.conf /supervisord.conf
COPY Containers/mastercontainer/mastercontainer.conf /etc/apache2/sites-available/mastercontainer.conf
WORKDIR /var/www/docker-aio
@@ -37,13 +41,8 @@ RUN set -ex; \
apk add --no-cache \
util-linux-misc \
ca-certificates \
wget \
bash \
apache2 \
apache2-proxy \
apache2-ssl \
supervisor \
openssl \
sudo \
netcat-openbsd \
curl \
@@ -67,11 +66,12 @@ RUN set -ex; \
sed -i 's/^pm = dynamic/pm = ondemand/' /usr/local/etc/php-fpm.d/www.conf; \
sed -i 's/^pm.max_children =.*/pm.max_children = 80/' /usr/local/etc/php-fpm.d/www.conf; \
sed -i 's|access.log = /proc/self/fd/2|access.log = /proc/self/fd/1|' /usr/local/etc/php-fpm.d/docker.conf; \
grep -q ';listen.allowed_clients' /usr/local/etc/php-fpm.d/www.conf; \
sed -i 's|;listen.allowed_clients.*|listen.allowed_clients = 127.0.0.1,::1|' /usr/local/etc/php-fpm.d/www.conf; \
grep -q '^listen =' /usr/local/etc/php-fpm.d/docker.conf; \
sed -i 's|listen =.*|listen = /run/php.sock|' /usr/local/etc/php-fpm.d/docker.conf; \
echo "listen.owner = www-data" | tee -a /usr/local/etc/php-fpm.d/docker.conf; \
\
apk add --no-cache git; \
wget https://getcomposer.org/installer -O - | php -- --install-dir=/usr/local/bin --filename=composer; \
curl https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer; \
chmod +x /usr/local/bin/composer; \
cd /var/www/docker-aio; \
rm -r ./php/tests; \
@@ -86,42 +86,6 @@ RUN set -ex; \
rm -r php/data; \
rm -r php/session; \
\
mkdir -p /etc/apache2/certs; \
cd /etc/apache2/certs; \
openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 -subj "/C=DE/ST=BE/L=Local/O=Dev/CN=nextcloud.local" -keyout /etc/apache2/certs/ssl.key -out /etc/apache2/certs/ssl.crt; \
\
sed -i \
-e '/^Listen /d' \
-e 's/^LogLevel .*/LogLevel error/' \
-e 's|^ErrorLog .*|ErrorLog /proc/self/fd/2|' \
-e 's/User apache/User www-data/g' \
-e 's/Group apache/Group www-data/g' \
-e 's/^#\(LoadModule .*mod_rewrite.so\)/\1/' \
-e 's/^#\(LoadModule .*mod_headers.so\)/\1/' \
-e 's/^#\(LoadModule .*mod_env.so\)/\1/' \
-e 's/^#\(LoadModule .*mod_mime.so\)/\1/' \
-e 's/^#\(LoadModule .*mod_dir.so\)/\1/' \
-e 's/^#\(LoadModule .*mod_authz_core.so\)/\1/' \
-e 's/^#\(LoadModule .*mod_mpm_event.so\)/\1/' \
-e 's/\(LoadModule .*mod_mpm_worker.so\)/#\1/' \
-e 's/\(LoadModule .*mod_mpm_prefork.so\)/#\1/' \
-e 's/\(ScriptAlias \)/#\1/' \
/etc/apache2/httpd.conf; \
mkdir -p /etc/apache2/logs; \
rm /etc/apache2/conf.d/ssl.conf; \
echo "ServerName localhost" | tee -a /etc/apache2/httpd.conf; \
grep -q '^LoadModule lbmethod_heartbeat_module' /etc/apache2/conf.d/proxy.conf; \
sed -i 's|^LoadModule lbmethod_heartbeat_module.*|#LoadModule lbmethod_heartbeat_module|' /etc/apache2/conf.d/proxy.conf; \
echo "SSLSessionCache nonenotnull" | tee -a /etc/apache2/httpd.conf; \
echo "LoadModule ssl_module modules/mod_ssl.so" | tee -a /etc/apache2/httpd.conf; \
echo "LoadModule socache_shmcb_module modules/mod_socache_shmcb.so" | tee -a /etc/apache2/httpd.conf; \
echo "Include /etc/apache2/sites-available/mastercontainer.conf" | tee -a /etc/apache2/httpd.conf; \
\
rm -f /etc/apache2/conf.d/default.conf \
/etc/apache2/conf.d/userdir.conf \
/etc/apache2/conf.d/info.conf; \
\
rm -rf /var/www/localhost/cgi-bin/; \
mkdir /var/log/supervisord; \
mkdir /var/run/supervisord;

View File

@@ -12,8 +12,8 @@ The mastercontainer acts as the central orchestration service for the deployment
of all other containers in the Nextcloud All-in-One stack. It hosts:
- A dedicated PHP SAPI/backend (php-fpm) for AIO itself (not Nextcloud Server)
- An Apache service for accessing the AIO interface via a self-signed HTTPS VirtualHost on 8080/tcp
- A Caddy reverse proxy service enabling HTTPS access to the AIO frontend on port 8443/tcp.
- A Caddy server enabling self-signed HTTPS access to the AIO frontend on port 8080/tcp.
- A Caddy server enabling trusted HTTPS access to the AIO frontend on port 8443/tcp.
- Caddy will automatically issue a Let's Encrypt issued certificate if port 80 and 8443
is open/forwarded and a domain pointer is in place; then, simply open the Nextcloud AIO interface using the
domain (`https://your-domain-that-points-to-this-server.tld:8443`). The Let's Encrypt certificate request will

View File

@@ -0,0 +1,49 @@
{
admin off
# auto_https will create redirects for https://{host}:8443 instead of https://{host}
# https redirects are added manually in the http://:80 block
auto_https disable_redirects
storage file_system {
root /mnt/docker-aio-config/caddy/
}
log {
level ERROR
# We need to exclude the remote-host plugin from logging as it would spam the logs
# See https://github.com/nextcloud/all-in-one/pull/7006#issuecomment-4003238239
exclude http.matchers.remote_host
}
servers {
protocols h1 h2 h2c
}
on_demand_tls {
ask http://127.0.0.1:9876/
}
skip_install_trust
}
http://:80 {
redir https://{host}{uri} permanent
}
https://:8443 {
@denied remote_host nextcloud-aio-nextcloud
abort @denied
root * /var/www/docker-aio/php/public
encode
php_fastcgi unix//run/php.sock
file_server
tls {
on_demand
issuer acme {
disable_tlsalpn_challenge
}
}
}

View File

@@ -2,9 +2,8 @@
if [ -f "/mnt/docker-aio-config/data/configuration.json" ]; then
nc -z 127.0.0.1 80 || exit 1
nc -z 127.0.0.1 8000 || exit 1
nc -z 127.0.0.1 8080 || exit 1
nc -z 127.0.0.1 8443 || exit 1
nc -z 127.0.0.1 9000 || exit 1
[ -f /run/php.sock ] || exit 1
nc -z 127.0.0.1 9876 || exit 1
fi

View File

@@ -0,0 +1,35 @@
{
admin off
storage file_system {
root /mnt/docker-aio-config/caddy/
}
log {
level ERROR
# We need to exclude the remote-host plugin from logging as it would spam the logs
# See https://github.com/nextcloud/all-in-one/pull/7006#issuecomment-4003238239
exclude http.matchers.remote_host
}
servers {
protocols h1 h2
}
skip_install_trust
}
https://:8080 {
@denied remote_host nextcloud-aio-nextcloud
abort @denied
root * /var/www/docker-aio/php/public
encode
php_fastcgi unix//run/php.sock
file_server
tls {
on_demand
issuer internal
}
}

View File

@@ -1,67 +0,0 @@
Listen 127.0.0.1:8000
Listen 8080 https
# Deny access to .ht files
<Files ".ht*">
Require all denied
</Files>
# Http host
<VirtualHost 127.0.0.1:8000>
ServerName 127.0.0.1
# Add error log
CustomLog /proc/self/fd/1 proxy
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
ErrorLog /proc/self/fd/2
ErrorLogFormat "[%t] [%l] [%E] [client: %{X-Forwarded-For}i] [%M] [%{User-Agent}i]"
LogLevel warn
# PHP match
<FilesMatch "\.php$">
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
# Disable output buffering to enable streaming responses.
<Proxy "fcgi://127.0.0.1:9000/" flushpackets=on>
</Proxy>
# Master dir
DocumentRoot /var/www/docker-aio/php/public/
<Directory /var/www/docker-aio/php/public/>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
Options Indexes FollowSymLinks
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
Satisfy Any
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
</VirtualHost>
# Https host
<VirtualHost *:8080>
# Proxy to https
ProxyPass / http://127.0.0.1:8000/
ProxyPassReverse / http://127.0.0.1:8000/
ProxyPreserveHost On
# SSL
SSLCertificateKeyFile /etc/apache2/certs/ssl.key
SSLCertificateFile /etc/apache2/certs/ssl.crt
SSLEngine on
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder off
SSLSessionTickets off
</VirtualHost>
# Increase timeout in case e.g. the initial download takes a long time
Timeout 7200
ProxyTimeout 7200
# See https://httpd.apache.org/docs/trunk/mod/core.html#traceenable
TraceEnable Off

View File

@@ -364,7 +364,6 @@ fi
mkdir -p /mnt/docker-aio-config/data/
mkdir -p /mnt/docker-aio-config/session/
mkdir -p /mnt/docker-aio-config/caddy/
mkdir -p /mnt/docker-aio-config/certs/
# Adjust permissions for all instances
chmod 770 -R /mnt/docker-aio-config
@@ -372,37 +371,6 @@ chmod 777 /mnt/docker-aio-config
chown www-data:www-data -R /mnt/docker-aio-config/data/
chown www-data:www-data -R /mnt/docker-aio-config/session/
chown www-data:www-data -R /mnt/docker-aio-config/caddy/
chown root:root -R /mnt/docker-aio-config/certs/
# Don't allow access to the AIO interface from the Nextcloud container
# Probably more cosmetic than anything but at least an attempt
if ! grep -q '# nextcloud-aio-block' /etc/apache2/httpd.conf; then
cat << APACHE_CONF >> /etc/apache2/httpd.conf
# nextcloud-aio-block-start
<Location />
order allow,deny
deny from nextcloud-aio-nextcloud.nextcloud-aio
allow from all
</Location>
# nextcloud-aio-block-end
APACHE_CONF
fi
# Adjust certs
GENERATED_CERTS="/mnt/docker-aio-config/certs"
TMP_CERTS="/etc/apache2/certs"
mkdir -p "$GENERATED_CERTS"
cd "$GENERATED_CERTS" || exit 1
if ! [ -f ./ssl.crt ] && ! [ -f ./ssl.key ]; then
openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 -subj "/C=DE/ST=BE/L=Local/O=Dev/CN=nextcloud.local" -keyout ./ssl.key -out ./ssl.crt
fi
if [ -f ./ssl.crt ] && [ -f ./ssl.key ]; then
cd "$TMP_CERTS" || exit 1
rm ./ssl.crt
rm ./ssl.key
cp "$GENERATED_CERTS/ssl.crt" ./
cp "$GENERATED_CERTS/ssl.key" ./
fi
print_green "Initial startup of Nextcloud All-in-One complete!
You should be able to open the Nextcloud AIO Interface now on port 8080 of this server!
@@ -415,8 +383,11 @@ https://your-domain-that-points-to-this-server.tld:8443"
# Set the timezone to Etc/UTC
export TZ=Etc/UTC
# Fix apache startup
rm -f /var/run/apache2/httpd.pid
# Remove unused certs
rm -vrf /mnt/docker-aio-config/certs
# Remove the php socket as safeguard
rm -vf /run/php.sock
# Fix caddy startup
if [ -d "/mnt/docker-aio-config/caddy/locks" ]; then
@@ -424,7 +395,8 @@ if [ -d "/mnt/docker-aio-config/caddy/locks" ]; then
fi
# Fix the Caddyfile format
caddy fmt --overwrite /Caddyfile
caddy fmt --overwrite /acme.Caddyfile
caddy fmt --overwrite /internal.Caddyfile
# Fix caddy log
chmod 777 /root

View File

@@ -16,20 +16,20 @@ stderr_logfile_maxbytes=0
command=php-fpm
user=root
[program:apache]
# Stdout logging is disabled as otherwise the logs are spammed
stdout_logfile=NONE
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=httpd -DFOREGROUND
user=root
[program:caddy]
[program:caddy-internal]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=/usr/bin/caddy run --config /Caddyfile
command=/usr/bin/caddy run --config /internal.Caddyfile
user=www-data
[program:caddy-acme]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=/usr/bin/caddy run --config /acme.Caddyfile
user=www-data
[program:cron]

View File

@@ -24,6 +24,10 @@ if (getenv('REDIS_MODE') !== 'rediscluster') {
if (getenv('REDIS_USER_AUTH')) {
$CONFIG['redis']['user'] = str_replace("&auth[]=", "", getenv('REDIS_USER_AUTH'));
}
if (getenv('NEXTCLOUD_TRUSTED_CERTIFICATES_REDIS')) {
$CONFIG['redis']['ssl_context']['cafile'] = '/var/www/html/data/certificates/ca-bundle.crt';
}
} else {
$CONFIG = array(
'memcache.distributed' => '\OC\Memcache\Redis',
@@ -53,4 +57,8 @@ if (getenv('REDIS_MODE') !== 'rediscluster') {
if (getenv('REDIS_USER_AUTH')) {
$CONFIG['redis.cluster']['user'] = str_replace("&auth[]=", "", getenv('REDIS_USER_AUTH'));
}
if (getenv('NEXTCLOUD_TRUSTED_CERTIFICATES_REDIS')) {
$CONFIG['redis.cluster']['ssl_context']['cafile'] = '/var/www/html/data/certificates/ca-bundle.crt';
}
}

View File

@@ -3,3 +3,4 @@
/custom_apps/
/themes/
/version.php
/lost+found

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:latest
# From https://github.com/ONLYOFFICE/Docker-DocumentServer/blob/master/Dockerfile
FROM onlyoffice/documentserver:9.3.0.1
FROM onlyoffice/documentserver:9.3.1.2
# USER root is probably used

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:latest
# From https://github.com/docker-library/postgres/blob/master/17/alpine3.23/Dockerfile
FROM postgres:17.8-alpine
FROM postgres:17.9-alpine
COPY --chmod=775 start.sh /start.sh
COPY --chmod=775 healthcheck.sh /healthcheck.sh

View File

@@ -20,6 +20,9 @@ RUN set -ex; \
xvfb \
ffmpeg \
firefox \
font-noto-all \
font-noto-cjk \
font-noto-cjk-extra \
bind-tools \
netcat-openbsd \
git \

View File

@@ -1,7 +1,7 @@
# syntax=docker/dockerfile:latest
FROM nats:2.12.4-scratch AS nats
FROM nats:2.12.5-scratch AS nats
FROM eturnal/eturnal:1.12.2-alpine AS eturnal
FROM strukturag/nextcloud-spreed-signaling:2.1.0 AS signaling
FROM strukturag/nextcloud-spreed-signaling:2.1.1 AS signaling
FROM alpine:3.23.3 AS janus
ARG JANUS_VERSION=v1.4.0
@@ -70,7 +70,8 @@ RUN set -ex; \
libwebsockets \
\
shadow \
grep; \
grep \
util-linux-misc; \
useradd --system -u 1000 eturnal; \
apk del --no-cache \
shadow; \

View File

@@ -18,6 +18,22 @@ elif [ -z "$INTERNAL_SECRET" ]; then
exit 1
fi
# Trust additional CA certificates, if the user provided NEXTCLOUD_TRUSTED_CACERTS_DIR
# The container is read-only, so we build a custom bundle in /tmp (tmpfs) and
# point Go's TLS stack to it via SSL_CERT_FILE.
if mountpoint -q /usr/local/share/ca-certificates; then
echo "Trusting additional CA certificates..."
set -x
cp /etc/ssl/certs/ca-certificates.crt /tmp/ca-certificates.crt
for cert in /usr/local/share/ca-certificates/*; do
if [ -f "$cert" ]; then
cat "$cert" >> /tmp/ca-certificates.crt
fi
done
export SSL_CERT_FILE=/tmp/ca-certificates.crt
set +x
fi
set -x
IPv4_ADDRESS_TALK_RELAY="$(hostname -i | grep -oP '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -1)"
# shellcheck disable=SC2153

View File

@@ -1,13 +1,13 @@
# syntax=docker/dockerfile:latest
FROM golang:1.26.0-alpine3.23 AS go
FROM golang:1.26.1-alpine3.23 AS go
ENV WATCHTOWER_COMMIT_HASH=943098a670cb78a620af6499fb94b3ee2c940cf0
ENV WATCHTOWER_COMMIT_HASH=2a3fe10ad86f36a7f208105bbe1fb29e51caac5b
RUN set -ex; \
apk upgrade --no-cache -a; \
apk add --no-cache \
build-base; \
go install github.com/nicholas-fedor/watchtower@$WATCHTOWER_COMMIT_HASH # v1.14.2
go install github.com/nicholas-fedor/watchtower@$WATCHTOWER_COMMIT_HASH # v1.14.3
FROM alpine:3.23.3

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:latest
# Probably from this file: https://github.com/nextcloud/whiteboard/blob/main/Dockerfile
FROM ghcr.io/nextcloud-releases/whiteboard:v1.5.6
FROM ghcr.io/nextcloud-releases/whiteboard:v1.5.7
USER root
RUN set -ex; \

View File

@@ -1,9 +1,9 @@
## LanguageTool for Collabora
This container bundles a LanguageTool for Collabora which adds spell checking functionality to Collabora.
## LanguageTool for Nextcloud Office
This container bundles a LanguageTool for Nextcloud Office which adds spell checking functionality to Nextcloud Office.
### Notes
- Make sure to have collabora enabled via the AIO interface
- After adding this container via the AIO Interface, while all containers are still stopped, you need to scroll down to the `Additional Collabora options` section and enter `--o:languagetool.enabled=true --o:languagetool.base_url=http://nextcloud-aio-languagetool:8010/v2`.
- Make sure to have Nextcloud Office enabled via the AIO interface
- After adding this container via the AIO Interface, while all containers are still stopped, you need to scroll down to the `Additional Nextcloud Office options` section and enter `--o:languagetool.enabled=true --o:languagetool.base_url=http://nextcloud-aio-languagetool:8010/v2`.
- See https://github.com/nextcloud/all-in-one/tree/main/community-containers#community-containers how to add it to the AIO stack
### Repository

View File

@@ -11,9 +11,9 @@ services:
network_mode: bridge # This adds the container to the same network as docker run would do. Comment this line and uncomment the line below and the networks section at the end of the file if you want to define a custom MTU size for the docker network
# networks: ["nextcloud-aio"]
ports:
- 80:80 # Can be removed when running behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
- 8080:8080 # This is the AIO interface, served via https and self-signed certificate. See https://github.com/nextcloud/all-in-one#explanation-of-used-ports
- 8443:8443 # Can be removed when running behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
- "80:80" # Can be removed when running behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
- "8080:8080" # This is the AIO interface, served via https and self-signed certificate. See https://github.com/nextcloud/all-in-one#explanation-of-used-ports
- "8443:8443" # Can be removed when running behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
# security_opt: ["label:disable"] # Is needed when using SELinux. See https://github.com/nextcloud/all-in-one#are-there-known-problems-when-selinux-is-enabled
# environment: # Is needed when using any of the options below
# AIO_DISABLE_BACKUP_SECTION: false # Setting this to true allows to hide the backup section in the AIO interface. See https://github.com/nextcloud/all-in-one#how-to-disable-the-backup-section

View File

@@ -45,6 +45,7 @@ services:
- APACHE_MAX_TIME=${NEXTCLOUD_MAX_TIME}
- NOTIFY_PUSH_HOST=nextcloud-aio-notify-push
- WHITEBOARD_HOST=nextcloud-aio-whiteboard
- HARP_HOST=nextcloud-aio-harp
volumes:
- nextcloud_aio_nextcloud:/var/www/html:ro
- nextcloud_aio_apache:/mnt/data:rw
@@ -202,19 +203,10 @@ services:
expose:
- "7867"
volumes:
- nextcloud_aio_nextcloud:/nextcloud:ro
- nextcloud_aio_nextcloud:/var/www/html:ro
environment:
- NC_DOMAIN
- NEXTCLOUD_HOST=nextcloud-aio-nextcloud
- TZ=${TIMEZONE}
- REDIS_HOST=nextcloud-aio-redis
- REDIS_PORT=6379
- REDIS_HOST_PASSWORD=${REDIS_PASSWORD}
- POSTGRES_HOST=nextcloud-aio-database
- POSTGRES_PORT=5432
- POSTGRES_PASSWORD=${DATABASE_PASSWORD}
- POSTGRES_DB=nextcloud_database
- POSTGRES_USER=nextcloud
restart: unless-stopped
read_only: true
cap_drop:

View File

@@ -180,6 +180,7 @@ apt install --no-install-recommends qemu-system qemu-utils libvirt-clients libvi
# Virtual machine #1 - "example1-com"
https://[DOMAIN_NAME_1]:8443 {
reverse_proxy https://[IP_ADDRESS_1]:8080 {
header_up Host {host}
transport http {
tls_insecure_skip_verify
}
@@ -192,6 +193,7 @@ apt install --no-install-recommends qemu-system qemu-utils libvirt-clients libvi
# Virtual machine #2 - "example2-com"
https://[DOMAIN_NAME_2]:8443 {
reverse_proxy https://[IP_ADDRESS_2]:8080 {
header_up Host {host}
transport http {
tls_insecure_skip_verify
}

View File

@@ -1,6 +1,6 @@
name: nextcloud-aio-helm-chart
description: A generated Helm Chart for Nextcloud AIO from Skippbox Kompose
version: 12.7.0
version: 12.8.0
apiVersion: v2
keywords:
- latest

View File

@@ -63,7 +63,7 @@ spec:
value: "{{ .Values.TIMEZONE }}"
- name: WHITEBOARD_HOST
value: nextcloud-aio-whiteboard
image: ghcr.io/nextcloud-releases/aio-apache:20260218_123804
image: ghcr.io/nextcloud-releases/aio-apache:20260306_081319
readinessProbe:
exec:
command:

View File

@@ -36,7 +36,7 @@ spec:
{{- end }}
initContainers:
- name: init-subpath
image: ghcr.io/nextcloud-releases/aio-alpine:20260218_123804
image: ghcr.io/nextcloud-releases/aio-alpine:20260306_081319
command:
- mkdir
- "-p"
@@ -59,7 +59,7 @@ spec:
value: "{{ .Values.NEXTCLOUD_UPLOAD_LIMIT }}"
- name: TZ
value: "{{ .Values.TIMEZONE }}"
image: ghcr.io/nextcloud-releases/aio-clamav:20260218_123804
image: ghcr.io/nextcloud-releases/aio-clamav:20260306_081319
readinessProbe:
exec:
command:

View File

@@ -36,9 +36,9 @@ spec:
- name: server_name
value: "{{ .Values.NC_DOMAIN }}"
{{- if contains "--o:support_key=" (join " " (.Values.ADDITIONAL_COLLABORA_OPTIONS | default list)) }}
image: ghcr.io/nextcloud-releases/aio-collabora-online:20260218_123804
image: ghcr.io/nextcloud-releases/aio-collabora-online:20260306_081319
{{- else }}
image: ghcr.io/nextcloud-releases/aio-collabora:20260218_123804
image: ghcr.io/nextcloud-releases/aio-collabora:20260306_081319
{{- end }}
readinessProbe:
exec:

View File

@@ -35,7 +35,7 @@ spec:
{{- end }}
initContainers:
- name: init-subpath
image: ghcr.io/nextcloud-releases/aio-alpine:20260218_123804
image: ghcr.io/nextcloud-releases/aio-alpine:20260306_081319
command:
- mkdir
- "-p"
@@ -64,7 +64,7 @@ spec:
value: nextcloud
- name: TZ
value: "{{ .Values.TIMEZONE }}"
image: ghcr.io/nextcloud-releases/aio-postgresql:20260218_123804
image: ghcr.io/nextcloud-releases/aio-postgresql:20260306_081319
readinessProbe:
exec:
command:

View File

@@ -24,7 +24,7 @@ spec:
spec:
initContainers:
- name: init-volumes
image: ghcr.io/nextcloud-releases/aio-alpine:20260218_123804
image: ghcr.io/nextcloud-releases/aio-alpine:20260306_081319
command:
- chmod
- "777"
@@ -54,7 +54,7 @@ spec:
value: basic
- name: xpack.security.enabled
value: "false"
image: ghcr.io/nextcloud-releases/aio-fulltextsearch:20260218_123804
image: ghcr.io/nextcloud-releases/aio-fulltextsearch:20260306_081319
readinessProbe:
exec:
command:

View File

@@ -38,7 +38,7 @@ spec:
value: "{{ .Values.IMAGINARY_SECRET }}"
- name: TZ
value: "{{ .Values.TIMEZONE }}"
image: ghcr.io/nextcloud-releases/aio-imaginary:20260218_123804
image: ghcr.io/nextcloud-releases/aio-imaginary:20260306_081319
readinessProbe:
exec:
command:

View File

@@ -38,7 +38,7 @@ spec:
# AIO settings start # Do not remove or change this line!
initContainers:
- name: init-volumes
image: ghcr.io/nextcloud-releases/aio-alpine:20260218_123804
image: ghcr.io/nextcloud-releases/aio-alpine:20260306_081319
command:
- chmod
- "777"
@@ -190,7 +190,7 @@ spec:
value: "{{ .Values.WHITEBOARD_ENABLED }}"
- name: WHITEBOARD_SECRET
value: "{{ .Values.WHITEBOARD_SECRET }}"
image: ghcr.io/nextcloud-releases/aio-nextcloud:20260218_123804
image: ghcr.io/nextcloud-releases/aio-nextcloud:20260306_081319
{{- if eq (.Values.RPSS_ENABLED | default "no") "yes" }} # AIO-config - do not change this comment!
securityContext:
# The items below only work in container context

View File

@@ -39,7 +39,7 @@ spec:
value: nextcloud-aio-nextcloud
- name: TZ
value: "{{ .Values.TIMEZONE }}"
image: ghcr.io/nextcloud-releases/aio-notify-push:20260218_123804
image: ghcr.io/nextcloud-releases/aio-notify-push:20260306_081319
readinessProbe:
exec:
command:

View File

@@ -24,7 +24,7 @@ spec:
spec:
initContainers:
- name: init-volumes
image: ghcr.io/nextcloud-releases/aio-alpine:20260218_123804
image: ghcr.io/nextcloud-releases/aio-alpine:20260306_081319
command:
- chmod
- "777"
@@ -42,7 +42,7 @@ spec:
value: "{{ .Values.ONLYOFFICE_SECRET }}"
- name: TZ
value: "{{ .Values.TIMEZONE }}"
image: ghcr.io/nextcloud-releases/aio-onlyoffice:20260218_123804
image: ghcr.io/nextcloud-releases/aio-onlyoffice:20260306_081319
readinessProbe:
exec:
command:

View File

@@ -39,7 +39,7 @@ spec:
value: "{{ .Values.REDIS_PASSWORD }}"
- name: TZ
value: "{{ .Values.TIMEZONE }}"
image: ghcr.io/nextcloud-releases/aio-redis:20260218_123804
image: ghcr.io/nextcloud-releases/aio-redis:20260306_081319
readinessProbe:
exec:
command:

View File

@@ -52,7 +52,7 @@ spec:
value: "{{ .Values.TURN_SECRET }}"
- name: TZ
value: "{{ .Values.TIMEZONE }}"
image: ghcr.io/nextcloud-releases/aio-talk:20260218_123804
image: ghcr.io/nextcloud-releases/aio-talk:20260306_081319
readinessProbe:
exec:
command:

View File

@@ -44,7 +44,7 @@ spec:
value: "{{ .Values.RECORDING_SECRET }}"
- name: TZ
value: "{{ .Values.TIMEZONE }}"
image: ghcr.io/nextcloud-releases/aio-talk-recording:20260218_123804
image: ghcr.io/nextcloud-releases/aio-talk-recording:20260306_081319
readinessProbe:
exec:
command:

View File

@@ -50,7 +50,7 @@ spec:
value: redis
- name: TZ
value: "{{ .Values.TIMEZONE }}"
image: ghcr.io/nextcloud-releases/aio-whiteboard:20260218_123804
image: ghcr.io/nextcloud-releases/aio-whiteboard:20260306_081319
readinessProbe:
exec:
command:

121
php/composer.lock generated
View File

@@ -273,16 +273,16 @@
},
{
"name": "guzzlehttp/psr7",
"version": "2.8.0",
"version": "2.9.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "21dc724a0583619cd1652f673303492272778051"
"reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
"reference": "21dc724a0583619cd1652f673303492272778051",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884",
"reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884",
"shasum": ""
},
"require": {
@@ -298,6 +298,7 @@
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "0.9.0",
"jshttp/mime-db": "1.54.0.1",
"phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"suggest": {
@@ -369,7 +370,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.8.0"
"source": "https://github.com/guzzle/psr7/tree/2.9.0"
},
"funding": [
{
@@ -385,7 +386,7 @@
"type": "tidelift"
}
],
"time": "2025-08-23T21:21:41+00:00"
"time": "2026-03-10T16:41:02+00:00"
},
{
"name": "http-interop/http-factory-guzzle",
@@ -3246,20 +3247,20 @@
},
{
"name": "league/uri",
"version": "7.8.0",
"version": "7.8.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri.git",
"reference": "4436c6ec8d458e4244448b069cc572d088230b76"
"reference": "08cf38e3924d4f56238125547b5720496fac8fd4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76",
"reference": "4436c6ec8d458e4244448b069cc572d088230b76",
"url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4",
"reference": "08cf38e3924d4f56238125547b5720496fac8fd4",
"shasum": ""
},
"require": {
"league/uri-interfaces": "^7.8",
"league/uri-interfaces": "^7.8.1",
"php": "^8.1",
"psr/http-factory": "^1"
},
@@ -3332,7 +3333,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
"source": "https://github.com/thephpleague/uri/tree/7.8.0"
"source": "https://github.com/thephpleague/uri/tree/7.8.1"
},
"funding": [
{
@@ -3340,20 +3341,20 @@
"type": "github"
}
],
"time": "2026-01-14T17:24:56+00:00"
"time": "2026-03-15T20:22:25+00:00"
},
{
"name": "league/uri-interfaces",
"version": "7.8.0",
"version": "7.8.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri-interfaces.git",
"reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4"
"reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
"reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
"url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928",
"reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928",
"shasum": ""
},
"require": {
@@ -3416,7 +3417,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
"source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0"
"source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1"
},
"funding": [
{
@@ -3424,7 +3425,7 @@
"type": "github"
}
],
"time": "2026-01-15T06:54:53+00:00"
"time": "2026-03-08T20:05:35+00:00"
},
{
"name": "netresearch/jsonmapper",
@@ -3590,16 +3591,16 @@
},
{
"name": "phpdocumentor/reflection-docblock",
"version": "6.0.1",
"version": "6.0.2",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
"reference": "2f5cbed597cb261d1ea458f3da3a9ad32e670b1e"
"reference": "897b5986ece6b4f9d8413fea345c7d49c757d6bf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/2f5cbed597cb261d1ea458f3da3a9ad32e670b1e",
"reference": "2f5cbed597cb261d1ea458f3da3a9ad32e670b1e",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/897b5986ece6b4f9d8413fea345c7d49c757d6bf",
"reference": "897b5986ece6b4f9d8413fea345c7d49c757d6bf",
"shasum": ""
},
"require": {
@@ -3649,9 +3650,9 @@
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.1"
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.2"
},
"time": "2026-01-20T15:30:42+00:00"
"time": "2026-03-01T18:43:49+00:00"
},
{
"name": "phpdocumentor/type-resolver",
@@ -4037,16 +4038,16 @@
},
{
"name": "symfony/console",
"version": "v6.4.32",
"version": "v6.4.35",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3"
"reference": "49257c96304c508223815ee965c251e7c79e614e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3",
"reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3",
"url": "https://api.github.com/repos/symfony/console/zipball/49257c96304c508223815ee965c251e7c79e614e",
"reference": "49257c96304c508223815ee965c251e7c79e614e",
"shasum": ""
},
"require": {
@@ -4111,7 +4112,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v6.4.32"
"source": "https://github.com/symfony/console/tree/v6.4.35"
},
"funding": [
{
@@ -4131,20 +4132,20 @@
"type": "tidelift"
}
],
"time": "2026-01-13T08:45:59+00:00"
"time": "2026-03-06T13:31:08+00:00"
},
{
"name": "symfony/filesystem",
"version": "v8.0.1",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "d937d400b980523dc9ee946bb69972b5e619058d"
"reference": "7bf9162d7a0dff98d079b72948508fa48018a770"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/d937d400b980523dc9ee946bb69972b5e619058d",
"reference": "d937d400b980523dc9ee946bb69972b5e619058d",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/7bf9162d7a0dff98d079b72948508fa48018a770",
"reference": "7bf9162d7a0dff98d079b72948508fa48018a770",
"shasum": ""
},
"require": {
@@ -4181,7 +4182,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v8.0.1"
"source": "https://github.com/symfony/filesystem/tree/v8.0.6"
},
"funding": [
{
@@ -4201,20 +4202,20 @@
"type": "tidelift"
}
],
"time": "2025-12-01T09:13:36+00:00"
"time": "2026-02-25T16:59:43+00:00"
},
{
"name": "symfony/finder",
"version": "v6.4.33",
"version": "v6.4.34",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "24965ca011dac87431729640feef8bcf7b5523e0"
"reference": "9590e86be1d1c57bfbb16d0dd040345378c20896"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/24965ca011dac87431729640feef8bcf7b5523e0",
"reference": "24965ca011dac87431729640feef8bcf7b5523e0",
"url": "https://api.github.com/repos/symfony/finder/zipball/9590e86be1d1c57bfbb16d0dd040345378c20896",
"reference": "9590e86be1d1c57bfbb16d0dd040345378c20896",
"shasum": ""
},
"require": {
@@ -4249,7 +4250,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v6.4.33"
"source": "https://github.com/symfony/finder/tree/v6.4.34"
},
"funding": [
{
@@ -4269,7 +4270,7 @@
"type": "tidelift"
}
],
"time": "2026-01-26T13:03:48+00:00"
"time": "2026-01-28T15:16:37+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
@@ -4607,16 +4608,16 @@
},
{
"name": "symfony/string",
"version": "v7.4.4",
"version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f"
"reference": "9f209231affa85aa930a5e46e6eb03381424b30b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f",
"reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f",
"url": "https://api.github.com/repos/symfony/string/zipball/9f209231affa85aa930a5e46e6eb03381424b30b",
"reference": "9f209231affa85aa930a5e46e6eb03381424b30b",
"shasum": ""
},
"require": {
@@ -4674,7 +4675,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v7.4.4"
"source": "https://github.com/symfony/string/tree/v7.4.6"
},
"funding": [
{
@@ -4694,20 +4695,20 @@
"type": "tidelift"
}
],
"time": "2026-01-12T10:54:30+00:00"
"time": "2026-02-09T09:33:46+00:00"
},
{
"name": "vimeo/psalm",
"version": "6.15.1",
"version": "6.16.0",
"source": {
"type": "git",
"url": "https://github.com/vimeo/psalm.git",
"reference": "28dc127af1b5aecd52314f6f645bafc10d0e11f9"
"reference": "7cf3e8b988edd75e0766963b0b9e671b220f5785"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/vimeo/psalm/zipball/28dc127af1b5aecd52314f6f645bafc10d0e11f9",
"reference": "28dc127af1b5aecd52314f6f645bafc10d0e11f9",
"url": "https://api.github.com/repos/vimeo/psalm/zipball/7cf3e8b988edd75e0766963b0b9e671b220f5785",
"reference": "7cf3e8b988edd75e0766963b0b9e671b220f5785",
"shasum": ""
},
"require": {
@@ -4812,7 +4813,7 @@
"issues": "https://github.com/vimeo/psalm/issues",
"source": "https://github.com/vimeo/psalm"
},
"time": "2026-02-07T19:27:16+00:00"
"time": "2026-03-17T11:15:56+00:00"
},
{
"name": "wapmorgan/php-deprecation-detector",
@@ -4883,16 +4884,16 @@
},
{
"name": "webmozart/assert",
"version": "2.1.5",
"version": "2.1.6",
"source": {
"type": "git",
"url": "https://github.com/webmozarts/assert.git",
"reference": "79155f94852fa27e2f73b459f6503f5e87e2c188"
"reference": "ff31ad6efc62e66e518fbab1cde3453d389bcdc8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/79155f94852fa27e2f73b459f6503f5e87e2c188",
"reference": "79155f94852fa27e2f73b459f6503f5e87e2c188",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/ff31ad6efc62e66e518fbab1cde3453d389bcdc8",
"reference": "ff31ad6efc62e66e518fbab1cde3453d389bcdc8",
"shasum": ""
},
"require": {
@@ -4939,9 +4940,9 @@
],
"support": {
"issues": "https://github.com/webmozarts/assert/issues",
"source": "https://github.com/webmozarts/assert/tree/2.1.5"
"source": "https://github.com/webmozarts/assert/tree/2.1.6"
},
"time": "2026-02-18T14:09:36+00:00"
"time": "2026-02-27T10:28:38+00:00"
}
],
"aliases": [],

View File

@@ -49,6 +49,9 @@
"type": "string",
"pattern": "^[()A-Za-z &0-9-]+$"
},
"hide_from_list": {
"type": "boolean"
},
"environment": {
"type": "array",
"items": {
@@ -229,4 +232,4 @@
}
}
}
}
}

View File

@@ -380,7 +380,7 @@
"internal_port": "9980",
"environment": [
"aliasgroup1=https://%NC_DOMAIN%:443,http://nextcloud-aio-apache:23973",
"extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:logging.disable_server_audit=true --o:logging.level=warning --o:logging.level_startup=warning --o:welcome.enable=false %COLLABORA_SECCOMP_POLICY% --o:remote_font_config.url=https://%NC_DOMAIN%/apps/richdocuments/settings/fonts.json --o:net.post_allow.host[0]=.+",
"extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:logging.disable_server_audit=true --o:logging.level=warning --o:logging.level_startup=warning --o:welcome.enable=false --o:fetch_update_check=0 --o:allow_update_popup=false %COLLABORA_SECCOMP_POLICY% --o:remote_font_config.url=https://%NC_DOMAIN%/apps/richdocuments/settings/fonts.json --o:net.post_allow.host[0]=.+",
"dictionaries=%COLLABORA_DICTIONARIES%",
"TZ=%TIMEZONE%",
"server_name=%NC_DOMAIN%",
@@ -395,7 +395,6 @@
"collabora"
],
"cap_add": [
"MKNOD",
"SYS_ADMIN",
"SYS_CHROOT",
"FOWNER",
@@ -437,6 +436,13 @@
"8081"
],
"internal_port": "%TALK_PORT%",
"volumes": [
{
"source": "%NEXTCLOUD_TRUSTED_CACERTS_DIR%",
"destination": "/usr/local/share/ca-certificates",
"writeable": false
}
],
"environment": [
"NC_DOMAIN=%NC_DOMAIN%",
"TALK_HOST=nextcloud-aio-talk",
@@ -523,6 +529,8 @@
},
{
"container_name": "nextcloud-aio-borgbackup",
"display_name": "Borgbackup",
"hide_from_list": true,
"image_tag": "%AIO_CHANNEL%",
"image": "ghcr.io/nextcloud-releases/aio-borgbackup",
"init": true,
@@ -591,6 +599,8 @@
},
{
"container_name": "nextcloud-aio-watchtower",
"display_name": "Watchtower",
"hide_from_list": true,
"image_tag": "%AIO_CHANNEL%",
"image": "ghcr.io/nextcloud-releases/aio-watchtower",
"init": true,
@@ -611,6 +621,8 @@
},
{
"container_name": "nextcloud-aio-domaincheck",
"display_name": "Domaincheck",
"hide_from_list": true,
"image_tag": "%AIO_CHANNEL%",
"image": "ghcr.io/nextcloud-releases/aio-domaincheck",
"init": true,

View File

@@ -7,15 +7,15 @@ if (isset($_GET['domain']) && is_string($_GET['domain'])) {
}
if (!str_contains($domain, '.')) {
http_response_code(400);
http_response_code(400);
} elseif (str_contains($domain, '/')) {
http_response_code(400);
http_response_code(400);
} elseif (str_contains($domain, ':')) {
http_response_code(400);
http_response_code(400);
} elseif (filter_var($domain, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME) === false) {
http_response_code(400);
http_response_code(400);
} elseif (filter_var($domain, FILTER_VALIDATE_IP)) {
http_response_code(400);
http_response_code(400);
} else {
// Commented because logging is disabled as otherwise all attempts will be logged which spams the logs
// error_log($domain . ' was accepted as valid domain.');

View File

@@ -483,8 +483,8 @@ input[type="checkbox"]:disabled:not(:checked) + label {
visibility: hidden;
opacity: 0;
align-self: start;
width: 20%;
height: 7rem;
width: 300px;
height: 200px;
border-radius: var(--border-radius-large);
border: solid thin rgb(192, 192, 192);
}

View File

@@ -38,6 +38,7 @@ readonly class Container {
public string $imageTag,
public AioVariables $aioVariables,
public string $documentation,
public bool $hideFromList,
private DockerActionManager $dockerActionManager
) {
}

View File

@@ -324,6 +324,8 @@ readonly class ContainerDefinitionFetcher {
$documentation = $entry['documentation'];
}
$hideFromList = $entry['hide_from_list'] ?? false;
$containers[] = new Container(
$entry['container_name'],
$displayName,
@@ -349,6 +351,7 @@ readonly class ContainerDefinitionFetcher {
$imageTag,
$aioVariables,
$documentation,
$hideFromList,
$this->container->get(DockerActionManager::class)
);
}

View File

@@ -87,43 +87,64 @@ readonly class DockerController {
}
public function StartBackupContainerBackup(Request $request, Response $response, array $args) : Response {
// Get streaming response start and closure
$nonbufResp = $this->startStreamingResponse($response);
$addToStreamingResponseBody = $this->getAddToStreamingResponseBody($nonbufResp);
$forceStopNextcloud = true;
$this->startBackup($forceStopNextcloud);
return $response->withStatus(201)->withHeader('Location', '.');
$this->startBackup($forceStopNextcloud, $addToStreamingResponseBody);
// End streaming response
$this->finalizeStreamingResponse($nonbufResp);
return $nonbufResp;
}
public function startBackup(bool $forceStopNextcloud = false) : void {
public function startBackup(bool $forceStopNextcloud = false, ?\Closure $addToStreamingResponseBody = null) : void {
$this->configurationManager->backupMode = 'backup';
$id = self::TOP_CONTAINER;
$this->PerformRecursiveContainerStop($id, $forceStopNextcloud);
$this->PerformRecursiveContainerStop($id, $forceStopNextcloud, $addToStreamingResponseBody);
$id = 'nextcloud-aio-borgbackup';
$this->PerformRecursiveContainerStart($id);
$this->PerformRecursiveContainerStart($id, true, $addToStreamingResponseBody);
}
public function StartBackupContainerCheck(Request $request, Response $response, array $args) : Response {
$this->checkBackup();
return $response->withStatus(201)->withHeader('Location', '.');
// Get streaming response start and closure
$nonbufResp = $this->startStreamingResponse($response);
$addToStreamingResponseBody = $this->getAddToStreamingResponseBody($nonbufResp);
$this->checkBackup($addToStreamingResponseBody);
// End streaming response
$this->finalizeStreamingResponse($nonbufResp);
return $nonbufResp;
}
public function StartBackupContainerList(Request $request, Response $response, array $args) : Response {
$this->listBackup();
return $response->withStatus(201)->withHeader('Location', '.');
// Get streaming response start and closure
$nonbufResp = $this->startStreamingResponse($response);
$addToStreamingResponseBody = $this->getAddToStreamingResponseBody($nonbufResp);
$this->listBackup($addToStreamingResponseBody);
// End streaming response
$this->finalizeStreamingResponse($nonbufResp);
return $nonbufResp;
}
public function checkBackup() : void {
public function checkBackup(?\Closure $addToStreamingResponseBody = null) : void {
$this->configurationManager->backupMode = 'check';
$id = 'nextcloud-aio-borgbackup';
$this->PerformRecursiveContainerStart($id);
$this->PerformRecursiveContainerStart($id, true, $addToStreamingResponseBody);
}
private function listBackup() : void {
private function listBackup(?\Closure $addToStreamingResponseBody = null) : void {
$this->configurationManager->backupMode = 'list';
$id = 'nextcloud-aio-borgbackup';
$this->PerformRecursiveContainerStart($id);
$this->PerformRecursiveContainerStart($id, true, $addToStreamingResponseBody);
}
public function StartBackupContainerRestore(Request $request, Response $response, array $args) : Response {
@@ -133,26 +154,38 @@ readonly class DockerController {
$this->configurationManager->restoreExcludePreviews = isset($request->getParsedBody()['restore-exclude-previews']);
$this->configurationManager->commitTransaction();
// Get streaming response start and closure
$nonbufResp = $this->startStreamingResponse($response);
$addToStreamingResponseBody = $this->getAddToStreamingResponseBody($nonbufResp);
$id = self::TOP_CONTAINER;
$forceStopNextcloud = true;
$this->PerformRecursiveContainerStop($id, $forceStopNextcloud);
$this->PerformRecursiveContainerStop($id, $forceStopNextcloud, $addToStreamingResponseBody);
$id = 'nextcloud-aio-borgbackup';
$this->PerformRecursiveContainerStart($id);
$this->PerformRecursiveContainerStart($id, true, $addToStreamingResponseBody);
return $response->withStatus(201)->withHeader('Location', '.');
// End streaming response
$this->finalizeStreamingResponse($nonbufResp);
return $nonbufResp;
}
public function StartBackupContainerCheckRepair(Request $request, Response $response, array $args) : Response {
$this->configurationManager->backupMode = 'check-repair';
// Get streaming response start and closure
$nonbufResp = $this->startStreamingResponse($response);
$addToStreamingResponseBody = $this->getAddToStreamingResponseBody($nonbufResp);
$id = 'nextcloud-aio-borgbackup';
$this->PerformRecursiveContainerStart($id);
$this->PerformRecursiveContainerStart($id, true, $addToStreamingResponseBody);
// Restore to backup check which is needed to make the UI logic work correctly
$this->configurationManager->backupMode = 'check';
return $response->withStatus(201)->withHeader('Location', '.');
// End streaming response
$this->finalizeStreamingResponse($nonbufResp);
return $nonbufResp;
}
public function StartBackupContainerTest(Request $request, Response $response, array $args) : Response {
@@ -161,13 +194,19 @@ readonly class DockerController {
$this->configurationManager->instanceRestoreAttempt = false;
$this->configurationManager->commitTransaction();
// Get streaming response start and closure
$nonbufResp = $this->startStreamingResponse($response);
$addToStreamingResponseBody = $this->getAddToStreamingResponseBody($nonbufResp);
$id = self::TOP_CONTAINER;
$this->PerformRecursiveContainerStop($id);
$this->PerformRecursiveContainerStop($id, true, $addToStreamingResponseBody);
$id = 'nextcloud-aio-borgbackup';
$this->PerformRecursiveContainerStart($id);
$this->PerformRecursiveContainerStart($id, true, $addToStreamingResponseBody);
return $response->withStatus(201)->withHeader('Location', '.');
// End streaming response
$this->finalizeStreamingResponse($nonbufResp);
return $nonbufResp;
}
public function StartContainer(Request $request, Response $response, array $args) : Response
@@ -202,23 +241,9 @@ readonly class DockerController {
error_log('WARNING: Not pulling container images. Instead, using local ones.');
}
$nonbufResp = $response
->withBody(new NonBufferedBody())
->withHeader('Content-Type', 'text/html; charset=utf-8')
->withHeader('X-Accel-Buffering', 'no')
->withHeader('Cache-Control', 'no-cache');
// Text written into this body is immediately sent to the client, without waiting for later content.
$streamingResponseBody = $nonbufResp->getBody();
$streamingResponseBody->write($this->getStreamingResponseHtmlStart());
// Create a closure to pass around to the code, which should to the logging (because it e.g. decides
// if it'll actually pull an image), but which should not need to know anything about the
// wanted markup or formatting.
$addToStreamingResponseBody = function (Container $container, string $message) use ($streamingResponseBody) : void {
$streamingResponseBody->write("<div>{$container->displayName}: {$message}</div>");
};
// Get streaming response start and closure
$nonbufResp = $this->startStreamingResponse($response);
$addToStreamingResponseBody = $this->getAddToStreamingResponseBody($nonbufResp);
// Start container
$this->startTopContainer($pullImage, $addToStreamingResponseBody);
@@ -227,7 +252,8 @@ readonly class DockerController {
// Temporarily disabled as it leads much faster to docker rate limits
// apcu_clear_cache();
$streamingResponseBody->write($this->getStreamingResponseHtmlEnd());
// End streaming response
$this->finalizeStreamingResponse($nonbufResp);
return $nonbufResp;
}
@@ -243,17 +269,24 @@ readonly class DockerController {
}
public function StartWatchtowerContainer(Request $request, Response $response, array $args) : Response {
$this->startWatchtower();
return $response->withStatus(201)->withHeader('Location', '.');
// Get streaming response start and closure
$nonbufResp = $this->startStreamingResponse($response);
$addToStreamingResponseBody = $this->getAddToStreamingResponseBody($nonbufResp);
$this->startWatchtower($addToStreamingResponseBody);
// End streaming response
$this->finalizeStreamingResponse($nonbufResp);
return $nonbufResp;
}
public function startWatchtower() : void {
public function startWatchtower(?\Closure $addToStreamingResponseBody = null) : void {
$id = 'nextcloud-aio-watchtower';
$this->PerformRecursiveContainerStart($id);
$this->PerformRecursiveContainerStart($id, true, $addToStreamingResponseBody);
}
private function PerformRecursiveContainerStop(string $id, bool $forceStopNextcloud = false) : void
private function PerformRecursiveContainerStop(string $id, bool $forceStopNextcloud = false, ?\Closure $addToStreamingResponseBody = null) : void
{
$container = $this->containerDefinitionFetcher->GetContainerById($id);
@@ -261,7 +294,11 @@ readonly class DockerController {
// Stop Collabora first to make sure it force-saves
// See https://github.com/nextcloud/richdocuments/issues/3799
if ($id === self::TOP_CONTAINER && $this->configurationManager->isCollaboraEnabled) {
$this->PerformRecursiveContainerStop('nextcloud-aio-collabora');
$this->PerformRecursiveContainerStop('nextcloud-aio-collabora', false, $addToStreamingResponseBody);
}
if ($addToStreamingResponseBody !== null) {
$addToStreamingResponseBody($container, "Stopping container");
}
// Stop itself first and then all the dependencies
@@ -272,17 +309,23 @@ readonly class DockerController {
$this->dockerActionManager->StopContainer($container, $forceStopNextcloud);
}
foreach($container->dependsOn as $dependency) {
$this->PerformRecursiveContainerStop($dependency, $forceStopNextcloud);
$this->PerformRecursiveContainerStop($dependency, $forceStopNextcloud, $addToStreamingResponseBody);
}
}
public function StopContainer(Request $request, Response $response, array $args) : Response
{
// Get streaming response start and closure
$nonbufResp = $this->startStreamingResponse($response);
$addToStreamingResponseBody = $this->getAddToStreamingResponseBody($nonbufResp);
$id = self::TOP_CONTAINER;
$forceStopNextcloud = true;
$this->PerformRecursiveContainerStop($id, $forceStopNextcloud);
$this->PerformRecursiveContainerStop($id, $forceStopNextcloud, $addToStreamingResponseBody);
return $response->withStatus(201)->withHeader('Location', '.');
// End streaming response
$this->finalizeStreamingResponse($nonbufResp);
return $nonbufResp;
}
public function stopTopContainer() : void {
@@ -354,7 +397,38 @@ readonly class DockerController {
END;
}
private function startStreamingResponse(Response $response) : Response {
$nonbufResp = $response
->withBody(new NonBufferedBody())
->withHeader('Content-Type', 'text/html; charset=utf-8')
->withHeader('X-Accel-Buffering', 'no')
->withHeader('Content-Length', '-1')
->withHeader('Cache-Control', 'no-cache');
// Text written into this body is immediately sent to the client, without waiting for later content.
$streamingResponseBody = $nonbufResp->getBody();
$streamingResponseBody->write($this->getStreamingResponseHtmlStart());
return $nonbufResp;
}
private function getAddToStreamingResponseBody(Response $nonbufResp) : ?\Closure {
// Create a closure to pass around to the code, which should to the logging (because it e.g. decides
// if it'll actually pull an image), but which should not need to know anything about the
// wanted markup or formatting.
$addToStreamingResponseBody = function (Container $container, string $message) use ($nonbufResp) : void {
$nonbufResp->getBody()->write("<div>{$container->displayName}: {$message}</div>");
};
return $addToStreamingResponseBody;
}
private function finalizeStreamingResponse(Response $nonbufResp) : void {
$nonbufResp->getBody()->write($this->getStreamingResponseHtmlEnd());
}
private function getStreamingResponseHtmlEnd() : string {
return "\n </body>\n</html>";
}

View File

@@ -47,10 +47,10 @@
{% endif %}
{% for container in containers %}
{% if container.displayName != '' and container.GetRunningState().value == 'running' %}
{% if container.hideFromList != true and container.GetRunningState().value == 'running' %}
{% set isAnyRunning = true %}
{% endif %}
{% if container.displayName != '' and container.GetRestartingState().value == 'restarting' %}
{% if container.hideFromList != true and container.GetRestartingState().value == 'restarting' %}
{% set isAnyRestarting = true %}
{% endif %}
{% if container.identifier == 'nextcloud-aio-watchtower' and container.GetRunningState().value == 'running' %}
@@ -90,7 +90,7 @@
{% elseif is_mastercontainer_update_available == true %}
<h2>Mastercontainer update</h2>
<p>⚠️ A mastercontainer update is available. Please click on the button below to update it. Afterwards, you will be able to proceed with the setup.</p>
<form method="POST" action="api/docker/watchtower" class="xhr">
<form method="POST" action="api/docker/watchtower" target="overlay-log">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="Update mastercontainer" />
@@ -150,7 +150,7 @@
<details>
<summary>Reveal repair option</summary>
<p>Below is the option to repair the integrity of your backup. <strong>Please note:</strong> Please only use this after you have read the documentation above! (It will run the command 'borg check --repair' for you.)</p>
<form method="POST" action="api/docker/backup-check-repair" class="xhr">
<form method="POST" action="api/docker/backup-check-repair" target="overlay-log">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="Check and repair backup integrity" onclick="return confirm('Check and repair backup integrity? Are you sure that you want to check and repair the backup integrity? This should only be done after reading the mentioned documentation.')"/>
@@ -161,7 +161,7 @@
<p><span class="status success"></span> Last {{ borg_backup_mode }} successful! (<a href="log?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
{% if borg_backup_mode == 'test' %}
<p>Feel free to check the integrity of the backup archive below before starting the restore process in order to make ensure that the restore will work. This can take a long time though depending on the size of the backup archive and is thus not required.</p>
<form method="POST" action="api/docker/backup-check" class="xhr">
<form method="POST" action="api/docker/backup-check" target="overlay-log">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="Check backup integrity"/>
@@ -169,7 +169,7 @@
{% endif %}
<p>Choose the backup that you want to restore and click on the button below to restore the selected backup. This will restore the whole AIO instance. Please note that the current AIO passphrase will be kept and the previous AIO passphrase will not be restored from backup!</p>
<p><strong>Important:</strong> If the backup that you want to restore contained any <a target="_blank" href="https://github.com/nextcloud/all-in-one/tree/main/community-containers#community-containers">community container</a>, you need to restore the same backup a second time after this attempt so that the community container data is also correctly restored.</p>
<form method="POST" action="api/docker/restore" class="xhr" id="restore_selection">
<form method="POST" action="api/docker/restore" target="overlay-log" id="restore_selection">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<select id="selected_restore_time" name="selected_restore_time" form="restore_selection">
@@ -215,7 +215,7 @@
{% endif %}
{% else %}
<p><strong>Everything set!</strong> Click on the button below to test the path and encryption password:</p>
<form method="POST" action="api/docker/backup-test" class="xhr">
<form method="POST" action="api/docker/backup-test" target="overlay-log">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="Test path and encryption password"/>
@@ -264,7 +264,7 @@
{% else %}
<p>It seems at least one container was not able to start correctly and is currently restarting.</p>
<p>To break this endless loop, you can stop the containers below and investigate the issue in the container logs before starting the containers again.</p>
<form method="POST" action="api/docker/stop" class="xhr">
<form method="POST" action="api/docker/stop" target="overlay-log">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="Stop containers" />
@@ -282,7 +282,7 @@
<ul>
{# @var containers \AIO\Container\Container[] #}
{% for container in containers %}
{% if container.displayName != '' %}
{% if container.hideFromList != true %}
{% include 'components/container-state.twig' with {'c': container} only %}
{% endif %}
{% endfor %}
@@ -317,7 +317,7 @@
<p>You can find all changes <a target="_blank" href="https://github.com/nextcloud-releases/all-in-one/commits/main"><strong>here</strong></a></p>
{% endif %}
{% endif %}
<form method="POST" action="api/docker/stop" class="xhr">
<form method="POST" action="api/docker/stop" target="overlay-log">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="Stop containers" />
@@ -332,7 +332,7 @@
{% endif %}
{% if is_mastercontainer_update_available == true %}
<p>⚠️ A mastercontainer update is available. Please click on the button below to update it.</p>
<form method="POST" action="api/docker/watchtower" class="xhr">
<form method="POST" action="api/docker/watchtower" target="overlay-log">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="Update mastercontainer" />
@@ -407,7 +407,7 @@
<details>
<summary>Reveal repair option</summary>
<p>Below is the option to repair the integrity of your backup. <strong>Please note:</strong> Please only use this after you have read the documentation above! (It will run the command 'borg check --repair' for you.)</p>
<form method="POST" action="api/docker/backup-check-repair" class="xhr">
<form method="POST" action="api/docker/backup-check-repair" target="overlay-log">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="Check and repair backup integrity" onclick="return confirm('Check and repair backup integrity? Are you sure that you want to check and repair the backup integrity? This should only be done after reading the mentioned documentation.')"/>
@@ -472,7 +472,7 @@
{% if isApacheStarting != true %}
<h3>Backup creation</h3>
<p>Clicking on the button below will create a backup.</p>
<form method="POST" action="api/docker/backup" class="xhr">
<form method="POST" action="api/docker/backup" target="overlay-log">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="Create backup" onclick="return confirm('Create backup? Are you sure that you want to create a backup? This will stop all running containers and create the backup.')" />
@@ -484,7 +484,7 @@
<h3>Backup check</h3>
<p>Click on the button below to perform a backup integrity check. This is an option that verifies that your backup is intact. It shouldn't be needed in most situations.</p>
<form method="POST" action="api/docker/backup-check" class="xhr">
<form method="POST" action="api/docker/backup-check" target="overlay-log">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="Check backup integrity" onclick="return confirm('Check backup integrity? Are you sure that you want to check the backup? This can take a long time depending on the size of your backup.')" />
@@ -492,7 +492,7 @@
<h3>Backup restore</h3>
<p>Choose the backup that you want to restore and click on the button below to restore the selected backup. This will overwrite all your files with the chosen backup so you should consider creating a backup first. You can run an integrity check before restoring your files but this shouldn't be needed in most situations. Please note that this will not restore additionally chosen backup directories! The restore process should be pretty fast as rsync, which only transfers changed files, is used to restore the chosen backup.</p>
<form method="POST" action="api/docker/restore" class="xhr" id="restore_selection">
<form method="POST" action="api/docker/restore" target="overlay-log" id="restore_selection">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<select id="selected_restore_time" name="selected_restore_time" form="restore_selection">
@@ -507,7 +507,7 @@
<details>
<summary>Click here to reveal this option</summary>
<p>If you use an external snapshot tool to restore the server that runs AIO, you might run into a problem that the above listed available backups are not up-to-date to restore your server from. You can click the button below to update this list.</p>
<form method="POST" action="api/docker/backup-list" class="xhr">
<form method="POST" action="api/docker/backup-list" target="overlay-log">
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input type="submit" value="Update backup list" />

View File

@@ -1 +1 @@
12.8.0
12.9.0

View File

@@ -1,7 +1,7 @@
<html>
<head>
<title>AIO</title>
<link rel="stylesheet" href="style.css?v8" media="all" />
<link rel="stylesheet" href="style.css?v9" media="all" />
<link rel="icon" href="img/favicon.png">
<script type="text/javascript" src="forms.js?v1"></script>
<script type="text/javascript" src="toggle-dark-mode.js?v1"></script>

View File

@@ -1,13 +1,15 @@
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" href="style.css">
<style>
body {
padding: 1rem;
}
#floating-box {
position: fixed;
position: sticky;
top: 1rem;
float: right;
right: 1rem;
width: 20rem;
display: flex;

View File

@@ -18,6 +18,7 @@ test('Initial setup', async ({ page: setupPage }) => {
await containersPage.waitForURL('./containers');
// Reject IP addresses
await expect(containersPage.locator('#domain')).toBeVisible({ timeout: 1 * 60 * 1000 });
await containersPage.locator('#domain').click();
await containersPage.locator('#domain').fill('1.1.1.1');
await containersPage.getByRole('button', { name: 'Submit domain' }).click();

View File

@@ -25,6 +25,7 @@ test('Restore instance', async ({ page: setupPage }) => {
await containersPage.waitForURL('./containers');
// Reject example.com (requires enabled domain validation)
await expect(containersPage.locator('#domain')).toBeVisible({ timeout: 1 * 60 * 1000 });
await containersPage.locator('#domain').click();
await containersPage.locator('#domain').fill('example.com');
await containersPage.getByRole('button', { name: 'Submit domain' }).click();

View File

@@ -1106,12 +1106,9 @@ After starting AIO, you should be able to access the AIO Interface via `https://
⚠️ **Important:** do always use an ip-address if you access this port and not a domain as HSTS might block access to it later! (It is also expected that this port uses a self-signed certificate due to security concerns which you need to accept in your browser)<br>
Enter your domain in the AIO interface that you've used in the reverse proxy config and you should be done. Please do not forget to open/forward port `3478/TCP` and `3478/UDP` in your firewall/router for the Talk container!
### 5. Optional: Configure AIO for reverse proxies that connect to nextcloud using an ip-address and not localhost nor 127.0.0.1
If your reverse proxy connects to nextcloud using an ip-address and not localhost or 127.0.0.1<sup>*</sup> you must make the following configuration changes
### 5. Optional: Configure AIO for reverse proxies that connect to nextcloud not using localhost nor 127.0.0.1
If your reverse proxy connects to nextcloud not using localhost or 127.0.0.1, you must add said IP as trusted proxy to the installation. See the step below:
<small>*: The IP address it uses to connect to AIO is not in a private IP range such as these: `127.0.0.0/8,192.168.0.0/16,172.16.0.0/12,10.0.0.0/8,100.64.0.0/10,fd00::/8,::1/128`</small>
#### Nextcloud trusted proxies
Add the IP it uses connect to AIO to the Nextcloud trusted_proxies like this:
```
@@ -1134,6 +1131,7 @@ If you want to also access your AIO interface publicly with a valid certificate,
```
https://<your-nc-domain>:8443 {
reverse_proxy https://localhost:8080 {
header_up Host {host}
transport http {
tls_insecure_skip_verify
}

View File

@@ -6,3 +6,9 @@ rules:
- build_images.yml
artipacked:
disable: true
secrets-outside-env:
ignore:
- promote-to-beta.yml
- promote-to-latest.yml
- publish-to-aws.yml
- publish-to-digitalocean.yml