mirror of
https://github.com/nextcloud/all-in-one.git
synced 2026-02-04 04:56:52 +00:00
Compare commits
115 commits
3dde66f2e3
...
beff7e6edb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
beff7e6edb | ||
|
|
0057de210a | ||
|
|
20d19a1612 | ||
|
|
9281d1f500 | ||
|
|
e89b89cd31 | ||
|
|
c732d736d2 | ||
|
|
8a1551df59 | ||
|
|
15794bc197 | ||
|
|
e9b90c4989 | ||
|
|
c04d615f42 | ||
|
|
7899ad4be4 | ||
|
|
919f8300e6 | ||
|
|
d370448f4e | ||
|
|
d252258e02 | ||
|
|
2a0ef686f0 | ||
|
|
68126f6af2 | ||
|
|
fb0c568925 | ||
|
|
915d2096f7 | ||
|
|
1db9400a99 | ||
|
|
ce47826db2 | ||
|
|
609666ff9a | ||
|
|
7192e0c4c3 | ||
|
|
271234c002 | ||
|
|
fb3f8172ca | ||
|
|
ec9b4b9b38 | ||
|
|
8f123478b0 | ||
|
|
7261438180 | ||
|
|
be961cedc3 | ||
|
|
4097d99939 | ||
|
|
65c253158c | ||
|
|
ebbba9744d | ||
|
|
6f772755bf | ||
|
|
d2c07bbbf7 | ||
|
|
d88871f52e | ||
|
|
6c991873db | ||
|
|
6ee312e7a8 | ||
|
|
ea5a6d983d | ||
|
|
44d5b7cd5e | ||
|
|
bb865b7dee | ||
|
|
3c5b3e5698 | ||
|
|
a7c35eda5a | ||
|
|
ead6ec088f | ||
|
|
a3a2a034c0 | ||
|
|
772fab9577 | ||
|
|
b6e429f1f3 | ||
|
|
e13c6083fe | ||
|
|
9df3a7b231 | ||
|
|
f030abcafd | ||
|
|
6df0333f71 | ||
|
|
4d246add8a | ||
|
|
7925935381 | ||
|
|
6767fcfc8a | ||
|
|
a58c41e750 | ||
|
|
52c981f49a | ||
|
|
d895e0d8e1 | ||
|
|
18e5141c15 | ||
|
|
2c7f32c4d4 | ||
|
|
1013cb02fd | ||
|
|
e4fe52f694 | ||
|
|
33fb191dfc | ||
|
|
af76dbaeeb | ||
|
|
419eede1c0 | ||
|
|
a1bb53a400 | ||
|
|
0c20e2b2f9 | ||
|
|
c608009981 | ||
|
|
68c508f281 | ||
|
|
8f02821866 | ||
|
|
1eadbe7e7e | ||
|
|
681ec13b8d | ||
|
|
85654218dd | ||
|
|
9be2c36a6b | ||
|
|
4b011369ae | ||
|
|
74443aaacc | ||
|
|
33614b276b | ||
|
|
034c6edea9 | ||
|
|
0e868c4570 | ||
|
|
e1718faf0b | ||
|
|
db07c79db1 | ||
|
|
664ca0b26d | ||
|
|
49c9669fe1 | ||
|
|
4d51f11282 | ||
|
|
c47ace7718 | ||
|
|
dd60066644 | ||
|
|
00688a52bd | ||
|
|
8fb3126ce7 | ||
|
|
a7c091a5b2 | ||
|
|
dc09422030 | ||
|
|
b9e35f01ba | ||
|
|
571e07996e | ||
|
|
9b1d468e24 | ||
|
|
2eaa288596 | ||
|
|
be54fa8805 | ||
|
|
f5a06034dd | ||
|
|
47dd8d25ca | ||
|
|
9e3acb9f68 | ||
|
|
3f581a11b3 | ||
|
|
8124554d90 | ||
|
|
74138dd838 | ||
|
|
52f8c97d45 | ||
|
|
10a3b8213f | ||
|
|
8eed705a90 | ||
|
|
f59b2776c7 | ||
|
|
708e542270 | ||
|
|
b12c36f675 | ||
|
|
2c968917eb | ||
|
|
3b3eea7ef0 | ||
|
|
fcdd000731 | ||
|
|
f58465f930 | ||
|
|
dbabfe14f0 | ||
|
|
c5b146f84c | ||
|
|
0e22f38d16 | ||
|
|
9822a63c44 | ||
|
|
4a65c04e3d | ||
|
|
59ad7dc98b | ||
|
|
cdd21ae1ff |
91 changed files with 823 additions and 1007 deletions
2
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
|
|
@ -37,5 +37,3 @@ labels: 0. Needs triage
|
|||
#### Output of `sudo docker ps -a`
|
||||
|
||||
#### Other valuable info <!--- (like additional logs, screenshots & Co.) -->
|
||||
|
||||
#### A picture of a cute animal <!--- (not mandatory but encouraged) -->
|
||||
|
|
|
|||
2
.github/workflows/codespell.yml
vendored
2
.github/workflows/codespell.yml
vendored
|
|
@ -12,7 +12,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v6.0.2
|
||||
- name: Check spelling
|
||||
uses: codespell-project/actions-codespell@8f01853be192eb0f849a5c7d721450e7a467c579 # v2
|
||||
with:
|
||||
|
|
|
|||
2
.github/workflows/collabora.yml
vendored
2
.github/workflows/collabora.yml
vendored
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
name: update collabora
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v6.0.2
|
||||
- name: Run collabora-profile-update
|
||||
run: |
|
||||
rm -f php/cool-seccomp-profile.json
|
||||
|
|
|
|||
2
.github/workflows/community-containers.yml
vendored
2
.github/workflows/community-containers.yml
vendored
|
|
@ -16,7 +16,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v6.0.2
|
||||
- name: Validate structure
|
||||
run: |
|
||||
CONTAINERS="$(find ./community-containers -mindepth 1 -maxdepth 1 -type d)"
|
||||
|
|
|
|||
2
.github/workflows/dependency-updates.yml
vendored
2
.github/workflows/dependency-updates.yml
vendored
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
name: Run dependency update script
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v6.0.2
|
||||
- uses: shivammathur/setup-php@7bf05c6b704e0b9bfee22300130a31b5ea68d593 # v2
|
||||
with:
|
||||
php-version: 8.4
|
||||
|
|
|
|||
2
.github/workflows/docker-lint.yml
vendored
2
.github/workflows/docker-lint.yml
vendored
|
|
@ -25,7 +25,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v6.0.2
|
||||
|
||||
- name: Install hadolint
|
||||
run: |
|
||||
|
|
|
|||
2
.github/workflows/helm-release.yml
vendored
2
.github/workflows/helm-release.yml
vendored
|
|
@ -13,7 +13,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v6.0.2
|
||||
|
||||
- name: Turnstyle
|
||||
uses: softprops/turnstyle@e565d2d86403c5d23533937e95980570545e5586 # v2
|
||||
|
|
|
|||
2
.github/workflows/imaginary-update.yml
vendored
2
.github/workflows/imaginary-update.yml
vendored
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
name: update to latest imaginary commit on master branch
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v6.0.2
|
||||
- name: Run imaginary-update
|
||||
run: |
|
||||
# Imaginary
|
||||
|
|
|
|||
2
.github/workflows/json-validator.yml
vendored
2
.github/workflows/json-validator.yml
vendored
|
|
@ -16,7 +16,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v6.0.2
|
||||
- name: Validate Json
|
||||
run: |
|
||||
sudo apt-get update
|
||||
|
|
|
|||
2
.github/workflows/lint-helm.yml
vendored
2
.github/workflows/lint-helm.yml
vendored
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v6.0.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
|
|
|||
2
.github/workflows/lint-php.yml
vendored
2
.github/workflows/lint-php.yml
vendored
|
|
@ -36,7 +36,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v5.0.1
|
||||
uses: actions/checkout@0c366fd6a839edf440554fa01a7085ccba70ac98 # v5.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
|
|
|||
2
.github/workflows/lint-yaml.yml
vendored
2
.github/workflows/lint-yaml.yml
vendored
|
|
@ -24,7 +24,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@0c366fd6a839edf440554fa01a7085ccba70ac98 # v6.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
|
|
|||
2
.github/workflows/nextcloud-update.yml
vendored
2
.github/workflows/nextcloud-update.yml
vendored
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
name: Run nextcloud-update script
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v6.0.2
|
||||
- name: Run nextcloud-update script
|
||||
run: |
|
||||
# Inspired by https://github.com/nextcloud/docker/blob/master/update.sh
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ jobs:
|
|||
name: PHP Deprecation Detector
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v6.0.2
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@7bf05c6b704e0b9bfee22300130a31b5ea68d593 # v2
|
||||
with:
|
||||
|
|
|
|||
2
.github/workflows/playwright-on-push.yml
vendored
2
.github/workflows/playwright-on-push.yml
vendored
|
|
@ -24,7 +24,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v6.0.2
|
||||
|
||||
- uses: actions/setup-node@v6
|
||||
with:
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v6.0.2
|
||||
|
||||
- uses: actions/setup-node@v6
|
||||
with:
|
||||
|
|
|
|||
2
.github/workflows/psalm-update-baseline.yml
vendored
2
.github/workflows/psalm-update-baseline.yml
vendored
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v6.0.2
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@7bf05c6b704e0b9bfee22300130a31b5ea68d593 # v2
|
||||
|
|
|
|||
2
.github/workflows/psalm.yml
vendored
2
.github/workflows/psalm.yml
vendored
|
|
@ -32,7 +32,7 @@ jobs:
|
|||
name: static-psalm-analysis
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v5.0.1
|
||||
uses: actions/checkout@0c366fd6a839edf440554fa01a7085ccba70ac98 # v5.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
|
|
|||
2
.github/workflows/shellcheck.yml
vendored
2
.github/workflows/shellcheck.yml
vendored
|
|
@ -15,7 +15,7 @@ jobs:
|
|||
name: Check Shell
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v6.0.2
|
||||
- name: Run Shellcheck
|
||||
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # v2.0.0
|
||||
with:
|
||||
|
|
|
|||
2
.github/workflows/talk.yml
vendored
2
.github/workflows/talk.yml
vendored
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
name: update talk
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v6.0.2
|
||||
- name: Run talk-container-update
|
||||
run: |
|
||||
# Recording
|
||||
|
|
|
|||
2
.github/workflows/twig-lint.yml
vendored
2
.github/workflows/twig-lint.yml
vendored
|
|
@ -24,7 +24,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v6.0.2
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@7bf05c6b704e0b9bfee22300130a31b5ea68d593 # v2
|
||||
|
|
|
|||
2
.github/workflows/update-copyright.yml
vendored
2
.github/workflows/update-copyright.yml
vendored
|
|
@ -8,4 +8,4 @@ jobs:
|
|||
name: update copyright
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v6.0.2
|
||||
|
|
|
|||
2
.github/workflows/update-helm.yml
vendored
2
.github/workflows/update-helm.yml
vendored
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v6.0.2
|
||||
- name: update helm chart
|
||||
run: |
|
||||
set -x
|
||||
|
|
|
|||
2
.github/workflows/update-yaml.yml
vendored
2
.github/workflows/update-yaml.yml
vendored
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6.0.1
|
||||
uses: actions/checkout@v6.0.2
|
||||
- name: update yaml files
|
||||
run: |
|
||||
sudo bash manual-install/update-yaml.sh
|
||||
|
|
|
|||
2
.github/workflows/watchtower-update.yml
vendored
2
.github/workflows/watchtower-update.yml
vendored
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
name: update watchtower
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6.0.1
|
||||
- uses: actions/checkout@v6.0.2
|
||||
- name: Run watchtower-container-update
|
||||
run: |
|
||||
# Watchtower
|
||||
|
|
|
|||
13
CODE_OF_CONDUCT.md
Normal file
13
CODE_OF_CONDUCT.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<!--
|
||||
- SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
In the Nextcloud community, participants from all over the world come together to create Free Software for a free internet. This is made possible by the support, hard work and enthusiasm of thousands of people, including those who create and use Nextcloud software.
|
||||
|
||||
Our code of conduct offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other.
|
||||
|
||||
The Code of Conduct is shared by all contributors and users who engage with the Nextcloud team and its community services. It presents a summary of the shared values and “common sense” thinking in our community.
|
||||
|
||||
You can find our full code of conduct on our website: https://nextcloud.com/code-of-conduct/
|
||||
|
||||
Please, keep our CoC in mind when you contribute! That way, everyone can be a part of our community in a productive, positive, creative and fun way.
|
||||
|
|
@ -88,4 +88,5 @@ CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
|
|||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -24,5 +24,6 @@ ENTRYPOINT ["/start.sh"]
|
|||
USER root
|
||||
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
ENV BORG_RETENTION_POLICY="--keep-within=7d --keep-weekly=4 --keep-monthly=6"
|
||||
|
|
|
|||
|
|
@ -33,5 +33,6 @@ VOLUME /var/lib/clamav
|
|||
ENTRYPOINT ["/start.sh"]
|
||||
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
HEALTHCHECK --start-period=60s --retries=9 CMD /healthcheck.sh
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ USER 1001
|
|||
|
||||
HEALTHCHECK --start-period=60s --retries=9 CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -11,4 +11,5 @@ USER 1001
|
|||
|
||||
HEALTHCHECK --start-period=60s --retries=9 CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -19,4 +19,5 @@ COPY --chmod=664 haproxy.cfg /haproxy.cfg
|
|||
ENTRYPOINT ["/start.sh"]
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -18,4 +18,5 @@ ENTRYPOINT ["/start.sh"]
|
|||
|
||||
HEALTHCHECK CMD nc -z 127.0.0.1 $APACHE_PORT || exit 1
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -22,5 +22,6 @@ USER 1000:0
|
|||
|
||||
HEALTHCHECK --interval=10s --timeout=5s --start-period=1m --retries=5 CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
ENV ES_JAVA_OPTS="-Xms512M -Xmx512M"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# syntax=docker/dockerfile:latest
|
||||
FROM golang:1.25.5-alpine3.23 AS go
|
||||
FROM golang:1.25.6-alpine3.23 AS go
|
||||
|
||||
ENV IMAGINARY_HASH=6a274b488759a896aff02f52afee6e50b5e3a3ee
|
||||
|
||||
|
|
@ -43,4 +43,5 @@ ENTRYPOINT ["/start.sh"]
|
|||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
# syntax=docker/dockerfile:latest
|
||||
# Docker CLI is a requirement
|
||||
FROM docker:29.1.4-cli AS docker
|
||||
FROM docker:29.1.5-cli AS docker
|
||||
|
||||
# Caddy is a requirement
|
||||
FROM caddy:2.10.2-alpine AS caddy
|
||||
|
||||
# From https://github.com/docker-library/php/blob/master/8.4/alpine3.23/fpm/Dockerfile
|
||||
FROM php:8.4.16-fpm-alpine3.23
|
||||
FROM php:8.4.17-fpm-alpine3.23
|
||||
|
||||
EXPOSE 80
|
||||
EXPOSE 8080
|
||||
|
|
@ -127,6 +127,7 @@ RUN set -ex; \
|
|||
|
||||
# hadolint ignore=DL3048
|
||||
LABEL org.label-schema.vendor="Nextcloud" \
|
||||
wud.watch="false" \
|
||||
com.docker.compose.project="nextcloud-aio"
|
||||
|
||||
# hadolint ignore=DL3002
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# syntax=docker/dockerfile:latest
|
||||
FROM php:8.3.29-fpm-alpine3.23
|
||||
FROM php:8.3.30-fpm-alpine3.23
|
||||
|
||||
ENV PHP_MEMORY_LIMIT=512M
|
||||
ENV PHP_UPLOAD_LIMIT=16G
|
||||
|
|
@ -8,7 +8,7 @@ ENV SOURCE_LOCATION=/usr/src/nextcloud
|
|||
ENV REDIS_DB_INDEX=0
|
||||
|
||||
# AIO settings start # Do not remove or change this line!
|
||||
ENV NEXTCLOUD_VERSION=32.0.4
|
||||
ENV NEXTCLOUD_VERSION=32.0.5
|
||||
ENV AIO_TOKEN=123456
|
||||
ENV AIO_URL=localhost
|
||||
# AIO settings end # Do not remove or change this line!
|
||||
|
|
@ -264,4 +264,5 @@ CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
|
|||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -894,9 +894,11 @@ if [ -d "/var/www/html/custom_apps/spreed" ]; then
|
|||
RECORDING_SERVERS_STRING="{\"servers\":[{\"server\":\"http://$TALK_RECORDING_HOST:1234/\",\"verify\":true}],\"secret\":\"$RECORDING_SECRET\"}"
|
||||
php /var/www/html/occ config:app:set spreed recording_servers --value="$RECORDING_SERVERS_STRING"
|
||||
else
|
||||
if [ "$REMOVE_DISABLED_APPS" = yes ]; then
|
||||
php /var/www/html/occ config:app:delete spreed recording_servers
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Clamav
|
||||
if [ "$CLAMAV_ENABLED" = 'yes' ]; then
|
||||
|
|
|
|||
|
|
@ -23,4 +23,5 @@ ENTRYPOINT ["/start.sh"]
|
|||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -8,4 +8,5 @@ COPY --chmod=775 healthcheck.sh /healthcheck.sh
|
|||
|
||||
HEALTHCHECK --start-period=60s --retries=9 CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -44,4 +44,5 @@ ENTRYPOINT ["/start.sh"]
|
|||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -21,4 +21,5 @@ ENTRYPOINT ["/start.sh"]
|
|||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -58,4 +58,5 @@ CMD ["python", "-m", "nextcloud.talk.recording", "--config", "/conf/recording.co
|
|||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -107,4 +107,5 @@ CMD ["supervisord", "-c", "/supervisord.conf"]
|
|||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
# syntax=docker/dockerfile:latest
|
||||
FROM golang:1.25.5-alpine3.23 AS go
|
||||
FROM golang:1.25.6-alpine3.23 AS go
|
||||
|
||||
ENV WATCHTOWER_COMMIT_HASH=f6a7b29c312bec5f389a4fb52259919f0678800b
|
||||
ENV WATCHTOWER_COMMIT_HASH=f522ce27e1fbe4618da54833025a95be62aa838a
|
||||
|
||||
RUN set -ex; \
|
||||
apk upgrade --no-cache -a; \
|
||||
apk add --no-cache \
|
||||
build-base; \
|
||||
go install github.com/nicholas-fedor/watchtower@$WATCHTOWER_COMMIT_HASH # v1.13.1
|
||||
go install github.com/nicholas-fedor/watchtower@$WATCHTOWER_COMMIT_HASH # v1.14.0
|
||||
|
||||
FROM alpine:3.23.2
|
||||
|
||||
|
|
@ -24,4 +24,5 @@ USER root
|
|||
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# syntax=docker/dockerfile:latest
|
||||
# Probably from this file: https://github.com/nextcloud/whiteboard/blob/main/Dockerfile
|
||||
FROM ghcr.io/nextcloud-releases/whiteboard:v1.5.1
|
||||
FROM ghcr.io/nextcloud-releases/whiteboard:v1.5.3
|
||||
|
||||
USER root
|
||||
RUN set -ex; \
|
||||
|
|
@ -23,4 +23,5 @@ WORKDIR /tmp
|
|||
ENTRYPOINT ["/start.sh"]
|
||||
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
wud.watch="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"aio_services_v1": [
|
||||
{
|
||||
"container_name": "nextcloud-aio-nocodb",
|
||||
"display_name": "NocoDB",
|
||||
"display_name": "NocoDB (deprecated)",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/nocodb",
|
||||
"image": "nocodb/nocodb",
|
||||
"image_tag": "latest",
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
> [!CAUTION]
|
||||
> NocoDB is licensed under a non-free license.
|
||||
>
|
||||
> And is no longer maintained.
|
||||
|
||||
> [!NOTE]
|
||||
> This container is there to compensate for the lack of functionality in Nextcloud Tables.
|
||||
>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
name: nextcloud-aio-helm-chart
|
||||
description: A generated Helm Chart for Nextcloud AIO from Skippbox Kompose
|
||||
version: 12.4.0
|
||||
version: 12.5.0
|
||||
apiVersion: v2
|
||||
keywords:
|
||||
- latest
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-apache
|
||||
name: nextcloud-aio-apache
|
||||
|
|
@ -17,7 +17,7 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-apache
|
||||
spec:
|
||||
|
|
@ -61,7 +61,7 @@ spec:
|
|||
value: "{{ .Values.TIMEZONE }}"
|
||||
- name: WHITEBOARD_HOST
|
||||
value: nextcloud-aio-whiteboard
|
||||
image: ghcr.io/nextcloud-releases/aio-apache:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-apache:20260122_105751
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-apache
|
||||
name: nextcloud-aio-apache
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-clamav
|
||||
name: nextcloud-aio-clamav
|
||||
|
|
@ -18,7 +18,7 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-clamav
|
||||
spec:
|
||||
|
|
@ -36,7 +36,7 @@ spec:
|
|||
{{- end }}
|
||||
initContainers:
|
||||
- name: init-subpath
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260122_105751
|
||||
command:
|
||||
- mkdir
|
||||
- "-p"
|
||||
|
|
@ -59,7 +59,7 @@ spec:
|
|||
value: "{{ .Values.NEXTCLOUD_UPLOAD_LIMIT }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: ghcr.io/nextcloud-releases/aio-clamav:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-clamav:20260122_105751
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-clamav
|
||||
name: nextcloud-aio-clamav
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-collabora
|
||||
name: nextcloud-aio-collabora
|
||||
|
|
@ -16,7 +16,7 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-collabora
|
||||
spec:
|
||||
|
|
@ -36,9 +36,9 @@ spec:
|
|||
- name: server_name
|
||||
value: "{{ .Values.NC_DOMAIN }}"
|
||||
{{- if contains "--o:support_key=" (join " " (.Values.ADDITIONAL_COLLABORA_OPTIONS | default list)) }}
|
||||
image: ghcr.io/nextcloud-releases/aio-collabora-online:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-collabora-online:20260122_105751
|
||||
{{- else }}
|
||||
image: ghcr.io/nextcloud-releases/aio-collabora:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-collabora:20260122_105751
|
||||
{{- end }}
|
||||
readinessProbe:
|
||||
exec:
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-collabora
|
||||
name: nextcloud-aio-collabora
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-database
|
||||
name: nextcloud-aio-database
|
||||
|
|
@ -17,7 +17,7 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-database
|
||||
spec:
|
||||
|
|
@ -35,7 +35,7 @@ spec:
|
|||
{{- end }}
|
||||
initContainers:
|
||||
- name: init-subpath
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260122_105751
|
||||
command:
|
||||
- mkdir
|
||||
- "-p"
|
||||
|
|
@ -64,7 +64,7 @@ spec:
|
|||
value: nextcloud
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: ghcr.io/nextcloud-releases/aio-postgresql:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-postgresql:20260122_105751
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-database
|
||||
name: nextcloud-aio-database
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-fulltextsearch
|
||||
name: nextcloud-aio-fulltextsearch
|
||||
|
|
@ -18,13 +18,13 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-fulltextsearch
|
||||
spec:
|
||||
initContainers:
|
||||
- name: init-volumes
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260122_105751
|
||||
command:
|
||||
- chmod
|
||||
- "777"
|
||||
|
|
@ -54,7 +54,7 @@ spec:
|
|||
value: basic
|
||||
- name: xpack.security.enabled
|
||||
value: "false"
|
||||
image: ghcr.io/nextcloud-releases/aio-fulltextsearch:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-fulltextsearch:20260122_105751
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-fulltextsearch
|
||||
name: nextcloud-aio-fulltextsearch
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-imaginary
|
||||
name: nextcloud-aio-imaginary
|
||||
|
|
@ -16,7 +16,7 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-imaginary
|
||||
spec:
|
||||
|
|
@ -38,7 +38,7 @@ spec:
|
|||
value: "{{ .Values.IMAGINARY_SECRET }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: ghcr.io/nextcloud-releases/aio-imaginary:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-imaginary:20260122_105751
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-imaginary
|
||||
name: nextcloud-aio-imaginary
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-nextcloud
|
||||
name: nextcloud-aio-nextcloud
|
||||
|
|
@ -17,7 +17,7 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-nextcloud
|
||||
spec:
|
||||
|
|
@ -38,7 +38,7 @@ spec:
|
|||
# AIO settings start # Do not remove or change this line!
|
||||
initContainers:
|
||||
- name: init-volumes
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260122_105751
|
||||
command:
|
||||
- chmod
|
||||
- "777"
|
||||
|
|
@ -190,7 +190,7 @@ spec:
|
|||
value: "{{ .Values.WHITEBOARD_ENABLED }}"
|
||||
- name: WHITEBOARD_SECRET
|
||||
value: "{{ .Values.WHITEBOARD_SECRET }}"
|
||||
image: ghcr.io/nextcloud-releases/aio-nextcloud:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-nextcloud:20260122_105751
|
||||
{{- if eq (.Values.RPSS_ENABLED | default "no") "yes" }} # AIO-config - do not change this comment!
|
||||
securityContext:
|
||||
# The items below only work in container context
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-nextcloud
|
||||
name: nextcloud-aio-nextcloud
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-notify-push
|
||||
name: nextcloud-aio-notify-push
|
||||
|
|
@ -17,7 +17,7 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-notify-push
|
||||
spec:
|
||||
|
|
@ -57,7 +57,7 @@ spec:
|
|||
value: "6379"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: ghcr.io/nextcloud-releases/aio-notify-push:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-notify-push:20260122_105751
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-notify-push
|
||||
name: nextcloud-aio-notify-push
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-onlyoffice
|
||||
name: nextcloud-aio-onlyoffice
|
||||
|
|
@ -18,13 +18,13 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-onlyoffice
|
||||
spec:
|
||||
initContainers:
|
||||
- name: init-volumes
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260122_105751
|
||||
command:
|
||||
- chmod
|
||||
- "777"
|
||||
|
|
@ -42,7 +42,7 @@ spec:
|
|||
value: "{{ .Values.ONLYOFFICE_SECRET }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: ghcr.io/nextcloud-releases/aio-onlyoffice:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-onlyoffice:20260122_105751
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-onlyoffice
|
||||
name: nextcloud-aio-onlyoffice
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-redis
|
||||
name: nextcloud-aio-redis
|
||||
|
|
@ -17,7 +17,7 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-redis
|
||||
spec:
|
||||
|
|
@ -39,7 +39,7 @@ spec:
|
|||
value: "{{ .Values.REDIS_PASSWORD }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: ghcr.io/nextcloud-releases/aio-redis:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-redis:20260122_105751
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-redis
|
||||
name: nextcloud-aio-redis
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-talk
|
||||
name: nextcloud-aio-talk
|
||||
|
|
@ -16,7 +16,7 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-talk
|
||||
spec:
|
||||
|
|
@ -52,7 +52,7 @@ spec:
|
|||
value: "{{ .Values.TURN_SECRET }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: ghcr.io/nextcloud-releases/aio-talk:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-talk:20260122_105751
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-talk-recording
|
||||
name: nextcloud-aio-talk-recording
|
||||
|
|
@ -18,7 +18,7 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-talk-recording
|
||||
spec:
|
||||
|
|
@ -44,7 +44,7 @@ spec:
|
|||
value: "{{ .Values.RECORDING_SECRET }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: ghcr.io/nextcloud-releases/aio-talk-recording:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-talk-recording:20260122_105751
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-talk-recording
|
||||
name: nextcloud-aio-talk-recording
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-talk
|
||||
name: nextcloud-aio-talk-public
|
||||
|
|
@ -27,7 +27,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-talk
|
||||
name: nextcloud-aio-talk
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: apps/v1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-whiteboard
|
||||
name: nextcloud-aio-whiteboard
|
||||
|
|
@ -16,7 +16,7 @@ spec:
|
|||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-whiteboard
|
||||
spec:
|
||||
|
|
@ -50,7 +50,7 @@ spec:
|
|||
value: redis
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: ghcr.io/nextcloud-releases/aio-whiteboard:20260114_114729
|
||||
image: ghcr.io/nextcloud-releases/aio-whiteboard:20260122_105751
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ apiVersion: v1
|
|||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.version: 1.37.0 (fb0539e64)
|
||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-whiteboard
|
||||
name: nextcloud-aio-whiteboard
|
||||
|
|
|
|||
|
|
@ -407,7 +407,7 @@ rm latest.yml
|
|||
mv latest.yml.backup latest.yml
|
||||
|
||||
# Get version of AIO
|
||||
AIO_VERSION="$(grep 'Nextcloud AIO ' ../php/templates/containers.twig | grep -oP '[0-9]+.[0-9]+.[0-9]+')"
|
||||
AIO_VERSION="$(grep 'Nextcloud AIO ' ../php/templates/includes/aio-version.twig | grep -oP '[0-9]+.[0-9]+.[0-9]+')"
|
||||
sed -i "s|^version:.*|version: $AIO_VERSION|" ../helm-chart/Chart.yaml
|
||||
|
||||
# Conversion of sample.conf
|
||||
|
|
|
|||
48
php/composer.lock
generated
48
php/composer.lock
generated
|
|
@ -3111,20 +3111,20 @@
|
|||
},
|
||||
{
|
||||
"name": "league/uri",
|
||||
"version": "7.7.0",
|
||||
"version": "7.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/uri.git",
|
||||
"reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807"
|
||||
"reference": "4436c6ec8d458e4244448b069cc572d088230b76"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/uri/zipball/8d587cddee53490f9b82bf203d3a9aa7ea4f9807",
|
||||
"reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807",
|
||||
"url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76",
|
||||
"reference": "4436c6ec8d458e4244448b069cc572d088230b76",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"league/uri-interfaces": "^7.7",
|
||||
"league/uri-interfaces": "^7.8",
|
||||
"php": "^8.1",
|
||||
"psr/http-factory": "^1"
|
||||
},
|
||||
|
|
@ -3138,11 +3138,11 @@
|
|||
"ext-gmp": "to improve IPV4 host parsing",
|
||||
"ext-intl": "to handle IDN host with the best performance",
|
||||
"ext-uri": "to use the PHP native URI class",
|
||||
"jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain",
|
||||
"league/uri-components": "Needed to easily manipulate URI objects components",
|
||||
"league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP",
|
||||
"jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain",
|
||||
"league/uri-components": "to provide additional tools to manipulate URI objects components",
|
||||
"league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP",
|
||||
"php-64bit": "to improve IPV4 host parsing",
|
||||
"rowbot/url": "to handle WHATWG URL",
|
||||
"rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
|
||||
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
|
||||
},
|
||||
"type": "library",
|
||||
|
|
@ -3197,7 +3197,7 @@
|
|||
"docs": "https://uri.thephpleague.com",
|
||||
"forum": "https://thephpleague.slack.com",
|
||||
"issues": "https://github.com/thephpleague/uri-src/issues",
|
||||
"source": "https://github.com/thephpleague/uri/tree/7.7.0"
|
||||
"source": "https://github.com/thephpleague/uri/tree/7.8.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -3205,20 +3205,20 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2025-12-07T16:02:06+00:00"
|
||||
"time": "2026-01-14T17:24:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/uri-interfaces",
|
||||
"version": "7.7.0",
|
||||
"version": "7.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/uri-interfaces.git",
|
||||
"reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c"
|
||||
"reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/62ccc1a0435e1c54e10ee6022df28d6c04c2946c",
|
||||
"reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c",
|
||||
"url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
|
||||
"reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -3231,7 +3231,7 @@
|
|||
"ext-gmp": "to improve IPV4 host parsing",
|
||||
"ext-intl": "to handle IDN host with the best performance",
|
||||
"php-64bit": "to improve IPV4 host parsing",
|
||||
"rowbot/url": "to handle WHATWG URL",
|
||||
"rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
|
||||
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
|
||||
},
|
||||
"type": "library",
|
||||
|
|
@ -3281,7 +3281,7 @@
|
|||
"docs": "https://uri.thephpleague.com",
|
||||
"forum": "https://thephpleague.slack.com",
|
||||
"issues": "https://github.com/thephpleague/uri-src/issues",
|
||||
"source": "https://github.com/thephpleague/uri-interfaces/tree/7.7.0"
|
||||
"source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -3289,7 +3289,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2025-12-07T16:03:21+00:00"
|
||||
"time": "2026-01-15T06:54:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "netresearch/jsonmapper",
|
||||
|
|
@ -3455,16 +3455,16 @@
|
|||
},
|
||||
{
|
||||
"name": "phpdocumentor/reflection-docblock",
|
||||
"version": "6.0.0",
|
||||
"version": "6.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
||||
"reference": "02600c041e7d0f4b7d1fe1d260565ec525472fa9"
|
||||
"reference": "2f5cbed597cb261d1ea458f3da3a9ad32e670b1e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/02600c041e7d0f4b7d1fe1d260565ec525472fa9",
|
||||
"reference": "02600c041e7d0f4b7d1fe1d260565ec525472fa9",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/2f5cbed597cb261d1ea458f3da3a9ad32e670b1e",
|
||||
"reference": "2f5cbed597cb261d1ea458f3da3a9ad32e670b1e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -3514,9 +3514,9 @@
|
|||
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
|
||||
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.0"
|
||||
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.1"
|
||||
},
|
||||
"time": "2026-01-07T20:22:53+00:00"
|
||||
"time": "2026-01-20T15:30:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpdocumentor/type-resolver",
|
||||
|
|
|
|||
3
php/get-configurable-aio-variables.sh
Executable file
3
php/get-configurable-aio-variables.sh
Executable file
|
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
awk '/^ public [^f][^u][^n]/ { sub(/\$/, "", $3); print $3 }' php/src/Data/ConfigurationManager.php | sort
|
||||
|
|
@ -20,5 +20,10 @@
|
|||
</extraFiles>
|
||||
<issueHandlers>
|
||||
<ClassMustBeFinal errorLevel="suppress" />
|
||||
<MissingConstructor>
|
||||
<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>. -->
|
||||
</errorLevel>
|
||||
</MissingConstructor>
|
||||
</issueHandlers>
|
||||
</psalm>
|
||||
|
|
|
|||
|
|
@ -91,10 +91,10 @@ $app->get('/containers', function (Request $request, Response $response, array $
|
|||
$skip_domain_validation = isset($params['skip_domain_validation']);
|
||||
|
||||
return $view->render($response, 'containers.twig', [
|
||||
'domain' => $configurationManager->GetDomain(),
|
||||
'apache_port' => $configurationManager->GetApachePort(),
|
||||
'borg_backup_host_location' => $configurationManager->GetBorgBackupHostLocation(),
|
||||
'borg_remote_repo' => $configurationManager->GetBorgRemoteRepo(),
|
||||
'domain' => $configurationManager->domain,
|
||||
'apache_port' => $configurationManager->apachePort,
|
||||
'borg_backup_host_location' => $configurationManager->borgBackupHostLocation,
|
||||
'borg_remote_repo' => $configurationManager->borgRemoteRepo,
|
||||
'borg_public_key' => $configurationManager->GetBorgPublicKey(),
|
||||
'nextcloud_password' => $configurationManager->GetAndGenerateSecret('NEXTCLOUD_PASSWORD'),
|
||||
'containers' => (new \AIO\ContainerDefinitionFetcher($container->get(\AIO\Data\ConfigurationManager::class), $container))->FetchDefinition(),
|
||||
|
|
@ -103,42 +103,42 @@ $app->get('/containers', function (Request $request, Response $response, array $
|
|||
'has_backup_run_once' => $configurationManager->hasBackupRunOnce(),
|
||||
'is_backup_container_running' => $dockerActionManager->isBackupContainerRunning(),
|
||||
'backup_exit_code' => $dockerActionManager->GetBackupcontainerExitCode(),
|
||||
'is_instance_restore_attempt' => $configurationManager->isInstanceRestoreAttempt(),
|
||||
'borg_backup_mode' => $configurationManager->GetBackupMode(),
|
||||
'was_start_button_clicked' => $configurationManager->wasStartButtonClicked(),
|
||||
'is_instance_restore_attempt' => $configurationManager->instanceRestoreAttempt,
|
||||
'borg_backup_mode' => $configurationManager->backupMode,
|
||||
'was_start_button_clicked' => $configurationManager->wasStartButtonClicked,
|
||||
'has_update_available' => $dockerActionManager->isAnyUpdateAvailable(),
|
||||
'last_backup_time' => $configurationManager->GetLastBackupTime(),
|
||||
'backup_times' => $configurationManager->GetBackupTimes(),
|
||||
'current_channel' => $dockerActionManager->GetCurrentChannel(),
|
||||
'is_clamav_enabled' => $configurationManager->isClamavEnabled(),
|
||||
'is_onlyoffice_enabled' => $configurationManager->isOnlyofficeEnabled(),
|
||||
'is_collabora_enabled' => $configurationManager->isCollaboraEnabled(),
|
||||
'is_talk_enabled' => $configurationManager->isTalkEnabled(),
|
||||
'borg_restore_password' => $configurationManager->GetBorgRestorePassword(),
|
||||
'is_clamav_enabled' => $configurationManager->isClamavEnabled,
|
||||
'is_onlyoffice_enabled' => $configurationManager->isOnlyofficeEnabled,
|
||||
'is_collabora_enabled' => $configurationManager->isCollaboraEnabled,
|
||||
'is_talk_enabled' => $configurationManager->isTalkEnabled,
|
||||
'borg_restore_password' => $configurationManager->borgRestorePassword,
|
||||
'daily_backup_time' => $configurationManager->GetDailyBackupTime(),
|
||||
'is_daily_backup_running' => $configurationManager->isDailyBackupRunning(),
|
||||
'timezone' => $configurationManager->GetTimezone(),
|
||||
'timezone' => $configurationManager->timezone,
|
||||
'skip_domain_validation' => $configurationManager->shouldDomainValidationBeSkipped($skip_domain_validation),
|
||||
'talk_port' => $configurationManager->GetTalkPort(),
|
||||
'collabora_dictionaries' => $configurationManager->GetCollaboraDictionaries(),
|
||||
'collabora_additional_options' => $configurationManager->GetAdditionalCollaboraOptions(),
|
||||
'talk_port' => $configurationManager->talkPort,
|
||||
'collabora_dictionaries' => $configurationManager->collaboraDictionaries,
|
||||
'collabora_additional_options' => $configurationManager->collaboraAdditionalOptions,
|
||||
'automatic_updates' => $configurationManager->areAutomaticUpdatesEnabled(),
|
||||
'is_backup_section_enabled' => $configurationManager->isBackupSectionEnabled(),
|
||||
'is_imaginary_enabled' => $configurationManager->isImaginaryEnabled(),
|
||||
'is_fulltextsearch_enabled' => $configurationManager->isFulltextsearchEnabled(),
|
||||
'is_imaginary_enabled' => $configurationManager->isImaginaryEnabled,
|
||||
'is_fulltextsearch_enabled' => $configurationManager->isFulltextsearchEnabled,
|
||||
'additional_backup_directories' => $configurationManager->GetAdditionalBackupDirectoriesString(),
|
||||
'nextcloud_datadir' => $configurationManager->GetNextcloudDatadirMount(),
|
||||
'nextcloud_mount' => $configurationManager->GetNextcloudMount(),
|
||||
'nextcloud_upload_limit' => $configurationManager->GetNextcloudUploadLimit(),
|
||||
'nextcloud_max_time' => $configurationManager->GetNextcloudMaxTime(),
|
||||
'nextcloud_memory_limit' => $configurationManager->GetNextcloudMemoryLimit(),
|
||||
'nextcloud_datadir' => $configurationManager->nextcloudDatadirMount,
|
||||
'nextcloud_mount' => $configurationManager->nextcloudMount,
|
||||
'nextcloud_upload_limit' => $configurationManager->nextcloudUploadLimit,
|
||||
'nextcloud_max_time' => $configurationManager->nextcloudMaxTime,
|
||||
'nextcloud_memory_limit' => $configurationManager->nextcloudMemoryLimit,
|
||||
'is_dri_device_enabled' => $configurationManager->isDriDeviceEnabled(),
|
||||
'is_nvidia_gpu_enabled' => $configurationManager->isNvidiaGpuEnabled(),
|
||||
'is_talk_recording_enabled' => $configurationManager->isTalkRecordingEnabled(),
|
||||
'is_docker_socket_proxy_enabled' => $configurationManager->isDockerSocketProxyEnabled(),
|
||||
'is_whiteboard_enabled' => $configurationManager->isWhiteboardEnabled(),
|
||||
'is_talk_recording_enabled' => $configurationManager->isTalkRecordingEnabled,
|
||||
'is_docker_socket_proxy_enabled' => $configurationManager->isDockerSocketProxyEnabled,
|
||||
'is_whiteboard_enabled' => $configurationManager->isWhiteboardEnabled,
|
||||
'community_containers' => $configurationManager->listAvailableCommunityContainers(),
|
||||
'community_containers_enabled' => $configurationManager->GetEnabledCommunityContainers(),
|
||||
'community_containers_enabled' => $configurationManager->aioCommunityContainers,
|
||||
'bypass_container_update' => $bypass_container_update,
|
||||
]);
|
||||
})->setName('profile');
|
||||
|
|
|
|||
|
|
@ -15,11 +15,11 @@ readonly class AuthManager {
|
|||
}
|
||||
|
||||
public function CheckCredentials(string $password) : bool {
|
||||
return hash_equals($this->configurationManager->GetPassword(), $password);
|
||||
return hash_equals($this->configurationManager->password, $password);
|
||||
}
|
||||
|
||||
public function CheckToken(string $token) : bool {
|
||||
return hash_equals($this->configurationManager->GetToken(), $token);
|
||||
return hash_equals($this->configurationManager->aioToken, $token);
|
||||
}
|
||||
|
||||
public function SetAuthState(bool $isLoggedIn) : void {
|
||||
|
|
|
|||
|
|
@ -5,121 +5,56 @@ namespace AIO\Container;
|
|||
use AIO\Data\ConfigurationManager;
|
||||
use AIO\Docker\DockerActionManager;
|
||||
use AIO\ContainerDefinitionFetcher;
|
||||
use JsonException;
|
||||
|
||||
readonly class Container {
|
||||
public function __construct(
|
||||
private string $identifier,
|
||||
private string $displayName,
|
||||
private string $containerName,
|
||||
private string $restartPolicy,
|
||||
private int $maxShutdownTime,
|
||||
private ContainerPorts $ports,
|
||||
private string $internalPorts,
|
||||
private ContainerVolumes $volumes,
|
||||
private ContainerEnvironmentVariables $containerEnvironmentVariables,
|
||||
public string $identifier,
|
||||
public string $displayName,
|
||||
public string $containerName,
|
||||
public string $restartPolicy,
|
||||
public int $maxShutdownTime,
|
||||
public ContainerPorts $ports,
|
||||
public string $internalPorts,
|
||||
public ContainerVolumes $volumes,
|
||||
public ContainerEnvironmentVariables $containerEnvironmentVariables,
|
||||
/** @var string[] */
|
||||
private array $dependsOn,
|
||||
public array $dependsOn,
|
||||
private string $uiSecret,
|
||||
/** @var string[] */
|
||||
private array $devices,
|
||||
private bool $enableNvidiaGpu,
|
||||
public array $devices,
|
||||
public bool $enableNvidiaGpu,
|
||||
/** @var string[] */
|
||||
private array $capAdd,
|
||||
private int $shmSize,
|
||||
private bool $apparmorUnconfined,
|
||||
public array $capAdd,
|
||||
public int $shmSize,
|
||||
public bool $apparmorUnconfined,
|
||||
/** @var string[] */
|
||||
private array $backupVolumes,
|
||||
private array $nextcloudExecCommands,
|
||||
private bool $readOnlyRootFs,
|
||||
private array $tmpfs,
|
||||
private bool $init,
|
||||
private string $imageTag,
|
||||
private AioVariables $aioVariables,
|
||||
private string $documentation,
|
||||
public array $backupVolumes,
|
||||
public array $nextcloudExecCommands,
|
||||
public bool $readOnlyRootFs,
|
||||
public array $tmpfs,
|
||||
public bool $init,
|
||||
public string $imageTag,
|
||||
public AioVariables $aioVariables,
|
||||
public string $documentation,
|
||||
private DockerActionManager $dockerActionManager
|
||||
) {
|
||||
}
|
||||
|
||||
public function GetIdentifier() : string {
|
||||
return $this->identifier;
|
||||
}
|
||||
|
||||
public function GetDisplayName() : string {
|
||||
return $this->displayName;
|
||||
}
|
||||
|
||||
public function GetContainerName() : string {
|
||||
return $this->containerName;
|
||||
}
|
||||
|
||||
public function GetRestartPolicy() : string {
|
||||
return $this->restartPolicy;
|
||||
}
|
||||
|
||||
public function GetImageTag() : string {
|
||||
return $this->imageTag;
|
||||
}
|
||||
|
||||
public function GetReadOnlySetting() : bool {
|
||||
return $this->readOnlyRootFs;
|
||||
}
|
||||
|
||||
public function GetInit() : bool {
|
||||
return $this->init;
|
||||
}
|
||||
|
||||
public function GetShmSize() : int {
|
||||
return $this->shmSize;
|
||||
}
|
||||
|
||||
public function isApparmorUnconfined() : bool {
|
||||
return $this->apparmorUnconfined;
|
||||
}
|
||||
|
||||
public function GetMaxShutdownTime() : int {
|
||||
return $this->maxShutdownTime;
|
||||
}
|
||||
|
||||
public function GetUiSecret() : string {
|
||||
return $this->dockerActionManager->GetAndGenerateSecretWrapper($this->uiSecret);
|
||||
}
|
||||
|
||||
public function GetTmpfs() : array {
|
||||
return $this->tmpfs;
|
||||
}
|
||||
|
||||
public function GetDevices() : array {
|
||||
return $this->devices;
|
||||
}
|
||||
|
||||
public function isNvidiaGpuEnabled() : bool {
|
||||
return $this->enableNvidiaGpu;
|
||||
}
|
||||
|
||||
public function GetCapAdds() : array {
|
||||
return $this->capAdd;
|
||||
}
|
||||
|
||||
public function GetBackupVolumes() : array {
|
||||
return $this->backupVolumes;
|
||||
}
|
||||
|
||||
public function GetPorts() : ContainerPorts {
|
||||
return $this->ports;
|
||||
}
|
||||
|
||||
public function GetInternalPort() : string {
|
||||
return $this->internalPorts;
|
||||
}
|
||||
|
||||
public function GetVolumes() : ContainerVolumes {
|
||||
return $this->volumes;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws JsonException
|
||||
*/
|
||||
public function GetRunningState() : ContainerState {
|
||||
return $this->dockerActionManager->GetContainerRunningState($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws JsonException
|
||||
*/
|
||||
public function GetRestartingState() : ContainerState {
|
||||
return $this->dockerActionManager->GetContainerRestartingState($this);
|
||||
}
|
||||
|
|
@ -131,27 +66,4 @@ readonly class Container {
|
|||
public function GetStartingState() : ContainerState {
|
||||
return $this->dockerActionManager->GetContainerStartingState($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function GetDependsOn() : array {
|
||||
return $this->dependsOn;
|
||||
}
|
||||
|
||||
public function GetNextcloudExecCommands() : array {
|
||||
return $this->nextcloudExecCommands;
|
||||
}
|
||||
|
||||
public function GetEnvironmentVariables() : ContainerEnvironmentVariables {
|
||||
return $this->containerEnvironmentVariables;
|
||||
}
|
||||
|
||||
public function GetAioVariables() : AioVariables {
|
||||
return $this->aioVariables;
|
||||
}
|
||||
|
||||
public function GetDocumentation() : string {
|
||||
return $this->documentation;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ readonly class ContainerDefinitionFetcher {
|
|||
$containers = $this->FetchDefinition();
|
||||
|
||||
foreach ($containers as $container) {
|
||||
if ($container->GetIdentifier() === $id) {
|
||||
if ($container->identifier === $id) {
|
||||
return $container;
|
||||
}
|
||||
}
|
||||
|
|
@ -41,7 +41,7 @@ readonly class ContainerDefinitionFetcher {
|
|||
$data = json_decode((string)file_get_contents(DataConst::GetContainersDefinitionPath()), true, 512, JSON_THROW_ON_ERROR);
|
||||
|
||||
$additionalContainerNames = [];
|
||||
foreach ($this->configurationManager->GetEnabledCommunityContainers() as $communityContainer) {
|
||||
foreach ($this->configurationManager->aioCommunityContainers as $communityContainer) {
|
||||
if ($communityContainer !== '') {
|
||||
$path = DataConst::GetCommunityContainersDirectory() . '/' . $communityContainer . '/' . $communityContainer . '.json';
|
||||
$additionalData = json_decode((string)file_get_contents($path), true, 512, JSON_THROW_ON_ERROR);
|
||||
|
|
@ -56,42 +56,42 @@ readonly class ContainerDefinitionFetcher {
|
|||
$containers = [];
|
||||
foreach ($data['aio_services_v1'] as $entry) {
|
||||
if ($entry['container_name'] === 'nextcloud-aio-clamav') {
|
||||
if (!$this->configurationManager->isClamavEnabled()) {
|
||||
if (!$this->configurationManager->isClamavEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-onlyoffice') {
|
||||
if (!$this->configurationManager->isOnlyofficeEnabled()) {
|
||||
if (!$this->configurationManager->isOnlyofficeEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-collabora') {
|
||||
if (!$this->configurationManager->isCollaboraEnabled()) {
|
||||
if (!$this->configurationManager->isCollaboraEnabled) {
|
||||
continue;
|
||||
}
|
||||
if ($this->configurationManager->isCollaboraSubscriptionEnabled()) {
|
||||
$entry['image'] = 'ghcr.io/nextcloud-releases/aio-collabora-online';
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-talk') {
|
||||
if (!$this->configurationManager->isTalkEnabled()) {
|
||||
if (!$this->configurationManager->isTalkEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-talk-recording') {
|
||||
if (!$this->configurationManager->isTalkRecordingEnabled()) {
|
||||
if (!$this->configurationManager->isTalkRecordingEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-imaginary') {
|
||||
if (!$this->configurationManager->isImaginaryEnabled()) {
|
||||
if (!$this->configurationManager->isImaginaryEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-fulltextsearch') {
|
||||
if (!$this->configurationManager->isFulltextsearchEnabled()) {
|
||||
if (!$this->configurationManager->isFulltextsearchEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-docker-socket-proxy') {
|
||||
if (!$this->configurationManager->isDockerSocketProxyEnabled()) {
|
||||
if (!$this->configurationManager->isDockerSocketProxyEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-whiteboard') {
|
||||
if (!$this->configurationManager->isWhiteboardEnabled()) {
|
||||
if (!$this->configurationManager->isWhiteboardEnabled) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
@ -113,18 +113,18 @@ readonly class ContainerDefinitionFetcher {
|
|||
if (isset($entry['volumes'])) {
|
||||
foreach ($entry['volumes'] as $value) {
|
||||
if($value['source'] === '%BORGBACKUP_HOST_LOCATION%') {
|
||||
$value['source'] = $this->configurationManager->GetBorgBackupHostLocation();
|
||||
$value['source'] = $this->configurationManager->borgBackupHostLocation;
|
||||
if($value['source'] === '') {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if($value['source'] === '%NEXTCLOUD_MOUNT%') {
|
||||
$value['source'] = $this->configurationManager->GetNextcloudMount();
|
||||
$value['source'] = $this->configurationManager->nextcloudMount;
|
||||
if($value['source'] === '') {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value['source'] === '%NEXTCLOUD_DATADIR%') {
|
||||
$value['source'] = $this->configurationManager->GetNextcloudDatadirMount();
|
||||
$value['source'] = $this->configurationManager->nextcloudDatadirMount;
|
||||
if ($value['source'] === '') {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -140,7 +140,7 @@ readonly class ContainerDefinitionFetcher {
|
|||
}
|
||||
}
|
||||
if ($value['destination'] === '%NEXTCLOUD_MOUNT%') {
|
||||
$value['destination'] = $this->configurationManager->GetNextcloudMount();
|
||||
$value['destination'] = $this->configurationManager->nextcloudMount;
|
||||
if($value['destination'] === '') {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -168,39 +168,39 @@ readonly class ContainerDefinitionFetcher {
|
|||
}
|
||||
foreach ($valueDependsOn as $value) {
|
||||
if ($value === 'nextcloud-aio-clamav') {
|
||||
if (!$this->configurationManager->isClamavEnabled()) {
|
||||
if (!$this->configurationManager->isClamavEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-onlyoffice') {
|
||||
if (!$this->configurationManager->isOnlyofficeEnabled()) {
|
||||
if (!$this->configurationManager->isOnlyofficeEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-collabora') {
|
||||
if (!$this->configurationManager->isCollaboraEnabled()) {
|
||||
if (!$this->configurationManager->isCollaboraEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-talk') {
|
||||
if (!$this->configurationManager->isTalkEnabled()) {
|
||||
if (!$this->configurationManager->isTalkEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-talk-recording') {
|
||||
if (!$this->configurationManager->isTalkRecordingEnabled()) {
|
||||
if (!$this->configurationManager->isTalkRecordingEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-imaginary') {
|
||||
if (!$this->configurationManager->isImaginaryEnabled()) {
|
||||
if (!$this->configurationManager->isImaginaryEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-fulltextsearch') {
|
||||
if (!$this->configurationManager->isFulltextsearchEnabled()) {
|
||||
if (!$this->configurationManager->isFulltextsearchEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-docker-socket-proxy') {
|
||||
if (!$this->configurationManager->isDockerSocketProxyEnabled()) {
|
||||
if (!$this->configurationManager->isDockerSocketProxyEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-whiteboard') {
|
||||
if (!$this->configurationManager->isWhiteboardEnabled()) {
|
||||
if (!$this->configurationManager->isWhiteboardEnabled) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,63 +67,27 @@ readonly class ConfigurationController {
|
|||
}
|
||||
|
||||
if (isset($request->getParsedBody()['delete_timezone'])) {
|
||||
$this->configurationManager->DeleteTimezone();
|
||||
$this->configurationManager->deleteTimezone();
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['timezone'])) {
|
||||
$timezone = $request->getParsedBody()['timezone'] ?? '';
|
||||
$this->configurationManager->SetTimezone($timezone);
|
||||
$this->configurationManager->timezone = $timezone;
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['options-form'])) {
|
||||
if (isset($request->getParsedBody()['collabora']) && isset($request->getParsedBody()['onlyoffice'])) {
|
||||
throw new InvalidSettingConfigurationException("Collabora and Onlyoffice are not allowed to be enabled at the same time!");
|
||||
}
|
||||
if (isset($request->getParsedBody()['clamav'])) {
|
||||
$this->configurationManager->SetClamavEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetClamavEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['onlyoffice'])) {
|
||||
$this->configurationManager->SetOnlyofficeEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetOnlyofficeEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['collabora'])) {
|
||||
$this->configurationManager->SetCollaboraEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetCollaboraEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['talk'])) {
|
||||
$this->configurationManager->SetTalkEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetTalkEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['talk-recording'])) {
|
||||
$this->configurationManager->SetTalkRecordingEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetTalkRecordingEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['imaginary'])) {
|
||||
$this->configurationManager->SetImaginaryEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetImaginaryEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['fulltextsearch'])) {
|
||||
$this->configurationManager->SetFulltextsearchEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetFulltextsearchEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['docker-socket-proxy'])) {
|
||||
$this->configurationManager->SetDockerSocketProxyEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetDockerSocketProxyEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['whiteboard'])) {
|
||||
$this->configurationManager->SetWhiteboardEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetWhiteboardEnabledState(0);
|
||||
}
|
||||
$this->configurationManager->isClamavEnabled = isset($request->getParsedBody()['clamav']);
|
||||
$this->configurationManager->isOnlyofficeEnabled = isset($request->getParsedBody()['onlyoffice']);
|
||||
$this->configurationManager->isCollaboraEnabled = isset($request->getParsedBody()['collabora']);
|
||||
$this->configurationManager->isTalkEnabled = isset($request->getParsedBody()['talk']);
|
||||
$this->configurationManager->isTalkRecordingEnabled = isset($request->getParsedBody()['talk-recording']);
|
||||
$this->configurationManager->isImaginaryEnabled = isset($request->getParsedBody()['imaginary']);
|
||||
$this->configurationManager->isFulltextsearchEnabled = isset($request->getParsedBody()['fulltextsearch']);
|
||||
$this->configurationManager->isDockerSocketProxyEnabled = isset($request->getParsedBody()['docker-socket-proxy']);
|
||||
$this->configurationManager->isWhiteboardEnabled = isset($request->getParsedBody()['whiteboard']);
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['community-form'])) {
|
||||
|
|
@ -137,7 +101,7 @@ readonly class ConfigurationController {
|
|||
$enabledCC[] = $item;
|
||||
}
|
||||
}
|
||||
$this->configurationManager->SetEnabledCommunityContainers($enabledCC);
|
||||
$this->configurationManager->aioCommunityContainers = $enabledCC;
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['delete_collabora_dictionaries'])) {
|
||||
|
|
@ -146,16 +110,16 @@ readonly class ConfigurationController {
|
|||
|
||||
if (isset($request->getParsedBody()['collabora_dictionaries'])) {
|
||||
$collaboraDictionaries = $request->getParsedBody()['collabora_dictionaries'] ?? '';
|
||||
$this->configurationManager->SetCollaboraDictionaries($collaboraDictionaries);
|
||||
$this->configurationManager->collaboraDictionaries = $collaboraDictionaries;
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['delete_collabora_additional_options'])) {
|
||||
$this->configurationManager->DeleteAdditionalCollaboraOptions();
|
||||
$this->configurationManager->deleteAdditionalCollaboraOptions();
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['collabora_additional_options'])) {
|
||||
$additionalCollaboraOptions = $request->getParsedBody()['collabora_additional_options'] ?? '';
|
||||
$this->configurationManager->SetAdditionalCollaboraOptions($additionalCollaboraOptions);
|
||||
$this->configurationManager->collaboraAdditionalOptions = $additionalCollaboraOptions;
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['delete_borg_backup_location_vars'])) {
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ readonly class DockerController {
|
|||
$container = $this->containerDefinitionFetcher->GetContainerById($id);
|
||||
|
||||
// Start all dependencies first and then itself
|
||||
foreach($container->GetDependsOn() as $dependency) {
|
||||
foreach($container->dependsOn as $dependency) {
|
||||
$this->PerformRecursiveContainerStart($dependency, $pullImage);
|
||||
}
|
||||
|
||||
|
|
@ -46,7 +46,7 @@ readonly class DockerController {
|
|||
$container = $this->containerDefinitionFetcher->GetContainerById($id);
|
||||
|
||||
// Pull all dependencies first and then itself
|
||||
foreach($container->GetDependsOn() as $dependency) {
|
||||
foreach($container->dependsOn as $dependency) {
|
||||
$this->PerformRecursiveImagePull($dependency);
|
||||
}
|
||||
|
||||
|
|
@ -89,7 +89,7 @@ readonly class DockerController {
|
|||
}
|
||||
|
||||
public function startBackup(bool $forceStopNextcloud = false) : void {
|
||||
$this->configurationManager->SetBackupMode('backup');
|
||||
$this->configurationManager->backupMode = 'backup';
|
||||
|
||||
$id = self::TOP_CONTAINER;
|
||||
$this->PerformRecursiveContainerStop($id, $forceStopNextcloud);
|
||||
|
|
@ -109,29 +109,25 @@ readonly class DockerController {
|
|||
}
|
||||
|
||||
public function checkBackup() : void {
|
||||
$this->configurationManager->SetBackupMode('check');
|
||||
$this->configurationManager->backupMode = 'check';
|
||||
|
||||
$id = 'nextcloud-aio-borgbackup';
|
||||
$this->PerformRecursiveContainerStart($id);
|
||||
}
|
||||
|
||||
private function listBackup() : void {
|
||||
$this->configurationManager->SetBackupMode('list');
|
||||
$this->configurationManager->backupMode = 'list';
|
||||
|
||||
$id = 'nextcloud-aio-borgbackup';
|
||||
$this->PerformRecursiveContainerStart($id);
|
||||
}
|
||||
|
||||
public function StartBackupContainerRestore(Request $request, Response $response, array $args) : Response {
|
||||
$this->configurationManager->SetBackupMode('restore');
|
||||
$config = $this->configurationManager->GetConfig();
|
||||
$config['selected-restore-time'] = $request->getParsedBody()['selected_restore_time'] ?? '';
|
||||
if (isset($request->getParsedBody()['restore-exclude-previews'])) {
|
||||
$config['restore-exclude-previews'] = 1;
|
||||
} else {
|
||||
$config['restore-exclude-previews'] = '';
|
||||
}
|
||||
$this->configurationManager->WriteConfig($config);
|
||||
$this->configurationManager->startTransaction();
|
||||
$this->configurationManager->backupMode = 'restore';
|
||||
$this->configurationManager->selectedRestoreTime = $request->getParsedBody()['selected_restore_time'] ?? '';
|
||||
$this->configurationManager->restoreExcludePreviews = isset($request->getParsedBody()['restore-exclude-previews']);
|
||||
$this->configurationManager->commitTransaction();
|
||||
|
||||
$id = self::TOP_CONTAINER;
|
||||
$forceStopNextcloud = true;
|
||||
|
|
@ -144,22 +140,22 @@ readonly class DockerController {
|
|||
}
|
||||
|
||||
public function StartBackupContainerCheckRepair(Request $request, Response $response, array $args) : Response {
|
||||
$this->configurationManager->SetBackupMode('check-repair');
|
||||
$this->configurationManager->backupMode = 'check-repair';
|
||||
|
||||
$id = 'nextcloud-aio-borgbackup';
|
||||
$this->PerformRecursiveContainerStart($id);
|
||||
|
||||
// Restore to backup check which is needed to make the UI logic work correctly
|
||||
$this->configurationManager->SetBackupMode('check');
|
||||
$this->configurationManager->backupMode = 'check';
|
||||
|
||||
return $response->withStatus(201)->withHeader('Location', '.');
|
||||
}
|
||||
|
||||
public function StartBackupContainerTest(Request $request, Response $response, array $args) : Response {
|
||||
$this->configurationManager->SetBackupMode('test');
|
||||
$config = $this->configurationManager->GetConfig();
|
||||
$config['instance_restore_attempt'] = 0;
|
||||
$this->configurationManager->WriteConfig($config);
|
||||
$this->configurationManager->startTransaction();
|
||||
$this->configurationManager->backupMode = 'test';
|
||||
$this->configurationManager->instanceRestoreAttempt = false;
|
||||
$this->configurationManager->commitTransaction();
|
||||
|
||||
$id = self::TOP_CONTAINER;
|
||||
$this->PerformRecursiveContainerStop($id);
|
||||
|
|
@ -182,19 +178,18 @@ readonly class DockerController {
|
|||
}
|
||||
|
||||
if (isset($request->getParsedBody()['install_latest_major'])) {
|
||||
$installLatestMajor = 32;
|
||||
$installLatestMajor = '32';
|
||||
} else {
|
||||
$installLatestMajor = "";
|
||||
$installLatestMajor = '';
|
||||
}
|
||||
|
||||
$config = $this->configurationManager->GetConfig();
|
||||
$this->configurationManager->startTransaction();
|
||||
$this->configurationManager->installLatestMajor = $installLatestMajor;
|
||||
// set AIO_URL
|
||||
$config['AIO_URL'] = $host . ':' . (string)$port . $path;
|
||||
$this->configurationManager->aioUrl = $host . ':' . (string)$port . $path;
|
||||
// set wasStartButtonClicked
|
||||
$config['wasStartButtonClicked'] = 1;
|
||||
// set install_latest_major
|
||||
$config['install_latest_major'] = $installLatestMajor;
|
||||
$this->configurationManager->WriteConfig($config);
|
||||
$this->configurationManager->wasStartButtonClicked = true;
|
||||
$this->configurationManager->commitTransaction();
|
||||
|
||||
// Do not pull container images in case 'bypass_container_update' is set via url params
|
||||
// Needed for local testing
|
||||
|
|
@ -213,10 +208,7 @@ readonly class DockerController {
|
|||
}
|
||||
|
||||
public function startTopContainer(bool $pullImage) : void {
|
||||
$config = $this->configurationManager->GetConfig();
|
||||
// set AIO_TOKEN
|
||||
$config['AIO_TOKEN'] = bin2hex(random_bytes(24));
|
||||
$this->configurationManager->WriteConfig($config);
|
||||
$this->configurationManager->aioToken = bin2hex(random_bytes(24));
|
||||
|
||||
// Stop domaincheck since apache would not be able to start otherwise
|
||||
$this->StopDomaincheckContainer();
|
||||
|
|
@ -244,7 +236,7 @@ readonly class DockerController {
|
|||
// This is a hack but no better solution was found for the meantime
|
||||
// Stop Collabora first to make sure it force-saves
|
||||
// See https://github.com/nextcloud/richdocuments/issues/3799
|
||||
if ($id === self::TOP_CONTAINER && $this->configurationManager->isCollaboraEnabled()) {
|
||||
if ($id === self::TOP_CONTAINER && $this->configurationManager->isCollaboraEnabled) {
|
||||
$this->PerformRecursiveContainerStop('nextcloud-aio-collabora');
|
||||
}
|
||||
|
||||
|
|
@ -255,7 +247,7 @@ readonly class DockerController {
|
|||
// We want to stop the Nextcloud container after 10s and not wait for the configured stop_grace_period
|
||||
$this->dockerActionManager->StopContainer($container, $forceStopNextcloud);
|
||||
}
|
||||
foreach($container->GetDependsOn() as $dependency) {
|
||||
foreach($container->dependsOn as $dependency) {
|
||||
$this->PerformRecursiveContainerStop($dependency, $forceStopNextcloud);
|
||||
}
|
||||
}
|
||||
|
|
@ -277,7 +269,7 @@ readonly class DockerController {
|
|||
public function StartDomaincheckContainer() : void
|
||||
{
|
||||
# Don't start if domain is already set
|
||||
if ($this->configurationManager->GetDomain() !== '' || $this->configurationManager->wasStartButtonClicked()) {
|
||||
if ($this->configurationManager->domain !== '' || $this->configurationManager->wasStartButtonClicked) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -17,7 +17,7 @@ readonly class Setup {
|
|||
}
|
||||
|
||||
$password = $this->passwordGenerator->GeneratePassword(8);
|
||||
$this->configurationManager->SetPassword($password);
|
||||
$this->configurationManager->password = $password;
|
||||
return $password;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,15 +36,15 @@ readonly class DockerActionManager {
|
|||
}
|
||||
|
||||
private function BuildImageName(Container $container): string {
|
||||
$tag = $container->GetImageTag();
|
||||
$tag = $container->imageTag;
|
||||
if ($tag === '%AIO_CHANNEL%') {
|
||||
$tag = $this->GetCurrentChannel();
|
||||
}
|
||||
return $container->GetContainerName() . ':' . $tag;
|
||||
return $container->containerName . ':' . $tag;
|
||||
}
|
||||
|
||||
public function GetContainerRunningState(Container $container): ContainerState {
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($container->GetIdentifier())));
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($container->identifier)));
|
||||
try {
|
||||
$response = $this->guzzleClient->get($url);
|
||||
} catch (RequestException $e) {
|
||||
|
|
@ -64,7 +64,7 @@ readonly class DockerActionManager {
|
|||
}
|
||||
|
||||
public function GetContainerRestartingState(Container $container): ContainerState {
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($container->GetIdentifier())));
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($container->identifier)));
|
||||
try {
|
||||
$response = $this->guzzleClient->get($url);
|
||||
} catch (RequestException $e) {
|
||||
|
|
@ -84,16 +84,16 @@ readonly class DockerActionManager {
|
|||
}
|
||||
|
||||
public function GetContainerUpdateState(Container $container): VersionState {
|
||||
$tag = $container->GetImageTag();
|
||||
$tag = $container->imageTag;
|
||||
if ($tag === '%AIO_CHANNEL%') {
|
||||
$tag = $this->GetCurrentChannel();
|
||||
}
|
||||
|
||||
$runningDigests = $this->GetRepoDigestsOfContainer($container->GetIdentifier());
|
||||
$runningDigests = $this->GetRepoDigestsOfContainer($container->identifier);
|
||||
if ($runningDigests === null) {
|
||||
return VersionState::Different;
|
||||
}
|
||||
$remoteDigest = $this->GetLatestDigestOfTag($container->GetContainerName(), $tag);
|
||||
$remoteDigest = $this->GetLatestDigestOfTag($container->containerName, $tag);
|
||||
if ($remoteDigest === null) {
|
||||
return VersionState::Equal;
|
||||
}
|
||||
|
|
@ -112,12 +112,12 @@ readonly class DockerActionManager {
|
|||
return $runningState;
|
||||
}
|
||||
|
||||
$containerName = $container->GetIdentifier();
|
||||
$internalPort = $container->GetInternalPort();
|
||||
$containerName = $container->identifier;
|
||||
$internalPort = $container->internalPorts;
|
||||
if ($internalPort === '%APACHE_PORT%') {
|
||||
$internalPort = $this->configurationManager->GetApachePort();
|
||||
$internalPort = $this->configurationManager->apachePort;
|
||||
} elseif ($internalPort === '%TALK_PORT%') {
|
||||
$internalPort = $this->configurationManager->GetTalkPort();
|
||||
$internalPort = $this->configurationManager->talkPort;
|
||||
}
|
||||
|
||||
if ($internalPort !== "" && $internalPort !== 'host') {
|
||||
|
|
@ -134,7 +134,7 @@ readonly class DockerActionManager {
|
|||
}
|
||||
|
||||
public function DeleteContainer(Container $container): void {
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s?v=true', urlencode($container->GetIdentifier())));
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s?v=true', urlencode($container->identifier)));
|
||||
try {
|
||||
$this->guzzleClient->delete($url);
|
||||
} catch (RequestException $e) {
|
||||
|
|
@ -166,17 +166,17 @@ readonly class DockerActionManager {
|
|||
}
|
||||
|
||||
public function StartContainer(Container $container): void {
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s/start', urlencode($container->GetIdentifier())));
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s/start', urlencode($container->identifier)));
|
||||
try {
|
||||
$this->guzzleClient->post($url);
|
||||
} catch (RequestException $e) {
|
||||
throw new \Exception("Could not start container " . $container->GetIdentifier() . ": " . $e->getResponse()?->getBody()->getContents());
|
||||
throw new \Exception("Could not start container " . $container->identifier . ": " . $e->getResponse()?->getBody()->getContents());
|
||||
}
|
||||
}
|
||||
|
||||
public function CreateVolumes(Container $container): void {
|
||||
$url = $this->BuildApiUrl('volumes/create');
|
||||
foreach ($container->GetVolumes()->GetVolumes() as $volume) {
|
||||
foreach ($container->volumes->GetVolumes() as $volume) {
|
||||
$forbiddenChars = [
|
||||
'/',
|
||||
];
|
||||
|
|
@ -202,10 +202,10 @@ readonly class DockerActionManager {
|
|||
|
||||
public function CreateContainer(Container $container): void {
|
||||
$volumes = [];
|
||||
foreach ($container->GetVolumes()->GetVolumes() as $volume) {
|
||||
foreach ($container->volumes->GetVolumes() as $volume) {
|
||||
// // NEXTCLOUD_MOUNT gets added via bind-mount later on
|
||||
// if ($container->GetIdentifier() === 'nextcloud-aio-nextcloud') {
|
||||
// if ($volume->name === $this->configurationManager->GetNextcloudMount()) {
|
||||
// if ($container->identifier === 'nextcloud-aio-nextcloud') {
|
||||
// if ($volume->name === $this->configurationManager->nextcloudMount) {
|
||||
// continue;
|
||||
// }
|
||||
// }
|
||||
|
|
@ -228,46 +228,38 @@ readonly class DockerActionManager {
|
|||
$requestBody['HostConfig']['Binds'] = $volumes;
|
||||
}
|
||||
|
||||
$aioVariables = $container->GetAioVariables()->GetVariables();
|
||||
foreach ($aioVariables as $variable) {
|
||||
$config = $this->configurationManager->GetConfig();
|
||||
$variable = $this->replaceEnvPlaceholders($variable);
|
||||
$variableArray = explode('=', $variable);
|
||||
$config[$variableArray[0]] = $variableArray[1];
|
||||
$this->configurationManager->WriteConfig($config);
|
||||
sleep(1);
|
||||
}
|
||||
$this->configurationManager->setAioVariables($container->aioVariables->GetVariables());
|
||||
|
||||
$envs = $container->GetEnvironmentVariables()->GetVariables();
|
||||
$envs = $container->containerEnvironmentVariables->GetVariables();
|
||||
// Special thing for the nextcloud container
|
||||
if ($container->GetIdentifier() === 'nextcloud-aio-nextcloud') {
|
||||
if ($container->identifier === 'nextcloud-aio-nextcloud') {
|
||||
$envs[] = $this->GetAllNextcloudExecCommands();
|
||||
}
|
||||
foreach ($envs as $key => $env) {
|
||||
$envs[$key] = $this->replaceEnvPlaceholders($env);
|
||||
$envs[$key] = $this->configurationManager->replaceEnvPlaceholders($env);
|
||||
}
|
||||
|
||||
if (count($envs) > 0) {
|
||||
$requestBody['Env'] = $envs;
|
||||
}
|
||||
|
||||
$requestBody['HostConfig']['RestartPolicy']['Name'] = $container->GetRestartPolicy();
|
||||
$requestBody['HostConfig']['RestartPolicy']['Name'] = $container->restartPolicy;
|
||||
|
||||
$requestBody['HostConfig']['ReadonlyRootfs'] = $container->GetReadOnlySetting();
|
||||
$requestBody['HostConfig']['ReadonlyRootfs'] = $container->readOnlyRootFs;
|
||||
|
||||
$exposedPorts = [];
|
||||
if ($container->GetInternalPort() !== 'host') {
|
||||
foreach ($container->GetPorts()->GetPorts() as $value) {
|
||||
if ($container->internalPorts !== 'host') {
|
||||
foreach ($container->ports->GetPorts() as $value) {
|
||||
$port = $value->port;
|
||||
$protocol = $value->protocol;
|
||||
if ($port === '%APACHE_PORT%') {
|
||||
$port = $this->configurationManager->GetApachePort();
|
||||
$port = $this->configurationManager->apachePort;
|
||||
// Do not expose udp if AIO is in reverse proxy mode
|
||||
if ($port !== '443' && $protocol === 'udp') {
|
||||
continue;
|
||||
}
|
||||
} else if ($port === '%TALK_PORT%') {
|
||||
$port = $this->configurationManager->GetTalkPort();
|
||||
$port = $this->configurationManager->talkPort;
|
||||
}
|
||||
$portWithProtocol = $port . '/' . $protocol;
|
||||
$exposedPorts[$portWithProtocol] = null;
|
||||
|
|
@ -279,17 +271,17 @@ readonly class DockerActionManager {
|
|||
|
||||
if (count($exposedPorts) > 0) {
|
||||
$requestBody['ExposedPorts'] = $exposedPorts;
|
||||
foreach ($container->GetPorts()->GetPorts() as $value) {
|
||||
foreach ($container->ports->GetPorts() as $value) {
|
||||
$port = $value->port;
|
||||
$protocol = $value->protocol;
|
||||
if ($port === '%APACHE_PORT%') {
|
||||
$port = $this->configurationManager->GetApachePort();
|
||||
$port = $this->configurationManager->apachePort;
|
||||
// Do not expose udp if AIO is in reverse proxy mode
|
||||
if ($port !== '443' && $protocol === 'udp') {
|
||||
continue;
|
||||
}
|
||||
} else if ($port === '%TALK_PORT%') {
|
||||
$port = $this->configurationManager->GetTalkPort();
|
||||
$port = $this->configurationManager->talkPort;
|
||||
// Skip publishing talk tcp port if it is set to 443
|
||||
if ($port === '443' && $protocol === 'tcp') {
|
||||
continue;
|
||||
|
|
@ -297,7 +289,7 @@ readonly class DockerActionManager {
|
|||
}
|
||||
$ipBinding = $value->ipBinding;
|
||||
if ($ipBinding === '%APACHE_IP_BINDING%') {
|
||||
$ipBinding = $this->configurationManager->GetApacheIPBinding();
|
||||
$ipBinding = $this->configurationManager->apacheIpBinding;
|
||||
// Do not expose if AIO is in internal network mode
|
||||
if ($ipBinding === '@INTERNAL') {
|
||||
continue;
|
||||
|
|
@ -314,7 +306,7 @@ readonly class DockerActionManager {
|
|||
}
|
||||
|
||||
$devices = [];
|
||||
foreach ($container->GetDevices() as $device) {
|
||||
foreach ($container->devices as $device) {
|
||||
if ($device === '/dev/dri' && !$this->configurationManager->isDriDeviceEnabled()) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -325,7 +317,7 @@ readonly class DockerActionManager {
|
|||
$requestBody['HostConfig']['Devices'] = $devices;
|
||||
}
|
||||
|
||||
if ($container->isNvidiaGpuEnabled() && $this->configurationManager->isNvidiaGpuEnabled()) {
|
||||
if ($container->enableNvidiaGpu && $this->configurationManager->isNvidiaGpuEnabled()) {
|
||||
$requestBody['HostConfig']['Runtime'] = 'nvidia';
|
||||
$requestBody['HostConfig']['DeviceRequests'] = [
|
||||
[
|
||||
|
|
@ -336,13 +328,13 @@ readonly class DockerActionManager {
|
|||
];
|
||||
}
|
||||
|
||||
$shmSize = $container->GetShmSize();
|
||||
$shmSize = $container->shmSize;
|
||||
if ($shmSize > 0) {
|
||||
$requestBody['HostConfig']['ShmSize'] = $shmSize;
|
||||
}
|
||||
|
||||
$tmpfs = [];
|
||||
foreach ($container->GetTmpfs() as $tmp) {
|
||||
foreach ($container->tmpfs as $tmp) {
|
||||
$mode = "";
|
||||
if (str_contains($tmp, ':')) {
|
||||
$mode = explode(':', $tmp)[1];
|
||||
|
|
@ -354,9 +346,14 @@ readonly class DockerActionManager {
|
|||
$requestBody['HostConfig']['Tmpfs'] = $tmpfs;
|
||||
}
|
||||
|
||||
$requestBody['HostConfig']['Init'] = $container->GetInit();
|
||||
$requestBody['HostConfig']['Init'] = $container->init;
|
||||
|
||||
$capAdds = $container->GetCapAdds();
|
||||
$maxShutDownTime = $container->maxShutdownTime;
|
||||
if ($maxShutDownTime > 0) {
|
||||
$requestBody['StopTimeout'] = $maxShutDownTime;
|
||||
}
|
||||
|
||||
$capAdds = $container->capAdd;
|
||||
if (count($capAdds) > 0) {
|
||||
$requestBody['HostConfig']['CapAdd'] = $capAdds;
|
||||
}
|
||||
|
|
@ -368,14 +365,14 @@ readonly class DockerActionManager {
|
|||
|
||||
// Disable SELinux for AIO containers so that it does not break them
|
||||
$requestBody['HostConfig']['SecurityOpt'] = ["label:disable"];
|
||||
if ($container->isApparmorUnconfined()) {
|
||||
if ($container->apparmorUnconfined) {
|
||||
$requestBody['HostConfig']['SecurityOpt'] = ["apparmor:unconfined", "label:disable"];
|
||||
}
|
||||
|
||||
$mounts = [];
|
||||
|
||||
// Special things for the backup container which should not be exposed in the containers.json
|
||||
if (str_starts_with($container->GetIdentifier(), 'nextcloud-aio-borgbackup')) {
|
||||
if (str_starts_with($container->identifier, 'nextcloud-aio-borgbackup')) {
|
||||
// Additional backup directories
|
||||
foreach ($this->getAllBackupVolumes() as $additionalBackupVolumes) {
|
||||
if ($additionalBackupVolumes !== '') {
|
||||
|
|
@ -384,7 +381,7 @@ readonly class DockerActionManager {
|
|||
}
|
||||
|
||||
// Make volumes read only in case of borgbackup container. The viewer makes them writeable
|
||||
$isReadOnly = $container->GetIdentifier() === 'nextcloud-aio-borgbackup';
|
||||
$isReadOnly = $container->identifier === 'nextcloud-aio-borgbackup';
|
||||
|
||||
foreach ($this->configurationManager->GetAdditionalBackupDirectoriesArray() as $additionalBackupDirectories) {
|
||||
if ($additionalBackupDirectories !== '') {
|
||||
|
|
@ -397,24 +394,34 @@ readonly class DockerActionManager {
|
|||
}
|
||||
|
||||
// Special things for the talk container which should not be exposed in the containers.json
|
||||
} elseif ($container->GetIdentifier() === 'nextcloud-aio-talk') {
|
||||
} elseif ($container->identifier === 'nextcloud-aio-talk') {
|
||||
// This is needed due to a bug in libwebsockets used in Janus which cannot handle unlimited ulimits
|
||||
$requestBody['HostConfig']['Ulimits'] = [["Name" => "nofile", "Hard" => 200000, "Soft" => 200000]];
|
||||
// // Special things for the nextcloud container which should not be exposed in the containers.json
|
||||
<<<<<<< HEAD
|
||||
// } elseif ($container->identifier === 'nextcloud-aio-nextcloud') {
|
||||
// foreach ($container->volumes->GetVolumes() as $volume) {
|
||||
// if ($volume->name !== $this->configurationManager->nextcloud_mount) {
|
||||
||||||| parent of e6528742 (Camelize property nextcloud_mount => nextcloudMount)
|
||||
// } elseif ($container->GetIdentifier() === 'nextcloud-aio-nextcloud') {
|
||||
// foreach ($container->GetVolumes()->GetVolumes() as $volume) {
|
||||
// if ($volume->name !== $this->configurationManager->GetNextcloudMount()) {
|
||||
// if ($volume->name !== $this->configurationManager->nextcloud_mount) {
|
||||
=======
|
||||
// } elseif ($container->GetIdentifier() === 'nextcloud-aio-nextcloud') {
|
||||
// foreach ($container->GetVolumes()->GetVolumes() as $volume) {
|
||||
// if ($volume->name !== $this->configurationManager->nextcloudMount) {
|
||||
>>>>>>> e6528742 (Camelize property nextcloud_mount => nextcloudMount)
|
||||
// continue;
|
||||
// }
|
||||
// $mounts[] = ["Type" => "bind", "Source" => $volume->name, "Target" => $volume->mountPoint, "ReadOnly" => !$volume->isWritable, "BindOptions" => [ "Propagation" => "rshared"]];
|
||||
// }
|
||||
|
||||
// Special things for the caddy community container
|
||||
} elseif ($container->GetIdentifier() === 'nextcloud-aio-caddy') {
|
||||
} elseif ($container->identifier === 'nextcloud-aio-caddy') {
|
||||
$requestBody['HostConfig']['ExtraHosts'] = ['host.docker.internal:host-gateway'];
|
||||
|
||||
// Special things for the collabora container which should not be exposed in the containers.json
|
||||
} elseif ($container->GetIdentifier() === 'nextcloud-aio-collabora') {
|
||||
} elseif ($container->identifier === 'nextcloud-aio-collabora') {
|
||||
if (!$this->configurationManager->isSeccompDisabled()) {
|
||||
// Load reference seccomp profile for collabora
|
||||
$seccompProfile = (string)file_get_contents(DataConst::GetCollaboraSeccompProfilePath());
|
||||
|
|
@ -422,8 +429,8 @@ readonly class DockerActionManager {
|
|||
}
|
||||
|
||||
// Additional Collabora options
|
||||
if ($this->configurationManager->GetAdditionalCollaboraOptions() !== '') {
|
||||
$requestBody['Cmd'] = [$this->configurationManager->GetAdditionalCollaboraOptions()];
|
||||
if ($this->configurationManager->collaboraAdditionalOptions !== '') {
|
||||
$requestBody['Cmd'] = [$this->configurationManager->collaboraAdditionalOptions];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -434,12 +441,12 @@ readonly class DockerActionManager {
|
|||
// All AIO-managed containers should not be updated externally via watchtower but gracefully by AIO's backup and update feature.
|
||||
// Also DIUN should not send update notifications. See https://crazymax.dev/diun/providers/docker/#docker-labels
|
||||
// Additionally set a default org.label-schema.vendor and com.docker.compose.project
|
||||
$requestBody['Labels'] = ["com.centurylinklabs.watchtower.enable" => "false", "diun.enable" => "false", "org.label-schema.vendor" => "Nextcloud", "com.docker.compose.project" => "nextcloud-aio"];
|
||||
$requestBody['Labels'] = ["com.centurylinklabs.watchtower.enable" => "false", "wud.watch" => "false", "diun.enable" => "false", "org.label-schema.vendor" => "Nextcloud", "com.docker.compose.project" => "nextcloud-aio"];
|
||||
|
||||
// Containers should have a fixed host name. See https://github.com/nextcloud/all-in-one/discussions/6589
|
||||
$requestBody['Hostname'] = $container->GetIdentifier();
|
||||
$requestBody['Hostname'] = $container->identifier;
|
||||
|
||||
$url = $this->BuildApiUrl('containers/create?name=' . $container->GetIdentifier());
|
||||
$url = $this->BuildApiUrl('containers/create?name=' . $container->identifier);
|
||||
try {
|
||||
$this->guzzleClient->request(
|
||||
'POST',
|
||||
|
|
@ -449,18 +456,18 @@ readonly class DockerActionManager {
|
|||
]
|
||||
);
|
||||
} catch (RequestException $e) {
|
||||
throw new \Exception("Could not create container " . $container->GetIdentifier() . ": " . $e->getResponse()?->getBody()->getContents());
|
||||
throw new \Exception("Could not create container " . $container->identifier . ": " . $e->getResponse()?->getBody()->getContents());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function isRegistryReachable(Container $container): bool {
|
||||
$tag = $container->GetImageTag();
|
||||
$tag = $container->imageTag;
|
||||
if ($tag === '%AIO_CHANNEL%') {
|
||||
$tag = $this->GetCurrentChannel();
|
||||
}
|
||||
|
||||
$remoteDigest = $this->GetLatestDigestOfTag($container->GetContainerName(), $tag);
|
||||
$remoteDigest = $this->GetLatestDigestOfTag($container->containerName, $tag);
|
||||
|
||||
if ($remoteDigest === null) {
|
||||
return false;
|
||||
|
|
@ -472,7 +479,7 @@ readonly class DockerActionManager {
|
|||
public function PullImage(Container $container, bool $pullImage = true): void {
|
||||
|
||||
// Skip database image pull if the last shutdown was not clean
|
||||
if ($container->GetIdentifier() === 'nextcloud-aio-database') {
|
||||
if ($container->identifier === 'nextcloud-aio-database') {
|
||||
if ($this->GetDatabasecontainerExitCode() > 0) {
|
||||
$pullImage = false;
|
||||
error_log('Not pulling the latest database image because the container was not correctly shut down.');
|
||||
|
|
@ -484,7 +491,7 @@ readonly class DockerActionManager {
|
|||
if ($pullImage) {
|
||||
if (!$this->isRegistryReachable($container)) {
|
||||
$pullImage = false;
|
||||
error_log('Not pulling the ' . $container->GetContainerName() . ' image for the ' . $container->GetIdentifier() . ' container because the registry does not seem to be reachable.');
|
||||
error_log('Not pulling the ' . $container->containerName . ' image for the ' . $container->identifier . ' container because the registry does not seem to be reachable.');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -503,92 +510,26 @@ readonly class DockerActionManager {
|
|||
} catch (\Throwable $e) {
|
||||
$imageIsThere = false;
|
||||
}
|
||||
|
||||
$maxRetries = 3;
|
||||
for ($attempt = 1; $attempt <= $maxRetries; $attempt++) {
|
||||
try {
|
||||
$this->guzzleClient->post($url);
|
||||
break;
|
||||
} catch (RequestException $e) {
|
||||
$message = "Could not pull image " . $imageName . ": " . $e->getResponse()?->getBody()->getContents();
|
||||
$message = "Could not pull image " . $imageName . " (attempt $attempt/$maxRetries): " . $e->getResponse()?->getBody()->getContents();
|
||||
if ($attempt === $maxRetries) {
|
||||
if ($imageIsThere === false) {
|
||||
throw new \Exception($message);
|
||||
} else {
|
||||
error_log($message);
|
||||
}
|
||||
} else {
|
||||
error_log($message . ' Retrying...');
|
||||
sleep(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Replaces placeholders in $envValue with their values.
|
||||
// E.g. "%NC_DOMAIN%:%APACHE_PORT" becomes "my.nextcloud.com:11000"
|
||||
private function replaceEnvPlaceholders(string $envValue): string {
|
||||
// $pattern breaks down as:
|
||||
// % - matches a literal percent sign
|
||||
// ([^%]+) - capture group that matches one or more characters that are NOT percent signs
|
||||
// % - matches the closing percent sign
|
||||
//
|
||||
// Assumes literal percent signs are always matched and there is no
|
||||
// escaping.
|
||||
$pattern = '/%([^%]+)%/';
|
||||
$matchCount = preg_match_all($pattern, $envValue, $matches);
|
||||
|
||||
if ($matchCount === 0) {
|
||||
return $envValue;
|
||||
}
|
||||
|
||||
$placeholders = $matches[0]; // ["%PLACEHOLDER1%", "%PLACEHOLDER2%", ...]
|
||||
$placeholderNames = $matches[1]; // ["PLACEHOLDER1", "PLACEHOLDER2", ...]
|
||||
$placeholderPatterns = array_map(static fn(string $p) => '/' . preg_quote($p) . '/', $placeholders); // ["/%PLACEHOLDER1%/", ...]
|
||||
$placeholderValues = array_map($this->getPlaceholderValue(...), $placeholderNames); // ["val1", "val2"]
|
||||
// Guaranteed to be non-null because we found the placeholders in the preg_match_all.
|
||||
return (string) preg_replace($placeholderPatterns, $placeholderValues, $envValue);
|
||||
}
|
||||
|
||||
private function getPlaceholderValue(string $placeholder) : string {
|
||||
return match ($placeholder) {
|
||||
'NC_DOMAIN' => $this->configurationManager->GetDomain(),
|
||||
'NC_BASE_DN' => $this->configurationManager->GetBaseDN(),
|
||||
'AIO_TOKEN' => $this->configurationManager->GetToken(),
|
||||
'BORGBACKUP_REMOTE_REPO' => $this->configurationManager->GetBorgRemoteRepo(),
|
||||
'BORGBACKUP_MODE' => $this->configurationManager->GetBackupMode(),
|
||||
'AIO_URL' => $this->configurationManager->GetAIOURL(),
|
||||
'SELECTED_RESTORE_TIME' => $this->configurationManager->GetSelectedRestoreTime(),
|
||||
'RESTORE_EXCLUDE_PREVIEWS' => $this->configurationManager->GetRestoreExcludePreviews(),
|
||||
'APACHE_PORT' => $this->configurationManager->GetApachePort(),
|
||||
'APACHE_IP_BINDING' => $this->configurationManager->GetApacheIPBinding(),
|
||||
'TALK_PORT' => $this->configurationManager->GetTalkPort(),
|
||||
'TURN_DOMAIN' => $this->configurationManager->GetTurnDomain(),
|
||||
'NEXTCLOUD_MOUNT' => $this->configurationManager->GetNextcloudMount(),
|
||||
'BACKUP_RESTORE_PASSWORD' => $this->configurationManager->GetBorgRestorePassword(),
|
||||
'CLAMAV_ENABLED' => $this->configurationManager->isClamavEnabled() ? 'yes' : '',
|
||||
'TALK_RECORDING_ENABLED' => $this->configurationManager->isTalkRecordingEnabled() ? 'yes' : '',
|
||||
'ONLYOFFICE_ENABLED' => $this->configurationManager->isOnlyofficeEnabled() ? 'yes' : '',
|
||||
'COLLABORA_ENABLED' => $this->configurationManager->isCollaboraEnabled() ? 'yes' : '',
|
||||
'TALK_ENABLED' => $this->configurationManager->isTalkEnabled() ? 'yes' : '',
|
||||
'UPDATE_NEXTCLOUD_APPS' => ($this->configurationManager->isDailyBackupRunning() && $this->configurationManager->areAutomaticUpdatesEnabled()) ? 'yes' : '',
|
||||
'TIMEZONE' => $this->configurationManager->GetTimezone() === '' ? 'Etc/UTC' : $this->configurationManager->GetTimezone(),
|
||||
'COLLABORA_DICTIONARIES' => $this->configurationManager->GetCollaboraDictionaries() === '' ? 'de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru' : $this->configurationManager->GetCollaboraDictionaries(),
|
||||
'IMAGINARY_ENABLED' => $this->configurationManager->isImaginaryEnabled() ? 'yes' : '',
|
||||
'FULLTEXTSEARCH_ENABLED' => $this->configurationManager->isFulltextsearchEnabled() ? 'yes' : '',
|
||||
'DOCKER_SOCKET_PROXY_ENABLED' => $this->configurationManager->isDockerSocketProxyEnabled() ? 'yes' : '',
|
||||
'NEXTCLOUD_UPLOAD_LIMIT' => $this->configurationManager->GetNextcloudUploadLimit(),
|
||||
'NEXTCLOUD_MEMORY_LIMIT' => $this->configurationManager->GetNextcloudMemoryLimit(),
|
||||
'NEXTCLOUD_MAX_TIME' => $this->configurationManager->GetNextcloudMaxTime(),
|
||||
'BORG_RETENTION_POLICY' => $this->configurationManager->GetBorgRetentionPolicy(),
|
||||
'FULLTEXTSEARCH_JAVA_OPTIONS' => $this->configurationManager->GetFulltextsearchJavaOptions(),
|
||||
'NEXTCLOUD_TRUSTED_CACERTS_DIR' => $this->configurationManager->GetTrustedCacertsDir(),
|
||||
'ADDITIONAL_DIRECTORIES_BACKUP' => $this->configurationManager->GetAdditionalBackupDirectoriesString() !== '' ? 'yes' : '',
|
||||
'BORGBACKUP_HOST_LOCATION' => $this->configurationManager->GetBorgBackupHostLocation(),
|
||||
'APACHE_MAX_SIZE' => (string)($this->configurationManager->GetApacheMaxSize()),
|
||||
'COLLABORA_SECCOMP_POLICY' => $this->configurationManager->GetCollaboraSeccompPolicy(),
|
||||
'NEXTCLOUD_STARTUP_APPS' => $this->configurationManager->GetNextcloudStartupApps(),
|
||||
'NEXTCLOUD_ADDITIONAL_APKS' => $this->configurationManager->GetNextcloudAdditionalApks(),
|
||||
'NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS' => $this->configurationManager->GetNextcloudAdditionalPhpExtensions(),
|
||||
'INSTALL_LATEST_MAJOR' => $this->configurationManager->shouldLatestMajorGetInstalled() ? 'yes' : '',
|
||||
'REMOVE_DISABLED_APPS' => $this->configurationManager->shouldDisabledAppsGetRemoved() ? 'yes' : '',
|
||||
// Allow to get local ip-address of database container which allows to talk to it even in host mode (the container that requires this needs to be started first then)
|
||||
'AIO_DATABASE_HOST' => gethostbyname('nextcloud-aio-database'),
|
||||
// Allow to get local ip-address of caddy container and add it to trusted proxies automatically
|
||||
'CADDY_IP_ADDRESS' => in_array('caddy', $this->configurationManager->GetEnabledCommunityContainers(), true) ? gethostbyname('nextcloud-aio-caddy') : '',
|
||||
'WHITEBOARD_ENABLED' => $this->configurationManager->isWhiteboardEnabled() ? 'yes' : '',
|
||||
default => $this->configurationManager->GetRegisteredSecret($placeholder),
|
||||
};
|
||||
}
|
||||
|
||||
private function isContainerUpdateAvailable(string $id): string {
|
||||
|
|
@ -598,7 +539,7 @@ readonly class DockerActionManager {
|
|||
if ($container->GetUpdateState() === VersionState::Different) {
|
||||
$updateAvailable = '1';
|
||||
}
|
||||
foreach ($container->GetDependsOn() as $dependency) {
|
||||
foreach ($container->dependsOn as $dependency) {
|
||||
$updateAvailable .= $this->isContainerUpdateAvailable($dependency);
|
||||
}
|
||||
return $updateAvailable;
|
||||
|
|
@ -606,7 +547,7 @@ readonly class DockerActionManager {
|
|||
|
||||
public function isAnyUpdateAvailable(): bool {
|
||||
// return early if instance is not installed
|
||||
if (!$this->configurationManager->wasStartButtonClicked()) {
|
||||
if (!$this->configurationManager->wasStartButtonClicked) {
|
||||
return false;
|
||||
}
|
||||
$id = 'nextcloud-aio-apache';
|
||||
|
|
@ -622,10 +563,10 @@ readonly class DockerActionManager {
|
|||
$container = $this->containerDefinitionFetcher->GetContainerById($id);
|
||||
|
||||
$backupVolumes = '';
|
||||
foreach ($container->GetBackupVolumes() as $backupVolume) {
|
||||
foreach ($container->backupVolumes as $backupVolume) {
|
||||
$backupVolumes .= $backupVolume . ' ';
|
||||
}
|
||||
foreach ($container->GetDependsOn() as $dependency) {
|
||||
foreach ($container->dependsOn as $dependency) {
|
||||
$backupVolumes .= $this->getBackupVolumes($dependency);
|
||||
}
|
||||
return $backupVolumes;
|
||||
|
|
@ -641,10 +582,10 @@ readonly class DockerActionManager {
|
|||
$container = $this->containerDefinitionFetcher->GetContainerById($id);
|
||||
|
||||
$nextcloudExecCommands = '';
|
||||
foreach ($container->GetNextcloudExecCommands() as $execCommand) {
|
||||
foreach ($container->nextcloudExecCommands as $execCommand) {
|
||||
$nextcloudExecCommands .= $execCommand . PHP_EOL;
|
||||
}
|
||||
foreach ($container->GetDependsOn() as $dependency) {
|
||||
foreach ($container->dependsOn as $dependency) {
|
||||
$nextcloudExecCommands .= $this->GetNextcloudExecCommands($dependency);
|
||||
}
|
||||
return $nextcloudExecCommands;
|
||||
|
|
@ -776,7 +717,7 @@ readonly class DockerActionManager {
|
|||
public function sendNotification(Container $container, string $subject, string $message, string $file = '/notify.sh'): void {
|
||||
if ($this->GetContainerStartingState($container) === ContainerState::Running) {
|
||||
|
||||
$containerName = $container->GetIdentifier();
|
||||
$containerName = $container->identifier;
|
||||
|
||||
// schedule the exec
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s/exec', urlencode($containerName)));
|
||||
|
|
@ -901,14 +842,14 @@ readonly class DockerActionManager {
|
|||
// Add a secondary alias for domaincheck container, to keep it as similar to actual apache controller as possible.
|
||||
// If a reverse-proxy is relying on container name as hostname this allows it to operate as usual and still validate the domain
|
||||
// The domaincheck container and apache container are never supposed to be active at the same time because they use the same APACHE_PORT anyway, so this doesn't add any new constraints.
|
||||
$alias = ($container->GetIdentifier() === 'nextcloud-aio-domaincheck') ? 'nextcloud-aio-apache' : '';
|
||||
$alias = ($container->identifier === 'nextcloud-aio-domaincheck') ? 'nextcloud-aio-apache' : '';
|
||||
|
||||
$this->ConnectContainerIdToNetwork($container->GetIdentifier(), $container->GetInternalPort(), alias: $alias);
|
||||
$this->ConnectContainerIdToNetwork($container->identifier, $container->internalPorts, alias: $alias);
|
||||
|
||||
if ($container->GetIdentifier() === 'nextcloud-aio-apache' || $container->GetIdentifier() === 'nextcloud-aio-domaincheck') {
|
||||
if ($container->identifier === 'nextcloud-aio-apache' || $container->identifier === 'nextcloud-aio-domaincheck') {
|
||||
$apacheAdditionalNetwork = $this->configurationManager->GetApacheAdditionalNetwork();
|
||||
if ($apacheAdditionalNetwork !== '') {
|
||||
$this->ConnectContainerIdToNetwork($container->GetIdentifier(), $container->GetInternalPort(), $apacheAdditionalNetwork, false, $alias);
|
||||
$this->ConnectContainerIdToNetwork($container->identifier, $container->internalPorts, $apacheAdditionalNetwork, false, $alias);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -917,9 +858,9 @@ readonly class DockerActionManager {
|
|||
if ($forceStopContainer) {
|
||||
$maxShutDownTime = 10;
|
||||
} else {
|
||||
$maxShutDownTime = $container->GetMaxShutdownTime();
|
||||
$maxShutDownTime = $container->maxShutdownTime;
|
||||
}
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s/stop?t=%s', urlencode($container->GetIdentifier()), $maxShutDownTime));
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s/stop?t=%s', urlencode($container->identifier), $maxShutDownTime));
|
||||
try {
|
||||
$this->guzzleClient->post($url);
|
||||
} catch (RequestException $e) {
|
||||
|
|
|
|||
|
|
@ -3,24 +3,24 @@
|
|||
<span>
|
||||
{% if c.GetStartingState().value == 'starting' %}
|
||||
<span class="status running"></span>
|
||||
{{ c.GetDisplayName() }}
|
||||
(<a href="api/docker/logs?id={{ c.GetIdentifier() }}" target="_blank">Starting</a>)
|
||||
{{ c.displayName }}
|
||||
(<a href="api/docker/logs?id={{ c.identifier }}" target="_blank">Starting</a>)
|
||||
{% elseif c.GetRunningState().value == 'running' %}
|
||||
<span class="status success"></span>
|
||||
{{ c.GetDisplayName() }}
|
||||
(<a href="api/docker/logs?id={{ c.GetIdentifier() }}" target="_blank">Running</a>)
|
||||
{{ c.displayName }}
|
||||
(<a href="api/docker/logs?id={{ c.identifier }}" target="_blank">Running</a>)
|
||||
{% else %}
|
||||
<span class="status error"></span>
|
||||
{{ c.GetDisplayName() }}
|
||||
(<a href="api/docker/logs?id={{ c.GetIdentifier() }}" target="_blank">Stopped</a>)
|
||||
{{ c.displayName }}
|
||||
(<a href="api/docker/logs?id={{ c.identifier }}" target="_blank">Stopped</a>)
|
||||
{% endif %}
|
||||
{% if c.GetDocumentation() != '' %}
|
||||
(<a target="_blank" href="{{ c.GetDocumentation() }}">docs</a>)
|
||||
{% if c.documentation != '' %}
|
||||
(<a target="_blank" href="{{ c.documentation }}">docs</a>)
|
||||
{% endif %}
|
||||
</span>
|
||||
{% if c.GetUiSecret() != '' %}
|
||||
<details>
|
||||
<summary>Show password for {{ c.GetDisplayName() }}</summary>
|
||||
<summary>Show password for {{ c.displayName }}</summary>
|
||||
<input type="text" value="{{ c.GetUiSecret() }}" readonly>
|
||||
</details>
|
||||
{% endif %}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@
|
|||
|
||||
<div class="container">
|
||||
<main>
|
||||
<h1>Nextcloud AIO v12.5.0</h1>
|
||||
{% set aio_version = include('includes/aio-version.twig') %}
|
||||
<h1>Nextcloud AIO v{{ aio_version }}</h1>
|
||||
|
||||
{# Add 2nd tab warning #}
|
||||
<script type="text/javascript" src="second-tab-warning.js"></script>
|
||||
|
|
@ -45,19 +46,19 @@
|
|||
{% endif %}
|
||||
|
||||
{% for container in containers %}
|
||||
{% if container.GetDisplayName() != '' and container.GetRunningState().value == 'running' %}
|
||||
{% if container.displayName != '' and container.GetRunningState().value == 'running' %}
|
||||
{% set isAnyRunning = true %}
|
||||
{% endif %}
|
||||
{% if container.GetDisplayName() != '' and container.GetRestartingState().value == 'restarting' %}
|
||||
{% if container.displayName != '' and container.GetRestartingState().value == 'restarting' %}
|
||||
{% set isAnyRestarting = true %}
|
||||
{% endif %}
|
||||
{% if container.GetIdentifier() == 'nextcloud-aio-watchtower' and container.GetRunningState().value == 'running' %}
|
||||
{% if container.identifier == 'nextcloud-aio-watchtower' and container.GetRunningState().value == 'running' %}
|
||||
{% set isWatchtowerRunning = true %}
|
||||
{% endif %}
|
||||
{% if container.GetIdentifier() == 'nextcloud-aio-domaincheck' and container.GetRunningState().value == 'running' %}
|
||||
{% if container.identifier == 'nextcloud-aio-domaincheck' and container.GetRunningState().value == 'running' %}
|
||||
{% set isDomaincheckRunning = true %}
|
||||
{% endif %}
|
||||
{% if container.GetIdentifier() == 'nextcloud-aio-apache' and container.GetStartingState().value == 'starting' %}
|
||||
{% if container.identifier == 'nextcloud-aio-apache' and container.GetStartingState().value == 'starting' %}
|
||||
{% set isApacheStarting = true %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
|
@ -280,7 +281,7 @@
|
|||
<ul>
|
||||
{# @var containers \AIO\Container\Container[] #}
|
||||
{% for container in containers %}
|
||||
{% if container.GetDisplayName() != '' %}
|
||||
{% if container.displayName != '' %}
|
||||
{% include 'components/container-state.twig' with {'c': container} only %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
|
|
|||
1
php/templates/includes/aio-version.twig
Normal file
1
php/templates/includes/aio-version.twig
Normal file
|
|
@ -0,0 +1 @@
|
|||
12.5.0
|
||||
Loading…
Add table
Add a link
Reference in a new issue