Compare commits

...

64 Commits

Author SHA1 Message Date
Simon L. f976c55726 increase to v13.1.0
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-05-22 12:48:13 +02:00
Simon L. 1514c05435 Fix docker registry and community containers (#8091) 2026-05-22 12:43:12 +02:00
Simon L. 55c08cab00 aio-interface: do not cache the containers, logs and setup screen as it shows credentials (#8161) 2026-05-22 12:22:32 +02:00
Simon L. 2b1ec334e8 build(deps): bump docker from 29.5.1-cli to 29.5.2-cli in /Containers/mastercontainer (#8192) 2026-05-22 10:11:10 +02:00
Simon L. 99704807d0 PHP dependency updates (#8190) 2026-05-22 10:10:56 +02:00
Simon L. dabb7d0224 server.config.php: fix serverid closing bracket
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-05-22 10:06:32 +02:00
dependabot[bot] 1a2d168a7f build(deps): bump docker in /Containers/mastercontainer
Bumps docker from 29.5.1-cli to 29.5.2-cli.

---
updated-dependencies:
- dependency-name: docker
  dependency-version: 29.5.2-cli
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-22 04:22:33 +00:00
lonode abaea7b4c2 change case
Signed-off-by: lonode <32384862+lonode@users.noreply.github.com>
2026-05-21 17:42:21 +02:00
szaimen a1c818bc38 php dependency updates
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-05-21 13:01:02 +00:00
Simon L. 1d546bbb59 aio-interface: do not cache the containers, logs and setup screen as it shows credentials
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-05-21 12:14:46 +02:00
Simon L. 5a474d92d9 notify-push: fix startup on ipv6 disabled servers (#8188) 2026-05-21 12:06:28 +02:00
Simon L. 795baf903b server.config.php: downstream sync serverid upstream change (#8187) 2026-05-21 12:01:49 +02:00
Simon L. b4c0266461 notify-push: fix startup on ipv6 disabled servers
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-05-21 10:53:49 +02:00
Simon L. 3a988938b2 server.config.php: downstream sync serverid upstream change
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-05-21 10:48:37 +02:00
Simon L. 7c0df4f701 build(deps): bump nats from 2.14.0-scratch to 2.14.1-scratch in /Containers/talk (#8185) 2026-05-21 10:40:41 +02:00
dependabot[bot] 1d27e165e6 build(deps): bump nats in /Containers/talk
Bumps nats from 2.14.0-scratch to 2.14.1-scratch.

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-21 04:23:15 +00:00
Simon L. a75d1c48bf Small improvements to /app/readme (#8179) 2026-05-20 17:15:51 +02:00
Simon L. 74b98b369e PHP dependency updates (#8180) 2026-05-20 16:36:42 +02:00
Simon L. 74dee77fac Add top-level .editorconfig; improve app/.editorconfig (#8178) 2026-05-20 15:54:33 +02:00
szaimen 70100ba5ef php dependency updates
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-05-20 13:42:43 +00:00
Gaetano Giunta de72608519 Use proper name for AIP and Nextcloud in readme file
Signed-off-by: Gaetano Giunta <giunta.gaetano@gmail.com>
2026-05-20 11:12:51 +00:00
Gaetano Giunta 02c9a7475b Small improvements to /app/readme
Signed-off-by: Gaetano Giunta <giunta.gaetano@gmail.com>
2026-05-20 11:02:14 +00:00
Gaetano Giunta c2e48d3524 add a comment to .editorconfig
Signed-off-by: Gaetano Giunta <giunta.gaetano@gmail.com>
2026-05-20 10:56:10 +00:00
Gaetano Giunta b615acf413 tabs to spaces for php/psalm.xml
Signed-off-by: Gaetano Giunta <giunta.gaetano@gmail.com>
2026-05-20 10:55:39 +00:00
Gaetano Giunta 379b3d9e5a add top-level .editorconfig; improve app/.editorconfig
Signed-off-by: Gaetano Giunta <giunta.gaetano@gmail.com>
2026-05-20 10:46:15 +00:00
Simon L. abbe6a85cf build(deps): bump docker from 29.5.0-cli to 29.5.1-cli in /Containers/mastercontainer (#8177) 2026-05-20 10:50:58 +02:00
dependabot[bot] 20835baa0c build(deps): bump docker in /Containers/mastercontainer
Bumps docker from 29.5.0-cli to 29.5.1-cli.

---
updated-dependencies:
- dependency-name: docker
  dependency-version: 29.5.1-cli
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-20 08:36:32 +00:00
Simon L. a32568cc9c mastercontainer: run session-deduplicator as www-data (#8175) 2026-05-20 10:20:56 +02:00
Dimas D. Angga c6748dc450 fix(mastercontainer): run session-deduplicator as www-data
The session-deduplicator only touches files under /mnt/docker-aio-config/session/, which is already owned by www-data, so running it as root grants more privilege than it needs. Dropping to www-data reduces the number of root-owned processes in the mastercontainer and follows least-privilege for the supervisord program set.
2026-05-20 09:32:49 +07:00
Tim Alexander Neuenbauer 6288665170 home-assistant: Update readme.md (#8055) 2026-05-19 16:25:28 +02:00
lonode 3517ba3039 apply suggestion
Signed-off-by: lonode <32384862+lonode@users.noreply.github.com>
2026-05-19 15:13:51 +02:00
Simon L. a3d84cce7b add warning notice to minio container that minio is not maintained any more (#8131) 2026-05-18 19:18:01 +02:00
Simon L. 535a0ffbd2 add a comment to clarify the reason for the condition added in PR 8145 (#8147) 2026-05-18 19:16:13 +02:00
Simon L. 1d947355ab Yaml updates (#8152) 2026-05-18 19:15:33 +02:00
Gaetano Giunta fdfd479db7 aio-interface: make sure ublock does not break the log viewer (#8148) 2026-05-18 18:55:18 +02:00
gggeek d4da301c9a improve the notice about minio deprecation in the readme of the community container
Signed-off-by: Gaetano Giunta <giunta.gaetano@gmail.com>
2026-05-18 15:57:15 +00:00
gggeek 4c0b28f70d add warning notice to minio container that minio is not maintained any more
Signed-off-by: Gaetano Giunta <giunta.gaetano@gmail.com>
2026-05-18 15:57:15 +00:00
gggeek 34429865fe add a comment to clarify the reason for the condition added in PR 8145
Signed-off-by: Gaetano Giunta <giunta.gaetano@gmail.com>
2026-05-18 15:56:22 +00:00
szaimen aa115110d5 Yaml updates
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-05-18 13:28:25 +00:00
Simon L. 01365c817f fix: apache container not stopping on SIGTERM (#8051) 2026-05-18 12:48:54 +02:00
Simon L. 774bd38f79 notify-push: allow to put the binary into the nextcloud apps dir directly (#8050) 2026-05-18 12:48:09 +02:00
Simon L. 82fc4635a2 aio-interface: add custom error handler for 405 errors (#8058) 2026-05-18 12:40:02 +02:00
Simon L. e8b9e25cf8 small style improvements to compose.yaml comments (#8132) 2026-05-18 12:31:31 +02:00
Simon L. d6a06f9e79 talk-recording: add Intel VAAPI driver to talk-recording container (#8143) 2026-05-18 12:31:08 +02:00
Simon L. 8e19b7165d apache: revert some changes to nextcloud.conf (#8146) 2026-05-18 12:31:00 +02:00
Simon L. 7ae8f729fb PHP dependency updates (#8115) 2026-05-18 12:01:47 +02:00
Simon L. e6c340779f Remove HARP_HOST environment variable from manual-install YAML file (#8121) 2026-05-18 12:01:21 +02:00
Simon L. e9a2076a9c apache: revert some changes to nextcloud.conf
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-05-18 11:56:14 +02:00
Simon L. a571faa4a5 build(deps): bump nextcloud-releases/whiteboard from v1.5.7 to v1.5.8 in /Containers/whiteboard (#8142) 2026-05-18 11:52:50 +02:00
Simon L. cdda9ea637 build(deps): bump docker from 29.4.3-cli to 29.5.0-cli in /Containers/mastercontainer (#8141) 2026-05-18 11:52:36 +02:00
Simon L. dca9c6b2e2 fix(ci): skip helm-release workflow on forks (#8145) 2026-05-18 11:52:07 +02:00
Arya Rizky af7c1d02fd fix(ci): skip helm-release workflow on forks
The helm-release workflow fails on forks because they don't have
a gh-pages branch set up for Helm chart publication. Add a
conditional check to only run this workflow on the upstream
nextcloud/all-in-one repository.

Fixes #8128
2026-05-18 16:10:57 +07:00
copilot-swe-agent[bot] 1a70a9e9fd fix: add Intel VAAPI driver (intel-media-driver) to talk-recording container
Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/797873dc-7a28-424f-92d0-8e91bb47f6a0

Co-authored-by: szaimen <42591237+szaimen@users.noreply.github.com>
2026-05-18 07:34:40 +00:00
dependabot[bot] 0837266f86 build(deps): bump nextcloud-releases/whiteboard
Bumps nextcloud-releases/whiteboard from v1.5.7 to v1.5.8.

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 04:57:41 +00:00
dependabot[bot] ea9eca44c2 build(deps): bump docker in /Containers/mastercontainer
Bumps docker from 29.4.3-cli to 29.5.0-cli.

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 04:56:43 +00:00
gggeek 3fc84ee784 small style improvements to compose.yaml comments 2026-05-17 13:44:00 +00:00
szaimen bf445e699f php dependency updates
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-05-17 12:16:34 +00:00
Francesco Saltori a03df48865 Remove HARP_HOST from manual-install YAML file
Signed-off-by: Francesco Saltori <francescosaltori@gmail.com>
2026-05-16 20:09:34 +02:00
lonode ff7443b566 add support for multicontainer on community containers
Signed-off-by: lonode <32384862+lonode@users.noreply.github.com>
2026-05-13 14:35:13 +02:00
lonode fedb0a65df Add support for library (official) images
Signed-off-by: lonode <32384862+lonode@users.noreply.github.com>
2026-05-13 14:35:08 +02:00
Simon L. 5bb2778fb7 aio-interface: add custom error handler for 405 errors
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-05-05 17:30:07 +02:00
Simon L. 3b3c8ba25c Apply suggestion from @szaimen
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-05-04 15:10:51 +02:00
copilot-swe-agent[bot] 0be797a531 fix: use httpd directly instead of apachectl to fix SIGTERM handling
Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/6e288352-eba8-4697-978e-d0b11349fe3f

Co-authored-by: szaimen <42591237+szaimen@users.noreply.github.com>
2026-05-04 11:11:45 +00:00
Simon L. 490a1811c8 notify-push: allow to put the binary into the nextcloud apps dir directly
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-05-04 13:02:09 +02:00
26 changed files with 198 additions and 146 deletions
+20
View File
@@ -0,0 +1,20 @@
# https://editorconfig.org
# Tip: to find files violating the rules set out here, run `docker run --rm --volume=$PWD:/check mstruebing/editorconfig-checker`
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.yaml]
indent_size = 2
[*.yml]
indent_size = 2
+3
View File
@@ -10,6 +10,9 @@ on:
jobs: jobs:
release: release:
# Do not run this workflow on forked repositories, as they might not have the `gh-pages` branch created, or might
# want to use it for other purposes than publishing helm charts
if: github.repository == 'nextcloud/all-in-one'
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
+2 -35
View File
@@ -9,34 +9,6 @@ Listen 8000
ErrorLogFormat "[%t] [%l] [%E] [client: %{X-Forwarded-For}i] [%M] [%{User-Agent}i]" ErrorLogFormat "[%t] [%l] [%E] [client: %{X-Forwarded-For}i] [%M] [%{User-Agent}i]"
LogLevel ${AIO_LOG_LEVEL} LogLevel ${AIO_LOG_LEVEL}
# KeepAlive On: allow the same TCP connection to carry multiple HTTP requests.
# Without this each asset (JS, CSS, image) would require a full TCP handshake,
# which is especially expensive on TLS connections and noticeably slows down
# Nextcloud's login page and file manager that load dozens of resources at once.
KeepAlive On
# KeepAliveTimeout: close an idle keep-alive connection after 5 seconds.
# A short timeout frees Apache worker threads quickly so they are available
# for new requests; 5 s is long enough to cover the gap between requests
# that a browser issues while rendering a page (typically < 1 s), yet short
# enough to avoid holding threads open for idle or slow clients.
KeepAliveTimeout 5
# MaxKeepAliveRequests: allow at most 500 requests per persistent connection.
# 100 (the Apache default) is too low for Nextcloud: the desktop and mobile
# sync clients issue many small API calls (PROPFIND, GET, PUT, checksums …)
# per sync cycle and routinely exceed 100 requests on a single connection.
# Hitting the limit forces a new TCP/TLS handshake, adding latency and CPU
# overhead. 500 gives sync clients enough headroom while still periodically
# recycling threads to contain per-process memory growth.
MaxKeepAliveRequests 500
# sendfile(2) is disabled because it bypasses Apache's output-filter chain: with
# it enabled, mod_brotli is silently skipped for static files (JS, CSS, SVG),
# negating the compression configured below. MMAP is also
# disabled because files can be replaced by Nextcloud at any time and mmap'd
# pages could serve stale data.
EnableSendfile Off
EnableMMAP Off
# PHP match # PHP match
<FilesMatch "\.php$"> <FilesMatch "\.php$">
SetHandler "proxy:fcgi://${NEXTCLOUD_HOST}:9000" SetHandler "proxy:fcgi://${NEXTCLOUD_HOST}:9000"
@@ -45,17 +17,12 @@ Listen 8000
<Proxy "fcgi://${NEXTCLOUD_HOST}:9000" flushpackets=on> <Proxy "fcgi://${NEXTCLOUD_HOST}:9000" flushpackets=on>
</Proxy> </Proxy>
# Compress JS, CSS and SVG responses with Brotli (quality 4 gives good # Compress JS, CSS and SVG responses with Brotli.
# compression with reasonable CPU cost; the default of 0 barely compresses).
# Other plain-text files are already compressed by Nextcloud itself. # Other plain-text files are already compressed by Nextcloud itself.
# No deflate fallback is needed: every browser that Nextcloud supports
# (Chrome 49+, Firefox 44+, Safari 11+, Edge 15+ — all from 2016-2017)
# supports Brotli. Internet Explorer, the only browser that never gained
# Brotli support, was dropped by Nextcloud with NC15 (2019).
# Desktop and mobile sync clients never request JS/CSS/SVG assets. # Desktop and mobile sync clients never request JS/CSS/SVG assets.
<IfModule mod_brotli.c> <IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS text/javascript application/javascript application/x-javascript text/css image/svg+xml AddOutputFilterByType BROTLI_COMPRESS text/javascript application/javascript application/x-javascript text/css image/svg+xml
BrotliCompressionQuality 4 BrotliCompressionQuality 0
</IfModule> </IfModule>
# Nextcloud dir # Nextcloud dir
+1 -1
View File
@@ -12,7 +12,7 @@ loglevel=%(ENV_AIO_LOG_LEVEL)s
stdout_logfile=%(ENV_SUPERVISORD_STDOUT)s stdout_logfile=%(ENV_SUPERVISORD_STDOUT)s
stderr_logfile=/dev/stderr stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0 stderr_logfile_maxbytes=0
command=apachectl -DFOREGROUND command=httpd -DFOREGROUND
[program:caddy] [program:caddy]
stdout_logfile=/dev/stdout stdout_logfile=/dev/stdout
+1 -1
View File
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:latest # syntax=docker/dockerfile:latest
# Docker CLI is a requirement # Docker CLI is a requirement
FROM docker:29.4.3-cli AS docker FROM docker:29.5.2-cli AS docker
ARG CADDY_REMOTE_HOST_HASH=e80a9931765a8dbcbb47db415863387f0df0e1b3 ARG CADDY_REMOTE_HOST_HASH=e80a9931765a8dbcbb47db415863387f0df0e1b3
+1 -1
View File
@@ -54,7 +54,7 @@ stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0 stderr_logfile_maxbytes=0
command=/session-deduplicator.sh command=/session-deduplicator.sh
user=root user=www-data
[program:domain-validator] [program:domain-validator]
# Logging is disabled as otherwise all attempts will be logged which spams the logs # Logging is disabled as otherwise all attempts will be logged which spams the logs
@@ -1,4 +1,4 @@
<?php <?php
$CONFIG = array ( $CONFIG = array (
'serverid' => crc32(gethostname()) % 512, 'serverid' => hexdec(hash('xxh32', gethostname())) & 0x1FF,
); );
+17 -2
View File
@@ -28,7 +28,7 @@ elif [ "$CPU_ARCH" != "x86_64" ]; then
fi fi
# Add warning # Add warning
if ! [ -f /var/www/html/custom_apps/notify_push/bin/"$CPU_ARCH"/notify_push ]; then if ! [ -f /var/www/html/custom_apps/notify_push/bin/"$CPU_ARCH"/notify_push ] && ! [ -f /var/www/html/apps/notify_push/bin/"$CPU_ARCH"/notify_push ]; then
echo "The notify_push binary was not found." echo "The notify_push binary was not found."
echo "Most likely is DNS resolution not working correctly." echo "Most likely is DNS resolution not working correctly."
echo "You can try to fix this by configuring a DNS server globally in dockers daemon.json." echo "You can try to fix this by configuring a DNS server globally in dockers daemon.json."
@@ -42,9 +42,24 @@ if ! [ -f /var/www/html/custom_apps/notify_push/bin/"$CPU_ARCH"/notify_push ]; t
exit 1 exit 1
fi fi
# Logic for ipv6 disabled servers
BIND="::"
if grep -q "1" /sys/module/ipv6/parameters/disable \
|| grep -q "1" /proc/sys/net/ipv6/conf/all/disable_ipv6 \
|| grep -q "1" /proc/sys/net/ipv6/conf/default/disable_ipv6; then
BIND="0.0.0.0"
fi
export BIND
echo "notify-push was started" echo "notify-push was started"
if [ -f /var/www/html/custom_apps/notify_push/bin/"$CPU_ARCH"/notify_push ]; then
PUSH_PATH="/var/www/html/custom_apps/notify_push/bin/$CPU_ARCH/notify_push"
else
PUSH_PATH="/var/www/html/apps/notify_push/bin/$CPU_ARCH/notify_push"
fi
# Run it # Run it
exec /var/www/html/custom_apps/notify_push/bin/"$CPU_ARCH"/notify_push \ exec "$PUSH_PATH" \
--port 7867 \ --port 7867 \
/var/www/html/config/config.php /var/www/html/config/config.php
+3
View File
@@ -35,6 +35,9 @@ RUN set -ex; \
build-base \ build-base \
linux-headers \ linux-headers \
geckodriver; \ geckodriver; \
if [ "$(apk --print-arch)" = "x86_64" ]; then \
apk add --no-cache intel-media-driver; \
fi; \
useradd -d /tmp --system recording -u 122; \ useradd -d /tmp --system recording -u 122; \
# Give root a random password # Give root a random password
echo "root:$(openssl rand -base64 12)" | chpasswd; \ echo "root:$(openssl rand -base64 12)" | chpasswd; \
+1 -1
View File
@@ -1,5 +1,5 @@
# syntax=docker/dockerfile:latest # syntax=docker/dockerfile:latest
FROM nats:2.14.0-scratch AS nats FROM nats:2.14.1-scratch AS nats
FROM eturnal/eturnal:1.12.2-alpine AS eturnal FROM eturnal/eturnal:1.12.2-alpine AS eturnal
FROM strukturag/nextcloud-spreed-signaling:2.1.1 AS signaling FROM strukturag/nextcloud-spreed-signaling:2.1.1 AS signaling
FROM alpine:3.23.4 AS janus FROM alpine:3.23.4 AS janus
+1 -1
View File
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:latest # syntax=docker/dockerfile:latest
# Probably from this file: https://github.com/nextcloud/whiteboard/blob/main/Dockerfile # Probably from this file: https://github.com/nextcloud/whiteboard/blob/main/Dockerfile
FROM ghcr.io/nextcloud-releases/whiteboard:v1.5.7 FROM ghcr.io/nextcloud-releases/whiteboard:v1.5.8
USER root USER root
RUN set -ex; \ RUN set -ex; \
+2 -9
View File
@@ -1,19 +1,12 @@
# https://editorconfig.org # https://editorconfig.org
# note: the files in ./composer actually use 4 spaces instead of tabs
root = true root = true
[*] [*]
charset = utf-8 charset = utf-8
end_of_line = lf end_of_line = lf
indent_size = 4
indent_style = tab indent_style = tab
insert_final_newline = true insert_final_newline = true
trim_trailing_whitespace = true trim_trailing_whitespace = true
[*.feature]
indent_size = 2
indent_style = space
[*.yml]
indent_size = 2
indent_style = space
+7 -4
View File
@@ -1,7 +1,10 @@
# AIO app for Nextcloud
This folder contains a Nextcloud app, which will be automatically installed within the Nextcloud instance.
It adds a link to the admin settings page that gives access to the AIO interface.
## How to develop the app? ## How to develop the app?
Please note that in order to check if an app is already downloaded Please note that in order to check if an app is already downloaded Nextcloud will look for a folder with the same name as the app.
Nextcloud will look for a folder with the same name as the app.
Therefore you need to add the app to one of the app directories Therefore you need to add the app to one of the app directories naming the directory `nextcloud-aio`.
naming the directory `nextcloud-aio`.
@@ -6,6 +6,8 @@ This container bundles Home Assistant and auto-configures it for you.
- After adding and starting the container, you can visit `http://ip.address.of.this.server:8123` in order to set up your Home Assistant instance. - After adding and starting the container, you can visit `http://ip.address.of.this.server:8123` in order to set up your Home Assistant instance.
- The data of Home Assistant will be automatically included in AIOs backup solution! - The data of Home Assistant will be automatically included in AIOs backup solution!
- In order to access your Home Assistant outside the local network, you have to set up your own reverse proxy. You can set up a reverse proxy following [these instructions](https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md). - In order to access your Home Assistant outside the local network, you have to set up your own reverse proxy. You can set up a reverse proxy following [these instructions](https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md).
- And to allow the traffic from the reverse proxy to be accepted by Home Assistant, follow [these instructions](https://www.home-assistant.io/integrations/http/#reverse-proxies) from the Home Assistant documentation.
- Or, to use the Caddy with geoblocking community container, follow the following instruction to add your own Caddyfile, to use it for Home Assistant: https://github.com/nextcloud/all-in-one/tree/main/community-containers/caddy#notes
- See https://github.com/nextcloud/all-in-one/tree/main/community-containers#community-containers how to add it to the AIO stack - See https://github.com/nextcloud/all-in-one/tree/main/community-containers#community-containers how to add it to the AIO stack
### Repository ### Repository
+3
View File
@@ -1,6 +1,9 @@
## Minio ## Minio
This container bundles minio s3 storage and auto-configures it for you. This container bundles minio s3 storage and auto-configures it for you.
> [!CAUTION]
> The Minio upstream project is no longer maintained. The container should still work in its current form...
>[!WARNING] >[!WARNING]
> Enabling this container will remove access to all the files formerly written to the data directory. > Enabling this container will remove access to all the files formerly written to the data directory.
> So only enable this on a clean instance directly after installing AIO. > So only enable this on a clean instance directly after installing AIO.
+4 -4
View File
@@ -1,4 +1,4 @@
name: nextcloud-aio # Add the container to the same compose project like all the sibling containers are added to automatically. name: nextcloud-aio # Add the container to the same compose project to which all the sibling containers are added automatically
services: services:
nextcloud-aio-mastercontainer: nextcloud-aio-mastercontainer:
image: ghcr.io/nextcloud-releases/all-in-one:latest # This is the container image used. You can switch to ghcr.io/nextcloud-releases/all-in-one:beta if you want to help testing new releases. See https://github.com/nextcloud/all-in-one#how-to-switch-the-channel image: ghcr.io/nextcloud-releases/all-in-one:latest # This is the container image used. You can switch to ghcr.io/nextcloud-releases/all-in-one:beta if you want to help testing new releases. See https://github.com/nextcloud/all-in-one#how-to-switch-the-channel
@@ -15,10 +15,10 @@ services:
- "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 - "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 - "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 - "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 # security_opt: ["label:disable"] # 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 # environment: # This line is needed (has to be uncommented) 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 # 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
# APACHE_PORT: 11000 # Is needed 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 # APACHE_PORT: 11000 # Needed 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
# APACHE_IP_BINDING: 127.0.0.1 # Should be set when running behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else) that is running on the same host. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md # APACHE_IP_BINDING: 127.0.0.1 # Should be set when running behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else) that is running on the same host. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
# APACHE_ADDITIONAL_NETWORK: frontend_net # (Optional) Connect the apache container to an additional docker network. Needed when behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else) running in a different docker network on same server. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md # APACHE_ADDITIONAL_NETWORK: frontend_net # (Optional) Connect the apache container to an additional docker network. Needed when behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else) running in a different docker network on same server. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
# BORG_RETENTION_POLICY: --keep-within=7d --keep-weekly=4 --keep-monthly=6 # Allows to adjust borgs retention policy. See https://github.com/nextcloud/all-in-one#how-to-adjust-borgs-retention-policy # BORG_RETENTION_POLICY: --keep-within=7d --keep-weekly=4 --keep-monthly=6 # Allows to adjust borgs retention policy. See https://github.com/nextcloud/all-in-one#how-to-adjust-borgs-retention-policy
-1
View File
@@ -46,7 +46,6 @@ services:
- APACHE_MAX_TIME=${NEXTCLOUD_MAX_TIME} - APACHE_MAX_TIME=${NEXTCLOUD_MAX_TIME}
- NOTIFY_PUSH_HOST=nextcloud-aio-notify-push - NOTIFY_PUSH_HOST=nextcloud-aio-notify-push
- WHITEBOARD_HOST=nextcloud-aio-whiteboard - WHITEBOARD_HOST=nextcloud-aio-whiteboard
- HARP_HOST=nextcloud-aio-harp
volumes: volumes:
- nextcloud_aio_nextcloud:/var/www/html:ro - nextcloud_aio_nextcloud:/var/www/html:ro
- nextcloud_aio_apache:/mnt/data:rw - nextcloud_aio_apache:/mnt/data:rw
+1
View File
@@ -48,6 +48,7 @@ sed -i '/AIO_TOKEN/d' containers.yml
sed -i '/AIO_URL/d' containers.yml sed -i '/AIO_URL/d' containers.yml
sed -i '/DOCKER_SOCKET_PROXY_ENABLED/d' containers.yml sed -i '/DOCKER_SOCKET_PROXY_ENABLED/d' containers.yml
sed -i '/HARP_ENABLED/d' containers.yml sed -i '/HARP_ENABLED/d' containers.yml
sed -i '/HARP_HOST/d' containers.yml
sed -i '/HP_SHARED_KEY/d' containers.yml sed -i '/HP_SHARED_KEY/d' containers.yml
sed -i '/ADDITIONAL_TRUSTED_PROXY/d' containers.yml sed -i '/ADDITIONAL_TRUSTED_PROXY/d' containers.yml
sed -i '/TURN_DOMAIN/d' containers.yml sed -i '/TURN_DOMAIN/d' containers.yml
+59 -54
View File
@@ -64,16 +64,16 @@
}, },
{ {
"name": "guzzlehttp/guzzle", "name": "guzzlehttp/guzzle",
"version": "7.10.0", "version": "7.10.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/guzzle.git", "url": "https://github.com/guzzle/guzzle.git",
"reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" "reference": "47ba23c7a55247e2e1b7407aca90e9bbed0d9d86"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "url": "https://api.github.com/repos/guzzle/guzzle/zipball/47ba23c7a55247e2e1b7407aca90e9bbed0d9d86",
"reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "reference": "47ba23c7a55247e2e1b7407aca90e9bbed0d9d86",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -91,8 +91,9 @@
"bamarni/composer-bin-plugin": "^1.8.2", "bamarni/composer-bin-plugin": "^1.8.2",
"ext-curl": "*", "ext-curl": "*",
"guzzle/client-integration-tests": "3.0.2", "guzzle/client-integration-tests": "3.0.2",
"guzzlehttp/test-server": "^0.3.2",
"php-http/message-factory": "^1.1", "php-http/message-factory": "^1.1",
"phpunit/phpunit": "^8.5.39 || ^9.6.20", "phpunit/phpunit": "^8.5.52 || ^9.6.34",
"psr/log": "^1.1 || ^2.0 || ^3.0" "psr/log": "^1.1 || ^2.0 || ^3.0"
}, },
"suggest": { "suggest": {
@@ -170,7 +171,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/guzzle/issues", "issues": "https://github.com/guzzle/guzzle/issues",
"source": "https://github.com/guzzle/guzzle/tree/7.10.0" "source": "https://github.com/guzzle/guzzle/tree/7.10.3"
}, },
"funding": [ "funding": [
{ {
@@ -186,20 +187,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-08-23T22:36:01+00:00" "time": "2026-05-20T22:59:19+00:00"
}, },
{ {
"name": "guzzlehttp/promises", "name": "guzzlehttp/promises",
"version": "2.3.0", "version": "2.4.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/promises.git", "url": "https://github.com/guzzle/promises.git",
"reference": "481557b130ef3790cf82b713667b43030dc9c957" "reference": "09e8a212562fb1fb6a512c4156ed71525969d6c2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", "url": "https://api.github.com/repos/guzzle/promises/zipball/09e8a212562fb1fb6a512c4156ed71525969d6c2",
"reference": "481557b130ef3790cf82b713667b43030dc9c957", "reference": "09e8a212562fb1fb6a512c4156ed71525969d6c2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -207,7 +208,7 @@
}, },
"require-dev": { "require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2", "bamarni/composer-bin-plugin": "^1.8.2",
"phpunit/phpunit": "^8.5.44 || ^9.6.25" "phpunit/phpunit": "^8.5.52 || ^9.6.34"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -253,7 +254,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/promises/issues", "issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/2.3.0" "source": "https://github.com/guzzle/promises/tree/2.4.1"
}, },
"funding": [ "funding": [
{ {
@@ -269,20 +270,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-08-22T14:34:08+00:00" "time": "2026-05-20T22:57:30+00:00"
}, },
{ {
"name": "guzzlehttp/psr7", "name": "guzzlehttp/psr7",
"version": "2.9.0", "version": "2.10.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/psr7.git", "url": "https://github.com/guzzle/psr7.git",
"reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884" "reference": "73ab136360b5dfd858006eae9795e8fe43c80361"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884", "url": "https://api.github.com/repos/guzzle/psr7/zipball/73ab136360b5dfd858006eae9795e8fe43c80361",
"reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884", "reference": "73ab136360b5dfd858006eae9795e8fe43c80361",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -297,9 +298,9 @@
}, },
"require-dev": { "require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2", "bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "0.9.0", "http-interop/http-factory-tests": "1.1.0",
"jshttp/mime-db": "1.54.0.1", "jshttp/mime-db": "1.54.0.1",
"phpunit/phpunit": "^8.5.44 || ^9.6.25" "phpunit/phpunit": "^8.5.52 || ^9.6.34"
}, },
"suggest": { "suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@@ -370,7 +371,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/psr7/issues", "issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.9.0" "source": "https://github.com/guzzle/psr7/tree/2.10.1"
}, },
"funding": [ "funding": [
{ {
@@ -386,7 +387,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2026-03-10T16:41:02+00:00" "time": "2026-05-20T09:27:36+00:00"
}, },
{ {
"name": "http-interop/http-factory-guzzle", "name": "http-interop/http-factory-guzzle",
@@ -1784,16 +1785,16 @@
}, },
{ {
"name": "twig/twig", "name": "twig/twig",
"version": "v3.24.0", "version": "v3.26.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/twigphp/Twig.git", "url": "https://github.com/twigphp/Twig.git",
"reference": "a6769aefb305efef849dc25c9fd1653358c148f0" "reference": "1fcae487b180d78e6351f4e0afa91f9eab96a2bc"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/a6769aefb305efef849dc25c9fd1653358c148f0", "url": "https://api.github.com/repos/twigphp/Twig/zipball/1fcae487b180d78e6351f4e0afa91f9eab96a2bc",
"reference": "a6769aefb305efef849dc25c9fd1653358c148f0", "reference": "1fcae487b180d78e6351f4e0afa91f9eab96a2bc",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1848,7 +1849,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/twigphp/Twig/issues", "issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.24.0" "source": "https://github.com/twigphp/Twig/tree/v3.26.0"
}, },
"funding": [ "funding": [
{ {
@@ -1860,7 +1861,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2026-03-17T21:31:11+00:00" "time": "2026-05-20T07:31:59+00:00"
} }
], ],
"packages-dev": [ "packages-dev": [
@@ -2176,16 +2177,16 @@
}, },
{ {
"name": "amphp/parallel", "name": "amphp/parallel",
"version": "v2.3.4", "version": "v2.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/amphp/parallel.git", "url": "https://github.com/amphp/parallel.git",
"reference": "3ad45d1cff1bfbfe832c79671e6a4a1017dd9921" "reference": "37f5b2754fadc229c00f9416bd68fb8d04529a81"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/amphp/parallel/zipball/3ad45d1cff1bfbfe832c79671e6a4a1017dd9921", "url": "https://api.github.com/repos/amphp/parallel/zipball/37f5b2754fadc229c00f9416bd68fb8d04529a81",
"reference": "3ad45d1cff1bfbfe832c79671e6a4a1017dd9921", "reference": "37f5b2754fadc229c00f9416bd68fb8d04529a81",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2248,7 +2249,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/amphp/parallel/issues", "issues": "https://github.com/amphp/parallel/issues",
"source": "https://github.com/amphp/parallel/tree/v2.3.4" "source": "https://github.com/amphp/parallel/tree/v2.4.0"
}, },
"funding": [ "funding": [
{ {
@@ -2256,7 +2257,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2026-05-06T19:26:51+00:00" "time": "2026-05-16T16:54:01+00:00"
}, },
{ {
"name": "amphp/parser", "name": "amphp/parser",
@@ -3775,16 +3776,16 @@
}, },
{ {
"name": "revolt/event-loop", "name": "revolt/event-loop",
"version": "v1.0.8", "version": "v1.0.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/revoltphp/event-loop.git", "url": "https://github.com/revoltphp/event-loop.git",
"reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c" "reference": "44061cf513e53c6200372fc935ac42271566295d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/revoltphp/event-loop/zipball/b6fc06dce8e9b523c9946138fa5e62181934f91c", "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/44061cf513e53c6200372fc935ac42271566295d",
"reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c", "reference": "44061cf513e53c6200372fc935ac42271566295d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -3794,7 +3795,7 @@
"ext-json": "*", "ext-json": "*",
"jetbrains/phpstorm-stubs": "^2019.3", "jetbrains/phpstorm-stubs": "^2019.3",
"phpunit/phpunit": "^9", "phpunit/phpunit": "^9",
"psalm/phar": "^5.15" "psalm/phar": "6.16.*"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -3841,22 +3842,22 @@
], ],
"support": { "support": {
"issues": "https://github.com/revoltphp/event-loop/issues", "issues": "https://github.com/revoltphp/event-loop/issues",
"source": "https://github.com/revoltphp/event-loop/tree/v1.0.8" "source": "https://github.com/revoltphp/event-loop/tree/v1.0.9"
}, },
"time": "2025-08-27T21:33:23+00:00" "time": "2026-05-16T17:55:38+00:00"
}, },
{ {
"name": "sebastian/diff", "name": "sebastian/diff",
"version": "8.2.1", "version": "8.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/diff.git", "url": "https://github.com/sebastianbergmann/diff.git",
"reference": "cce1bb200e0062e72f9b85ccfe54d3fd38bbd044" "reference": "b36d33b6e796513de7cb7df053afb3f55eefcd47"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/cce1bb200e0062e72f9b85ccfe54d3fd38bbd044", "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b36d33b6e796513de7cb7df053afb3f55eefcd47",
"reference": "cce1bb200e0062e72f9b85ccfe54d3fd38bbd044", "reference": "b36d33b6e796513de7cb7df053afb3f55eefcd47",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -3869,7 +3870,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-main": "8.2-dev" "dev-main": "8.3-dev"
} }
}, },
"autoload": { "autoload": {
@@ -3902,7 +3903,7 @@
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/diff/issues", "issues": "https://github.com/sebastianbergmann/diff/issues",
"security": "https://github.com/sebastianbergmann/diff/security/policy", "security": "https://github.com/sebastianbergmann/diff/security/policy",
"source": "https://github.com/sebastianbergmann/diff/tree/8.2.1" "source": "https://github.com/sebastianbergmann/diff/tree/8.3.0"
}, },
"funding": [ "funding": [
{ {
@@ -3922,7 +3923,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2026-05-14T05:24:37+00:00" "time": "2026-05-15T04:58:09+00:00"
}, },
{ {
"name": "spatie/array-to-xml", "name": "spatie/array-to-xml",
@@ -4898,16 +4899,16 @@
}, },
{ {
"name": "webmozart/assert", "name": "webmozart/assert",
"version": "2.3.0", "version": "2.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/webmozarts/assert.git", "url": "https://github.com/webmozarts/assert.git",
"reference": "eb0d790f735ba6cff25c683a85a1da0eadeff9e4" "reference": "9007ea6f45ecf352a9422b36644e4bfc039b9155"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/eb0d790f735ba6cff25c683a85a1da0eadeff9e4", "url": "https://api.github.com/repos/webmozarts/assert/zipball/9007ea6f45ecf352a9422b36644e4bfc039b9155",
"reference": "eb0d790f735ba6cff25c683a85a1da0eadeff9e4", "reference": "9007ea6f45ecf352a9422b36644e4bfc039b9155",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -4923,7 +4924,11 @@
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"psalm": {
"pluginClass": "Webmozart\\Assert\\PsalmPlugin"
},
"branch-alias": { "branch-alias": {
"dev-master": "2.0-dev",
"dev-feature/2-0": "2.0-dev" "dev-feature/2-0": "2.0-dev"
} }
}, },
@@ -4954,9 +4959,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/webmozarts/assert/issues", "issues": "https://github.com/webmozarts/assert/issues",
"source": "https://github.com/webmozarts/assert/tree/2.3.0" "source": "https://github.com/webmozarts/assert/tree/2.4.0"
}, },
"time": "2026-04-11T10:33:05+00:00" "time": "2026-05-20T13:07:01+00:00"
} }
], ],
"aliases": [], "aliases": [],
+20 -20
View File
@@ -1,29 +1,29 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<psalm <psalm
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config" xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
errorBaseline="psalm-baseline.xml" errorBaseline="psalm-baseline.xml"
findUnusedBaselineEntry="true" findUnusedBaselineEntry="true"
findUnusedCode="false" findUnusedCode="false"
> >
<projectFiles> <projectFiles>
<directory name="templates"/> <directory name="templates"/>
<directory name="src"/> <directory name="src"/>
<file name="public/index.php"/> <file name="public/index.php"/>
<ignoreFiles> <ignoreFiles>
<directory name="vendor" /> <directory name="vendor" />
</ignoreFiles> </ignoreFiles>
</projectFiles> </projectFiles>
<extraFiles> <extraFiles>
<directory name="vendor" /> <directory name="vendor" />
</extraFiles> </extraFiles>
<issueHandlers> <issueHandlers>
<ClassMustBeFinal errorLevel="suppress" /> <ClassMustBeFinal errorLevel="suppress" />
<MissingConstructor> <MissingConstructor>
<errorLevel type="suppress"> <errorLevel type="suppress">
<file name="src/Data/ConfigurationManager.php" /> <!-- We're using property hooks with virtual properties in that file, which Psalm wrongly complains about. See <https://github.com/vimeo/psalm/issues/11435>. --> <file name="src/Data/ConfigurationManager.php" /> <!-- We're using property hooks with virtual properties in that file, which Psalm wrongly complains about. See <https://github.com/vimeo/psalm/issues/11435>. -->
</errorLevel> </errorLevel>
</MissingConstructor> </MissingConstructor>
</issueHandlers> </issueHandlers>
</psalm> </psalm>
+27 -4
View File
@@ -181,8 +181,10 @@ $app->get('/containers', function (Request $request, Response $response, array $
'community_containers' => $configurationManager->listAvailableCommunityContainers(), 'community_containers' => $configurationManager->listAvailableCommunityContainers(),
'community_containers_enabled' => $configurationManager->aioCommunityContainers, 'community_containers_enabled' => $configurationManager->aioCommunityContainers,
'bypass_container_update' => $bypass_container_update, 'bypass_container_update' => $bypass_container_update,
]); // Do not cache the page as it shows credentials
])->withHeader('Cache-Control', 'no-store');
})->setName('profile'); })->setName('profile');
$app->get('/login', function (Request $request, Response $response, array $args) use ($container) { $app->get('/login', function (Request $request, Response $response, array $args) use ($container) {
$view = Twig::fromRequest($request); $view = Twig::fromRequest($request);
/** @var \AIO\Docker\DockerActionManager $dockerActionManager */ /** @var \AIO\Docker\DockerActionManager $dockerActionManager */
@@ -191,6 +193,7 @@ $app->get('/login', function (Request $request, Response $response, array $args)
'is_login_allowed' => $dockerActionManager->isLoginAllowed(), 'is_login_allowed' => $dockerActionManager->isLoginAllowed(),
]); ]);
}); });
$app->get('/setup', function (Request $request, Response $response, array $args) use ($container) { $app->get('/setup', function (Request $request, Response $response, array $args) use ($container) {
$view = Twig::fromRequest($request); $view = Twig::fromRequest($request);
/** @var \AIO\Data\Setup $setup */ /** @var \AIO\Data\Setup $setup */
@@ -209,8 +212,10 @@ $app->get('/setup', function (Request $request, Response $response, array $args)
[ [
'password' => $setup->Setup(), 'password' => $setup->Setup(),
] ]
); // Do not cache the page as it shows credentials
)->withHeader('Cache-Control', 'no-store');
}); });
$app->get('/log', function (Request $request, Response $response, array $args) use ($container) { $app->get('/log', function (Request $request, Response $response, array $args) use ($container) {
$params = $request->getQueryParams(); $params = $request->getQueryParams();
$id = $params['id'] ?? ''; $id = $params['id'] ?? '';
@@ -218,7 +223,13 @@ $app->get('/log', function (Request $request, Response $response, array $args) u
throw new DI\NotFoundException(); throw new DI\NotFoundException();
} }
$view = Twig::fromRequest($request); $view = Twig::fromRequest($request);
return $view->render($response, 'log.twig', ['id' => $id]); return $view->render(
$response, 'log.twig',
[
'id' => $id
]
// Do not cache the page as it might shows credentials
)->withHeader('Cache-Control', 'no-store');
}); });
// Auth Redirector // Auth Redirector
@@ -245,6 +256,7 @@ $app->get('/', function (\Psr\Http\Message\RequestInterface $request, Response $
} }
}); });
// Default error handler
$errorMiddleware = $app->addErrorMiddleware(false, true, true); $errorMiddleware = $app->addErrorMiddleware(false, true, true);
// Set a custom Not Found handler, which doesn't pollute the app output with 404 errors. // Set a custom Not Found handler, which doesn't pollute the app output with 404 errors.
@@ -254,6 +266,17 @@ $errorMiddleware->setErrorHandler(
$response = $app->getResponseFactory()->createResponse(); $response = $app->getResponseFactory()->createResponse();
$response->getBody()->write('Not Found'); $response->getBody()->write('Not Found');
return $response->withStatus(404); return $response->withStatus(404);
}); }
);
// Set another custom error handler, which doesn't pollute the app output with 405 errors.
$errorMiddleware->setErrorHandler(
\Slim\Exception\HttpMethodNotAllowedException::class,
function (Request $request, Throwable $exception, bool $displayErrorDetails) use ($app) {
$response = $app->getResponseFactory()->createResponse();
$response->getBody()->write('Method not allowed');
return $response->withStatus(405);
}
);
$app->run(); $app->run();
+7 -3
View File
@@ -52,14 +52,18 @@ readonly class ContainerDefinitionFetcher {
$standardContainerNames = array_column($data['aio_services_v1'], 'container_name'); $standardContainerNames = array_column($data['aio_services_v1'], 'container_name');
$additionalContainerNames = []; $additionalContainerNames = [];
$additionalTopLevelContainerNames = [];
foreach ($this->configurationManager->aioCommunityContainers as $communityContainer) { foreach ($this->configurationManager->aioCommunityContainers as $communityContainer) {
if ($communityContainer !== '') { if ($communityContainer !== '') {
$path = DataConst::GetCommunityContainersDirectory() . '/' . $communityContainer . '/' . $communityContainer . '.json'; $path = DataConst::GetCommunityContainersDirectory() . '/' . $communityContainer . '/' . $communityContainer . '.json';
$additionalData = json_decode((string)file_get_contents($path), true, 512, JSON_THROW_ON_ERROR); $additionalData = json_decode((string)file_get_contents($path), true, 512, JSON_THROW_ON_ERROR);
$data = array_merge_recursive($data, $additionalData); $data = array_merge_recursive($data, $additionalData);
foreach ($additionalData['aio_services_v1'] as $additionalEntry) {
$additionalContainerNames[] = $additionalEntry['container_name'];
}
if (isset($additionalData['aio_services_v1'][0]['display_name']) && $additionalData['aio_services_v1'][0]['display_name'] !== '') { if (isset($additionalData['aio_services_v1'][0]['display_name']) && $additionalData['aio_services_v1'][0]['display_name'] !== '') {
// Store container_name of community containers in variable for later // Store main container_name of community containers in variable for later
$additionalContainerNames[] = $additionalData['aio_services_v1'][0]['container_name']; $additionalTopLevelContainerNames[] = $additionalData['aio_services_v1'][0]['container_name'];
} }
} }
} }
@@ -176,7 +180,7 @@ readonly class ContainerDefinitionFetcher {
if ($entry['container_name'] === 'nextcloud-aio-apache') { if ($entry['container_name'] === 'nextcloud-aio-apache') {
// Add community containers first and default ones last so that aio_variables works correctly // Add community containers first and default ones last so that aio_variables works correctly
$valueDependsOnTemp = []; $valueDependsOnTemp = [];
foreach ($additionalContainerNames as $containerName) { foreach ($additionalTopLevelContainerNames as $containerName) {
$valueDependsOnTemp[] = $containerName; $valueDependsOnTemp[] = $containerName;
} }
$valueDependsOn = array_merge_recursive($valueDependsOnTemp, $valueDependsOn); $valueDependsOn = array_merge_recursive($valueDependsOnTemp, $valueDependsOn);
+11 -2
View File
@@ -3,8 +3,6 @@ declare(strict_types=1);
namespace AIO\Docker; namespace AIO\Docker;
use AIO\ContainerDefinitionFetcher;
use AIO\Data\ConfigurationManager;
use GuzzleHttp\Client; use GuzzleHttp\Client;
readonly class DockerHubManager { readonly class DockerHubManager {
@@ -15,6 +13,16 @@ readonly class DockerHubManager {
$this->guzzleClient = new Client(); $this->guzzleClient = new Client();
} }
// Official Docker Hub images need the library/ prefix when using the registry API directly.
private function normalizeImageName(string $name): string {
if (!str_contains($name, '/')) {
return 'library/' . $name;
}
return $name;
}
public function GetLatestDigestOfTag(string $name, string $tag) : ?string { public function GetLatestDigestOfTag(string $name, string $tag) : ?string {
$cacheKey = 'dockerhub-manifest-' . $name . $tag; $cacheKey = 'dockerhub-manifest-' . $name . $tag;
@@ -24,6 +32,7 @@ readonly class DockerHubManager {
} }
// If one of the links below should ever become outdated, we can still upgrade the mastercontainer via the webinterface manually by opening '/api/docker/getwatchtower' // If one of the links below should ever become outdated, we can still upgrade the mastercontainer via the webinterface manually by opening '/api/docker/getwatchtower'
$name = $this->normalizeImageName($name);
try { try {
$authTokenRequest = $this->guzzleClient->request( $authTokenRequest = $this->guzzleClient->request(
+1 -1
View File
@@ -1 +1 @@
13.0.4 13.1.0
+3 -1
View File
@@ -1,9 +1,11 @@
<html lang="en"> <html lang="en">
<head> <head>
<title>AIO</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="logs.css"> <link rel="stylesheet" href="logs.css">
<script src="log-view.js?v1"></script> <link rel="icon" href="img/favicon.png">
<script src="log-load.js?v1"></script>
</head> </head>
<body data-container-id="{{ id }}"> <body data-container-id="{{ id }}">
<div id="floating-box"> <div id="floating-box">