mirror of
https://github.com/nextcloud/all-in-one.git
synced 2026-06-10 08:37:02 +00:00
Compare commits
64 Commits
cbea0730d3
...
v13.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
| f976c55726 | |||
| 1514c05435 | |||
| 55c08cab00 | |||
| 2b1ec334e8 | |||
| 99704807d0 | |||
| dabb7d0224 | |||
| 1a2d168a7f | |||
| abaea7b4c2 | |||
| a1c818bc38 | |||
| 1d546bbb59 | |||
| 5a474d92d9 | |||
| 795baf903b | |||
| b4c0266461 | |||
| 3a988938b2 | |||
| 7c0df4f701 | |||
| 1d27e165e6 | |||
| a75d1c48bf | |||
| 74b98b369e | |||
| 74dee77fac | |||
| 70100ba5ef | |||
| de72608519 | |||
| 02c9a7475b | |||
| c2e48d3524 | |||
| b615acf413 | |||
| 379b3d9e5a | |||
| abbe6a85cf | |||
| 20835baa0c | |||
| a32568cc9c | |||
| c6748dc450 | |||
| 6288665170 | |||
| 3517ba3039 | |||
| a3d84cce7b | |||
| 535a0ffbd2 | |||
| 1d947355ab | |||
| fdfd479db7 | |||
| d4da301c9a | |||
| 4c0b28f70d | |||
| 34429865fe | |||
| aa115110d5 | |||
| 01365c817f | |||
| 774bd38f79 | |||
| 82fc4635a2 | |||
| e8b9e25cf8 | |||
| d6a06f9e79 | |||
| 8e19b7165d | |||
| 7ae8f729fb | |||
| e6c340779f | |||
| e9a2076a9c | |||
| a571faa4a5 | |||
| cdda9ea637 | |||
| dca9c6b2e2 | |||
| af7c1d02fd | |||
| 1a70a9e9fd | |||
| 0837266f86 | |||
| ea9eca44c2 | |||
| 3fc84ee784 | |||
| bf445e699f | |||
| a03df48865 | |||
| ff7443b566 | |||
| fedb0a65df | |||
| 5bb2778fb7 | |||
| 3b3c8ba25c | |||
| 0be797a531 | |||
| 490a1811c8 |
@@ -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
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,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
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,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,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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Generated
+59
-54
@@ -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
@@ -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
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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 @@
|
|||||||
13.0.4
|
13.1.0
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
Reference in New Issue
Block a user