diff --git a/Containers/clamav/Dockerfile b/Containers/clamav/Dockerfile index b2636f44286b..8deede4ee43a 100644 --- a/Containers/clamav/Dockerfile +++ b/Containers/clamav/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:latest # Probably from this file: https://github.com/Cisco-Talos/clamav-docker/blob/main/clamav/1.3/alpine/Dockerfile -FROM clamav/clamav:1.4.1-7 +FROM clamav/clamav:1.4.1-8 COPY clamav.conf /clamav.conf COPY --chmod=775 start.script /start.script diff --git a/Containers/collabora/Dockerfile b/Containers/collabora/Dockerfile index cc151fabe122..2c0fcad8fe8d 100644 --- a/Containers/collabora/Dockerfile +++ b/Containers/collabora/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:latest # From a file located probably somewhere here: https://github.com/CollaboraOnline/online/tree/master/docker -FROM collabora/code:24.04.8.1.1 +FROM collabora/code:24.04.8.2.1 USER root ARG DEBIAN_FRONTEND=noninteractive diff --git a/Containers/fulltextsearch/Dockerfile b/Containers/fulltextsearch/Dockerfile index 873e9ba96df2..b67b10673b95 100644 --- a/Containers/fulltextsearch/Dockerfile +++ b/Containers/fulltextsearch/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:latest # Probably from here https://github.com/elastic/elasticsearch/blob/main/distribution/docker/src/docker/Dockerfile -FROM elasticsearch:8.15.2 +FROM elasticsearch:8.15.3 USER root diff --git a/Containers/nextcloud/Dockerfile b/Containers/nextcloud/Dockerfile index 90fac1a8a930..b79644bb00a5 100644 --- a/Containers/nextcloud/Dockerfile +++ b/Containers/nextcloud/Dockerfile @@ -80,7 +80,7 @@ RUN set -ex; \ # pecl will claim success even if one install fails, so we need to perform each install separately pecl install igbinary-3.2.16; \ pecl install APCu-5.1.24; \ - pecl install -D 'enable-memcached-igbinary="yes"' memcached-3.2.0; \ + pecl install -D 'enable-memcached-igbinary="yes"' memcached-3.3.0; \ pecl install -D 'enable-redis-igbinary="yes" enable-redis-zstd="yes" enable-redis-lz4="yes"' redis-6.1.0; \ pecl install imagick-3.7.0; \ \ diff --git a/Containers/onlyoffice/Dockerfile b/Containers/onlyoffice/Dockerfile index ad6943763160..ff7d934c8d99 100644 --- a/Containers/onlyoffice/Dockerfile +++ b/Containers/onlyoffice/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:latest # From https://github.com/ONLYOFFICE/Docker-DocumentServer/blob/master/Dockerfile -FROM onlyoffice/documentserver:8.1.3.2 +FROM onlyoffice/documentserver:8.2.0.1 # USER root is probably used diff --git a/Containers/talk/Dockerfile b/Containers/talk/Dockerfile index 0d0631c8fee5..d507a51548b1 100644 --- a/Containers/talk/Dockerfile +++ b/Containers/talk/Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:latest -FROM nats:2.10.21-scratch AS nats +FROM nats:2.10.22-scratch AS nats FROM eturnal/eturnal:1.12.0 AS eturnal FROM strukturag/nextcloud-spreed-signaling:2.0.0 AS signaling FROM alpine:3.20.3 AS janus diff --git a/Containers/whiteboard/Dockerfile b/Containers/whiteboard/Dockerfile index 2cbb371adac5..00e5b26fc608 100644 --- a/Containers/whiteboard/Dockerfile +++ b/Containers/whiteboard/Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:latest -FROM ghcr.io/nextcloud-releases/whiteboard:v1.0.3 +FROM ghcr.io/nextcloud-releases/whiteboard:v1.0.4 USER root RUN set -ex; \ diff --git a/community-containers/local-ai/readme.md b/community-containers/local-ai/readme.md index c74ebc9fdb9a..f0c7ea0f76d2 100644 --- a/community-containers/local-ai/readme.md +++ b/community-containers/local-ai/readme.md @@ -19,6 +19,7 @@ This container bundles Local AI and auto-configures it for you. name: gpt4all-j ``` - To make it work, you first need to browse `https://your-nc-domain.com/settings/admin/ai` and enable or disable specific features for your models in the openAI settings. Afterwards using the Nextcloud Assistant should work. +- See [this guide](https://github.com/nextcloud/all-in-one/discussions/5430) for how to improve AI task pickup speed - See https://github.com/nextcloud/all-in-one/tree/main/community-containers#community-containers how to add it to the AIO stack ### Repository diff --git a/local-instance.md b/local-instance.md index aa4bd8e6d34d..ac0b9fb4ab66 100644 --- a/local-instance.md +++ b/local-instance.md @@ -9,6 +9,8 @@ The recommended way is the following: 1. Enter the ip-address of your local dns-server in the daemon.json file for docker so that you are sure that all docker containers use the correct local dns-server. 1. Now, entering the domain in the AIO-interface should work as expected and should allow you to continue with the setup +Here is a video that does shows this a bit more in detail: https://youtu.be/zk-y2wVkY4c + ## 2. Use the ACME DNS-challenge You can alternatively use the ACME DNS-challenge to get a valid certificate for Nextcloud. Here is described how to set it up: https://github.com/nextcloud/all-in-one#how-to-get-nextcloud-running-using-the-acme-dns-challenge diff --git a/nextcloud-aio-helm-chart/Chart.yaml b/nextcloud-aio-helm-chart/Chart.yaml index 655b0e579d9f..906e48586e2b 100755 --- a/nextcloud-aio-helm-chart/Chart.yaml +++ b/nextcloud-aio-helm-chart/Chart.yaml @@ -1,6 +1,6 @@ name: nextcloud-aio-helm-chart description: A generated Helm Chart for Nextcloud AIO from Skippbox Kompose -version: 9.6.0 +version: 9.7.0 apiVersion: v2 keywords: - latest diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-apache-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-apache-deployment.yaml index 9fe50e254266..d609c5c3a991 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-apache-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-apache-deployment.yaml @@ -64,7 +64,7 @@ spec: value: "{{ .Values.TIMEZONE }}" - name: WHITEBOARD_HOST value: nextcloud-aio-whiteboard - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-apache:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-apache:20241017_085101" name: nextcloud-aio-apache ports: - containerPort: {{ .Values.APACHE_PORT }} diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-clamav-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-clamav-deployment.yaml index 75908aa0a119..e0bbd2e35a97 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-clamav-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-clamav-deployment.yaml @@ -53,7 +53,7 @@ spec: value: "{{ .Values.NEXTCLOUD_UPLOAD_LIMIT }}" - name: TZ value: "{{ .Values.TIMEZONE }}" - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-clamav:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-clamav:20241017_085101" name: nextcloud-aio-clamav ports: - containerPort: 3310 diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-collabora-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-collabora-deployment.yaml index c349aaff45ba..492501b7ae3d 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-collabora-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-collabora-deployment.yaml @@ -36,7 +36,7 @@ spec: value: --o:ssl.enable=false --o:ssl.termination=true --o:mount_jail_tree=false --o:logging.level=warning --o:home_mode.enable=true {{ .Values.COLLABORA_SECCOMP_POLICY }} --o:remote_font_config.url=https://{{ .Values.NC_DOMAIN }}/apps/richdocuments/settings/fonts.json - name: server_name value: "{{ .Values.NC_DOMAIN }}" - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-collabora:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-collabora:20241017_085101" name: nextcloud-aio-collabora ports: - containerPort: 9980 diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-database-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-database-deployment.yaml index 7e1643aeeca8..8476aa284e2e 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-database-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-database-deployment.yaml @@ -62,7 +62,7 @@ spec: value: nextcloud - name: TZ value: "{{ .Values.TIMEZONE }}" - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-postgresql:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-postgresql:20241017_085101" name: nextcloud-aio-database ports: - containerPort: 5432 diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-fulltextsearch-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-fulltextsearch-deployment.yaml index 9374c2018b02..033ca63236ca 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-fulltextsearch-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-fulltextsearch-deployment.yaml @@ -56,7 +56,7 @@ spec: value: basic - name: xpack.security.enabled value: "false" - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-fulltextsearch:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-fulltextsearch:20241017_085101" name: nextcloud-aio-fulltextsearch ports: - containerPort: 9200 diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-imaginary-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-imaginary-deployment.yaml index 20421b54c22d..1a5ee79769fd 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-imaginary-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-imaginary-deployment.yaml @@ -28,7 +28,7 @@ spec: value: "{{ .Values.IMAGINARY_SECRET }}" - name: TZ value: "{{ .Values.TIMEZONE }}" - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-imaginary:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-imaginary:20241017_085101" name: nextcloud-aio-imaginary ports: - containerPort: 9000 diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-nextcloud-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-nextcloud-deployment.yaml index 9d4721e8cf15..cbfc8b157fc7 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-nextcloud-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-nextcloud-deployment.yaml @@ -173,7 +173,7 @@ spec: value: "{{ .Values.WHITEBOARD_ENABLED }}" - name: WHITEBOARD_SECRET value: "{{ .Values.WHITEBOARD_SECRET }}" - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-nextcloud:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-nextcloud:20241017_085101" name: nextcloud-aio-nextcloud ports: - containerPort: 9000 diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-notify-push-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-notify-push-deployment.yaml index 901aecfef679..c33ac7019425 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-notify-push-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-notify-push-deployment.yaml @@ -53,7 +53,7 @@ spec: value: nextcloud-aio-redis - name: REDIS_HOST_PASSWORD value: "{{ .Values.REDIS_PASSWORD }}" - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-notify-push:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-notify-push:20241017_085101" name: nextcloud-aio-notify-push ports: - containerPort: 7867 diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-onlyoffice-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-onlyoffice-deployment.yaml index e60c2cb69dfc..f6607f0f9bc1 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-onlyoffice-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-onlyoffice-deployment.yaml @@ -44,7 +44,7 @@ spec: value: "{{ .Values.ONLYOFFICE_SECRET }}" - name: TZ value: "{{ .Values.TIMEZONE }}" - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-onlyoffice:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-onlyoffice:20241017_085101" name: nextcloud-aio-onlyoffice ports: - containerPort: 80 diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-redis-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-redis-deployment.yaml index 972697a51f97..70dc381cdb41 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-redis-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-redis-deployment.yaml @@ -39,7 +39,7 @@ spec: value: "{{ .Values.REDIS_PASSWORD }}" - name: TZ value: "{{ .Values.TIMEZONE }}" - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-redis:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-redis:20241017_085101" name: nextcloud-aio-redis ports: - containerPort: 6379 diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-talk-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-talk-deployment.yaml index d699cf032f61..d6fc49e3cd6a 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-talk-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-talk-deployment.yaml @@ -42,7 +42,7 @@ spec: value: "{{ .Values.TURN_SECRET }}" - name: TZ value: "{{ .Values.TIMEZONE }}" - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-talk:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-talk:20241017_085101" name: nextcloud-aio-talk ports: - containerPort: {{ .Values.TALK_PORT }} diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-talk-recording-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-talk-recording-deployment.yaml index 6dbd02d5c661..67405468cfa2 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-talk-recording-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-talk-recording-deployment.yaml @@ -32,7 +32,7 @@ spec: value: "{{ .Values.RECORDING_SECRET }}" - name: TZ value: "{{ .Values.TIMEZONE }}" - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-talk-recording:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-talk-recording:20241017_085101" name: nextcloud-aio-talk-recording ports: - containerPort: 1234 diff --git a/nextcloud-aio-helm-chart/templates/nextcloud-aio-whiteboard-deployment.yaml b/nextcloud-aio-helm-chart/templates/nextcloud-aio-whiteboard-deployment.yaml index f0c022da6eff..4eb3cccdb356 100755 --- a/nextcloud-aio-helm-chart/templates/nextcloud-aio-whiteboard-deployment.yaml +++ b/nextcloud-aio-helm-chart/templates/nextcloud-aio-whiteboard-deployment.yaml @@ -36,7 +36,7 @@ spec: value: redis - name: TZ value: "{{ .Values.TIMEZONE }}" - image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-whiteboard:20240925_080419" + image: "{{ .Values.IMAGE_MIRROR_PREFIX }}{{ .Values.NEXTCLOUD_IMAGE_ORG }}/aio-whiteboard:20241017_085101" name: nextcloud-aio-whiteboard ports: - containerPort: 3002 diff --git a/php/composer.lock b/php/composer.lock index 01271b470aea..298a4ab76631 100644 --- a/php/composer.lock +++ b/php/composer.lock @@ -134,16 +134,16 @@ }, { "name": "guzzlehttp/promises", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", "shasum": "" }, "require": { @@ -197,7 +197,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.3" + "source": "https://github.com/guzzle/promises/tree/2.0.4" }, "funding": [ { @@ -213,7 +213,7 @@ "type": "tidelift" } ], - "time": "2024-07-18T10:29:17+00:00" + "time": "2024-10-17T10:06:22+00:00" }, { "name": "guzzlehttp/psr7", @@ -2700,16 +2700,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.32.0", + "version": "1.33.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4" + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6ca22b154efdd9e3c68c56f5d94670920a1c19a4", - "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140", "shasum": "" }, "require": { @@ -2741,9 +2741,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.32.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0" }, - "time": "2024-09-26T07:23:32+00:00" + "time": "2024-10-13T11:25:22+00:00" }, { "name": "sebastian/diff", diff --git a/php/public/img/Background_Light.jpg b/php/public/img/Background_Light.jpg deleted file mode 100644 index ecbe6d0b8970..000000000000 Binary files a/php/public/img/Background_Light.jpg and /dev/null differ diff --git a/php/public/img/jenna-kim-the-globe-dark.webp b/php/public/img/jenna-kim-the-globe-dark.webp new file mode 100644 index 000000000000..bd3b0dafa2cd Binary files /dev/null and b/php/public/img/jenna-kim-the-globe-dark.webp differ diff --git a/php/public/img/jenna-kim-the-globe.webp b/php/public/img/jenna-kim-the-globe.webp new file mode 100644 index 000000000000..909a87615eb2 Binary files /dev/null and b/php/public/img/jenna-kim-the-globe.webp differ diff --git a/php/public/img/logo-blue.svg b/php/public/img/logo-blue.svg deleted file mode 100644 index cc0cdb6587db..000000000000 --- a/php/public/img/logo-blue.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -image/svg+xml \ No newline at end of file diff --git a/php/public/img/logo.svg b/php/public/img/logo.svg deleted file mode 100644 index 0b2aef61232e..000000000000 --- a/php/public/img/logo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/php/public/img/nextcloud-logo.svg b/php/public/img/nextcloud-logo.svg new file mode 100644 index 000000000000..94b074497a3a --- /dev/null +++ b/php/public/img/nextcloud-logo.svg @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/php/public/style.css b/php/public/style.css index 9af75a0ef549..85a82b80ceb0 100644 --- a/php/public/style.css +++ b/php/public/style.css @@ -1,12 +1,60 @@ +:root { + --color-nextcloud-blue: #0082c9; + --color-nextcloud-logo: var(--color-nextcloud-blue); + --color-main-background: white; + --color-input-background: white; + --color-main-text: black; + --color-main-border: black; + --color-main-border-hover: var(--color-main-border); + --color-error: #db0606; + --color-error-hover: #df2525; + --color-error-text: #c20505; + --color-success: #46ba61; + --color-running: #ffd000; + --color-info: #0071ad; + --color-info-hover: #00aaef; + --color-border-maxcontrast: #7d7d7d; + --color-loader: #f3f3f3; + --border: .5px; + --border-hover: 2px; + --border-radius: 7px; + --border-radius-large: 12px; + --default-font-size: 13px; + --checkbox-size: 16px; + --max-width: 500px; +} + +[data-theme="dark"] { + --color-main-background: #171717; + --color-input-background: #ebebeb; + --color-main-text: #ebebeb; + --color-nextcloud-logo: var(--color-main-text); + --color-main-border: var(--color-border-maxcontrast); + --color-main-border-hover: var(--color-main-text); + --color-error: #ff3333; + --color-error-hover: #ff6666; + --color-error-text: #ff8080; + --color-info: #00aeff; + --color-info-hover: #33beff; + --color-loader: var(--color-border-maxcontrast); + --border-hover: var(--border); +} + html, body { padding: 0; margin: 0; - font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Cantarell, Ubuntu, Helvetica Neue, Arial, Noto Color Emoji, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;; + font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, Ubuntu, 'Helvetica Neue', 'Noto Sans', 'Liberation Sans', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + background-color: var(--color-main-background); + color: var(--color-main-text); } a { text-decoration: none; - color: #0082c9; + color: var(--color-info); +} + +a:hover { + color: var(--color-info-hover); } a.button, @@ -15,19 +63,24 @@ input[type="submit"] { width: auto; height: 34px; cursor: pointer; - background-color: #0082c9; + background-color: var(--color-nextcloud-blue); font-weight: bold; - border-radius: 8px; + border-radius: var(--border-radius); margin: 3px 3px 3px 0; - font-size: 14px; + font-size: var(--default-font-size); color: white; - border: .5px solid black; + border: .5px solid var(--color-main-border); outline: none; } a.button:focus, input[type="submit"]:focus { - border: 1px solid black; + border: 1px solid var(--color-main-border); +} + +a.button:hover, +input[type="submit"]:hover { + background-color: var(--color-info-hover); } summary { @@ -41,38 +94,36 @@ ul { li { padding-bottom: 5px; + text-indent: 0; + padding-left: 0; } span.error { - background-color: #e9322d; + background-color: var(--color-error); } div.toast.error { - border-left-color: #e9322d; + border-left-color: var(--color-error); } .status { display: inline-block; - height: 16px; - width: 16px; - vertical-align: text-bottom -} - -.status { + height: var(--checkbox-size); + width: var(--checkbox-size); + vertical-align: text-bottom; border-radius: 50% } - span.success { - background-color: #46ba61; + background-color: var(--color-success); } span.running { - background-color: rgb(255, 208, 0); + background-color: var(--color-running); } div.toast.success { - border-left-color: #46ba61; + border-left-color: var(--color-success); } div.toast { @@ -84,19 +135,36 @@ div.toast { margin-top: 45px; position: fixed; z-index: 1000; - border-radius: 3px; - background: white none; + border-radius: var(--border-radius); + background: var(--color-main-background) none; + color: var(--color-main-text); +} + +.nextcloud-logo { + margin-left: auto; + margin-right: auto; + display: block; + color: var(--color-nextcloud-logo); +} + +.fallback-text { + display: none; +} + +svg:not(:has(use)) .fallback-text { + display: block; } .login { padding: 50px; - background-color: white; + background-color: var(--color-main-background); + color: var(--color-main-text); width: 500px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); - border-radius: 12px; + border-radius: var(--border-radius-large); } .login > .monospace { @@ -104,33 +172,6 @@ div.toast { font-size: 17px; } -form { - margin: 0; -} - -input[type="text"], -input[type="password"], -select { - padding-left: 8px; - padding-right: 8px; - height: 34px; - margin-bottom: 15px; - border-radius: 8px; - border: .5px solid black; -} - -textarea { - border-radius: 8px; - border: .5px solid black; -} - -input[type="text"]:focus, -input[type="password"]:focus, -textarea:focus, -select:focus { - border: 1px solid black; -} - .login > form > input[type="password"], .login > form > input[type="text"], .login > form > input[type="submit"] { @@ -153,34 +194,114 @@ select:focus { align-content: center; } -.login-wrapper { +.wrapper { min-height: 100dvh; min-width: 100vw; position: fixed; width: 100vw; - height: auto; - background-image: url("img/Background_Light.jpg"); - + background-image: url("img/jenna-kim-the-globe.webp"); background-position: center; background-repeat: no-repeat; background-size: cover; + box-sizing: border-box; + overflow: hidden; } -main { - padding: 20px; +html[data-theme="dark"] .wrapper { + background-image: url("img/jenna-kim-the-globe-dark.webp"); +} + +form { + margin: 0; +} + +input[type="text"], +input[type="password"], +select { + padding-left: 8px; + padding-right: 8px; + height: 34px; + margin-bottom: 15px; + border-radius: var(--border-radius); + border: var(--border) solid var(--color-border-maxcontrast); + background: var(--color-main-background); + color: var(--color-main-text); +} + +input[type="text"]:hover, +input[type="password"]:hover, +select:hover { + border: var(--border-hover) solid var(--color-main-border-hover); +} + +textarea { + border-radius: var(--border-radius); + border: .5px solid var(--color-main-border); max-width: 100%; +} + +input[type="text"]:focus, +input[type="password"]:focus, +textarea:focus, +select:focus { + border: 1px solid var(--color-main-border); +} + +/* Scroll bar for dark mode */ +html[data-theme="dark"] ::-webkit-scrollbar { + width: 8px; /* Width of the scroll bar */ +} + +html[data-theme="dark"] ::-webkit-scrollbar-thumb { + background-color: #444; /* Dark mode scrollbar thumb color */ + border-radius: 4px; /* Rounded corners for the thumb */ +} + +html[data-theme="dark"] ::-webkit-scrollbar-track { + background-color: #333; /* Dark mode scrollbar track color */ +} + +/* Scroll bar for light mode */ +::-webkit-scrollbar { + width: 8px; /* Width of the scroll bar */ +} + +::-webkit-scrollbar-thumb { + background-color: #888; /* Light mode scrollbar thumb color */ + border-radius: 4px; /* Rounded corners for the thumb */ +} + +::-webkit-scrollbar-track { + background-color: #f0f0f0; /* Light mode scrollbar track color */ +} + +.container { + margin: 20px auto; + padding: 2px; + max-width: calc(var(--max-width) + 108px); + background-color: var(--color-main-background); + border-radius: var(--border-radius-large); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + max-height: calc(100dvh - 50px); + overflow: hidden; +} + +main { + padding-left: 50px; + padding-right: 50px; + background-color: transparent; /* transparent, since color comes from outer container */ + color: var(--color-main-text); + max-height: calc(100dvh - 44px); + overflow-y: auto; + box-sizing: border-box; word-break: break-word; - max-width: 500px; + max-width: calc(var(--max-width) + 100px); margin: 0 auto; } .logo { - background-image: url('/img/logo.svg'); + color: white; height: 50px; - background-repeat: no-repeat; - display: inline-flex; - background-size: contain; - background-position: center center; width: 62px; position: absolute; left: 12px; @@ -189,16 +310,62 @@ main { } header { - background-color: #0082c9; - background-image: linear-gradient(40deg, #0082c9 0%, #30b6ff 100%); + position: fixed; + top: 0; + width: 100%; + background-color: transparent; height: 50px; justify-content: space-between; align-items: center; display: flex; + padding: 0 20px; + z-index: 1000; } header > form { - margin: 0 8px; + margin-left: auto; + margin-right: 30px; +} + +input[type="checkbox"] { + width: var(--checkbox-size); + height: var(--checkbox-size); + -webkit-appearance: none; /* remove default styling */ + -moz-appearance: none; + appearance: none; + border: 1px solid var(--color-nextcloud-blue); + border-radius: 2px; + cursor: pointer; + position: relative; + vertical-align: middle; /* align checkbox vertically with text */ + margin-top: -1px; /* adjust for better alignment */ +} + +input[type="checkbox"]:checked { + background-color: var(--color-nextcloud-blue); + border-color: var(--color-border-maxcontrast); +} + +input[type="checkbox"]:checked::after { + content: ''; /* Create a pseudo-element for the checkmark */ + position: absolute; /* Position it absolutely */ + left: 4px; /* Positioning of the checkmark */ + top: 0; /* Positioning of the checkmark */ + width: 4px; /* Width of the checkmark */ + height: 9px; /* Height of the checkmark */ + border: solid white; /* Color of the checkmark */ + border-width: 0 2px 3px 0; /* Create the checkmark shape */ + transform: rotate(45deg); /* Rotate to form a checkmark */ +} + +input[type="checkbox"]:hover { + border-color: var(--color-info-hover); +} + +label { + cursor: pointer; + margin-left: 4px; + line-height: var(--checkbox-size); } .loading { @@ -221,9 +388,9 @@ header > form { } .loader { - border: 16px solid #f3f3f3; + border: 16px solid var(--color-loader); border-radius: 50%; - border-top: 16px solid #0082c9; + border-top: 16px solid var(--color-nextcloud-blue); width: 120px; height: 120px; -webkit-animation: spin 2s linear infinite; /* Safari */ @@ -243,3 +410,64 @@ header > form { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } + +/* General theme button styling */ +#theme-toggle { + position: fixed; /* Keep the button in the same position */ + right: 30px; /* Adjust the distance from the right */ + bottom: 30px; /* Adjust the distance from the bottom */ + background-color: transparent; /* Make the background transparent */ + border: none; /* Remove border */ + font-size: 36px; /* Adjust font size */ + cursor: pointer; /* Change cursor to pointer */ + outline: none; + z-index: 9999; /* Ensures the icon is on top of every layer */ +} + +/* Icon styling: default state */ +#theme-icon { + display: inline-block; + border-radius: 50%; /* Round shape */ + position: relative; /* For the pseudo-element positioning */ + transition: box-shadow 0.3s, background-color 0.3s; /* Smooth transition for hover effect */ + opacity: 0.6; /* Slightly transparent by default */ + filter: grayscale(100%); /* Make the icon black and white */ +} + +/* Create the inner glow effect with ::after */ +#theme-icon::after { + content: ''; /* Empty content for the pseudo-element */ + position: absolute; + top: 50%; + left: 50%; + width: 0px; /* Invisible dot */ + height: 0px; /* Invisible dot */ + background-color: transparent; /* Invisible by default */ + border-radius: 50%; /* Circle shape */ + transform: translate(-50%, -50%); /* Center the dot */ + transition: box-shadow 0.3s, background-color 0.3s; /* Smooth transition for hover */ +} + +/* Hover effect for both light and dark modes */ +#theme-toggle:hover #theme-icon { + position: relative; /* Ensures stacking order */ + filter: grayscale(0%); /* Restore full color */ + opacity: 1; /* Fully visible on hover */ +} + +/* Inner glow when hovered */ +#theme-toggle:hover #theme-icon::after { + box-shadow: 0 0 40px 40px rgba(128, 128, 128, 0.4); /* Blur effect from inside */ + background-color: rgba(128, 128, 128, 0.2); /* Light glow inside */ +} + +/* Remove hover effects when not hovering */ +#theme-toggle:not(:hover) #theme-icon { + opacity: 0.6; /* Slightly transparent */ +} + +@media only screen and (max-width: 800px) { + .container { + margin: 50px auto 0px auto; + } +} diff --git a/php/public/toggle-dark-mode.js b/php/public/toggle-dark-mode.js new file mode 100644 index 000000000000..773a9f18d9b6 --- /dev/null +++ b/php/public/toggle-dark-mode.js @@ -0,0 +1,26 @@ +// Function to toggle theme +function toggleTheme() { + const currentTheme = document.documentElement.getAttribute('data-theme'); + const newTheme = (currentTheme === 'dark') ? '' : 'dark'; // Toggle between no theme and dark theme + document.documentElement.setAttribute('data-theme', newTheme); + localStorage.setItem('theme', newTheme); + + // Change the icon based on the current theme + const themeIcon = document.getElementById('theme-icon'); + themeIcon.textContent = newTheme === 'dark' ? '☀️' : '🌙'; // Switch between moon and sun icons +} + +// Function to apply saved theme from localStorage +function applySavedTheme() { + const savedTheme = localStorage.getItem('theme'); + if (savedTheme === 'dark') { + document.documentElement.setAttribute('data-theme', 'dark'); + document.getElementById('theme-icon').textContent = '☀️'; // Sun icon for dark mode + } else { + document.documentElement.removeAttribute('data-theme'); // Default to light theme (no data-theme) + document.getElementById('theme-icon').textContent = '🌙'; // Moon icon for light mode + } +} + +// Apply theme when the page loads +document.addEventListener('DOMContentLoaded', applySavedTheme); diff --git a/php/templates/already-installed.twig b/php/templates/already-installed.twig index 708128a8e72e..34a7e179583a 100644 --- a/php/templates/already-installed.twig +++ b/php/templates/already-installed.twig @@ -1,5 +1,13 @@ {% extends "layout.twig" %} {% block body %} - Already installed. -{% endblock %} +
+ +

Nextcloud All-In-One is already installed

+ Open Nextcloud AIO +
+{% endblock %} \ No newline at end of file diff --git a/php/templates/containers.twig b/php/templates/containers.twig index c326c495d19a..379318aee69b 100644 --- a/php/templates/containers.twig +++ b/php/templates/containers.twig @@ -5,9 +5,9 @@
-
- -
+
@@ -15,262 +15,263 @@
-
-

Nextcloud AIO v9.7.0

+
+
+

Nextcloud AIO v9.8.0

- {# Add 2nd tab warning #} - + {# Add 2nd tab warning #} + - {# timezone-prefill #} - + {# timezone-prefill #} + - {% set isAnyRunning = false %} - {% set isAnyRestarting = false %} - {% set isWatchtowerRunning = false %} - {% set isDomaincheckRunning = false %} - {% set isBackupOrRestoreRunning = false %} - {% set isApacheStarting = false %} - {# Setting newMajorVersion to '' will hide corresponding options/elements, can be set to an integer like 26 in order to show corresponding elements. If set, also increase installLatestMajor in https://github.com/nextcloud/all-in-one/blob/main/php/src/Controller/DockerController.php #} - {% set newMajorVersion = 30 %} + {% set isAnyRunning = false %} + {% set isAnyRestarting = false %} + {% set isWatchtowerRunning = false %} + {% set isDomaincheckRunning = false %} + {% set isBackupOrRestoreRunning = false %} + {% set isApacheStarting = false %} + {# Setting newMajorVersion to '' will hide corresponding options/elements, can be set to an integer like 26 in order to show corresponding elements. If set, also increase installLatestMajor in https://github.com/nextcloud/all-in-one/blob/main/php/src/Controller/DockerController.php #} + {% set newMajorVersion = 30 %} - {% if is_backup_container_running == true %} - {% if borg_backup_mode == 'backup' or borg_backup_mode == 'restore' %} - {% set isBackupOrRestoreRunning = true %} + {% if is_backup_container_running == true %} + {% if borg_backup_mode == 'backup' or borg_backup_mode == 'restore' %} + {% set isBackupOrRestoreRunning = true %} + {% endif %} {% endif %} - {% endif %} - {% for container in containers %} - {% set runingState = container.GetContainerState().value %} + {% for container in containers %} + {% set runingState = container.GetContainerState().value %} {% if container.GetDisplayName() != '' and runingState in ['running', 'unhealthy', 'starting'] %} - {% set isAnyRunning = true %} - {% endif %} - {% if container.GetDisplayName() != '' and runingState == 'restarting' %} - {% set isAnyRestarting = true %} - {% endif %} - {% if container.GetIdentifier() == 'nextcloud-aio-watchtower' and container.GetContainerState().isNotStopped() %} - {% set isWatchtowerRunning = true %} - {% endif %} - {% if container.GetIdentifier() == 'nextcloud-aio-domaincheck' and container.GetContainerState().isNotStopped() %} - {% set isDomaincheckRunning = true %} - {% endif %} - {% if container.GetIdentifier() == 'nextcloud-aio-apache' and runingState == 'starting' %} - {% set isApacheStarting = true %} - {% endif %} - {% endfor %} - - {% if is_daily_backup_running == true %} -

Daily backup currently running. (Logs)

- {% if automatic_updates == true %} -

This will update your containers, the mastercontainer and, on Saturdays, your Nextcloud apps if the backup is successful.

- {% if is_mastercontainer_update_available == true %} -

When the mastercontainer is updated it will restart, making it unavailable for a moment. (Logs)

+ {% set isAnyRunning = true %} {% endif %} - {% endif %} - {% if has_update_available == false %} -

The whole process should not take more than a few minutes.

- {% elseif automatic_updates == true %} -

The whole process can take a while as your containers will be updated.

- {% endif %} -

Reload ↻

-

If the daily backup is stuck somehow, you can unstick it by running sudo docker exec nextcloud-aio-mastercontainer rm /mnt/docker-aio-config/data/daily_backup_running and afterwards reloading this interface.

- {% elseif isWatchtowerRunning == true %} -

Mastercontainer update currently running. Once the update is complete the mastercontainer will restart, making it unavailable for a moment. Please wait until it's done. (Logs)

-

Reload ↻

- {% else %} - {% if is_backup_container_running == false and domain == "" %} - {% if isDomaincheckRunning == false %} -

Domaincheck container is not running

-

This is not expected. Most likely this happened because port {{ apache_port }} is already in use on your server. You can check the mastercontainer logs and domaincheck container logs for further clues. You should be able to resolve this by adjusting the APACHE_PORT by following the reverse proxy documentation. Advice: have a detailed look at the changed docker run command for AIO.

- {% elseif is_mastercontainer_update_available == true %} -

Mastercontainer update

-

⚠️ A mastercontainer update is available. Please click on the button below to update it. Afterwards, you will be able to proceed with the setup.

-
- - - -
- {% else %} - {% if borg_backup_host_location == '' and borg_restore_password == '' %} -

The official Nextcloud installation method. Nextcloud All-in-One provides easy deployment and maintenance with most features included in this one Nextcloud instance.

-

You can either create a new AIO instance or restore a former AIO instance from backup. See the two sections below.

- {{ include('includes/aio-config.twig') }} -

New AIO instance

- {% if apache_port == '443' %} -

AIO is currently in "normal mode" which means that it handles the TLS proxying itself. This also means that it cannot be installed behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else). If you want to run AIO behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else), see the reverse proxy documentation. Advice: have a detailed look at the changed docker run command for AIO.

- {% else %} -

AIO is currently in "reverse proxy mode" which means that it can be installed behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else) and does not do the TLS proxying itself.

- {% endif %} -

Please type the domain that will be used for Nextcloud below in order to create a new AIO instance.

- {% if skip_domain_validation == true %} -

Please note: The domain validation is disabled so any domain will be accepted here! Make sure you do not make a typo here as you will not be able to change it afterwards!

- {% endif %} -
- + {% if container.GetDisplayName() != '' and runingState == 'restarting' %} + {% set isAnyRestarting = true %} + {% endif %} + {% if container.GetIdentifier() == 'nextcloud-aio-watchtower' and container.GetContainerState().isNotStopped() %} + {% set isWatchtowerRunning = true %} + {% endif %} + {% if container.GetIdentifier() == 'nextcloud-aio-domaincheck' and container.GetContainerState().isNotStopped() %} + {% set isDomaincheckRunning = true %} + {% endif %} + {% if container.GetIdentifier() == 'nextcloud-aio-apache' and runingState == 'starting' %} + {% set isApacheStarting = true %} + {% endif %} + {% endfor %} + + {% if is_daily_backup_running == true %} +

Daily backup currently running. (Logs)

+ {% if automatic_updates == true %} +

This will update your containers, the mastercontainer and, on Saturdays, your Nextcloud apps if the backup is successful.

+ {% if is_mastercontainer_update_available == true %} +

When the mastercontainer is updated it will restart, making it unavailable for a moment. (Logs)

+ {% endif %} + {% endif %} + {% if has_update_available == false %} +

The whole process should not take more than a few minutes.

+ {% elseif automatic_updates == true %} +

The whole process can take a while as your containers will be updated.

+ {% endif %} +

Reload ↻

+

If the daily backup is stuck somehow, you can unstick it by running sudo docker exec nextcloud-aio-mastercontainer rm /mnt/docker-aio-config/data/daily_backup_running and afterwards reloading this interface.

+ {% elseif isWatchtowerRunning == true %} +

Mastercontainer update currently running. Once the update is complete the mastercontainer will restart, making it unavailable for a moment. Please wait until it's done. (Logs)

+

Reload ↻

+ {% else %} + {% if is_backup_container_running == false and domain == "" %} + {% if isDomaincheckRunning == false %} +

Domaincheck container is not running

+

This is not expected. Most likely this happened because port {{ apache_port }} is already in use on your server. You can check the mastercontainer logs and domaincheck container logs for further clues. You should be able to resolve this by adjusting the APACHE_PORT by following the reverse proxy documentation. Advice: have a detailed look at the changed docker run command for AIO.

+ {% elseif is_mastercontainer_update_available == true %} +

Mastercontainer update

+

⚠️ A mastercontainer update is available. Please click on the button below to update it. Afterwards, you will be able to proceed with the setup.

+ - +
- {% if skip_domain_validation == false %} -

Make sure that this server is reachable on port 443 (port 443/tcp is open/forwarded in your firewall/router and 443/udp as well if you want to enable http3) and that you've correctly set up the DNS config for the domain that you enter (set the A record to your public ipv4-address and if you need ipv6, set the AAAA record to your public ipv6-address. A CNAME record is, of course, also possible). You should see hints on what went wrong in the top right corner if your domain is not accepted.

-
- Click here for further hints -

If you do not have a domain yet, you can get one for free e.g. from duckdns.org and others.

-

If you have a dynamic public IP-address, you can use e.g. DDclient with a compatible domain provider for DNS updates.

-

If you only want to install AIO locally without exposing it to the public internet or if you cannot do so, feel free to follow this documentation.

-

If you should be using Cloudflare Proxy for your domain, make sure to disable the Proxy feature temporarily as it might block the domain validation attempts.

- {% if apache_port != '443' %} -

If you run into issues with your domain being accepted, see these steps for how to debug things.

- {% endif %} -

Hint: If the domain validation fails but you are completely sure that you've configured everything correctly, you may skip the domain validation by following this documentation.

-
- {% endif %} + {% else %} + {% if borg_backup_host_location == '' and borg_restore_password == '' %} +

The official Nextcloud installation method. Nextcloud All-in-One provides easy deployment and maintenance with most features included in this one Nextcloud instance.

+

You can either create a new AIO instance or restore a former AIO instance from backup. See the two sections below.

+ {{ include('includes/aio-config.twig') }} +

New AIO instance

+ {% if apache_port == '443' %} +

AIO is currently in "normal mode" which means that it handles the TLS proxying itself. This also means that it cannot be installed behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else). If you want to run AIO behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else), see the reverse proxy documentation. Advice: have a detailed look at the changed docker run command for AIO.

+ {% else %} +

AIO is currently in "reverse proxy mode" which means that it can be installed behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else) and does not do the TLS proxying itself.

+ {% endif %} +

Please type the domain that will be used for Nextcloud below in order to create a new AIO instance.

+ {% if skip_domain_validation == true %} +

Please note: The domain validation is disabled so any domain will be accepted here! Make sure you do not make a typo here as you will not be able to change it afterwards!

+ {% endif %} +
+ + + + +
+ {% if skip_domain_validation == false %} +

Make sure that this server is reachable on port 443 (port 443/tcp is open/forwarded in your firewall/router and 443/udp as well if you want to enable http3) and that you've correctly set up the DNS config for the domain that you enter (set the A record to your public ipv4-address and if you need ipv6, set the AAAA record to your public ipv6-address. A CNAME record is, of course, also possible). You should see hints on what went wrong in the top right corner if your domain is not accepted.

+
+ Click here for further hints +

If you do not have a domain yet, you can get one for free e.g. from duckdns.org and others.

+

If you have a dynamic public IP-address, you can use e.g. DDclient with a compatible domain provider for DNS updates.

+

If you only want to install AIO locally without exposing it to the public internet or if you cannot do so, feel free to follow this documentation.

+

If you should be using Cloudflare Proxy for your domain, make sure to disable the Proxy feature temporarily as it might block the domain validation attempts.

+ {% if apache_port != '443' %} +

If you run into issues with your domain being accepted, see these steps for how to debug things.

+ {% endif %} +

Hint: If the domain validation fails but you are completely sure that you've configured everything correctly, you may skip the domain validation by following this documentation.

+
+ {% endif %} -

Restore former AIO instance from backup

-

You can alternatively restore a former AIO instance from backup.

- {% endif %} +

Restore former AIO instance from backup

+

You can alternatively restore a former AIO instance from backup.

+ {% endif %} - {% if is_instance_restore_attempt == false %} - {% if borg_backup_host_location != '' and borg_restore_password != '' %} - {% if borg_backup_mode in ['test', 'check'] %} - {% if backup_exit_code > 0 %} -

Last {{ borg_backup_mode }} failed! (Logs)

- {% if borg_backup_mode == 'test' %} -

Please adjust the path and/or the encryption password in order to make it work!

- {% elseif borg_backup_mode == 'check' %} -

The backup archive seems to be corrupt. Please try to use a different intact backup archive or try to fix it by following this documentation

-
- Reveal repair option -

Below is the option to repair the integrity of your backup. Please note: Please only use this after you have read the documentation above! (It will run the command 'borg check --repair' for you.)

-
+ {% if is_instance_restore_attempt == false %} + {% if borg_backup_host_location != '' and borg_restore_password != '' %} + {% if borg_backup_mode in ['test', 'check'] %} + {% if backup_exit_code > 0 %} +

Last {{ borg_backup_mode }} failed! (Logs)

+ {% if borg_backup_mode == 'test' %} +

Please adjust the path and/or the encryption password in order to make it work!

+ {% elseif borg_backup_mode == 'check' %} +

The backup archive seems to be corrupt. Please try to use a different intact backup archive or try to fix it by following this documentation

+
+ Reveal repair option +

Below is the option to repair the integrity of your backup. Please note: Please only use this after you have read the documentation above! (It will run the command 'borg check --repair' for you.)

+ + + + + +
+ {% endif %} + {% elseif backup_exit_code == 0 %} +

Last {{ borg_backup_mode }} successful! (Logs)

+ {% if borg_backup_mode == 'test' %} +

Feel free to check the integrity of the backup archive below before starting the restore process in order to make ensure that the restore will work. This can take a long time though depending on the size of the backup archive and is thus not required.

+
- +
-
- {% endif %} - {% elseif backup_exit_code == 0 %} -

Last {{ borg_backup_mode }} successful! (Logs)

- {% if borg_backup_mode == 'test' %} -

Feel free to check the integrity of the backup archive below before starting the restore process in order to make ensure that the restore will work. This can take a long time though depending on the size of the backup archive and is thus not required.

-
+ {% endif %} +

Choose the backup that you want to restore and click on the button below to restore the selected backup. This will restore the whole AIO instance. Please note that the current AIO passphrase will be kept and the previous AIO passphrase will not be restored from backup!

+

Please note: If the backup that you want to restore contained any community container, but you did not specify the same community containers via environmental variable while creating this new AIO instance, you need to restore the same backup a second time after this attempt so that the community container data is also correctly restored.

+ - + +
{% endif %} -

Choose the backup that you want to restore and click on the button below to restore the selected backup. This will restore the whole AIO instance. Please note that the current AIO passphrase will be kept and the previous AIO passphrase will not be restored from backup!

-

Please note: If the backup that you want to restore contained any community container, but you did not specify the same community containers via environmental variable while creating this new AIO instance, you need to restore the same backup a second time after this attempt so that the community container data is also correctly restored.

-
- - - - -
- {% endif %} - {% elseif borg_backup_mode == 'restore' %} - {% if backup_exit_code > 0 %} -

Last restore failed! (Logs)

-

The restore process has unexpectedly failed! Please adjust the path and encryption password, test it and try to restore again!

+ {% elseif borg_backup_mode == 'restore' %} + {% if backup_exit_code > 0 %} +

Last restore failed! (Logs)

+

The restore process has unexpectedly failed! Please adjust the path and encryption password, test it and try to restore again!

+ {% endif %} {% endif %} {% endif %} - {% endif %} - {% if borg_backup_host_location == '' or borg_restore_password == '' or borg_backup_mode not in ['test', 'check', ''] or backup_exit_code > 0 %} -

Please enter the location of the backup archive on your host and the encryption password of the backup archive below:

-
- - + {% if borg_backup_host_location == '' or borg_restore_password == '' or borg_backup_mode not in ['test', 'check', ''] or backup_exit_code > 0 %} +

Please enter the location of the backup archive on your host and the encryption password of the backup archive below:

+ + + + + + +
+ {{ include('includes/backup-dirs.twig') }} +

⚠️ Please note that the backup archive must be located in a subfolder of the folder that you enter here and the subfolder which contains the archive must be named 'borg', or the backup container will not be able to find the backup archive!

+ {% endif %} + {% else %} +

Everything set! Click on the button below to test the path and encryption password:

+
- +
- {{ include('includes/backup-dirs.twig') }} -

⚠️ Please note that the backup archive must be located in a subfolder of the folder that you enter here and the subfolder which contains the archive must be named 'borg', or the backup container will not be able to find the backup archive!

{% endif %} - {% else %} -

Everything set! Click on the button below to test the path and encryption password:

-
- - - -
{% endif %} +

How to reset the AIO instance?

+

If something should be going wrong, for example during the initial installation, you can reset the instance by following this documentation.

{% endif %} -

How to reset the AIO instance?

-

If something should be going wrong, for example during the initial installation, you can reset the instance by following this documentation.

- {% endif %} - {% if was_start_button_clicked == true %} - {% if current_channel starts with 'latest' or current_channel starts with 'beta' or current_channel starts with 'develop' %} -

You are running the {{ current_channel }} channel. (Logs)

- {% else %} -

No channel was found. This means that AIO is not able to update itself and its component and will also not be able to report about updates. Updates need to be done externally.

+ {% if was_start_button_clicked == true %} + {% if current_channel starts with 'latest' or current_channel starts with 'beta' or current_channel starts with 'develop' %} +

You are running the {{ current_channel }} channel. (Logs)

+ {% else %} +

No channel was found. This means that AIO is not able to update itself and its component and will also not be able to report about updates. Updates need to be done externally.

+ {% endif %} {% endif %} - {% endif %} - {% if is_backup_container_running == true %} -

Backup container is currently running: {{ borg_backup_mode }} (Logs)

-

Reload ↻

- {% endif %} + {% if is_backup_container_running == true %} +

Backup container is currently running: {{ borg_backup_mode }} (Logs)

+

Reload ↻

+ {% endif %} - {% if domain != "" %} - {% if isAnyRunning == true %} - {% if isApacheStarting != true %} - {% if borg_backup_host_location != '' %} -
- Click here to reveal the initial Nextcloud credentials - {% endif %} -

Initial Nextcloud username: admin

- {% if borg_backup_host_location != '' %} - {# nextcloud_password needs to be duplicated due to a bug in Firefox. See https://github.com/nextcloud/all-in-one/issues/638. #} -

Initial Nextcloud password: {{ nextcloud_password }}

- {% else %} -

Initial Nextcloud password: {{ nextcloud_password }}

- {% endif %} -

Open your Nextcloud ↗

- {% if borg_backup_host_location == '' %} -

If your Nextcloud does not open when clicking the button above, see this documentation

- {% endif %} - {% else %} - {% if isAnyRestarting == false %} -

Containers are currently starting. You might inspect the container logs by clicking on Starting next to each container for further details.

-

Reload ↻

+ {% if domain != "" %} + {% if isAnyRunning == true %} + {% if isApacheStarting != true %} + {% if borg_backup_host_location != '' %} +
+ Click here to reveal the initial Nextcloud credentials + {% endif %} +

Initial Nextcloud username: admin

+ {% if borg_backup_host_location != '' %} + {# nextcloud_password needs to be duplicated due to a bug in Firefox. See https://github.com/nextcloud/all-in-one/issues/638. #} +

Initial Nextcloud password: {{ nextcloud_password }}

+ {% else %} +

Initial Nextcloud password: {{ nextcloud_password }}

+ {% endif %} +

Open your Nextcloud ↗

+ {% if borg_backup_host_location == '' %} +

If your Nextcloud does not open when clicking the button above, see this documentation

+ {% endif %} {% else %} -

It seems at least one container was not able to start correctly and is currently restarting.

-

To break this endless loop, you can stop the containers below and investigate the issue in the container logs before starting the containers again.

-
- - - -
+ {% if isAnyRestarting == false %} +

Containers are currently starting. You might inspect the container logs by clicking on Starting next to each container for further details.

+

Reload ↻

+ {% else %} +

It seems at least one container was not able to start correctly and is currently restarting.

+

To break this endless loop, you can stop the containers below and investigate the issue in the container logs before starting the containers again.

+
+ + + +
+ {% endif %} {% endif %} {% endif %} - {% endif %} - {% if isApacheStarting == false and is_backup_container_running == false %} - {{ include('includes/aio-config.twig') }} - {% endif %} + {% if isApacheStarting == false and is_backup_container_running == false %} + {{ include('includes/aio-config.twig') }} + {% endif %} - {% if was_start_button_clicked == true %} -

Containers

-
    - {# @var containers \AIO\Container\Container[] #} - {% for container in containers %} - {% if container.GetDisplayName() != '' %} -
  • - {% set runningState = container.GetContainerState().value %} + {% if was_start_button_clicked == true %} +

    Containers

    +
      + {# @var containers \AIO\Container\Container[] #} + {% for container in containers %} + {% if container.GetDisplayName() != '' %} +
    • + {% set runningState = container.GetContainerState().value %} {% if runningState == 'starting' %} - - {{ container.GetDisplayName() }} (Starting) - {% if container.GetDocumentation() != '' %} - (docs) - {% endif %} - - {% elseif runningState == 'unhealthy' %} + + {{ container.GetDisplayName() }} (Starting) + {% if container.GetDocumentation() != '' %} + (docs) + {% endif %} + + {% elseif runningState == 'unhealthy' %} {{ container.GetDisplayName() }} (Unhealthy) {% if container.GetDocumentation() != '' %} @@ -285,419 +286,417 @@ {% endif %} {% elseif runningState == 'running' %} - - {{ container.GetDisplayName() }} (Running) - {% if container.GetDocumentation() != '' %} - (docs) - {% endif %} - - {% else %} - - {{ container.GetDisplayName() }} (Stopped) - {% if container.GetDocumentation() != '' %} - (docs) + + {{ container.GetDisplayName() }} (Running) + {% if container.GetDocumentation() != '' %} + (docs) + {% endif %} + + {% else %} + + {{ container.GetDisplayName() }} (Stopped) + {% if container.GetDocumentation() != '' %} + (docs) + {% endif %} + {% endif %} - - {% endif %} -
    • - {% endif %} - {% endfor %} -
    +
  • + {% endif %} + {% endfor %} +
- {% if has_update_available == true %} - {% if is_mastercontainer_update_available == false %} -

⚠️ Container updates are available. Click on Stop containers and Start and update containers to update them. You should consider creating a backup first.

- {% endif %} - {% else %} - {% if is_mastercontainer_update_available == false %} -

Your containers are up-to-date.

- {% if newMajorVersion != '' and isAnyRunning == true and isApacheStarting != true %} -
- Note about Nextcloud Hub {{ newMajorVersion - 21 }} -

If you haven't upgraded to Nextcloud Hub {{ newMajorVersion - 21 }} yet and want to do that now, feel free to follow this documentation

-
+ {% if has_update_available == true %} + {% if is_mastercontainer_update_available == false %} +

⚠️ Container updates are available. Click on Stop containers and Start and update containers to update them. You should consider creating a backup first.

+ {% endif %} + {% else %} + {% if is_mastercontainer_update_available == false %} +

Your containers are up-to-date.

+ {% if newMajorVersion != '' and isAnyRunning == true and isApacheStarting != true %} +
+ Note about Nextcloud Hub {{ newMajorVersion - 21 }} +

If you haven't upgraded to Nextcloud Hub {{ newMajorVersion - 21 }} yet and want to do that now, feel free to follow this documentation

+
+ {% endif %} {% endif %} {% endif %} {% endif %} - {% endif %} - {% if isAnyRunning == true %} - {% if isApacheStarting != true %} - {% if is_mastercontainer_update_available == true %} -

⚠️ A mastercontainer update is available. Please click on the button below to stop your containers in order to update the mastercontainer.

- {% if current_channel starts with 'latest' %} -

You can find the changelog here

- {% elseif current_channel starts with 'beta' %} -

You can find the changelog here

- {% elseif current_channel starts with 'develop' %} -

You can find all changes here

+ {% if isAnyRunning == true %} + {% if isApacheStarting != true %} + {% if is_mastercontainer_update_available == true %} +

⚠️ A mastercontainer update is available. Please click on the button below to stop your containers in order to update the mastercontainer.

+ {% if current_channel starts with 'latest' %} +

You can find the changelog here

+ {% elseif current_channel starts with 'beta' %} +

You can find the changelog here

+ {% elseif current_channel starts with 'develop' %} +

You can find all changes here

+ {% endif %} {% endif %} - {% endif %} -
- - - -
- {% endif %} - {% else %} - {% if isBackupOrRestoreRunning == true %} -

Restore or Backup currently running. Cannot start the containers until Restore or Backup is complete.

- {% else %} - {% if was_start_button_clicked == false %} -

Clicking on the button below will download all docker containers and start them. This can take a long time depending on your internet connection. Since the overall size is a few GB, this can take around 5-10 min or more. Please be patient!

- {% endif %} - {% if is_mastercontainer_update_available == true %} -

⚠️ A mastercontainer update is available. Please click on the button below to update it.

-
+ - +
+ {% endif %} + {% else %} + {% if isBackupOrRestoreRunning == true %} +

Restore or Backup currently running. Cannot start the containers until Restore or Backup is complete.

{% else %} {% if was_start_button_clicked == false %} -
- - - {% if newMajorVersion != '' %} -
- {% endif %} - -
- {% elseif has_update_available == false %} -
+

Clicking on the button below will download all docker containers and start them. This can take a long time depending on your internet connection. Since the overall size is a few GB, this can take around 5-10 min or more. Please be patient!

+ {% endif %} + {% if is_mastercontainer_update_available == true %} +

⚠️ A mastercontainer update is available. Please click on the button below to update it.

+ - +
{% else %} -
- - - -
+ {% if was_start_button_clicked == false %} +
+ + + {% if newMajorVersion != '' %} +
+ {% endif %} + +
+ {% elseif has_update_available == false %} +
+ + + +
+ {% else %} +
+ + + +
+ {% endif %} {% endif %} {% endif %} {% endif %} - {% endif %} - {% if was_start_button_clicked == true %} + {% if was_start_button_clicked == true %} - {% if is_backup_section_enabled == false %} -

Backup and restore

-

The backup section is disabled via environmental variable.

- {% else %} - {% if is_backup_container_running == false and borg_backup_host_location == "" and isApacheStarting != true %} + {% if is_backup_section_enabled == false %}

Backup and restore

-

Please enter the directory path below where backups will be created on the host system. It's best to choose a location on a separate drive and not on your root drive.

-
- - - - -
- {{ include('includes/backup-dirs.twig') }} +

The backup section is disabled via environmental variable.

+ {% else %} + {% if is_backup_container_running == false and borg_backup_host_location == "" and isApacheStarting != true %} +

Backup and restore

+

Please enter the directory path below where backups will be created on the host system. It's best to choose a location on a separate drive and not on your root drive.

+
+ + + + +
+ {{ include('includes/backup-dirs.twig') }} + {% endif %} {% endif %} - {% endif %} - - {% if is_backup_section_enabled == true %} - {% if borg_backup_host_location != "" %} - {% if is_backup_container_running == false %} -

Backup and restore

- {% if backup_exit_code > 0 %} -

Last {{ borg_backup_mode }} failed! (Logs)

- {% if borg_backup_mode == "check" %} -

The backup check was not successful. This might indicate a corrupt archive (look at the logs). If that should be the case, you can try to fix it by following this documentation

-
- Reveal repair option -

Below is the option to repair the integrity of your backup. Please note: Please only use this after you have read the documentation above! (It will run the command 'borg check --repair' for you.)

-
+ {% if is_backup_section_enabled == true %} + + {% if borg_backup_host_location != "" %} + {% if is_backup_container_running == false %} +

Backup and restore

+ {% if backup_exit_code > 0 %} +

Last {{ borg_backup_mode }} failed! (Logs)

+ {% if borg_backup_mode == "check" %} +

The backup check was not successful. This might indicate a corrupt archive (look at the logs). If that should be the case, you can try to fix it by following this documentation

+
+ Reveal repair option +

Below is the option to repair the integrity of your backup. Please note: Please only use this after you have read the documentation above! (It will run the command 'borg check --repair' for you.)

+ + + + + +
+ {% endif %} + {% if has_backup_run_once == false %} +

You may change the backup path again since the initial backup was not successful. After submitting the new value, you need to click on Create Backup to test the new value.

+
+ - +
-
- {% endif %} - {% if has_backup_run_once == false %} -

You may change the backup path again since the initial backup was not successful. After submitting the new value, you need to click on Create Backup to test the new value.

-
- - - - -
- {% endif %} - {% elseif backup_exit_code == 0 %} - {% if borg_backup_mode == "backup" %} -

Last {{ borg_backup_mode }} successful on {{ last_backup_time }} UTC! (Logs)

- {% else %} -

Last {{ borg_backup_mode }} successful! (Logs)

+ {% endif %} + {% elseif backup_exit_code == 0 %} + {% if borg_backup_mode == "backup" %} +

Last {{ borg_backup_mode }} successful on {{ last_backup_time }} UTC! (Logs)

+ {% else %} +

Last {{ borg_backup_mode }} successful! (Logs)

+ {% endif %} {% endif %} {% endif %} - {% endif %} - - {% if is_backup_container_running == false and isApacheStarting == false %} - {% if has_backup_run_once == true %} -
- Click here to reveal all backup options (including an option for automatic updates) - {% endif %} -

Backup information

-

This is your encryption password for backups: {{ borgbackup_password }}

-

Please save this password in a safe place. You won't be able to restore from backup if you lose this password!

-

All important data from your Nextcloud AIO instance such as the database, your files and the mastercontainer's configuration files, will be backed up.

-

The backup uses a tool called BorgBackup, a well-known server backup tool that efficiently backs up your files and encrypts them on the fly.

-

By using this tool, backups are incremental, differential, compressed and encrypted – so only the first backup will take a while. Further backups should be fast as only changes are taken into account.

-

Backups will be created in the following directory on the host: {{ borg_backup_host_location }}/borg

-

Be aware that this solution does not backup files and folders that are mounted into Nextcloud using the external storage app, but you can add further Docker volumes and host paths that you want to back up after the initial backup is done.

-

For information about backup retention, see this.

-

Daily backups can be enabled after the initial backup is done. Enabling this also allows you to enable an option to update all containers, Nextcloud, and its apps automatically.

-

For further documentation and options on this backup solution refer to this section and below.

- - {% if isApacheStarting != true %} -

Backup creation

-

Clicking on the button below will create a backup.

-
- - - -
- - {% if has_backup_run_once == false %} -

Reset backup host location

-

If the configured backup host location {{ borg_backup_host_location }} is wrong, you can reset it by clicking on the button below.

-
- - - - -
- {% endif %} + {% if is_backup_container_running == false and isApacheStarting == false %} {% if has_backup_run_once == true %} -

Backup check

-

Click on the button below to perform a backup integrity check. This is an option that verifies that your backup is intact. It shouldn't be needed in most situations.

-
+
+ Click here to reveal all backup options (including an option for automatic updates) + {% endif %} +

Backup information

+

This is your encryption password for backups: {{ borgbackup_password }}

+

Please save this password in a safe place. You won't be able to restore from backup if you lose this password!

+

All important data from your Nextcloud AIO instance such as the database, your files and the mastercontainer's configuration files, will be backed up.

+

The backup uses a tool called BorgBackup, a well-known server backup tool that efficiently backs up your files and encrypts them on the fly.

+

By using this tool, backups are incremental, differential, compressed and encrypted – so only the first backup will take a while. Further backups should be fast as only changes are taken into account.

+

Backups will be created in the following directory on the host: {{ borg_backup_host_location }}/borg

+

Be aware that this solution does not backup files and folders that are mounted into Nextcloud using the external storage app, but you can add further Docker volumes and host paths that you want to back up after the initial backup is done.

+

For information about backup retention, see this.

+

Daily backups can be enabled after the initial backup is done. Enabling this also allows you to enable an option to update all containers, Nextcloud, and its apps automatically.

+

For further documentation and options on this backup solution refer to this section and below.

+ + {% if isApacheStarting != true %} +

Backup creation

+

Clicking on the button below will create a backup.

+ - + -

Backup restore

-

Choose the backup that you want to restore and click on the button below to restore the selected backup. This will overwrite all your files with the chosen backup so you should consider creating a backup first. You can run an integrity check before restoring your files but this shouldn't be needed in most situations. Please note that this will not restore additionally chosen backup directories! The restore process should be pretty fast as rsync, which only transfers changed files, is used to restore the chosen backup.

-
- - - - -
- -

Daily backup and automatic updates

- {% if daily_backup_time == "" %} -

By entering a time below, you can enable daily backups. It will create them at the entered time in 24h format. E.g. 04:00 will create backups at 4 am UTC and 16:00 at 4 pm UTC. When creating the backup, containers will be stopped and restarted after the backup is complete.

+ {% if has_backup_run_once == false %} +

Reset backup host location

+

If the configured backup host location {{ borg_backup_host_location }} is wrong, you can reset it by clicking on the button below.

- + -
-
- +
- {% else %} -

Daily backups will be created at {{ daily_backup_time }} UTC. A notification about the result of the backup will be sent.

- {% if automatic_updates == true %} - Also your containers, the mastercontainer and, on Saturdays, your Nextcloud apps will be automatically updated. + {% endif %} + + {% if has_backup_run_once == true %} +

Backup check

+

Click on the button below to perform a backup integrity check. This is an option that verifies that your backup is intact. It shouldn't be needed in most situations.

+
+ + + +
+ +

Backup restore

+

Choose the backup that you want to restore and click on the button below to restore the selected backup. This will overwrite all your files with the chosen backup so you should consider creating a backup first. You can run an integrity check before restoring your files but this shouldn't be needed in most situations. Please note that this will not restore additionally chosen backup directories! The restore process should be pretty fast as rsync, which only transfers changed files, is used to restore the chosen backup.

+
+ + + + +
+ +

Daily backup and automatic updates

+ {% if daily_backup_time == "" %} +

By entering a time below, you can enable daily backups. It will create them at the entered time in 24h format. E.g. 04:00 will create backups at 4 am UTC and 16:00 at 4 pm UTC. When creating the backup, containers will be stopped and restarted after the backup is complete.

+
+ + + +
+
+ +
+ {% else %} +

Daily backups will be created at {{ daily_backup_time }} UTC. A notification about the result of the backup will be sent.

+ {% if automatic_updates == true %} + Also your containers, the mastercontainer and, on Saturdays, your Nextcloud apps will be automatically updated. + {% endif %} +

To change your backup time first disable Daily Backups, then enter your new backup time, and then re-enable them.

+
+ + + + +
{% endif %} -

To change your backup time first disable Daily Backups, then enter your new backup time, and then re-enable them.

+ +

Back up additional directories and docker volumes of your host

+

Below you can enter directories and docker volumes of your host that will be backed up into the same borg backup archive.

- + - +
- {% endif %} - -

Back up additional directories and docker volumes of your host

-

Below you can enter directories and docker volumes of your host that will be backed up into the same borg backup archive.

-
- - - - -
-

Each line and entry needs to start with a slash or letter/digit. Only a-z, A-Z, ., 0-9, _, -, and / are allowed. If the entry begins with a letter/digit slashes are not supported. Two valid entries are /directory/on/the/host and my_custom_docker_volume. You need to make sure that all given directories exist or the backup container will fail to start!

-

Be sure to individually specify all storage that you want to back up as storage will not be mounted recursively. E.g. providing / as additional backup directory will only back up files and folders that are stored on the root partition and not on the EFI partition or any other. Excluded by the backup will be caches and a few other directories. If you want to back up the root partition you should make sure to stop all services before the backup so it can run correctly. For automating this see this documentation

-

Please note that the chosen directories/volumes will not be restored when you restore your instance, so this would need to be done manually.

- {% if additional_backup_directories != "" %} -

This option is currently set. You can disable it again by clearing the field and submitting your changes.

+

Each line and entry needs to start with a slash or letter/digit. Only a-z, A-Z, ., 0-9, _, -, and / are allowed. If the entry begins with a letter/digit slashes are not supported. Two valid entries are /directory/on/the/host and my_custom_docker_volume. You need to make sure that all given directories exist or the backup container will fail to start!

+

Be sure to individually specify all storage that you want to back up as storage will not be mounted recursively. E.g. providing / as additional backup directory will only back up files and folders that are stored on the root partition and not on the EFI partition or any other. Excluded by the backup will be caches and a few other directories. If you want to back up the root partition you should make sure to stop all services before the backup so it can run correctly. For automating this see this documentation

+

Please note that the chosen directories/volumes will not be restored when you restore your instance, so this would need to be done manually.

+ {% if additional_backup_directories != "" %} +

This option is currently set. You can disable it again by clearing the field and submitting your changes.

+ {% endif %} {% endif %} {% endif %} - {% endif %} - {% if has_backup_run_once == true %} -
+ {% if has_backup_run_once == true %} +
+ {% endif %} {% endif %} {% endif %} {% endif %} - {% endif %} - {% if is_backup_container_running == false %} - {% if isApacheStarting == false %} -

AIO passphrase change

-
- Click here to change your AIO passphrase -

You can change your AIO passphrase below:

-
- - - - - -
-

The new passphrase needs to be at least 24 characters long. Allowed characters are the latin characters a-z, A-Z, 0-9 and spaces.

-
+ {% if is_backup_container_running == false %} + {% if isApacheStarting == false %} +

AIO passphrase change

+
+ Click here to change your AIO passphrase +

You can change your AIO passphrase below:

+
+ + + + + +
+

The new passphrase needs to be at least 24 characters long. Allowed characters are the latin characters a-z, A-Z, 0-9 and spaces.

+
+ {% endif %} {% endif %} {% endif %} - {% endif %} - {% if is_backup_container_running == false %} -

Optional containers

-

In this section you can enable or disable optional containers. There are further community containers available that are not listed below. See this documentation how to add them.

- {% if isAnyRunning == true %} -

Please note: You can enable or disable the options below only when your containers are stopped.

- {% else %} -

Please note: Make sure to save your changes by clicking Save changes below the list of optional containers. The changes will not be auto-saved.

- {% endif %} -
- - - - {% if is_clamav_enabled == true %} -

- {% else %} -

- {% endif %} - {% if is_collabora_enabled == true %} -

- {% else %} -

- {% endif %} - {% if is_fulltextsearch_enabled == true %} -

- {% else %} -

- {% endif %} - {% if is_imaginary_enabled == true %} -

- {% else %} -

- {% endif %} - {% if is_talk_enabled == true %} -

- {% else %} -

- {% endif %} - {% if is_talk_recording_enabled == true %} -

- {% else %} -

- {% endif %} - {% if is_onlyoffice_enabled == true %} -

+ {% if is_backup_container_running == false %} +

Optional containers

+

In this section you can enable or disable optional containers. There are further community containers available that are not listed below. See this documentation how to add them.

+ {% if isAnyRunning == true %} +

Please note: You can enable or disable the options below only when your containers are stopped.

{% else %} - {#

#} +

Please note: Make sure to save your changes by clicking Save changes below the list of optional containers. The changes will not be auto-saved.

{% endif %} - {% if is_docker_socket_proxy_enabled == true %} -

- {% else %} -

+ + + + + {% if is_clamav_enabled == true %} +

+ {% else %} +

+ {% endif %} + {% if is_collabora_enabled == true %} +

+ {% else %} +

+ {% endif %} + {% if is_fulltextsearch_enabled == true %} +

+ {% else %} +

+ {% endif %} + {% if is_imaginary_enabled == true %} +

+ {% else %} +

+ {% endif %} + {% if is_talk_enabled == true %} +

+ {% else %} +

+ {% endif %} + {% if is_talk_recording_enabled == true %} +

+ {% else %} +

+ {% endif %} + {% if is_onlyoffice_enabled == true %} +

+ {% else %} + {#

#} + {% endif %} + {% if is_docker_socket_proxy_enabled == true %} +

+ {% else %} +

+ {% endif %} + {% if is_whiteboard_enabled == true %} +

+ {% else %} +

+ {% endif %} + + +
+

Minimal system requirements: When any optional container is enabled, at least 2GB RAM, a dual-core CPU and 40GB system storage are required. When enabling ClamAV, Nextcloud Talk Recording-server or Fulltextsearch, at least 3GB RAM are required. For Talk Recording-server additional 2 vCPUs are required. When enabling everything, at least 5GB RAM and a quad-core CPU are required. Recommended are at least 1GB more RAM than the minimal requirement. For further advices and recommendations see this documentation

+ {% if isAnyRunning == true or is_x64_platform == false %} + {% endif %} - {% if is_whiteboard_enabled == true %} -

- {% else %} -

+ {% if isAnyRunning == true %} + + + + + + + + {% endif %} - - - -

Minimal system requirements: When any optional container is enabled, at least 2GB RAM, a dual-core CPU and 40GB system storage are required. When enabling ClamAV, Nextcloud Talk Recording-server or Fulltextsearch, at least 3GB RAM are required. For Talk Recording-server additional 2 vCPUs are required. When enabling everything, at least 5GB RAM and a quad-core CPU are required. Recommended are at least 1GB more RAM than the minimal requirement. For further advices and recommendations see this documentation

- {% if isAnyRunning == true or is_x64_platform == false %} - - {% endif %} - {% if isAnyRunning == true %} - - - - - - - - - {% endif %} - {% if is_collabora_enabled == true and isAnyRunning == false and was_start_button_clicked == true %} -

Collabora dictionaries

+ {% if is_collabora_enabled == true and isAnyRunning == false and was_start_button_clicked == true %} +

Collabora dictionaries

- {% if collabora_dictionaries == "" %} -

In order to get the correct dictionaries in Collabora, you may configure the dictionaries below:

-
- - - - -
-

You need to make sure that the dictionaries that you enter are valid. An example is de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru.

- {% else %} -

The dictionaries for Collabora are currently set to {{ collabora_dictionaries }}. You can reset them again by clicking on the button below.

-
- - - - -
+ {% if collabora_dictionaries == "" %} +

In order to get the correct dictionaries in Collabora, you may configure the dictionaries below:

+
+ + + + +
+

You need to make sure that the dictionaries that you enter are valid. An example is de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru.

+ {% else %} +

The dictionaries for Collabora are currently set to {{ collabora_dictionaries }}. You can reset them again by clicking on the button below.

+
+ + + + +
+ {% endif %} {% endif %} - {% endif %} -

Timezone change

- {% if isAnyRunning == true %} - {% if timezone != "" %} -

The timezone for Nextcloud is currently set to {{ timezone }}.

- {% endif %} -

Please note: You can change the timezone when your containers are stopped.

- {% else %} - {% if timezone == "" %} -

To get the correct time values for certain Nextcloud features, set the timezone for Nextcloud to the one that your users mainly use. Please note that this setting does not apply to the mastercontainer and any backup option.

-

You can configure the timezone for Nextcloud below:

-
- - - - -
-

You need to make sure that the timezone that you enter is valid. An example is Europe/Berlin. You can get valid values by looking at the 'TZ identifier' column of this list: click here. The default is Etc/UTC if nothing is entered.

+

Timezone change

+ {% if isAnyRunning == true %} + {% if timezone != "" %} +

The timezone for Nextcloud is currently set to {{ timezone }}.

+ {% endif %} +

Please note: You can change the timezone when your containers are stopped.

{% else %} -

The timezone for Nextcloud is currently set to {{ timezone }}. You can change the timezone by clicking on the button below.

-
- - - - -
+ {% if timezone == "" %} +

To get the correct time values for certain Nextcloud features, set the timezone for Nextcloud to the one that your users mainly use. Please note that this setting does not apply to the mastercontainer and any backup option.

+

You can configure the timezone for Nextcloud below:

+
+ + + + +
+

You need to make sure that the timezone that you enter is valid. An example is Europe/Berlin. You can get valid values by looking at the 'TZ identifier' column of this list: click here. The default is Etc/UTC if nothing is entered.

+ {% else %} +

The timezone for Nextcloud is currently set to {{ timezone }}. You can change the timezone by clicking on the button below.

+
+ + + + +
+ {% endif %} {% endif %} {% endif %} {% endif %} {% endif %} - {% endif %} - {% if isApacheStarting == true or is_backup_container_running == true or isWatchtowerRunning == true or is_daily_backup_running == true %} - - {% else %} - - {% endif %} + {% if isApacheStarting == true or is_backup_container_running == true or isWatchtowerRunning == true or is_daily_backup_running == true %} + + {% else %} + + {% endif %} -
-
-
+
{% endblock %} diff --git a/php/templates/layout.twig b/php/templates/layout.twig index aefb495548df..cad5ae7ad215 100644 --- a/php/templates/layout.twig +++ b/php/templates/layout.twig @@ -1,12 +1,21 @@ AIO - + + +
{% block body %}{% endblock %} +
+
+
+
+ diff --git a/php/templates/login.twig b/php/templates/login.twig index 7240a7e24774..5478225fa8c0 100644 --- a/php/templates/login.twig +++ b/php/templates/login.twig @@ -1,28 +1,25 @@ -{% extends "layout.twig" %} - -{% block body %} -
-
- Nextcloud logo -

Nextcloud AIO Login

- {% if is_login_allowed == true %} -

Log in using your Nextcloud AIO passphrase:

-
- - - - - -
- {% else %} -

The login is blocked since Nextcloud is running.
Please use the automatic login from your Nextcloud.

- If that is not possible, you can unblock the login by running
sudo docker stop nextcloud-aio-apache

- {% endif %} -
-
- -
-
-
-{% endblock %} - +{% extends "layout.twig" %} + +{% block body %} +
+ +

Nextcloud AIO Login

+ {% if is_login_allowed == true %} +

Log in using your Nextcloud AIO passphrase:

+
+ + + + +
+ {% else %} +

The login is blocked since Nextcloud is running.
Please use the automatic login from your Nextcloud.

+ If that is not possible, you can unblock the login by running
sudo docker stop nextcloud-aio-apache

+ {% endif %} +
+ +{% endblock %} diff --git a/php/templates/setup.twig b/php/templates/setup.twig index 9f75fdf79652..91d7fbe3fdcd 100644 --- a/php/templates/setup.twig +++ b/php/templates/setup.twig @@ -1,14 +1,16 @@ {% extends "layout.twig" %} {% block body %} -
-
- Nextcloud logo -

All-in-One setup

-

The official Nextcloud installation method. Nextcloud All-in-One provides easy deployment and maintenance with most features included in this one Nextcloud instance.

-

⚠️ Please note down the passphrase to access the AIO interface and don't lose it!

- Passphrase
{{ password }}
- Open Nextcloud AIO login ↗ -
+
+ +

All-in-One setup

+

The official Nextcloud installation method. Nextcloud All-in-One provides easy deployment and maintenance with most features included in this one Nextcloud instance.

+

⚠️ Please note down the passphrase to access the AIO interface and don't lose it!

+ Passphrase
{{ password }}
+ Open Nextcloud AIO login ↗
-{% endblock %} +{% endblock %} \ No newline at end of file