mirror of
https://github.com/nextcloud/all-in-one.git
synced 2026-06-10 08:37:02 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 91a7024bc6 | |||
| 5c84df6149 | |||
| 061b8c8a87 |
@@ -31,12 +31,12 @@ updates:
|
|||||||
- "/Containers/collabora"
|
- "/Containers/collabora"
|
||||||
- "/Containers/docker-socket-proxy"
|
- "/Containers/docker-socket-proxy"
|
||||||
- "/Containers/domaincheck"
|
- "/Containers/domaincheck"
|
||||||
- "/Containers/eurooffice"
|
|
||||||
- "/Containers/fulltextsearch"
|
- "/Containers/fulltextsearch"
|
||||||
- "/Containers/imaginary"
|
- "/Containers/imaginary"
|
||||||
- "/Containers/mastercontainer"
|
- "/Containers/mastercontainer"
|
||||||
- "/Containers/nextcloud"
|
- "/Containers/nextcloud"
|
||||||
- "/Containers/notify-push"
|
- "/Containers/notify-push"
|
||||||
|
- "/Containers/onlyoffice"
|
||||||
- "/Containers/postgresql"
|
- "/Containers/postgresql"
|
||||||
- "/Containers/redis"
|
- "/Containers/redis"
|
||||||
- "/Containers/talk"
|
- "/Containers/talk"
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: Check spelling
|
- name: Check spelling
|
||||||
uses: codespell-project/actions-codespell@8f01853be192eb0f849a5c7d721450e7a467c579 # v2
|
uses: codespell-project/actions-codespell@8f01853be192eb0f849a5c7d721450e7a467c579 # v2
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
name: update collabora
|
name: update collabora
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: Run collabora-profile-update
|
- name: Run collabora-profile-update
|
||||||
run: |
|
run: |
|
||||||
rm -f php/cool-seccomp-profile.json
|
rm -f php/cool-seccomp-profile.json
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: Validate structure
|
- name: Validate structure
|
||||||
run: |
|
run: |
|
||||||
CONTAINERS="$(find ./community-containers -mindepth 1 -maxdepth 1 -type d)"
|
CONTAINERS="$(find ./community-containers -mindepth 1 -maxdepth 1 -type d)"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
name: Run dependency update script
|
name: Run dependency update script
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- uses: shivammathur/setup-php@7bf05c6b704e0b9bfee22300130a31b5ea68d593 # v2
|
- uses: shivammathur/setup-php@7bf05c6b704e0b9bfee22300130a31b5ea68d593 # v2
|
||||||
with:
|
with:
|
||||||
php-version: 8.5
|
php-version: 8.5
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
- name: Install hadolint
|
- name: Install hadolint
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
- name: Turnstyle
|
- name: Turnstyle
|
||||||
uses: softprops/turnstyle@e15e934b3f69ee283ba389ea05c8886baa656d93 # v2
|
uses: softprops/turnstyle@e15e934b3f69ee283ba389ea05c8886baa656d93 # v2
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
name: update to latest imaginary commit on master branch
|
name: update to latest imaginary commit on master branch
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: Run imaginary-update
|
- name: Run imaginary-update
|
||||||
run: |
|
run: |
|
||||||
# Imaginary
|
# Imaginary
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: Validate Json
|
- name: Validate Json
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.1
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
name: Run nextcloud-update script
|
name: Run nextcloud-update script
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: Run nextcloud-update script
|
- name: Run nextcloud-update script
|
||||||
run: |
|
run: |
|
||||||
# Inspired by https://github.com/nextcloud/docker/blob/master/update.sh
|
# Inspired by https://github.com/nextcloud/docker/blob/master/update.sh
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
name: PHP Deprecation Detector
|
name: PHP Deprecation Detector
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: Set up php
|
- name: Set up php
|
||||||
uses: shivammathur/setup-php@7bf05c6b704e0b9bfee22300130a31b5ea68d593 # v2
|
uses: shivammathur/setup-php@7bf05c6b704e0b9bfee22300130a31b5ea68d593 # v2
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -28,17 +28,20 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
|
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
|
||||||
with:
|
with:
|
||||||
node-version: 24.15.0
|
node-version: lts/*
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: cd php/tests && npm ci
|
run: cd php/tests && npm ci
|
||||||
|
|
||||||
|
- name: Install Playwright system dependencies
|
||||||
|
run: cd php/tests && ./node_modules/.bin/playwright install-deps chromium
|
||||||
|
|
||||||
- name: Install Playwright Browsers
|
- name: Install Playwright Browsers
|
||||||
run: cd php/tests && npx playwright install --with-deps chromium
|
run: cd php/tests && ./node_modules/.bin/playwright install chromium
|
||||||
|
|
||||||
- name: Set up php 8.5
|
- name: Set up php 8.5
|
||||||
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0
|
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0
|
||||||
@@ -86,7 +89,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cd php/tests
|
cd php/tests
|
||||||
export DEBUG=pw:api
|
export DEBUG=pw:api
|
||||||
if ! npx playwright test tests/initial-setup.spec.js; then
|
if ! ./node_modules/.bin/playwright test tests/initial-setup.spec.js; then
|
||||||
docker logs nextcloud-aio-mastercontainer
|
docker logs nextcloud-aio-mastercontainer
|
||||||
docker logs nextcloud-aio-borgbackup
|
docker logs nextcloud-aio-borgbackup
|
||||||
exit 1
|
exit 1
|
||||||
@@ -118,7 +121,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cd php/tests
|
cd php/tests
|
||||||
export DEBUG=pw:api
|
export DEBUG=pw:api
|
||||||
if ! npx playwright test tests/restore-instance.spec.js; then
|
if ! ./node_modules/.bin/playwright test tests/restore-instance.spec.js; then
|
||||||
docker logs nextcloud-aio-mastercontainer
|
docker logs nextcloud-aio-mastercontainer
|
||||||
docker logs nextcloud-aio-borgbackup
|
docker logs nextcloud-aio-borgbackup
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
@@ -13,17 +13,20 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
|
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
|
||||||
with:
|
with:
|
||||||
node-version: 24.15.0
|
node-version: lts/*
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: cd php/tests && npm ci
|
run: cd php/tests && npm ci
|
||||||
|
|
||||||
|
- name: Install Playwright system dependencies
|
||||||
|
run: cd php/tests && ./node_modules/.bin/playwright install-deps chromium
|
||||||
|
|
||||||
- name: Install Playwright Browsers
|
- name: Install Playwright Browsers
|
||||||
run: cd php/tests && npx playwright install --with-deps chromium
|
run: cd php/tests && ./node_modules/.bin/playwright install chromium
|
||||||
|
|
||||||
- name: Start fresh development server
|
- name: Start fresh development server
|
||||||
run: |
|
run: |
|
||||||
@@ -48,7 +51,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cd php/tests
|
cd php/tests
|
||||||
export DEBUG=pw:api
|
export DEBUG=pw:api
|
||||||
if ! npx playwright test tests/initial-setup.spec.js; then
|
if ! ./node_modules/.bin/playwright test tests/initial-setup.spec.js; then
|
||||||
docker logs nextcloud-aio-mastercontainer
|
docker logs nextcloud-aio-mastercontainer
|
||||||
docker logs nextcloud-aio-borgbackup
|
docker logs nextcloud-aio-borgbackup
|
||||||
exit 1
|
exit 1
|
||||||
@@ -76,7 +79,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cd php/tests
|
cd php/tests
|
||||||
export DEBUG=pw:api
|
export DEBUG=pw:api
|
||||||
if ! npx playwright test tests/restore-instance.spec.js; then
|
if ! ./node_modules/.bin/playwright test tests/restore-instance.spec.js; then
|
||||||
docker logs nextcloud-aio-mastercontainer
|
docker logs nextcloud-aio-mastercontainer
|
||||||
docker logs nextcloud-aio-borgbackup
|
docker logs nextcloud-aio-borgbackup
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
- name: Set up php
|
- name: Set up php
|
||||||
uses: shivammathur/setup-php@7bf05c6b704e0b9bfee22300130a31b5ea68d593 # v2
|
uses: shivammathur/setup-php@7bf05c6b704e0b9bfee22300130a31b5ea68d593 # v2
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ jobs:
|
|||||||
name: static-psalm-analysis
|
name: static-psalm-analysis
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ jobs:
|
|||||||
name: Check Shell
|
name: Check Shell
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: Run Shellcheck
|
- name: Run Shellcheck
|
||||||
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # v2.0.0
|
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # v2.0.0
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -42,14 +42,14 @@ jobs:
|
|||||||
require: admin
|
require: admin
|
||||||
|
|
||||||
- name: Checkout workflow repository
|
- name: Checkout workflow repository
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
path: source
|
path: source
|
||||||
repository: nextcloud/.github
|
repository: nextcloud/.github
|
||||||
|
|
||||||
- name: Checkout app
|
- name: Checkout app
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
path: target
|
path: target
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
name: update talk
|
name: update talk
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: Run talk-container-update
|
- name: Run talk-container-update
|
||||||
run: |
|
run: |
|
||||||
# Recording
|
# Recording
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
- name: Set up php ${{ matrix.php-versions }}
|
- name: Set up php ${{ matrix.php-versions }}
|
||||||
uses: shivammathur/setup-php@7bf05c6b704e0b9bfee22300130a31b5ea68d593 # v2
|
uses: shivammathur/setup-php@7bf05c6b704e0b9bfee22300130a31b5ea68d593 # v2
|
||||||
|
|||||||
@@ -8,4 +8,4 @@ jobs:
|
|||||||
name: update copyright
|
name: update copyright
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: update helm chart
|
- name: update helm chart
|
||||||
run: |
|
run: |
|
||||||
set -x
|
set -x
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: update yaml files
|
- name: update yaml files
|
||||||
run: |
|
run: |
|
||||||
sudo bash manual-install/update-yaml.sh
|
sudo bash manual-install/update-yaml.sh
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
name: update watchtower
|
name: update watchtower
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
- name: Run watchtower-container-update
|
- name: Run watchtower-container-update
|
||||||
run: |
|
run: |
|
||||||
# Watchtower
|
# Watchtower
|
||||||
|
|||||||
@@ -47,14 +47,7 @@ http://{$APACHE_HOST}.nextcloud-aio:23973, # For Collabora callback and WOPI req
|
|||||||
uri strip_prefix /onlyoffice
|
uri strip_prefix /onlyoffice
|
||||||
reverse_proxy {$ONLYOFFICE_HOST}:80 {
|
reverse_proxy {$ONLYOFFICE_HOST}:80 {
|
||||||
header_up X-Forwarded-Host {http.request.hostport}/onlyoffice
|
header_up X-Forwarded-Host {http.request.hostport}/onlyoffice
|
||||||
}
|
header_up X-Forwarded-Proto https
|
||||||
}
|
|
||||||
|
|
||||||
# EuroOffice
|
|
||||||
route /eurooffice/* {
|
|
||||||
uri strip_prefix /eurooffice
|
|
||||||
reverse_proxy {$EUROOFFICE_HOST}:80 {
|
|
||||||
header_up X-Forwarded-Host {http.request.hostport}/eurooffice
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# syntax=docker/dockerfile:latest
|
# syntax=docker/dockerfile:latest
|
||||||
FROM caddy:2.11.4-alpine AS caddy
|
FROM caddy:2.11.3-alpine AS caddy
|
||||||
|
|
||||||
# From https://github.com/docker-library/httpd/blob/master/2.4/alpine/Dockerfile
|
# From https://github.com/docker-library/httpd/blob/master/2.4/alpine/Dockerfile
|
||||||
FROM httpd:2.4.68-alpine3.23
|
FROM httpd:2.4.67-alpine3.23
|
||||||
|
|
||||||
COPY --from=caddy /usr/bin/caddy /usr/bin/caddy
|
COPY --from=caddy /usr/bin/caddy /usr/bin/caddy
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# syntax=docker/dockerfile:latest
|
# syntax=docker/dockerfile:latest
|
||||||
# From a file located probably somewhere here: https://github.com/CollaboraOnline/online/blob/master/docker/from-packages/Dockerfile
|
# From a file located probably somewhere here: https://github.com/CollaboraOnline/online/blob/master/docker/from-packages/Dockerfile
|
||||||
FROM collabora/code:26.04.1.4.1
|
FROM collabora/code:25.04.10.3.1
|
||||||
|
|
||||||
USER root
|
USER root
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# syntax=docker/dockerfile:latest
|
# syntax=docker/dockerfile:latest
|
||||||
FROM haproxy:3.4.0-alpine
|
FROM haproxy:3.3.10-alpine
|
||||||
|
|
||||||
# hadolint ignore=DL3002
|
# hadolint ignore=DL3002
|
||||||
USER root
|
USER root
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
# syntax=docker/dockerfile:latest
|
|
||||||
FROM ghcr.io/euro-office/documentserver:v9.3.1-beta.1
|
|
||||||
|
|
||||||
# USER root is probably used
|
|
||||||
|
|
||||||
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" \
|
|
||||||
dockhand.update="false" \
|
|
||||||
org.opencontainers.image.title="EuroOffice for Nextcloud AIO" \
|
|
||||||
org.opencontainers.image.description="EuroOffice Document Server for Nextcloud All-in-One" \
|
|
||||||
org.opencontainers.image.url="https://github.com/nextcloud/all-in-one" \
|
|
||||||
org.opencontainers.image.source="https://github.com/nextcloud/all-in-one" \
|
|
||||||
org.opencontainers.image.vendor="Nextcloud" \
|
|
||||||
org.opencontainers.image.documentation="https://github.com/nextcloud/all-in-one/blob/main/readme.md"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if [ "$AIO_LOG_LEVEL" = 'debug' ]; then
|
|
||||||
set -x
|
|
||||||
fi
|
|
||||||
|
|
||||||
nc -z 127.0.0.1 80 || exit 1
|
|
||||||
@@ -4,4 +4,4 @@ if [ "$AIO_LOG_LEVEL" = 'debug' ]; then
|
|||||||
set -x
|
set -x
|
||||||
fi
|
fi
|
||||||
|
|
||||||
curl -fs -u "elastic:$ELASTIC_PASSWORD" "http://127.0.0.1:9200/_cluster/health?filter_path=status" | grep -qE '"status":"(green|yellow)"' || exit 1
|
curl -fs -u "elastic:$FULLTEXTSEARCH_PASSWORD" "http://127.0.0.1:9200/_cluster/health?filter_path=status" | grep -qE '"status":"(green|yellow)"' || exit 1
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# syntax=docker/dockerfile:latest
|
# syntax=docker/dockerfile:latest
|
||||||
FROM golang:1.26.4-alpine3.23 AS go
|
FROM golang:1.26.3-alpine3.23 AS go
|
||||||
|
|
||||||
ENV IMAGINARY_HASH=6a274b488759a896aff02f52afee6e50b5e3a3ee
|
ENV IMAGINARY_HASH=6a274b488759a896aff02f52afee6e50b5e3a3ee
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
# syntax=docker/dockerfile:latest
|
# syntax=docker/dockerfile:latest
|
||||||
# Docker CLI is a requirement
|
# Docker CLI is a requirement
|
||||||
FROM docker:29.5.3-cli AS docker
|
FROM docker:29.5.2-cli AS docker
|
||||||
|
|
||||||
ARG CADDY_REMOTE_HOST_HASH=e80a9931765a8dbcbb47db415863387f0df0e1b3
|
ARG CADDY_REMOTE_HOST_HASH=e80a9931765a8dbcbb47db415863387f0df0e1b3
|
||||||
|
|
||||||
# Caddy is a requirement
|
# Caddy is a requirement
|
||||||
FROM caddy:2.11.4-builder-alpine AS caddy
|
FROM caddy:2.11.3-builder-alpine AS caddy
|
||||||
RUN set -ex; \
|
RUN set -ex; \
|
||||||
xcaddy build --with github.com/muety/caddy-remote-host@"$CADDY_REMOTE_HOST_HASH"; \
|
xcaddy build --with github.com/muety/caddy-remote-host@"$CADDY_REMOTE_HOST_HASH"; \
|
||||||
/usr/bin/caddy list-modules
|
/usr/bin/caddy list-modules
|
||||||
|
|
||||||
# From https://github.com/docker-library/php/blob/master/8.5/alpine3.23/fpm/Dockerfile
|
# From https://github.com/docker-library/php/blob/master/8.5/alpine3.23/fpm/Dockerfile
|
||||||
FROM php:8.5.7-fpm-alpine3.23
|
FROM php:8.5.6-fpm-alpine3.23
|
||||||
|
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
|||||||
@@ -2,5 +2,4 @@
|
|||||||
$CONFIG = array (
|
$CONFIG = array (
|
||||||
'one-click-instance' => true,
|
'one-click-instance' => true,
|
||||||
'one-click-instance.user-limit' => 100,
|
'one-click-instance.user-limit' => 100,
|
||||||
'update_channel' => 'stable',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -419,12 +419,41 @@ EOF
|
|||||||
|
|
||||||
# AIO update to latest start # Do not remove or change this line!
|
# AIO update to latest start # Do not remove or change this line!
|
||||||
if [ "$INSTALL_LATEST_MAJOR" = yes ]; then
|
if [ "$INSTALL_LATEST_MAJOR" = yes ]; then
|
||||||
if ! bash /upgrade-latest-major.sh; then
|
php /var/www/html/occ config:system:set updatedirectory --value="/nc-updater"
|
||||||
echo "Upgrade to latest major version failed! Check the output above for details."
|
INSTALLED_AT="$(php /var/www/html/occ config:app:get core installedat)"
|
||||||
|
if [ -n "${INSTALLED_AT}" ]; then
|
||||||
|
# Set the installdat to 00 which will allow to skip staging and install the next major directly
|
||||||
|
# shellcheck disable=SC2001
|
||||||
|
INSTALLED_AT="$(echo "${INSTALLED_AT}" | sed "s|[0-9][0-9]$|00|")"
|
||||||
|
php /var/www/html/occ config:app:set core installedat --value="${INSTALLED_AT}"
|
||||||
|
fi
|
||||||
|
php /var/www/html/updater/updater.phar --no-interaction --no-backup
|
||||||
|
if ! php /var/www/html/occ -V || php /var/www/html/occ status | grep maintenance | grep -q 'true'; then
|
||||||
|
echo "Installation of Nextcloud failed!"
|
||||||
|
touch "$NEXTCLOUD_DATA_DIR/install.failed"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
# shellcheck disable=SC2016
|
# shellcheck disable=SC2016
|
||||||
installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
|
installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
|
||||||
|
INSTALLED_MAJOR="${installed_version%%.*}"
|
||||||
|
IMAGE_MAJOR="${image_version%%.*}"
|
||||||
|
# If a valid upgrade path, trigger the Nextcloud built-in Updater
|
||||||
|
if ! [ "$INSTALLED_MAJOR" -gt "$IMAGE_MAJOR" ]; then
|
||||||
|
php /var/www/html/updater/updater.phar --no-interaction --no-backup
|
||||||
|
if ! php /var/www/html/occ -V || php /var/www/html/occ status | grep maintenance | grep -q 'true'; then
|
||||||
|
echo "Installation of Nextcloud failed!"
|
||||||
|
# TODO: Add a hint here about what to do / where to look / updater.log?
|
||||||
|
touch "$NEXTCLOUD_DATA_DIR/install.failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# shellcheck disable=SC2016
|
||||||
|
installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
|
||||||
|
fi
|
||||||
|
php /var/www/html/occ config:system:set updatechecker --type=bool --value=true
|
||||||
|
php /var/www/html/occ app:enable nextcloud-aio --force
|
||||||
|
php /var/www/html/occ db:add-missing-columns
|
||||||
|
php /var/www/html/occ db:add-missing-primary-keys
|
||||||
|
yes | php /var/www/html/occ db:convert-filecache-bigint
|
||||||
fi
|
fi
|
||||||
# AIO update to latest end # Do not remove or change this line!
|
# AIO update to latest end # Do not remove or change this line!
|
||||||
|
|
||||||
@@ -867,71 +896,6 @@ else
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# EuroOffice
|
|
||||||
if [ "$EUROOFFICE_ENABLED" = 'yes' ]; then
|
|
||||||
# Determine EuroOffice port based on host pattern
|
|
||||||
if echo "$EUROOFFICE_HOST" | grep -q "nextcloud-.*-eurooffice"; then
|
|
||||||
EUROOFFICE_PORT=80
|
|
||||||
else
|
|
||||||
EUROOFFICE_PORT=443
|
|
||||||
fi
|
|
||||||
|
|
||||||
count=0
|
|
||||||
while ! nc -z "$EUROOFFICE_HOST" "$EUROOFFICE_PORT" && [ "$count" -lt 90 ]; do
|
|
||||||
echo "Waiting for EuroOffice to become available..."
|
|
||||||
count=$((count+5))
|
|
||||||
sleep 5
|
|
||||||
done
|
|
||||||
if [ "$count" -ge 90 ]; then
|
|
||||||
bash /notify.sh "EuroOffice did not start in time!" "Skipping initialization and disabling eurooffice app."
|
|
||||||
php /var/www/html/occ app:disable eurooffice
|
|
||||||
else
|
|
||||||
# Install or enable EuroOffice app as needed
|
|
||||||
if ! [ -d "/var/www/html/custom_apps/eurooffice" ]; then
|
|
||||||
php /var/www/html/occ app:install eurooffice
|
|
||||||
elif [ "$(php /var/www/html/occ config:app:get eurooffice enabled)" != "yes" ]; then
|
|
||||||
php /var/www/html/occ app:enable eurooffice
|
|
||||||
elif [ "$SKIP_UPDATE" != 1 ]; then
|
|
||||||
php /var/www/html/occ app:update eurooffice
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set EuroOffice configuration
|
|
||||||
php /var/www/html/occ config:system:set eurooffice editors_check_interval --value="0" --type=integer
|
|
||||||
php /var/www/html/occ config:system:set eurooffice jwt_secret --value="$EUROOFFICE_SECRET"
|
|
||||||
php /var/www/html/occ config:app:set eurooffice jwt_secret --value="$EUROOFFICE_SECRET"
|
|
||||||
php /var/www/html/occ config:system:set eurooffice jwt_header --value="AuthorizationJwt"
|
|
||||||
|
|
||||||
# Adjust the EuroOffice host if using internal pattern
|
|
||||||
if echo "$EUROOFFICE_HOST" | grep -q "nextcloud-.*-eurooffice"; then
|
|
||||||
# Set internal URLs for server-to-server calls via Docker network,
|
|
||||||
# bypassing the public domain which may not resolve inside containers.
|
|
||||||
# DocumentServerInternalUrl: NC -> EuroOffice (direct container port)
|
|
||||||
# StorageUrl: EuroOffice -> NC (via port 23973 which has a matching Caddy server-block)
|
|
||||||
APACHE_CONTAINER_HOST="${EUROOFFICE_HOST%-eurooffice}-apache"
|
|
||||||
php /var/www/html/occ config:app:set eurooffice DocumentServerInternalUrl --value="http://$EUROOFFICE_HOST:80/"
|
|
||||||
php /var/www/html/occ config:app:set eurooffice StorageUrl --value="http://$APACHE_CONTAINER_HOST.nextcloud-aio:23973/"
|
|
||||||
EUROOFFICE_HOST="$NC_DOMAIN/eurooffice"
|
|
||||||
export EUROOFFICE_HOST
|
|
||||||
fi
|
|
||||||
|
|
||||||
php /var/www/html/occ config:app:set eurooffice DocumentServerUrl --value="https://$EUROOFFICE_HOST"
|
|
||||||
|
|
||||||
# Register EuroOffice preview provider in the explicit allowlist.
|
|
||||||
# Use a high fixed index (50) to avoid colliding with AIO's seeded indices (1-7, 23).
|
|
||||||
if ! php /var/www/html/occ config:system:get enabledPreviewProviders | grep -q "Eurooffice"; then
|
|
||||||
php /var/www/html/occ config:system:set enabledPreviewProviders 50 --value="OCA\Eurooffice\Preview"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# Remove EuroOffice app if disabled and removal is requested
|
|
||||||
if [ "$REMOVE_DISABLED_APPS" = yes ] && \
|
|
||||||
[ -d "/var/www/html/custom_apps/eurooffice" ] && \
|
|
||||||
[ -n "$EUROOFFICE_SECRET" ] && \
|
|
||||||
[ "$(php /var/www/html/occ config:system:get eurooffice jwt_secret)" = "$EUROOFFICE_SECRET" ]; then
|
|
||||||
php /var/www/html/occ app:remove eurooffice
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Talk
|
# Talk
|
||||||
if [ "$TALK_ENABLED" = 'yes' ]; then
|
if [ "$TALK_ENABLED" = 'yes' ]; then
|
||||||
set -x
|
set -x
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
PHP_CLI="php"
|
|
||||||
if [[ "$EUID" = 0 ]]; then
|
|
||||||
PHP_CLI="sudo -u www-data -E $PHP_CLI"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
image_version="$($PHP_CLI -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
export IMAGE_MAJOR="${image_version%%.*}"
|
|
||||||
|
|
||||||
$PHP_CLI /var/www/html/occ config:system:set updatedirectory --value="/nc-updater"
|
|
||||||
INSTALLED_AT="$($PHP_CLI /var/www/html/occ config:app:get core installedat)"
|
|
||||||
if [ -n "${INSTALLED_AT}" ]; then
|
|
||||||
# Set the installedat to 00 which will allow to skip staging and install the next major directly
|
|
||||||
# shellcheck disable=SC2001
|
|
||||||
INSTALLED_AT="$(echo "${INSTALLED_AT}" | sed "s|[0-9][0-9]$|00|")"
|
|
||||||
$PHP_CLI /var/www/html/occ config:app:set core installedat --value="${INSTALLED_AT}"
|
|
||||||
fi
|
|
||||||
$PHP_CLI /var/www/html/updater/updater.phar --no-interaction --no-backup
|
|
||||||
if ! $PHP_CLI /var/www/html/occ -V || $PHP_CLI /var/www/html/occ status | grep maintenance | grep -q 'true'; then
|
|
||||||
echo "Installation of Nextcloud failed!"
|
|
||||||
touch "$NEXTCLOUD_DATA_DIR/install.failed"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
installed_version="$($PHP_CLI -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
|
|
||||||
export INSTALLED_MAJOR="${installed_version%%.*}"
|
|
||||||
# If a valid upgrade path, trigger the Nextcloud built-in Updater
|
|
||||||
if ! $PHP_CLI -r "version_compare(getenv('INSTALLED_MAJOR'), getenv('IMAGE_MAJOR'), '>') || exit(1);"; then
|
|
||||||
$PHP_CLI /var/www/html/updater/updater.phar --no-interaction --no-backup
|
|
||||||
if ! $PHP_CLI /var/www/html/occ -V || $PHP_CLI /var/www/html/occ status | grep maintenance | grep -q 'true'; then
|
|
||||||
echo "Installation of Nextcloud failed!"
|
|
||||||
# TODO: Add a hint here about what to do / where to look / updater.log?
|
|
||||||
touch "$NEXTCLOUD_DATA_DIR/install.failed"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
$PHP_CLI /var/www/html/occ config:system:set updatechecker --type=bool --value=true
|
|
||||||
$PHP_CLI /var/www/html/occ app:enable nextcloud-aio --force
|
|
||||||
$PHP_CLI /var/www/html/occ db:add-missing-columns
|
|
||||||
$PHP_CLI /var/www/html/occ db:add-missing-primary-keys
|
|
||||||
yes | $PHP_CLI /var/www/html/occ db:convert-filecache-bigint
|
|
||||||
@@ -13,8 +13,6 @@ esac)"
|
|||||||
export POSTGRES_LOG_MIN_MESSAGES
|
export POSTGRES_LOG_MIN_MESSAGES
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
GREP_STRING='Name: oc_appconfig; Type: TABLE; Schema: public; Owner:'
|
|
||||||
export GREP_STRING
|
|
||||||
DATADIR="/var/lib/postgresql/data"
|
DATADIR="/var/lib/postgresql/data"
|
||||||
export DUMP_DIR="/mnt/data"
|
export DUMP_DIR="/mnt/data"
|
||||||
DUMP_FILE="$DUMP_DIR/database-dump.sql"
|
DUMP_FILE="$DUMP_DIR/database-dump.sql"
|
||||||
@@ -105,6 +103,7 @@ if ( [ -f "$DATADIR/PG_VERSION" ] && [ "$PG_MAJOR" != "$(cat "$DATADIR/PG_VERSIO
|
|||||||
done
|
done
|
||||||
|
|
||||||
# Check if the line we grep for later on is there
|
# Check if the line we grep for later on is there
|
||||||
|
GREP_STRING='Name: oc_appconfig; Type: TABLE; Schema: public; Owner:'
|
||||||
if ! grep -qa "$GREP_STRING" "$DUMP_FILE"; then
|
if ! grep -qa "$GREP_STRING" "$DUMP_FILE"; then
|
||||||
echo "The needed oc_appconfig line is not there which is unexpected."
|
echo "The needed oc_appconfig line is not there which is unexpected."
|
||||||
echo "Please report this to https://github.com/nextcloud/all-in-one/issues. Thanks!"
|
echo "Please report this to https://github.com/nextcloud/all-in-one/issues. Thanks!"
|
||||||
@@ -240,12 +239,6 @@ do_database_dump() {
|
|||||||
rm -f "$DUMP_FILE"
|
rm -f "$DUMP_FILE"
|
||||||
mv "$DUMP_FILE.temp" "$DUMP_FILE"
|
mv "$DUMP_FILE.temp" "$DUMP_FILE"
|
||||||
pg_ctl stop -m fast
|
pg_ctl stop -m fast
|
||||||
if ! grep -qa "$GREP_STRING" "$DUMP_FILE"; then
|
|
||||||
echo "Database dump was successful but the expected grep string does not exist."
|
|
||||||
echo "This is not expected!"
|
|
||||||
echo "Please report this to https://github.com/nextcloud/all-in-one/issues."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
rm "$DUMP_DIR/export.failed"
|
rm "$DUMP_DIR/export.failed"
|
||||||
echo 'Database dump successful!'
|
echo 'Database dump successful!'
|
||||||
if [ "$AIO_LOG_LEVEL" != 'debug' ]; then
|
if [ "$AIO_LOG_LEVEL" != 'debug' ]; then
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ if [ "$AIO_LOG_LEVEL" = 'debug' ]; then
|
|||||||
set -x
|
set -x
|
||||||
fi
|
fi
|
||||||
|
|
||||||
nc -z 127.0.0.1 1234 || exit 1
|
nc -z 127.0.0.1 1234 || nc -z ::1 1234 || exit 1
|
||||||
|
|||||||
@@ -58,13 +58,21 @@ extensionaudio = .m4a
|
|||||||
extensionvideo = .mp4"
|
extensionvideo = .mp4"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Detect IPv6 availability to choose the right listen address
|
||||||
|
RECORDING_LISTEN="0.0.0.0:1234"
|
||||||
|
if ! grep -q "1" /sys/module/ipv6/parameters/disable 2>/dev/null \
|
||||||
|
&& ! grep -q "1" /proc/sys/net/ipv6/conf/all/disable_ipv6 2>/dev/null \
|
||||||
|
&& ! grep -q "1" /proc/sys/net/ipv6/conf/default/disable_ipv6 2>/dev/null; then
|
||||||
|
RECORDING_LISTEN="[::]:1234"
|
||||||
|
fi
|
||||||
|
|
||||||
cat << RECORDING_CONF > "/conf/recording.conf"
|
cat << RECORDING_CONF > "/conf/recording.conf"
|
||||||
[logs]
|
[logs]
|
||||||
# 30 means Warning
|
# 30 means Warning
|
||||||
level = ${TALK_RECORDING_LOG_LEVEL}
|
level = ${TALK_RECORDING_LOG_LEVEL}
|
||||||
|
|
||||||
[http]
|
[http]
|
||||||
listen = 0.0.0.0:1234
|
listen = ${RECORDING_LISTEN}
|
||||||
|
|
||||||
[backend]
|
[backend]
|
||||||
allowall = ${ALLOW_ALL}
|
allowall = ${ALLOW_ALL}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# syntax=docker/dockerfile:latest
|
# syntax=docker/dockerfile:latest
|
||||||
FROM nats:2.14.2-scratch AS nats
|
FROM nats:2.14.1-scratch AS nats
|
||||||
FROM eturnal/eturnal:1.12.2-alpine AS eturnal
|
FROM eturnal/eturnal:1.12.2-alpine AS eturnal
|
||||||
FROM strukturag/nextcloud-spreed-signaling:2.1.1 AS signaling
|
FROM strukturag/nextcloud-spreed-signaling:2.1.1 AS signaling
|
||||||
FROM alpine:3.23.4 AS janus
|
FROM alpine:3.23.4 AS janus
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# syntax=docker/dockerfile:latest
|
# syntax=docker/dockerfile:latest
|
||||||
FROM golang:1.26.4-alpine3.23 AS go
|
FROM golang:1.26.3-alpine3.23 AS go
|
||||||
|
|
||||||
ENV WATCHTOWER_COMMIT_HASH=9d0048403a7242943084bede951f6f966f7691ba
|
ENV WATCHTOWER_COMMIT_HASH=9d0048403a7242943084bede951f6f966f7691ba
|
||||||
|
|
||||||
|
|||||||
@@ -37,9 +37,6 @@
|
|||||||
"writeable": false
|
"writeable": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"cap_add": [
|
|
||||||
"SYS_RAWIO"
|
|
||||||
],
|
|
||||||
"environment": [
|
"environment": [
|
||||||
"TZ=%TIMEZONE%",
|
"TZ=%TIMEZONE%",
|
||||||
"SECURE_CONNECTION=1",
|
"SECURE_CONNECTION=1",
|
||||||
|
|||||||
@@ -4,9 +4,6 @@ services:
|
|||||||
nextcloud-aio-onlyoffice:
|
nextcloud-aio-onlyoffice:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
required: false
|
required: false
|
||||||
nextcloud-aio-eurooffice:
|
|
||||||
condition: service_started
|
|
||||||
required: false
|
|
||||||
nextcloud-aio-collabora:
|
nextcloud-aio-collabora:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
required: false
|
required: false
|
||||||
@@ -44,7 +41,6 @@ services:
|
|||||||
- APACHE_PORT
|
- APACHE_PORT
|
||||||
- AIO_LOG_LEVEL
|
- AIO_LOG_LEVEL
|
||||||
- ONLYOFFICE_HOST=nextcloud-aio-onlyoffice
|
- ONLYOFFICE_HOST=nextcloud-aio-onlyoffice
|
||||||
- EUROOFFICE_HOST=nextcloud-aio-eurooffice
|
|
||||||
- TZ=${TIMEZONE}
|
- TZ=${TIMEZONE}
|
||||||
- APACHE_MAX_SIZE
|
- APACHE_MAX_SIZE
|
||||||
- APACHE_MAX_TIME=${NEXTCLOUD_MAX_TIME}
|
- APACHE_MAX_TIME=${NEXTCLOUD_MAX_TIME}
|
||||||
@@ -154,18 +150,15 @@ services:
|
|||||||
- TURN_SECRET
|
- TURN_SECRET
|
||||||
- SIGNALING_SECRET
|
- SIGNALING_SECRET
|
||||||
- ONLYOFFICE_SECRET
|
- ONLYOFFICE_SECRET
|
||||||
- EUROOFFICE_SECRET
|
|
||||||
- AIO_LOG_LEVEL
|
- AIO_LOG_LEVEL
|
||||||
- NEXTCLOUD_MOUNT
|
- NEXTCLOUD_MOUNT
|
||||||
- CLAMAV_ENABLED
|
- CLAMAV_ENABLED
|
||||||
- CLAMAV_HOST=nextcloud-aio-clamav
|
- CLAMAV_HOST=nextcloud-aio-clamav
|
||||||
- ONLYOFFICE_ENABLED
|
- ONLYOFFICE_ENABLED
|
||||||
- EUROOFFICE_ENABLED
|
|
||||||
- COLLABORA_ENABLED
|
- COLLABORA_ENABLED
|
||||||
- COLLABORA_HOST=nextcloud-aio-collabora
|
- COLLABORA_HOST=nextcloud-aio-collabora
|
||||||
- TALK_ENABLED
|
- TALK_ENABLED
|
||||||
- ONLYOFFICE_HOST=nextcloud-aio-onlyoffice
|
- ONLYOFFICE_HOST=nextcloud-aio-onlyoffice
|
||||||
- EUROOFFICE_HOST=nextcloud-aio-eurooffice
|
|
||||||
- UPDATE_NEXTCLOUD_APPS
|
- UPDATE_NEXTCLOUD_APPS
|
||||||
- TZ=${TIMEZONE}
|
- TZ=${TIMEZONE}
|
||||||
- TALK_PORT
|
- TALK_PORT
|
||||||
@@ -413,33 +406,6 @@ services:
|
|||||||
cap_drop:
|
cap_drop:
|
||||||
- NET_RAW
|
- NET_RAW
|
||||||
|
|
||||||
nextcloud-aio-eurooffice:
|
|
||||||
image: ghcr.io/nextcloud-releases/aio-eurooffice:latest
|
|
||||||
init: true
|
|
||||||
healthcheck:
|
|
||||||
start_period: 60s
|
|
||||||
test: /healthcheck.sh
|
|
||||||
interval: 30s
|
|
||||||
timeout: 30s
|
|
||||||
start_interval: 5s
|
|
||||||
retries: 9
|
|
||||||
expose:
|
|
||||||
- "80"
|
|
||||||
environment:
|
|
||||||
- AIO_LOG_LEVEL
|
|
||||||
- LOG_LEVEL=${AIO_LOG_LEVEL}
|
|
||||||
- TZ=${TIMEZONE}
|
|
||||||
- JWT_ENABLED=true
|
|
||||||
- JWT_HEADER=AuthorizationJwt
|
|
||||||
- JWT_SECRET=${EUROOFFICE_SECRET}
|
|
||||||
volumes:
|
|
||||||
- nextcloud_aio_eurooffice:/var/lib/euro-office:rw
|
|
||||||
restart: unless-stopped
|
|
||||||
profiles:
|
|
||||||
- eurooffice
|
|
||||||
cap_drop:
|
|
||||||
- NET_RAW
|
|
||||||
|
|
||||||
nextcloud-aio-imaginary:
|
nextcloud-aio-imaginary:
|
||||||
image: ghcr.io/nextcloud-releases/aio-imaginary:latest
|
image: ghcr.io/nextcloud-releases/aio-imaginary:latest
|
||||||
user: "65534"
|
user: "65534"
|
||||||
@@ -489,13 +455,11 @@ services:
|
|||||||
- discovery.type=single-node
|
- discovery.type=single-node
|
||||||
- http.port=9200
|
- http.port=9200
|
||||||
- xpack.license.self_generated.type=basic
|
- xpack.license.self_generated.type=basic
|
||||||
- xpack.security.enabled=true
|
- xpack.security.enabled=false
|
||||||
- xpack.security.http.ssl.enabled=false
|
|
||||||
- xpack.security.transport.ssl.enabled=false
|
|
||||||
- indices.fielddata.cache.size=20%
|
- indices.fielddata.cache.size=20%
|
||||||
- indices.memory.index_buffer_size=20%
|
- indices.memory.index_buffer_size=20%
|
||||||
- thread_pool.write.queue_size=1000
|
- thread_pool.write.queue_size=1000
|
||||||
- ELASTIC_PASSWORD=${FULLTEXTSEARCH_PASSWORD}
|
- FULLTEXTSEARCH_PASSWORD
|
||||||
volumes:
|
volumes:
|
||||||
- nextcloud_aio_elasticsearch:/usr/share/elasticsearch/data:rw
|
- nextcloud_aio_elasticsearch:/usr/share/elasticsearch/data:rw
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -547,8 +511,6 @@ volumes:
|
|||||||
name: nextcloud_aio_database_dump
|
name: nextcloud_aio_database_dump
|
||||||
nextcloud_aio_elasticsearch:
|
nextcloud_aio_elasticsearch:
|
||||||
name: nextcloud_aio_elasticsearch
|
name: nextcloud_aio_elasticsearch
|
||||||
nextcloud_aio_eurooffice:
|
|
||||||
name: nextcloud_aio_eurooffice
|
|
||||||
nextcloud_aio_nextcloud:
|
nextcloud_aio_nextcloud:
|
||||||
name: nextcloud_aio_nextcloud
|
name: nextcloud_aio_nextcloud
|
||||||
nextcloud_aio_onlyoffice:
|
nextcloud_aio_onlyoffice:
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
DATABASE_PASSWORD= # TODO! This needs to be a unique and good password!
|
DATABASE_PASSWORD= # TODO! This needs to be a unique and good password!
|
||||||
EUROOFFICE_SECRET= # TODO! This needs to be a unique and good password!
|
|
||||||
FULLTEXTSEARCH_PASSWORD= # TODO! This needs to be a unique and good password!
|
FULLTEXTSEARCH_PASSWORD= # TODO! This needs to be a unique and good password!
|
||||||
IMAGINARY_SECRET= # TODO! This needs to be a unique and good password!
|
IMAGINARY_SECRET= # TODO! This needs to be a unique and good password!
|
||||||
NC_DOMAIN=yourdomain.com # TODO! Needs to be changed to the domain that you want to use for Nextcloud.
|
NC_DOMAIN=yourdomain.com # TODO! Needs to be changed to the domain that you want to use for Nextcloud.
|
||||||
@@ -15,7 +14,6 @@ WHITEBOARD_SECRET= # TODO! This needs to be a unique and good password!
|
|||||||
|
|
||||||
CLAMAV_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
CLAMAV_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||||
COLLABORA_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
COLLABORA_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||||
EUROOFFICE_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
|
||||||
FULLTEXTSEARCH_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
FULLTEXTSEARCH_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||||
IMAGINARY_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
IMAGINARY_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||||
ONLYOFFICE_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
ONLYOFFICE_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
name: nextcloud-aio-helm-chart
|
name: nextcloud-aio-helm-chart
|
||||||
description: A generated Helm Chart for Nextcloud AIO from Skippbox Kompose
|
description: A generated Helm Chart for Nextcloud AIO from Skippbox Kompose
|
||||||
version: 13.2.1
|
version: 13.1.0
|
||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
keywords:
|
keywords:
|
||||||
- latest
|
- latest
|
||||||
|
|||||||
@@ -49,8 +49,6 @@ spec:
|
|||||||
value: "{{ .Values.APACHE_PORT }}"
|
value: "{{ .Values.APACHE_PORT }}"
|
||||||
- name: COLLABORA_HOST
|
- name: COLLABORA_HOST
|
||||||
value: nextcloud-aio-collabora
|
value: nextcloud-aio-collabora
|
||||||
- name: EUROOFFICE_HOST
|
|
||||||
value: nextcloud-aio-eurooffice
|
|
||||||
- name: NC_DOMAIN
|
- name: NC_DOMAIN
|
||||||
value: "{{ .Values.NC_DOMAIN }}"
|
value: "{{ .Values.NC_DOMAIN }}"
|
||||||
- name: NEXTCLOUD_HOST
|
- name: NEXTCLOUD_HOST
|
||||||
@@ -65,7 +63,7 @@ spec:
|
|||||||
value: "{{ .Values.TIMEZONE }}"
|
value: "{{ .Values.TIMEZONE }}"
|
||||||
- name: WHITEBOARD_HOST
|
- name: WHITEBOARD_HOST
|
||||||
value: nextcloud-aio-whiteboard
|
value: nextcloud-aio-whiteboard
|
||||||
image: ghcr.io/nextcloud-releases/aio-apache:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-apache:20260527_140826
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
command:
|
command:
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ spec:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: init-subpath
|
- name: init-subpath
|
||||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-alpine:20260527_140826
|
||||||
command:
|
command:
|
||||||
- mkdir
|
- mkdir
|
||||||
- "-p"
|
- "-p"
|
||||||
@@ -61,7 +61,7 @@ spec:
|
|||||||
value: "{{ .Values.NEXTCLOUD_UPLOAD_LIMIT }}"
|
value: "{{ .Values.NEXTCLOUD_UPLOAD_LIMIT }}"
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: "{{ .Values.TIMEZONE }}"
|
value: "{{ .Values.TIMEZONE }}"
|
||||||
image: ghcr.io/nextcloud-releases/aio-clamav:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-clamav:20260527_140826
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
command:
|
command:
|
||||||
|
|||||||
@@ -38,9 +38,9 @@ spec:
|
|||||||
- name: server_name
|
- name: server_name
|
||||||
value: "{{ .Values.NC_DOMAIN }}"
|
value: "{{ .Values.NC_DOMAIN }}"
|
||||||
{{- if contains "--o:support_key=" (join " " (.Values.ADDITIONAL_COLLABORA_OPTIONS | default list)) }}
|
{{- if contains "--o:support_key=" (join " " (.Values.ADDITIONAL_COLLABORA_OPTIONS | default list)) }}
|
||||||
image: ghcr.io/nextcloud-releases/aio-collabora-online:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-collabora-online:20260527_140826
|
||||||
{{- else }}
|
{{- else }}
|
||||||
image: ghcr.io/nextcloud-releases/aio-collabora:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-collabora:20260527_140826
|
||||||
{{- end }}
|
{{- end }}
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ spec:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: init-subpath
|
- name: init-subpath
|
||||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-alpine:20260527_140826
|
||||||
command:
|
command:
|
||||||
- mkdir
|
- mkdir
|
||||||
- "-p"
|
- "-p"
|
||||||
@@ -66,7 +66,7 @@ spec:
|
|||||||
value: nextcloud
|
value: nextcloud
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: "{{ .Values.TIMEZONE }}"
|
value: "{{ .Values.TIMEZONE }}"
|
||||||
image: ghcr.io/nextcloud-releases/aio-postgresql:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-postgresql:20260527_140826
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
command:
|
command:
|
||||||
|
|||||||
@@ -1,77 +0,0 @@
|
|||||||
{{- if eq .Values.EUROOFFICE_ENABLED "yes" }}
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
annotations:
|
|
||||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
|
||||||
labels:
|
|
||||||
io.kompose.service: nextcloud-aio-eurooffice
|
|
||||||
name: nextcloud-aio-eurooffice
|
|
||||||
namespace: "{{ .Values.NAMESPACE }}"
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
io.kompose.service: nextcloud-aio-eurooffice
|
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
annotations:
|
|
||||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
|
||||||
labels:
|
|
||||||
io.kompose.service: nextcloud-aio-eurooffice
|
|
||||||
spec:
|
|
||||||
initContainers:
|
|
||||||
- name: init-volumes
|
|
||||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260609_115915
|
|
||||||
command:
|
|
||||||
- chmod
|
|
||||||
- "777"
|
|
||||||
- /nextcloud-aio-eurooffice
|
|
||||||
volumeMounts:
|
|
||||||
- name: nextcloud-aio-eurooffice
|
|
||||||
mountPath: /nextcloud-aio-eurooffice
|
|
||||||
containers:
|
|
||||||
- env:
|
|
||||||
- name: AIO_LOG_LEVEL
|
|
||||||
value: "{{ .Values.AIO_LOG_LEVEL }}"
|
|
||||||
- name: JWT_ENABLED
|
|
||||||
value: "true"
|
|
||||||
- name: JWT_HEADER
|
|
||||||
value: AuthorizationJwt
|
|
||||||
- name: JWT_SECRET
|
|
||||||
value: "{{ .Values.EUROOFFICE_SECRET }}"
|
|
||||||
- name: LOG_LEVEL
|
|
||||||
value: "{{ .Values.AIO_LOG_LEVEL }}"
|
|
||||||
- name: TZ
|
|
||||||
value: "{{ .Values.TIMEZONE }}"
|
|
||||||
image: ghcr.io/nextcloud-releases/aio-eurooffice:20260609_115915
|
|
||||||
readinessProbe:
|
|
||||||
exec:
|
|
||||||
command:
|
|
||||||
- /healthcheck.sh
|
|
||||||
failureThreshold: 9
|
|
||||||
initialDelaySeconds: 60
|
|
||||||
periodSeconds: 30
|
|
||||||
timeoutSeconds: 30
|
|
||||||
livenessProbe:
|
|
||||||
exec:
|
|
||||||
command:
|
|
||||||
- /healthcheck.sh
|
|
||||||
failureThreshold: 9
|
|
||||||
initialDelaySeconds: 60
|
|
||||||
periodSeconds: 30
|
|
||||||
timeoutSeconds: 30
|
|
||||||
name: nextcloud-aio-eurooffice
|
|
||||||
ports:
|
|
||||||
- containerPort: 80
|
|
||||||
protocol: TCP
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /var/lib/euro-office
|
|
||||||
name: nextcloud-aio-eurooffice
|
|
||||||
volumes:
|
|
||||||
- name: nextcloud-aio-eurooffice
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: nextcloud-aio-eurooffice
|
|
||||||
{{- end }}
|
|
||||||
-18
@@ -1,18 +0,0 @@
|
|||||||
{{- if eq .Values.EUROOFFICE_ENABLED "yes" }}
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
io.kompose.service: nextcloud-aio-eurooffice
|
|
||||||
name: nextcloud-aio-eurooffice
|
|
||||||
namespace: "{{ .Values.NAMESPACE }}"
|
|
||||||
spec:
|
|
||||||
{{- if .Values.STORAGE_CLASS }}
|
|
||||||
storageClassName: {{ .Values.STORAGE_CLASS }}
|
|
||||||
{{- end }}
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: {{ .Values.EUROOFFICE_STORAGE_SIZE }}
|
|
||||||
{{- end }}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{{- if eq .Values.EUROOFFICE_ENABLED "yes" }}
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
annotations:
|
|
||||||
kompose.version: 1.38.0 (a8f5d1cbd)
|
|
||||||
labels:
|
|
||||||
io.kompose.service: nextcloud-aio-eurooffice
|
|
||||||
name: nextcloud-aio-eurooffice
|
|
||||||
namespace: "{{ .Values.NAMESPACE }}"
|
|
||||||
spec:
|
|
||||||
ipFamilyPolicy: PreferDualStack
|
|
||||||
ports:
|
|
||||||
- name: "80"
|
|
||||||
port: 80
|
|
||||||
targetPort: 80
|
|
||||||
selector:
|
|
||||||
io.kompose.service: nextcloud-aio-eurooffice
|
|
||||||
{{- end }}
|
|
||||||
@@ -24,7 +24,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: init-volumes
|
- name: init-volumes
|
||||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-alpine:20260527_140826
|
||||||
command:
|
command:
|
||||||
- chmod
|
- chmod
|
||||||
- "777"
|
- "777"
|
||||||
@@ -36,10 +36,10 @@ spec:
|
|||||||
- env:
|
- env:
|
||||||
- name: AIO_LOG_LEVEL
|
- name: AIO_LOG_LEVEL
|
||||||
value: "{{ .Values.AIO_LOG_LEVEL }}"
|
value: "{{ .Values.AIO_LOG_LEVEL }}"
|
||||||
- name: ELASTIC_PASSWORD
|
|
||||||
value: "{{ .Values.FULLTEXTSEARCH_PASSWORD }}"
|
|
||||||
- name: ES_JAVA_OPTS
|
- name: ES_JAVA_OPTS
|
||||||
value: "{{ .Values.FULLTEXTSEARCH_JAVA_OPTIONS | default "-Xms512M -Xmx512M" }}"
|
value: "{{ .Values.FULLTEXTSEARCH_JAVA_OPTIONS | default "-Xms512M -Xmx512M" }}"
|
||||||
|
- name: FULLTEXTSEARCH_PASSWORD
|
||||||
|
value: "{{ .Values.FULLTEXTSEARCH_PASSWORD }}"
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: "{{ .Values.TIMEZONE }}"
|
value: "{{ .Values.TIMEZONE }}"
|
||||||
- name: bootstrap.memory_lock
|
- name: bootstrap.memory_lock
|
||||||
@@ -59,12 +59,8 @@ spec:
|
|||||||
- name: xpack.license.self_generated.type
|
- name: xpack.license.self_generated.type
|
||||||
value: basic
|
value: basic
|
||||||
- name: xpack.security.enabled
|
- name: xpack.security.enabled
|
||||||
value: "true"
|
|
||||||
- name: xpack.security.http.ssl.enabled
|
|
||||||
value: "false"
|
value: "false"
|
||||||
- name: xpack.security.transport.ssl.enabled
|
image: ghcr.io/nextcloud-releases/aio-fulltextsearch:20260527_140826
|
||||||
value: "false"
|
|
||||||
image: ghcr.io/nextcloud-releases/aio-fulltextsearch:20260609_115915
|
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
command:
|
command:
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ spec:
|
|||||||
value: "{{ .Values.IMAGINARY_SECRET }}"
|
value: "{{ .Values.IMAGINARY_SECRET }}"
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: "{{ .Values.TIMEZONE }}"
|
value: "{{ .Values.TIMEZONE }}"
|
||||||
image: ghcr.io/nextcloud-releases/aio-imaginary:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-imaginary:20260527_140826
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
command:
|
command:
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ spec:
|
|||||||
# AIO settings start # Do not remove or change this line!
|
# AIO settings start # Do not remove or change this line!
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: init-volumes
|
- name: init-volumes
|
||||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-alpine:20260527_140826
|
||||||
command:
|
command:
|
||||||
- chmod
|
- chmod
|
||||||
- "777"
|
- "777"
|
||||||
@@ -106,12 +106,6 @@ spec:
|
|||||||
value: "{{ .Values.COLLABORA_ENABLED }}"
|
value: "{{ .Values.COLLABORA_ENABLED }}"
|
||||||
- name: COLLABORA_HOST
|
- name: COLLABORA_HOST
|
||||||
value: nextcloud-aio-collabora
|
value: nextcloud-aio-collabora
|
||||||
- name: EUROOFFICE_ENABLED
|
|
||||||
value: "{{ .Values.EUROOFFICE_ENABLED }}"
|
|
||||||
- name: EUROOFFICE_HOST
|
|
||||||
value: nextcloud-aio-eurooffice
|
|
||||||
- name: EUROOFFICE_SECRET
|
|
||||||
value: "{{ .Values.EUROOFFICE_SECRET }}"
|
|
||||||
- name: FULLTEXTSEARCH_ENABLED
|
- name: FULLTEXTSEARCH_ENABLED
|
||||||
value: "{{ .Values.FULLTEXTSEARCH_ENABLED }}"
|
value: "{{ .Values.FULLTEXTSEARCH_ENABLED }}"
|
||||||
- name: FULLTEXTSEARCH_HOST
|
- name: FULLTEXTSEARCH_HOST
|
||||||
@@ -198,7 +192,7 @@ spec:
|
|||||||
value: "{{ .Values.WHITEBOARD_ENABLED }}"
|
value: "{{ .Values.WHITEBOARD_ENABLED }}"
|
||||||
- name: WHITEBOARD_SECRET
|
- name: WHITEBOARD_SECRET
|
||||||
value: "{{ .Values.WHITEBOARD_SECRET }}"
|
value: "{{ .Values.WHITEBOARD_SECRET }}"
|
||||||
image: ghcr.io/nextcloud-releases/aio-nextcloud:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-nextcloud:20260527_140826
|
||||||
{{- if eq (.Values.RPSS_ENABLED | default "no") "yes" }} # AIO-config - do not change this comment!
|
{{- if eq (.Values.RPSS_ENABLED | default "no") "yes" }} # AIO-config - do not change this comment!
|
||||||
securityContext:
|
securityContext:
|
||||||
# The items below only work in container context
|
# The items below only work in container context
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ spec:
|
|||||||
value: nextcloud-aio-nextcloud
|
value: nextcloud-aio-nextcloud
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: "{{ .Values.TIMEZONE }}"
|
value: "{{ .Values.TIMEZONE }}"
|
||||||
image: ghcr.io/nextcloud-releases/aio-notify-push:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-notify-push:20260527_140826
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
command:
|
command:
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: init-volumes
|
- name: init-volumes
|
||||||
image: ghcr.io/nextcloud-releases/aio-alpine:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-alpine:20260527_140826
|
||||||
command:
|
command:
|
||||||
- chmod
|
- chmod
|
||||||
- "777"
|
- "777"
|
||||||
@@ -46,7 +46,7 @@ spec:
|
|||||||
value: "{{ .Values.AIO_LOG_LEVEL }}"
|
value: "{{ .Values.AIO_LOG_LEVEL }}"
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: "{{ .Values.TIMEZONE }}"
|
value: "{{ .Values.TIMEZONE }}"
|
||||||
image: ghcr.io/nextcloud-releases/aio-onlyoffice:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-onlyoffice:20260527_140826
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
command:
|
command:
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ spec:
|
|||||||
value: "{{ .Values.REDIS_PASSWORD }}"
|
value: "{{ .Values.REDIS_PASSWORD }}"
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: "{{ .Values.TIMEZONE }}"
|
value: "{{ .Values.TIMEZONE }}"
|
||||||
image: ghcr.io/nextcloud-releases/aio-redis:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-redis:20260527_140826
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
command:
|
command:
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ spec:
|
|||||||
value: "{{ .Values.TURN_SECRET }}"
|
value: "{{ .Values.TURN_SECRET }}"
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: "{{ .Values.TIMEZONE }}"
|
value: "{{ .Values.TIMEZONE }}"
|
||||||
image: ghcr.io/nextcloud-releases/aio-talk:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-talk:20260527_140826
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
command:
|
command:
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ spec:
|
|||||||
value: "{{ .Values.RECORDING_SECRET }}"
|
value: "{{ .Values.RECORDING_SECRET }}"
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: "{{ .Values.TIMEZONE }}"
|
value: "{{ .Values.TIMEZONE }}"
|
||||||
image: ghcr.io/nextcloud-releases/aio-talk-recording:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-talk-recording:20260527_140826
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
command:
|
command:
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ spec:
|
|||||||
value: redis
|
value: redis
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: "{{ .Values.TIMEZONE }}"
|
value: "{{ .Values.TIMEZONE }}"
|
||||||
image: ghcr.io/nextcloud-releases/aio-whiteboard:20260609_115915
|
image: ghcr.io/nextcloud-releases/aio-whiteboard:20260527_140826
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
command:
|
command:
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ for variable in "${DEPLOYMENTS[@]}"; do
|
|||||||
sed -i "/^ spec:/r /tmp/initcontainers.clamav" "$variable"
|
sed -i "/^ spec:/r /tmp/initcontainers.clamav" "$variable"
|
||||||
elif echo "$variable" | grep -q "nextcloud-deployment.yaml"; then
|
elif echo "$variable" | grep -q "nextcloud-deployment.yaml"; then
|
||||||
sed -i "/^ spec:/r /tmp/initcontainers.nextcloud" "$variable"
|
sed -i "/^ spec:/r /tmp/initcontainers.nextcloud" "$variable"
|
||||||
elif echo "$variable" | grep -q "fulltextsearch" || echo "$variable" | grep -q "onlyoffice" || echo "$variable" | grep -q "eurooffice" || echo "$variable" | grep -q "collabora"; then
|
elif echo "$variable" | grep -q "fulltextsearch" || echo "$variable" | grep -q "onlyoffice" || echo "$variable" | grep -q "collabora"; then
|
||||||
sed -i "/^ spec:/r /tmp/initcontainers" "$variable"
|
sed -i "/^ spec:/r /tmp/initcontainers" "$variable"
|
||||||
fi
|
fi
|
||||||
volumeNames="$(grep -A1 mountPath "$variable" | grep -v mountPath | sed 's|.*name: ||' | sed '/^--$/d')"
|
volumeNames="$(grep -A1 mountPath "$variable" | grep -v mountPath | sed 's|.*name: ||' | sed '/^--$/d')"
|
||||||
@@ -499,7 +499,7 @@ cat << EOL > /tmp/security.conf
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
EOL
|
EOL
|
||||||
# shellcheck disable=SC1083
|
# shellcheck disable=SC1083
|
||||||
find ./ \( -not -name '*collabora-deployment.yaml*' -not -name '*apache-deployment.yaml*' -not -name '*onlyoffice-deployment.yaml*' -not -name '*eurooffice-deployment.yaml*' -name "*deployment.yaml" \) -exec sed -i "/^ securityContext:$/r /tmp/security.conf" \{} \;
|
find ./ \( -not -name '*collabora-deployment.yaml*' -not -name '*apache-deployment.yaml*' -not -name '*onlyoffice-deployment.yaml*' -name "*deployment.yaml" \) -exec sed -i "/^ securityContext:$/r /tmp/security.conf" \{} \;
|
||||||
|
|
||||||
# shellcheck disable=SC1083
|
# shellcheck disable=SC1083
|
||||||
find ./ -name '*collabora-deployment.yaml*' -exec sed -i "/ADDITIONAL_COLLABORA_OPTIONS_PLACEHOLDER/d" \{} \;
|
find ./ -name '*collabora-deployment.yaml*' -exec sed -i "/ADDITIONAL_COLLABORA_OPTIONS_PLACEHOLDER/d" \{} \;
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
DATABASE_PASSWORD: # TODO! This needs to be a unique and good password!
|
DATABASE_PASSWORD: # TODO! This needs to be a unique and good password!
|
||||||
EUROOFFICE_SECRET: # TODO! This needs to be a unique and good password!
|
|
||||||
FULLTEXTSEARCH_PASSWORD: # TODO! This needs to be a unique and good password!
|
FULLTEXTSEARCH_PASSWORD: # TODO! This needs to be a unique and good password!
|
||||||
IMAGINARY_SECRET: # TODO! This needs to be a unique and good password!
|
IMAGINARY_SECRET: # TODO! This needs to be a unique and good password!
|
||||||
NC_DOMAIN: yourdomain.com # TODO! Needs to be changed to the domain that you want to use for Nextcloud.
|
NC_DOMAIN: yourdomain.com # TODO! Needs to be changed to the domain that you want to use for Nextcloud.
|
||||||
@@ -15,7 +14,6 @@ WHITEBOARD_SECRET: # TODO! This needs to be a unique and good password
|
|||||||
|
|
||||||
CLAMAV_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
CLAMAV_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||||
COLLABORA_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
COLLABORA_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||||
EUROOFFICE_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
|
||||||
FULLTEXTSEARCH_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
FULLTEXTSEARCH_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||||
IMAGINARY_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
IMAGINARY_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||||
ONLYOFFICE_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
ONLYOFFICE_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||||
@@ -48,7 +46,6 @@ CLAMAV_STORAGE_SIZE: 1Gi # You can change the size of the clamav volume th
|
|||||||
DATABASE_STORAGE_SIZE: 1Gi # You can change the size of the database volume that default to 1Gi with this value
|
DATABASE_STORAGE_SIZE: 1Gi # You can change the size of the database volume that default to 1Gi with this value
|
||||||
DATABASE_DUMP_STORAGE_SIZE: 1Gi # You can change the size of the database-dump volume that default to 1Gi with this value
|
DATABASE_DUMP_STORAGE_SIZE: 1Gi # You can change the size of the database-dump volume that default to 1Gi with this value
|
||||||
ELASTICSEARCH_STORAGE_SIZE: 1Gi # You can change the size of the elasticsearch volume that default to 1Gi with this value
|
ELASTICSEARCH_STORAGE_SIZE: 1Gi # You can change the size of the elasticsearch volume that default to 1Gi with this value
|
||||||
EUROOFFICE_STORAGE_SIZE: 1Gi # You can change the size of the eurooffice volume that default to 1Gi with this value
|
|
||||||
NEXTCLOUD_STORAGE_SIZE: 5Gi # You can change the size of the nextcloud volume that default to 1Gi with this value
|
NEXTCLOUD_STORAGE_SIZE: 5Gi # You can change the size of the nextcloud volume that default to 1Gi with this value
|
||||||
NEXTCLOUD_DATA_STORAGE_SIZE: 5Gi # You can change the size of the nextcloud-data volume that default to 1Gi with this value
|
NEXTCLOUD_DATA_STORAGE_SIZE: 5Gi # You can change the size of the nextcloud-data volume that default to 1Gi with this value
|
||||||
NEXTCLOUD_TRUSTED_CACERTS_STORAGE_SIZE: 1Gi # You can change the size of the nextcloud-trusted-cacerts volume that default to 1Gi with this value
|
NEXTCLOUD_TRUSTED_CACERTS_STORAGE_SIZE: 1Gi # You can change the size of the nextcloud-trusted-cacerts volume that default to 1Gi with this value
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
# PHP Docker Controller
|
# PHP Docker Controller
|
||||||
|
|
||||||
|
<!--test-->
|
||||||
|
|
||||||
This is the code for the PHP Docker controller.
|
This is the code for the PHP Docker controller.
|
||||||
|
|
||||||
## How to run
|
## How to run
|
||||||
|
|||||||
Generated
+13
-13
@@ -64,16 +64,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/guzzle",
|
"name": "guzzlehttp/guzzle",
|
||||||
"version": "7.11.1",
|
"version": "7.11.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/guzzle/guzzle.git",
|
"url": "https://github.com/guzzle/guzzle.git",
|
||||||
"reference": "5af96f374e0ab4ebd747b8310888c99d3adb0a8c"
|
"reference": "c987f8ce84b8434fa430795eca0f3430663da72b"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/5af96f374e0ab4ebd747b8310888c99d3adb0a8c",
|
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/c987f8ce84b8434fa430795eca0f3430663da72b",
|
||||||
"reference": "5af96f374e0ab4ebd747b8310888c99d3adb0a8c",
|
"reference": "c987f8ce84b8434fa430795eca0f3430663da72b",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
"bamarni/composer-bin-plugin": "^1.8.2",
|
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||||
"ext-curl": "*",
|
"ext-curl": "*",
|
||||||
"guzzle/client-integration-tests": "3.0.2",
|
"guzzle/client-integration-tests": "3.0.2",
|
||||||
"guzzlehttp/test-server": "^0.5",
|
"guzzlehttp/test-server": "^0.4",
|
||||||
"php-http/message-factory": "^1.1",
|
"php-http/message-factory": "^1.1",
|
||||||
"phpunit/phpunit": "^8.5.52 || ^9.6.34",
|
"phpunit/phpunit": "^8.5.52 || ^9.6.34",
|
||||||
"psr/log": "^1.1 || ^2.0 || ^3.0"
|
"psr/log": "^1.1 || ^2.0 || ^3.0"
|
||||||
@@ -172,7 +172,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/guzzle/guzzle/issues",
|
"issues": "https://github.com/guzzle/guzzle/issues",
|
||||||
"source": "https://github.com/guzzle/guzzle/tree/7.11.1"
|
"source": "https://github.com/guzzle/guzzle/tree/7.11.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -188,7 +188,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2026-06-07T22:54:06+00:00"
|
"time": "2026-06-02T12:40:51+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/promises",
|
"name": "guzzlehttp/promises",
|
||||||
@@ -1624,16 +1624,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-mbstring",
|
"name": "symfony/polyfill-mbstring",
|
||||||
"version": "v1.38.2",
|
"version": "v1.38.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||||
"reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6"
|
"reference": "14c5439eec4ccff081ac14eca2dc57feb2a66d92"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
|
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/14c5439eec4ccff081ac14eca2dc57feb2a66d92",
|
||||||
"reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
|
"reference": "14c5439eec4ccff081ac14eca2dc57feb2a66d92",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -1685,7 +1685,7 @@
|
|||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2"
|
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1705,7 +1705,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2026-05-27T06:59:30+00:00"
|
"time": "2026-05-26T12:51:13+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php80",
|
"name": "symfony/polyfill-php80",
|
||||||
|
|||||||
+1
-51
@@ -6,7 +6,6 @@
|
|||||||
"documentation": "https://github.com/nextcloud/all-in-one/discussions/2105",
|
"documentation": "https://github.com/nextcloud/all-in-one/discussions/2105",
|
||||||
"depends_on": [
|
"depends_on": [
|
||||||
"nextcloud-aio-onlyoffice",
|
"nextcloud-aio-onlyoffice",
|
||||||
"nextcloud-aio-eurooffice",
|
|
||||||
"nextcloud-aio-collabora",
|
"nextcloud-aio-collabora",
|
||||||
"nextcloud-aio-talk",
|
"nextcloud-aio-talk",
|
||||||
"nextcloud-aio-notify-push",
|
"nextcloud-aio-notify-push",
|
||||||
@@ -48,7 +47,6 @@
|
|||||||
"APACHE_PORT=%APACHE_PORT%",
|
"APACHE_PORT=%APACHE_PORT%",
|
||||||
"AIO_LOG_LEVEL=%AIO_LOG_LEVEL%",
|
"AIO_LOG_LEVEL=%AIO_LOG_LEVEL%",
|
||||||
"ONLYOFFICE_HOST=nextcloud-aio-onlyoffice",
|
"ONLYOFFICE_HOST=nextcloud-aio-onlyoffice",
|
||||||
"EUROOFFICE_HOST=nextcloud-aio-eurooffice",
|
|
||||||
"TZ=%TIMEZONE%",
|
"TZ=%TIMEZONE%",
|
||||||
"APACHE_MAX_SIZE=%APACHE_MAX_SIZE%",
|
"APACHE_MAX_SIZE=%APACHE_MAX_SIZE%",
|
||||||
"APACHE_MAX_TIME=%NEXTCLOUD_MAX_TIME%",
|
"APACHE_MAX_TIME=%NEXTCLOUD_MAX_TIME%",
|
||||||
@@ -225,7 +223,6 @@
|
|||||||
"TURN_SECRET=%TURN_SECRET%",
|
"TURN_SECRET=%TURN_SECRET%",
|
||||||
"SIGNALING_SECRET=%SIGNALING_SECRET%",
|
"SIGNALING_SECRET=%SIGNALING_SECRET%",
|
||||||
"ONLYOFFICE_SECRET=%ONLYOFFICE_SECRET%",
|
"ONLYOFFICE_SECRET=%ONLYOFFICE_SECRET%",
|
||||||
"EUROOFFICE_SECRET=%EUROOFFICE_SECRET%",
|
|
||||||
"AIO_URL=%AIO_URL%",
|
"AIO_URL=%AIO_URL%",
|
||||||
"AIO_LOG_LEVEL=%AIO_LOG_LEVEL%",
|
"AIO_LOG_LEVEL=%AIO_LOG_LEVEL%",
|
||||||
"NC_AIO_VERSION=v%AIO_VERSION%",
|
"NC_AIO_VERSION=v%AIO_VERSION%",
|
||||||
@@ -233,12 +230,10 @@
|
|||||||
"CLAMAV_ENABLED=%CLAMAV_ENABLED%",
|
"CLAMAV_ENABLED=%CLAMAV_ENABLED%",
|
||||||
"CLAMAV_HOST=nextcloud-aio-clamav",
|
"CLAMAV_HOST=nextcloud-aio-clamav",
|
||||||
"ONLYOFFICE_ENABLED=%ONLYOFFICE_ENABLED%",
|
"ONLYOFFICE_ENABLED=%ONLYOFFICE_ENABLED%",
|
||||||
"EUROOFFICE_ENABLED=%EUROOFFICE_ENABLED%",
|
|
||||||
"COLLABORA_ENABLED=%COLLABORA_ENABLED%",
|
"COLLABORA_ENABLED=%COLLABORA_ENABLED%",
|
||||||
"COLLABORA_HOST=nextcloud-aio-collabora",
|
"COLLABORA_HOST=nextcloud-aio-collabora",
|
||||||
"TALK_ENABLED=%TALK_ENABLED%",
|
"TALK_ENABLED=%TALK_ENABLED%",
|
||||||
"ONLYOFFICE_HOST=nextcloud-aio-onlyoffice",
|
"ONLYOFFICE_HOST=nextcloud-aio-onlyoffice",
|
||||||
"EUROOFFICE_HOST=nextcloud-aio-eurooffice",
|
|
||||||
"UPDATE_NEXTCLOUD_APPS=%UPDATE_NEXTCLOUD_APPS%",
|
"UPDATE_NEXTCLOUD_APPS=%UPDATE_NEXTCLOUD_APPS%",
|
||||||
"TZ=%TIMEZONE%",
|
"TZ=%TIMEZONE%",
|
||||||
"TALK_PORT=%TALK_PORT%",
|
"TALK_PORT=%TALK_PORT%",
|
||||||
@@ -362,7 +357,6 @@
|
|||||||
"secrets": [
|
"secrets": [
|
||||||
"REDIS_PASSWORD",
|
"REDIS_PASSWORD",
|
||||||
"ONLYOFFICE_SECRET",
|
"ONLYOFFICE_SECRET",
|
||||||
"EUROOFFICE_SECRET",
|
|
||||||
"RECORDING_SECRET"
|
"RECORDING_SECRET"
|
||||||
],
|
],
|
||||||
"restart": "unless-stopped",
|
"restart": "unless-stopped",
|
||||||
@@ -723,7 +717,7 @@
|
|||||||
{
|
{
|
||||||
"container_name": "nextcloud-aio-onlyoffice",
|
"container_name": "nextcloud-aio-onlyoffice",
|
||||||
"image_tag": "%AIO_CHANNEL%",
|
"image_tag": "%AIO_CHANNEL%",
|
||||||
"display_name": "OnlyOffice (deprecated)",
|
"display_name": "OnlyOffice",
|
||||||
"image": "ghcr.io/nextcloud-releases/aio-onlyoffice",
|
"image": "ghcr.io/nextcloud-releases/aio-onlyoffice",
|
||||||
"init": true,
|
"init": true,
|
||||||
"healthcheck": {
|
"healthcheck": {
|
||||||
@@ -764,50 +758,6 @@
|
|||||||
"NET_RAW"
|
"NET_RAW"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"container_name": "nextcloud-aio-eurooffice",
|
|
||||||
"image_tag": "%AIO_CHANNEL%",
|
|
||||||
"display_name": "EuroOffice",
|
|
||||||
"image": "ghcr.io/nextcloud-releases/aio-eurooffice",
|
|
||||||
"init": true,
|
|
||||||
"healthcheck": {
|
|
||||||
"start_period": "60s",
|
|
||||||
"test": "/healthcheck.sh",
|
|
||||||
"interval": "30s",
|
|
||||||
"timeout": "30s",
|
|
||||||
"start_interval": "5s",
|
|
||||||
"retries": 9
|
|
||||||
},
|
|
||||||
"expose": [
|
|
||||||
"80"
|
|
||||||
],
|
|
||||||
"internal_port": "80",
|
|
||||||
"environment": [
|
|
||||||
"AIO_LOG_LEVEL=%AIO_LOG_LEVEL%",
|
|
||||||
"LOG_LEVEL=%AIO_LOG_LEVEL%",
|
|
||||||
"TZ=%TIMEZONE%",
|
|
||||||
"JWT_ENABLED=true",
|
|
||||||
"JWT_HEADER=AuthorizationJwt",
|
|
||||||
"JWT_SECRET=%EUROOFFICE_SECRET%"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
{
|
|
||||||
"source": "nextcloud_aio_eurooffice",
|
|
||||||
"destination": "/var/lib/euro-office",
|
|
||||||
"writeable": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"secrets": [
|
|
||||||
"EUROOFFICE_SECRET"
|
|
||||||
],
|
|
||||||
"restart": "unless-stopped",
|
|
||||||
"profiles": [
|
|
||||||
"eurooffice"
|
|
||||||
],
|
|
||||||
"cap_drop": [
|
|
||||||
"NET_RAW"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"container_name": "nextcloud-aio-imaginary",
|
"container_name": "nextcloud-aio-imaginary",
|
||||||
"image_tag": "%AIO_CHANNEL%",
|
"image_tag": "%AIO_CHANNEL%",
|
||||||
|
|||||||
@@ -22,11 +22,9 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||||||
// Office suite radio buttons
|
// Office suite radio buttons
|
||||||
const collaboraRadio = document.getElementById('office-collabora');
|
const collaboraRadio = document.getElementById('office-collabora');
|
||||||
const onlyofficeRadio = document.getElementById('office-onlyoffice');
|
const onlyofficeRadio = document.getElementById('office-onlyoffice');
|
||||||
const euroofficeRadio = document.getElementById('office-eurooffice');
|
|
||||||
const noneRadio = document.getElementById('office-none');
|
const noneRadio = document.getElementById('office-none');
|
||||||
const collaboraHidden = document.getElementById('collabora');
|
const collaboraHidden = document.getElementById('collabora');
|
||||||
const onlyofficeHidden = document.getElementById('onlyoffice');
|
const onlyofficeHidden = document.getElementById('onlyoffice');
|
||||||
const euroofficeHidden = document.getElementById('eurooffice');
|
|
||||||
let initialOfficeSelection = null;
|
let initialOfficeSelection = null;
|
||||||
|
|
||||||
optionsContainersCheckboxes.forEach(checkbox => {
|
optionsContainersCheckboxes.forEach(checkbox => {
|
||||||
@@ -38,13 +36,11 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Store initial office suite selection
|
// Store initial office suite selection
|
||||||
if (collaboraRadio && onlyofficeRadio && euroofficeRadio && noneRadio) {
|
if (collaboraRadio && onlyofficeRadio && noneRadio) {
|
||||||
if (collaboraRadio.checked) {
|
if (collaboraRadio.checked) {
|
||||||
initialOfficeSelection = 'collabora';
|
initialOfficeSelection = 'collabora';
|
||||||
} else if (onlyofficeRadio.checked) {
|
} else if (onlyofficeRadio.checked) {
|
||||||
initialOfficeSelection = 'onlyoffice';
|
initialOfficeSelection = 'onlyoffice';
|
||||||
} else if (euroofficeRadio.checked) {
|
|
||||||
initialOfficeSelection = 'eurooffice';
|
|
||||||
} else {
|
} else {
|
||||||
initialOfficeSelection = 'none';
|
initialOfficeSelection = 'none';
|
||||||
}
|
}
|
||||||
@@ -61,28 +57,20 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Check office suite changes and sync to hidden inputs
|
// Check office suite changes and sync to hidden inputs
|
||||||
if (collaboraRadio && onlyofficeRadio && euroofficeRadio && noneRadio && collaboraHidden && onlyofficeHidden && euroofficeHidden) {
|
if (collaboraRadio && onlyofficeRadio && noneRadio && collaboraHidden && onlyofficeHidden) {
|
||||||
let currentOfficeSelection = null;
|
let currentOfficeSelection = null;
|
||||||
if (collaboraRadio.checked) {
|
if (collaboraRadio.checked) {
|
||||||
currentOfficeSelection = 'collabora';
|
currentOfficeSelection = 'collabora';
|
||||||
collaboraHidden.value = 'on';
|
collaboraHidden.value = 'on';
|
||||||
onlyofficeHidden.value = '';
|
onlyofficeHidden.value = '';
|
||||||
euroofficeHidden.value = '';
|
|
||||||
} else if (onlyofficeRadio.checked) {
|
} else if (onlyofficeRadio.checked) {
|
||||||
currentOfficeSelection = 'onlyoffice';
|
currentOfficeSelection = 'onlyoffice';
|
||||||
collaboraHidden.value = '';
|
collaboraHidden.value = '';
|
||||||
onlyofficeHidden.value = 'on';
|
onlyofficeHidden.value = 'on';
|
||||||
euroofficeHidden.value = '';
|
|
||||||
} else if (euroofficeRadio.checked) {
|
|
||||||
currentOfficeSelection = 'eurooffice';
|
|
||||||
collaboraHidden.value = '';
|
|
||||||
onlyofficeHidden.value = '';
|
|
||||||
euroofficeHidden.value = 'on';
|
|
||||||
} else {
|
} else {
|
||||||
currentOfficeSelection = 'none';
|
currentOfficeSelection = 'none';
|
||||||
collaboraHidden.value = '';
|
collaboraHidden.value = '';
|
||||||
onlyofficeHidden.value = '';
|
onlyofficeHidden.value = '';
|
||||||
euroofficeHidden.value = '';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentOfficeSelection !== initialOfficeSelection) {
|
if (currentOfficeSelection !== initialOfficeSelection) {
|
||||||
@@ -156,10 +144,9 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||||||
handleTalkVisibility(); // Ensure talk-recording is correctly initialized
|
handleTalkVisibility(); // Ensure talk-recording is correctly initialized
|
||||||
|
|
||||||
// Add event listeners for office suite radio buttons
|
// Add event listeners for office suite radio buttons
|
||||||
if (collaboraRadio && onlyofficeRadio && euroofficeRadio && noneRadio) {
|
if (collaboraRadio && onlyofficeRadio && noneRadio) {
|
||||||
collaboraRadio.addEventListener('change', checkForOptionContainerChanges);
|
collaboraRadio.addEventListener('change', checkForOptionContainerChanges);
|
||||||
onlyofficeRadio.addEventListener('change', checkForOptionContainerChanges);
|
onlyofficeRadio.addEventListener('change', checkForOptionContainerChanges);
|
||||||
euroofficeRadio.addEventListener('change', checkForOptionContainerChanges);
|
|
||||||
noneRadio.addEventListener('change', checkForOptionContainerChanges);
|
noneRadio.addEventListener('change', checkForOptionContainerChanges);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,12 +27,6 @@ document.addEventListener("DOMContentLoaded", function(event) {
|
|||||||
const onlyoffice = document.getElementById("office-onlyoffice");
|
const onlyoffice = document.getElementById("office-onlyoffice");
|
||||||
onlyoffice.disabled = true;
|
onlyoffice.disabled = true;
|
||||||
|
|
||||||
// EuroOffice
|
|
||||||
const eurooffice = document.getElementById("office-eurooffice");
|
|
||||||
if (eurooffice) {
|
|
||||||
eurooffice.disabled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Imaginary
|
// Imaginary
|
||||||
let imaginary = document.getElementById("imaginary");
|
let imaginary = document.getElementById("imaginary");
|
||||||
imaginary.disabled = true;
|
imaginary.disabled = true;
|
||||||
|
|||||||
@@ -104,7 +104,6 @@ $app->post('/api/docker/backup-test', AIO\Controller\DockerController::class . '
|
|||||||
$app->post('/api/docker/restore', AIO\Controller\DockerController::class . ':StartBackupContainerRestore');
|
$app->post('/api/docker/restore', AIO\Controller\DockerController::class . ':StartBackupContainerRestore');
|
||||||
$app->post('/api/docker/stop', AIO\Controller\DockerController::class . ':StopContainer');
|
$app->post('/api/docker/stop', AIO\Controller\DockerController::class . ':StopContainer');
|
||||||
$app->post('/api/docker/backup-reset-location', AIO\Controller\DockerController::class . ':DeleteBorgBackupConfig');
|
$app->post('/api/docker/backup-reset-location', AIO\Controller\DockerController::class . ':DeleteBorgBackupConfig');
|
||||||
$app->post('/api/docker/nextcloud-upgrade-to-latest-major', AIO\Controller\DockerController::class . ':RunNextcloudUpgradeToLatestMajor');
|
|
||||||
$app->post('/api/docker/prune', AIO\Controller\DockerController::class . ':SystemPrune');
|
$app->post('/api/docker/prune', AIO\Controller\DockerController::class . ':SystemPrune');
|
||||||
$app->get('/api/docker/logs', AIO\Controller\DockerController::class . ':GetLogs');
|
$app->get('/api/docker/logs', AIO\Controller\DockerController::class . ':GetLogs');
|
||||||
$app->post('/api/auth/login', AIO\Controller\LoginController::class . ':TryLogin');
|
$app->post('/api/auth/login', AIO\Controller\LoginController::class . ':TryLogin');
|
||||||
@@ -153,7 +152,6 @@ $app->get('/containers', function (Request $request, Response $response, array $
|
|||||||
'current_channel' => $dockerActionManager->GetCurrentChannel(),
|
'current_channel' => $dockerActionManager->GetCurrentChannel(),
|
||||||
'is_clamav_enabled' => $configurationManager->isClamavEnabled,
|
'is_clamav_enabled' => $configurationManager->isClamavEnabled,
|
||||||
'is_onlyoffice_enabled' => $configurationManager->isOnlyofficeEnabled,
|
'is_onlyoffice_enabled' => $configurationManager->isOnlyofficeEnabled,
|
||||||
'is_eurooffice_enabled' => $configurationManager->isEuroofficeEnabled,
|
|
||||||
'is_collabora_enabled' => $configurationManager->isCollaboraEnabled,
|
'is_collabora_enabled' => $configurationManager->isCollaboraEnabled,
|
||||||
'is_talk_enabled' => $configurationManager->isTalkEnabled,
|
'is_talk_enabled' => $configurationManager->isTalkEnabled,
|
||||||
'borg_restore_password' => $configurationManager->borgRestorePassword,
|
'borg_restore_password' => $configurationManager->borgRestorePassword,
|
||||||
|
|||||||
+4
-16
@@ -483,16 +483,14 @@ input[type="checkbox"]:disabled:not(:checked) + label {
|
|||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
align-self: start;
|
align-self: start;
|
||||||
width: min(600px, calc(100vw - 4rem));
|
width: min(700px, calc(100vw - 4rem));
|
||||||
height: min(400px, calc(100vh - 14rem));
|
height: min(400px, calc(100vh - 14rem));
|
||||||
border-radius: var(--border-radius-large);
|
border-radius: var(--border-radius-large);
|
||||||
border: solid thin rgb(192, 192, 192);
|
border: solid thin rgb(192, 192, 192);
|
||||||
background-color: var(--color-main-background);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.overlay-iframe {
|
.overlay-iframe {
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
font-family: monospace, system-ui, -apple-system, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, Ubuntu, 'Helvetica Neue', 'Noto Sans', 'Liberation Sans', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.loader {
|
.loader {
|
||||||
@@ -608,15 +606,13 @@ input[type="checkbox"]:disabled:not(:checked) + label {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#office-collabora:checked + .office-card,
|
#office-collabora:checked + .office-card,
|
||||||
#office-onlyoffice:checked + .office-card,
|
#office-onlyoffice:checked + .office-card {
|
||||||
#office-eurooffice:checked + .office-card {
|
|
||||||
border-color: var(--color-nextcloud-blue);
|
border-color: var(--color-nextcloud-blue);
|
||||||
background: linear-gradient(135deg, rgba(0, 130, 201, 0.08) 0%, rgba(0, 130, 201, 0.02) 100%);
|
background: linear-gradient(135deg, rgba(0, 130, 201, 0.08) 0%, rgba(0, 130, 201, 0.02) 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-theme="dark"] #office-collabora:checked + .office-card,
|
[data-theme="dark"] #office-collabora:checked + .office-card,
|
||||||
[data-theme="dark"] #office-onlyoffice:checked + .office-card,
|
[data-theme="dark"] #office-onlyoffice:checked + .office-card {
|
||||||
[data-theme="dark"] #office-eurooffice:checked + .office-card {
|
|
||||||
background: linear-gradient(135deg, rgba(0, 145, 242, 0.15) 0%, rgba(0, 145, 242, 0.03) 100%);
|
background: linear-gradient(135deg, rgba(0, 145, 242, 0.15) 0%, rgba(0, 145, 242, 0.03) 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -635,21 +631,13 @@ input[type="checkbox"]:disabled:not(:checked) + label {
|
|||||||
color: var(--color-main-text);
|
color: var(--color-main-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
.office-powered-by {
|
|
||||||
margin: 4px 0 0;
|
|
||||||
font-size: 13px;
|
|
||||||
color: var(--color-main-text);
|
|
||||||
opacity: 0.7;
|
|
||||||
}
|
|
||||||
|
|
||||||
.office-checkmark {
|
.office-checkmark {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#office-collabora:checked + .office-card .office-checkmark,
|
#office-collabora:checked + .office-card .office-checkmark,
|
||||||
#office-onlyoffice:checked + .office-card .office-checkmark,
|
#office-onlyoffice:checked + .office-card .office-checkmark {
|
||||||
#office-eurooffice:checked + .office-card .office-checkmark {
|
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,10 +78,6 @@ readonly class ContainerDefinitionFetcher {
|
|||||||
if (!$this->configurationManager->isOnlyofficeEnabled) {
|
if (!$this->configurationManager->isOnlyofficeEnabled) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} elseif ($entry['container_name'] === 'nextcloud-aio-eurooffice') {
|
|
||||||
if (!$this->configurationManager->isEuroofficeEnabled) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
} elseif ($entry['container_name'] === 'nextcloud-aio-collabora') {
|
} elseif ($entry['container_name'] === 'nextcloud-aio-collabora') {
|
||||||
if (!$this->configurationManager->isCollaboraEnabled) {
|
if (!$this->configurationManager->isCollaboraEnabled) {
|
||||||
continue;
|
continue;
|
||||||
@@ -198,10 +194,6 @@ readonly class ContainerDefinitionFetcher {
|
|||||||
if (!$this->configurationManager->isOnlyofficeEnabled) {
|
if (!$this->configurationManager->isOnlyofficeEnabled) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} elseif ($value === 'nextcloud-aio-eurooffice') {
|
|
||||||
if (!$this->configurationManager->isEuroofficeEnabled) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
} elseif ($value === 'nextcloud-aio-collabora') {
|
} elseif ($value === 'nextcloud-aio-collabora') {
|
||||||
if (!$this->configurationManager->isCollaboraEnabled) {
|
if (!$this->configurationManager->isCollaboraEnabled) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -81,19 +81,12 @@ readonly class ConfigurationController {
|
|||||||
if ($officeSuiteChoice === 'collabora') {
|
if ($officeSuiteChoice === 'collabora') {
|
||||||
$this->configurationManager->isCollaboraEnabled = true;
|
$this->configurationManager->isCollaboraEnabled = true;
|
||||||
$this->configurationManager->isOnlyofficeEnabled = false;
|
$this->configurationManager->isOnlyofficeEnabled = false;
|
||||||
$this->configurationManager->isEuroofficeEnabled = false;
|
|
||||||
} elseif ($officeSuiteChoice === 'onlyoffice') {
|
} elseif ($officeSuiteChoice === 'onlyoffice') {
|
||||||
$this->configurationManager->isCollaboraEnabled = false;
|
$this->configurationManager->isCollaboraEnabled = false;
|
||||||
$this->configurationManager->isOnlyofficeEnabled = true;
|
$this->configurationManager->isOnlyofficeEnabled = true;
|
||||||
$this->configurationManager->isEuroofficeEnabled = false;
|
|
||||||
} elseif ($officeSuiteChoice === 'eurooffice') {
|
|
||||||
$this->configurationManager->isCollaboraEnabled = false;
|
|
||||||
$this->configurationManager->isOnlyofficeEnabled = false;
|
|
||||||
$this->configurationManager->isEuroofficeEnabled = true;
|
|
||||||
} else {
|
} else {
|
||||||
$this->configurationManager->isCollaboraEnabled = false;
|
$this->configurationManager->isCollaboraEnabled = false;
|
||||||
$this->configurationManager->isOnlyofficeEnabled = false;
|
$this->configurationManager->isOnlyofficeEnabled = false;
|
||||||
$this->configurationManager->isEuroofficeEnabled = false;
|
|
||||||
}
|
}
|
||||||
$this->configurationManager->isClamavEnabled = isset($request->getParsedBody()['clamav']);
|
$this->configurationManager->isClamavEnabled = isset($request->getParsedBody()['clamav']);
|
||||||
$this->configurationManager->isTalkEnabled = isset($request->getParsedBody()['talk']);
|
$this->configurationManager->isTalkEnabled = isset($request->getParsedBody()['talk']);
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ use Slim\Psr7\NonBufferedBody;
|
|||||||
|
|
||||||
readonly class DockerController {
|
readonly class DockerController {
|
||||||
private const string TOP_CONTAINER = 'nextcloud-aio-apache';
|
private const string TOP_CONTAINER = 'nextcloud-aio-apache';
|
||||||
private const string LATEST_MAJOR_VERSION = '34';
|
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private DockerActionManager $dockerActionManager,
|
private DockerActionManager $dockerActionManager,
|
||||||
@@ -222,7 +221,7 @@ readonly class DockerController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isset($request->getParsedBody()['install_latest_major'])) {
|
if (isset($request->getParsedBody()['install_latest_major'])) {
|
||||||
$installLatestMajor = self::LATEST_MAJOR_VERSION;
|
$installLatestMajor = '34';
|
||||||
} else {
|
} else {
|
||||||
$installLatestMajor = '';
|
$installLatestMajor = '';
|
||||||
}
|
}
|
||||||
@@ -299,7 +298,7 @@ readonly class DockerController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($addToStreamingResponseBody !== null) {
|
if ($addToStreamingResponseBody !== null) {
|
||||||
$addToStreamingResponseBody("Stopping container", $container);
|
$addToStreamingResponseBody($container, "Stopping container");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop itself first and then all the dependencies
|
// Stop itself first and then all the dependencies
|
||||||
@@ -334,30 +333,14 @@ readonly class DockerController {
|
|||||||
return $response->withStatus(201)->withHeader('Location', '.');
|
return $response->withStatus(201)->withHeader('Location', '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function RunNextcloudUpgradeToLatestMajor(Request $request, Response $response, array $args) : Response {
|
|
||||||
$this->configurationManager->installLatestMajor = self::LATEST_MAJOR_VERSION;
|
|
||||||
|
|
||||||
// Get streaming response start and closure
|
|
||||||
$nonbufResp = $this->startStreamingResponse($response);
|
|
||||||
$addToStreamingResponseBody = $this->getAddToStreamingResponseBody($nonbufResp);
|
|
||||||
|
|
||||||
$this->dockerActionManager->RunNextcloudUpgradeToLatestMajor($addToStreamingResponseBody);
|
|
||||||
|
|
||||||
// We automatically reload after 10s so that the output can be read or copied if necessary
|
|
||||||
$addToStreamingResponseBody("Automatically reloading the page after 10s.");
|
|
||||||
sleep(10);
|
|
||||||
|
|
||||||
// End streaming response
|
|
||||||
$this->finalizeStreamingResponse($nonbufResp);
|
|
||||||
return $nonbufResp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function SystemPrune(Request $request, Response $response, array $args) : Response {
|
public function SystemPrune(Request $request, Response $response, array $args) : Response {
|
||||||
// Get streaming response start and closure
|
// Get streaming response start and closure
|
||||||
$nonbufResp = $this->startStreamingResponse($response);
|
$nonbufResp = $this->startStreamingResponse($response);
|
||||||
|
|
||||||
$body = $nonbufResp->getBody();
|
$body = $nonbufResp->getBody();
|
||||||
$addToStreamingResponseBody = $this->getAddToStreamingResponseBody($nonbufResp);
|
$addToStreamingResponseBody = function (string $message) use ($body) : void {
|
||||||
|
$body->write("<div>$message</div>");
|
||||||
|
};
|
||||||
|
|
||||||
$this->dockerActionManager->SystemPrune($addToStreamingResponseBody);
|
$this->dockerActionManager->SystemPrune($addToStreamingResponseBody);
|
||||||
|
|
||||||
@@ -418,7 +401,7 @@ readonly class DockerController {
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en" class="overlay-iframe">
|
<html lang="en" class="overlay-iframe">
|
||||||
<head>
|
<head>
|
||||||
<link rel="stylesheet" href="../../style.css?v12" media="all" />
|
<link rel="stylesheet" href="../../style.css?v9" media="all" />
|
||||||
<script type="text/javascript" src="../../apply-theme.js?v1"></script>
|
<script type="text/javascript" src="../../apply-theme.js?v1"></script>
|
||||||
<script type="text/javascript" src="../../scroll-into-view.js"></script>
|
<script type="text/javascript" src="../../scroll-into-view.js"></script>
|
||||||
</head>
|
</head>
|
||||||
@@ -443,17 +426,12 @@ readonly class DockerController {
|
|||||||
return $nonbufResp;
|
return $nonbufResp;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getAddToStreamingResponseBody(Response $nonbufResp) : \Closure {
|
private function getAddToStreamingResponseBody(Response $nonbufResp) : ?\Closure {
|
||||||
// Create a closure to pass around to the code, which should to the logging (because it e.g. decides
|
// Create a closure to pass around to the code, which should to the logging (because it e.g. decides
|
||||||
// if it'll actually pull an image), but which should not need to know anything about the
|
// if it'll actually pull an image), but which should not need to know anything about the
|
||||||
// wanted markup or formatting.
|
// wanted markup or formatting.
|
||||||
$addToStreamingResponseBody = function (string $message, ?Container $container = null) use ($nonbufResp) : void {
|
$addToStreamingResponseBody = function (Container $container, string $message) use ($nonbufResp) : void {
|
||||||
// Strip ANSI codes.
|
$nonbufResp->getBody()->write("<div>{$container->displayName}: {$message}</div>");
|
||||||
$message = preg_replace('/\e[[][A-Za-z0-9];?[0-9]*m?/', '', $message);
|
|
||||||
if ($container) {
|
|
||||||
$message = "{$container->displayName}: {$message}";
|
|
||||||
}
|
|
||||||
$nonbufResp->getBody()->write("<div>" . htmlspecialchars("{$message}", ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') . "</div>");
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return $addToStreamingResponseBody;
|
return $addToStreamingResponseBody;
|
||||||
|
|||||||
@@ -99,11 +99,6 @@ class ConfigurationManager
|
|||||||
set { $this->set('isOnlyofficeEnabled', $value); }
|
set { $this->set('isOnlyofficeEnabled', $value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool $isEuroofficeEnabled {
|
|
||||||
get => $this->get('isEuroofficeEnabled', false);
|
|
||||||
set { $this->set('isEuroofficeEnabled', $value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool $isCollaboraEnabled {
|
public bool $isCollaboraEnabled {
|
||||||
// Type-cast because old configs could have 1/0 for this key.
|
// Type-cast because old configs could have 1/0 for this key.
|
||||||
get => (bool) $this->get('isCollaboraEnabled', true);
|
get => (bool) $this->get('isCollaboraEnabled', true);
|
||||||
@@ -1092,7 +1087,6 @@ class ConfigurationManager
|
|||||||
'CLAMAV_ENABLED' => $this->isClamavEnabled ? 'yes' : '',
|
'CLAMAV_ENABLED' => $this->isClamavEnabled ? 'yes' : '',
|
||||||
'TALK_RECORDING_ENABLED' => $this->isTalkRecordingEnabled ? 'yes' : '',
|
'TALK_RECORDING_ENABLED' => $this->isTalkRecordingEnabled ? 'yes' : '',
|
||||||
'ONLYOFFICE_ENABLED' => $this->isOnlyofficeEnabled ? 'yes' : '',
|
'ONLYOFFICE_ENABLED' => $this->isOnlyofficeEnabled ? 'yes' : '',
|
||||||
'EUROOFFICE_ENABLED' => $this->isEuroofficeEnabled ? 'yes' : '',
|
|
||||||
'COLLABORA_ENABLED' => $this->isCollaboraEnabled ? 'yes' : '',
|
'COLLABORA_ENABLED' => $this->isCollaboraEnabled ? 'yes' : '',
|
||||||
'TALK_ENABLED' => $this->isTalkEnabled ? 'yes' : '',
|
'TALK_ENABLED' => $this->isTalkEnabled ? 'yes' : '',
|
||||||
'UPDATE_NEXTCLOUD_APPS' => ($this->isDailyBackupRunning() && $this->areAutomaticUpdatesEnabled()) ? 'yes' : '',
|
'UPDATE_NEXTCLOUD_APPS' => ($this->isDailyBackupRunning() && $this->areAutomaticUpdatesEnabled()) ? 'yes' : '',
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ use AIO\Data\DataConst;
|
|||||||
use AIO\Helper\NetworkHelper;
|
use AIO\Helper\NetworkHelper;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
use GuzzleHttp\Exception\RequestException;
|
use GuzzleHttp\Exception\RequestException;
|
||||||
use GuzzleHttp\Psr7\Utils;
|
|
||||||
use http\Env\Response;
|
use http\Env\Response;
|
||||||
|
|
||||||
readonly class DockerActionManager {
|
readonly class DockerActionManager {
|
||||||
@@ -49,7 +48,7 @@ readonly class DockerActionManager {
|
|||||||
public function GetContainerRunningState(Container $container): ContainerState {
|
public function GetContainerRunningState(Container $container): ContainerState {
|
||||||
$url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($container->identifier)));
|
$url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($container->identifier)));
|
||||||
try {
|
try {
|
||||||
$response = $this->sendHttpRequest('GET', $url);
|
$response = $this->guzzleClient->get($url);
|
||||||
} catch (RequestException $e) {
|
} catch (RequestException $e) {
|
||||||
if ($e->getCode() === 404) {
|
if ($e->getCode() === 404) {
|
||||||
return ContainerState::ImageDoesNotExist;
|
return ContainerState::ImageDoesNotExist;
|
||||||
@@ -69,7 +68,7 @@ readonly class DockerActionManager {
|
|||||||
public function GetContainerRestartingState(Container $container): ContainerState {
|
public function GetContainerRestartingState(Container $container): ContainerState {
|
||||||
$url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($container->identifier)));
|
$url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($container->identifier)));
|
||||||
try {
|
try {
|
||||||
$response = $this->sendHttpRequest('GET', $url);
|
$response = $this->guzzleClient->get($url);
|
||||||
} catch (RequestException $e) {
|
} catch (RequestException $e) {
|
||||||
if ($e->getCode() === 404) {
|
if ($e->getCode() === 404) {
|
||||||
return ContainerState::ImageDoesNotExist;
|
return ContainerState::ImageDoesNotExist;
|
||||||
@@ -139,7 +138,7 @@ readonly class DockerActionManager {
|
|||||||
public function DeleteContainer(Container $container): void {
|
public function DeleteContainer(Container $container): void {
|
||||||
$url = $this->BuildApiUrl(sprintf('containers/%s?v=true', urlencode($container->identifier)));
|
$url = $this->BuildApiUrl(sprintf('containers/%s?v=true', urlencode($container->identifier)));
|
||||||
try {
|
try {
|
||||||
$this->sendHttpRequest('DELETE', $url);
|
$this->guzzleClient->delete($url);
|
||||||
} catch (RequestException $e) {
|
} catch (RequestException $e) {
|
||||||
if ($e->getCode() !== 404) {
|
if ($e->getCode() !== 404) {
|
||||||
throw $e;
|
throw $e;
|
||||||
@@ -156,7 +155,7 @@ readonly class DockerActionManager {
|
|||||||
// Delete the borg cache volume
|
// Delete the borg cache volume
|
||||||
$url = $this->BuildApiUrl('volumes/nextcloud_aio_backup_cache');
|
$url = $this->BuildApiUrl('volumes/nextcloud_aio_backup_cache');
|
||||||
try {
|
try {
|
||||||
$this->sendHttpRequest('DELETE', $url);
|
$this->guzzleClient->delete($url);
|
||||||
error_log('nextcloud_aio_backup_cache volume deleted successfully.');
|
error_log('nextcloud_aio_backup_cache volume deleted successfully.');
|
||||||
} catch (RequestException $e) {
|
} catch (RequestException $e) {
|
||||||
if ($e->getCode() !== 404) {
|
if ($e->getCode() !== 404) {
|
||||||
@@ -175,7 +174,7 @@ readonly class DockerActionManager {
|
|||||||
urlencode($id),
|
urlencode($id),
|
||||||
$since
|
$since
|
||||||
));
|
));
|
||||||
$responseBody = (string)$this->sendHttpRequest('GET', $url)->getBody();
|
$responseBody = (string)$this->guzzleClient->get($url)->getBody();
|
||||||
|
|
||||||
$response = "";
|
$response = "";
|
||||||
$separator = "\r\n";
|
$separator = "\r\n";
|
||||||
@@ -195,9 +194,9 @@ readonly class DockerActionManager {
|
|||||||
$url = $this->BuildApiUrl(sprintf('containers/%s/start', urlencode($container->identifier)));
|
$url = $this->BuildApiUrl(sprintf('containers/%s/start', urlencode($container->identifier)));
|
||||||
try {
|
try {
|
||||||
if ($addToStreamingResponseBody !== null) {
|
if ($addToStreamingResponseBody !== null) {
|
||||||
$addToStreamingResponseBody("Starting container", $container);
|
$addToStreamingResponseBody($container, "Starting container");
|
||||||
}
|
}
|
||||||
$this->sendHttpRequest('POST', $url);
|
$this->guzzleClient->post($url);
|
||||||
} catch (RequestException $e) {
|
} catch (RequestException $e) {
|
||||||
throw new \Exception("Could not start container " . $container->identifier . ": " . $e->getResponse()?->getBody()->getContents());
|
throw new \Exception("Could not start container " . $container->identifier . ": " . $e->getResponse()?->getBody()->getContents());
|
||||||
}
|
}
|
||||||
@@ -216,7 +215,7 @@ readonly class DockerActionManager {
|
|||||||
|
|
||||||
$firstChar = substr($volume->name, 0, 1);
|
$firstChar = substr($volume->name, 0, 1);
|
||||||
if (!in_array($firstChar, $forbiddenChars)) {
|
if (!in_array($firstChar, $forbiddenChars)) {
|
||||||
$this->sendHttpRequest(
|
$this->guzzleClient->request(
|
||||||
'POST',
|
'POST',
|
||||||
$url,
|
$url,
|
||||||
[
|
[
|
||||||
@@ -478,14 +477,6 @@ readonly class DockerActionManager {
|
|||||||
$regEx = '/\s+(?=--o:)/';
|
$regEx = '/\s+(?=--o:)/';
|
||||||
$requestBody['Cmd'] = preg_split($regEx, rtrim($this->configurationManager->collaboraAdditionalOptions));
|
$requestBody['Cmd'] = preg_split($regEx, rtrim($this->configurationManager->collaboraAdditionalOptions));
|
||||||
}
|
}
|
||||||
// Special things for the scrutiny container which should not be exposed in the containers.json
|
|
||||||
} elseif ($container->identifier === 'nextcloud-aio-scrutiny') {
|
|
||||||
// Allow it to access block devices
|
|
||||||
$requestBody['HostConfig']['DeviceCgroupRules'] = ["b *:* rmw"];
|
|
||||||
// Special things for the makemkv container which should not be exposed in the containers.json
|
|
||||||
} elseif ($container->identifier === 'nextcloud-aio-makemkv') {
|
|
||||||
// Allow it to access block devices
|
|
||||||
$requestBody['HostConfig']['DeviceCgroupRules'] = ["b 11:* rmw", "c 21:* rmw"];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count($mounts) > 0) {
|
if (count($mounts) > 0) {
|
||||||
@@ -503,7 +494,7 @@ readonly class DockerActionManager {
|
|||||||
|
|
||||||
$url = $this->BuildApiUrl('containers/create?name=' . $container->identifier);
|
$url = $this->BuildApiUrl('containers/create?name=' . $container->identifier);
|
||||||
try {
|
try {
|
||||||
$this->sendHttpRequest(
|
$this->guzzleClient->request(
|
||||||
'POST',
|
'POST',
|
||||||
$url,
|
$url,
|
||||||
[
|
[
|
||||||
@@ -560,10 +551,10 @@ readonly class DockerActionManager {
|
|||||||
$imageIsThere = true;
|
$imageIsThere = true;
|
||||||
try {
|
try {
|
||||||
if ($addToStreamingResponseBody) {
|
if ($addToStreamingResponseBody) {
|
||||||
$addToStreamingResponseBody("Pulling image", $container);
|
$addToStreamingResponseBody($container, "Pulling image");
|
||||||
}
|
}
|
||||||
$imageUrl = $this->BuildApiUrl(sprintf('images/%s/json', $encodedImageName));
|
$imageUrl = $this->BuildApiUrl(sprintf('images/%s/json', $encodedImageName));
|
||||||
$this->sendHttpRequest('GET', $imageUrl)->getBody()->getContents();
|
$this->guzzleClient->get($imageUrl)->getBody()->getContents();
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
$imageIsThere = false;
|
$imageIsThere = false;
|
||||||
}
|
}
|
||||||
@@ -571,7 +562,7 @@ readonly class DockerActionManager {
|
|||||||
$maxRetries = 3;
|
$maxRetries = 3;
|
||||||
for ($attempt = 1; $attempt <= $maxRetries; $attempt++) {
|
for ($attempt = 1; $attempt <= $maxRetries; $attempt++) {
|
||||||
try {
|
try {
|
||||||
$this->sendHttpRequest('POST', $url);
|
$this->guzzleClient->post($url);
|
||||||
break;
|
break;
|
||||||
} catch (RequestException $e) {
|
} catch (RequestException $e) {
|
||||||
$message = "Could not pull image " . $imageName . " (attempt $attempt/$maxRetries): " . $e->getResponse()?->getBody()->getContents();
|
$message = "Could not pull image " . $imageName . " (attempt $attempt/$maxRetries): " . $e->getResponse()?->getBody()->getContents();
|
||||||
@@ -656,11 +647,11 @@ readonly class DockerActionManager {
|
|||||||
private function GetRepoDigestsOfContainer(string $containerName): ?array {
|
private function GetRepoDigestsOfContainer(string $containerName): ?array {
|
||||||
try {
|
try {
|
||||||
$containerUrl = $this->BuildApiUrl(sprintf('containers/%s/json', $containerName));
|
$containerUrl = $this->BuildApiUrl(sprintf('containers/%s/json', $containerName));
|
||||||
$containerOutput = json_decode($this->sendHttpRequest('GET', $containerUrl)->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
|
$containerOutput = json_decode($this->guzzleClient->get($containerUrl)->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
|
||||||
$imageName = $containerOutput['Image'];
|
$imageName = $containerOutput['Image'];
|
||||||
|
|
||||||
$imageUrl = $this->BuildApiUrl(sprintf('images/%s/json', $imageName));
|
$imageUrl = $this->BuildApiUrl(sprintf('images/%s/json', $imageName));
|
||||||
$imageOutput = json_decode($this->sendHttpRequest('GET', $imageUrl)->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
|
$imageOutput = json_decode($this->guzzleClient->get($imageUrl)->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
|
||||||
|
|
||||||
if (!isset($imageOutput['RepoDigests'])) {
|
if (!isset($imageOutput['RepoDigests'])) {
|
||||||
error_log('RepoDigests is not set of container ' . $containerName);
|
error_log('RepoDigests is not set of container ' . $containerName);
|
||||||
@@ -704,7 +695,7 @@ readonly class DockerActionManager {
|
|||||||
$containerName = 'nextcloud-aio-mastercontainer';
|
$containerName = 'nextcloud-aio-mastercontainer';
|
||||||
$url = $this->BuildApiUrl(sprintf('containers/%s/json', $containerName));
|
$url = $this->BuildApiUrl(sprintf('containers/%s/json', $containerName));
|
||||||
try {
|
try {
|
||||||
$output = json_decode($this->sendHttpRequest('GET', $url)->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
|
$output = json_decode($this->guzzleClient->get($url)->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
|
||||||
$imageNameArray = explode(':', $output['Config']['Image']);
|
$imageNameArray = explode(':', $output['Config']['Image']);
|
||||||
if (count($imageNameArray) === 2) {
|
if (count($imageNameArray) === 2) {
|
||||||
$imageName = $imageNameArray[0];
|
$imageName = $imageNameArray[0];
|
||||||
@@ -731,7 +722,7 @@ readonly class DockerActionManager {
|
|||||||
$containerName = 'nextcloud-aio-mastercontainer';
|
$containerName = 'nextcloud-aio-mastercontainer';
|
||||||
$url = $this->BuildApiUrl(sprintf('containers/%s/json', $containerName));
|
$url = $this->BuildApiUrl(sprintf('containers/%s/json', $containerName));
|
||||||
try {
|
try {
|
||||||
$output = json_decode($this->sendHttpRequest('GET', $url)->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
|
$output = json_decode($this->guzzleClient->get($url)->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
|
||||||
$tagArray = explode(':', $output['Config']['Image']);
|
$tagArray = explode(':', $output['Config']['Image']);
|
||||||
if (count($tagArray) === 2) {
|
if (count($tagArray) === 2) {
|
||||||
$tag = $tagArray[1];
|
$tag = $tagArray[1];
|
||||||
@@ -772,37 +763,26 @@ readonly class DockerActionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function sendNotification(Container $container, string $subject, string $message, string $file = '/notify.sh'): void {
|
public function sendNotification(Container $container, string $subject, string $message, string $file = '/notify.sh'): void {
|
||||||
$this->execCommandInContainer($container, ['bash', $file, $subject, $message]);
|
if ($this->GetContainerStartingState($container) === ContainerState::Running) {
|
||||||
}
|
|
||||||
|
|
||||||
public function execCommandInContainer(Container $container, array $cmd, ?\Closure $outputCallback = null): void {
|
|
||||||
if ($cmd === []) {
|
|
||||||
throw new \InvalidArgumentException('$cmd must not be empty.');
|
|
||||||
}
|
|
||||||
foreach ($cmd as $arg) {
|
|
||||||
if (!is_string($arg) || $arg === '') {
|
|
||||||
throw new \InvalidArgumentException('Every element of $cmd must be a non-empty string.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->GetContainerStartingState($container) !== ContainerState::Running) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$containerName = $container->identifier;
|
$containerName = $container->identifier;
|
||||||
|
|
||||||
// Create exec instance
|
// schedule the exec
|
||||||
$url = $this->BuildApiUrl(sprintf('containers/%s/exec', urlencode($containerName)));
|
$url = $this->BuildApiUrl(sprintf('containers/%s/exec', urlencode($containerName)));
|
||||||
$response = json_decode(
|
$response = json_decode(
|
||||||
$this->sendHttpRequest(
|
$this->guzzleClient->request(
|
||||||
'POST',
|
'POST',
|
||||||
$url,
|
$url,
|
||||||
[
|
[
|
||||||
'json' => [
|
'json' => [
|
||||||
'AttachStdout' => true,
|
'AttachStdout' => true,
|
||||||
'AttachStderr' => true,
|
|
||||||
'Tty' => true,
|
'Tty' => true,
|
||||||
'Cmd' => $cmd,
|
'Cmd' => [
|
||||||
|
'bash',
|
||||||
|
$file,
|
||||||
|
$subject,
|
||||||
|
$message
|
||||||
|
],
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
)->getBody()->getContents(),
|
)->getBody()->getContents(),
|
||||||
@@ -811,30 +791,20 @@ readonly class DockerActionManager {
|
|||||||
JSON_THROW_ON_ERROR,
|
JSON_THROW_ON_ERROR,
|
||||||
);
|
);
|
||||||
|
|
||||||
$execId = $response['Id'];
|
$id = $response['Id'];
|
||||||
|
|
||||||
// Start exec
|
// start the exec
|
||||||
$url = $this->BuildApiUrl(sprintf('exec/%s/start', $execId));
|
$url = $this->BuildApiUrl(sprintf('exec/%s/start', $id));
|
||||||
$requestOptions = [
|
$this->guzzleClient->request(
|
||||||
|
'POST',
|
||||||
|
$url,
|
||||||
|
[
|
||||||
'json' => [
|
'json' => [
|
||||||
'Detach' => false,
|
'Detach' => false,
|
||||||
'Tty' => true,
|
'Tty' => true,
|
||||||
],
|
],
|
||||||
];
|
]
|
||||||
if ($outputCallback !== null) {
|
);
|
||||||
$requestOptions['stream'] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
$startResponse = $this->sendHttpRequest('POST', $url, $requestOptions);
|
|
||||||
|
|
||||||
if ($outputCallback !== null) {
|
|
||||||
$body = $startResponse->getBody();
|
|
||||||
while (!$body->eof()) {
|
|
||||||
$line = rtrim(Utils::readLine($body), "\r");;
|
|
||||||
if ($line !== '') {
|
|
||||||
$outputCallback($line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -845,7 +815,7 @@ readonly class DockerActionManager {
|
|||||||
);
|
);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$this->sendHttpRequest(
|
$this->guzzleClient->request(
|
||||||
'POST',
|
'POST',
|
||||||
$url,
|
$url,
|
||||||
[
|
[
|
||||||
@@ -866,7 +836,7 @@ readonly class DockerActionManager {
|
|||||||
if ($createNetwork) {
|
if ($createNetwork) {
|
||||||
$url = $this->BuildApiUrl('networks/create');
|
$url = $this->BuildApiUrl('networks/create');
|
||||||
try {
|
try {
|
||||||
$this->sendHttpRequest(
|
$this->guzzleClient->request(
|
||||||
'POST',
|
'POST',
|
||||||
$url,
|
$url,
|
||||||
[
|
[
|
||||||
@@ -895,7 +865,7 @@ readonly class DockerActionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$this->sendHttpRequest(
|
$this->guzzleClient->request(
|
||||||
'POST',
|
'POST',
|
||||||
$url,
|
$url,
|
||||||
[
|
[
|
||||||
@@ -940,7 +910,7 @@ readonly class DockerActionManager {
|
|||||||
}
|
}
|
||||||
$url = $this->BuildApiUrl(sprintf('containers/%s/stop?t=%s', urlencode($container->identifier), $maxShutDownTime));
|
$url = $this->BuildApiUrl(sprintf('containers/%s/stop?t=%s', urlencode($container->identifier), $maxShutDownTime));
|
||||||
try {
|
try {
|
||||||
$this->sendHttpRequest('POST', $url);
|
$this->guzzleClient->post($url);
|
||||||
} catch (RequestException $e) {
|
} catch (RequestException $e) {
|
||||||
if ($e->getCode() !== 404 && $e->getCode() !== 304) {
|
if ($e->getCode() !== 404 && $e->getCode() !== 304) {
|
||||||
throw $e;
|
throw $e;
|
||||||
@@ -952,7 +922,7 @@ readonly class DockerActionManager {
|
|||||||
$containerName = 'nextcloud-aio-borgbackup';
|
$containerName = 'nextcloud-aio-borgbackup';
|
||||||
$url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($containerName)));
|
$url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($containerName)));
|
||||||
try {
|
try {
|
||||||
$response = $this->sendHttpRequest('GET', $url);
|
$response = $this->guzzleClient->get($url);
|
||||||
} catch (RequestException $e) {
|
} catch (RequestException $e) {
|
||||||
if ($e->getCode() === 404) {
|
if ($e->getCode() === 404) {
|
||||||
return -1;
|
return -1;
|
||||||
@@ -974,7 +944,7 @@ readonly class DockerActionManager {
|
|||||||
$containerName = 'nextcloud-aio-database';
|
$containerName = 'nextcloud-aio-database';
|
||||||
$url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($containerName)));
|
$url = $this->BuildApiUrl(sprintf('containers/%s/json', urlencode($containerName)));
|
||||||
try {
|
try {
|
||||||
$response = $this->sendHttpRequest('GET', $url);
|
$response = $this->guzzleClient->get($url);
|
||||||
} catch (RequestException $e) {
|
} catch (RequestException $e) {
|
||||||
if ($e->getCode() === 404) {
|
if ($e->getCode() === 404) {
|
||||||
return -1;
|
return -1;
|
||||||
@@ -1014,7 +984,7 @@ readonly class DockerActionManager {
|
|||||||
$imageName = $imageName . ':' . $this->GetCurrentChannel();
|
$imageName = $imageName . ':' . $this->GetCurrentChannel();
|
||||||
try {
|
try {
|
||||||
$imageUrl = $this->BuildApiUrl(sprintf('images/%s/json', $imageName));
|
$imageUrl = $this->BuildApiUrl(sprintf('images/%s/json', $imageName));
|
||||||
$imageOutput = json_decode($this->sendHttpRequest('GET', $imageUrl)->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
|
$imageOutput = json_decode($this->guzzleClient->get($imageUrl)->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
|
||||||
|
|
||||||
if (!isset($imageOutput['Created'])) {
|
if (!isset($imageOutput['Created'])) {
|
||||||
error_log('Created is not set of image ' . $imageName);
|
error_log('Created is not set of image ' . $imageName);
|
||||||
@@ -1059,11 +1029,6 @@ readonly class DockerActionManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function RunNextcloudUpgradeToLatestMajor(\Closure $addToStreamingResponseBody): void {
|
|
||||||
$container = $this->containerDefinitionFetcher->GetContainerById('nextcloud-aio-nextcloud');
|
|
||||||
$this->execCommandInContainer($container, ['bash', '/upgrade-latest-major.sh'], $addToStreamingResponseBody);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function SystemPrune(?\Closure $addToStreamingResponseBody = null): void {
|
public function SystemPrune(?\Closure $addToStreamingResponseBody = null): void {
|
||||||
$endpoints = [
|
$endpoints = [
|
||||||
// Remove stopped containers
|
// Remove stopped containers
|
||||||
@@ -1092,7 +1057,7 @@ readonly class DockerActionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$response = $this->sendHttpRequest('POST', $url);
|
$response = $this->guzzleClient->post($url);
|
||||||
if ($addToStreamingResponseBody !== null) {
|
if ($addToStreamingResponseBody !== null) {
|
||||||
$data = json_decode((string)$response->getBody(), true);
|
$data = json_decode((string)$response->getBody(), true);
|
||||||
$deleted = 0;
|
$deleted = 0;
|
||||||
@@ -1130,12 +1095,4 @@ readonly class DockerActionManager {
|
|||||||
sleep(10);
|
sleep(10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function sendHttpRequest(string $httpMethod, string $url, array $requestOptions = []): \Psr\Http\Message\ResponseInterface {
|
|
||||||
if (($requestOptions['stream'] ?? null) === true) {
|
|
||||||
$requestOptions['proxy'] = 'unix:///var/run/docker.sock';
|
|
||||||
}
|
|
||||||
return $this->guzzleClient->request($httpMethod, $url, $requestOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
<script type="text/javascript" src="timezone.js?v1"></script>
|
<script type="text/javascript" src="timezone.js?v1"></script>
|
||||||
|
|
||||||
{# js for optional containers and additional containers forms #}
|
{# js for optional containers and additional containers forms #}
|
||||||
<script type="text/javascript" src="containers-form-submit.js?v8"></script>
|
<script type="text/javascript" src="containers-form-submit.js?v7"></script>
|
||||||
|
|
||||||
{% set hasBackupLocation = borg_backup_host_location or borg_remote_repo %}
|
{% set hasBackupLocation = borg_backup_host_location or borg_remote_repo %}
|
||||||
{% set isAnyRunning = false %}
|
{% set isAnyRunning = false %}
|
||||||
@@ -298,12 +298,7 @@
|
|||||||
{% if newMajorVersionString != '' and isAnyRunning == true and isApacheStarting != true %}
|
{% if newMajorVersionString != '' and isAnyRunning == true and isApacheStarting != true %}
|
||||||
<details>
|
<details>
|
||||||
<summary>Note about <strong>Nextcloud Hub {{ newMajorVersionString }}</strong></summary>
|
<summary>Note about <strong>Nextcloud Hub {{ newMajorVersionString }}</strong></summary>
|
||||||
<p>If you haven't upgraded to Nextcloud Hub {{ newMajorVersionString }} yet and want to do that now, feel free to click the button below. ⚠️ Warning: make sure to create a backup before clicking the button as the update can go wrong and will leave your instance in a broken state!</p>
|
<p>If you haven't upgraded to Nextcloud Hub {{ newMajorVersionString }} yet and want to do that now, feel free to follow <strong><a target="_blank" href="https://github.com/nextcloud/all-in-one/discussions/8223">this documentation</a></strong></p>
|
||||||
<form method="POST" action="api/docker/nextcloud-upgrade-to-latest-major" target="overlay-log">
|
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
|
||||||
<input type="submit" value="Upgrade to Nextcloud Hub {{ newMajorVersionString }}" data-confirm="Upgrade to Nextcloud Hub {{ newMajorVersionString }}? You should consider creating a backup first." />
|
|
||||||
</form>
|
|
||||||
</details>
|
</details>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
13.2.1
|
13.1.0
|
||||||
|
|||||||
@@ -14,42 +14,6 @@
|
|||||||
<p>Choose your preferred office suite. Only one can be enabled at a time.</p>
|
<p>Choose your preferred office suite. Only one can be enabled at a time.</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="office-suite-cards">
|
<div class="office-suite-cards">
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
id="office-eurooffice"
|
|
||||||
name="office_suite_choice"
|
|
||||||
value="eurooffice"
|
|
||||||
class="office-radio"
|
|
||||||
{% if is_eurooffice_enabled == true %}
|
|
||||||
checked="checked"
|
|
||||||
{% endif %}
|
|
||||||
>
|
|
||||||
<label class="office-card{{ isAnyRunning ? ' office-card-disabled' : '' }}" for="office-eurooffice">
|
|
||||||
<div class="office-card-header">
|
|
||||||
<div>
|
|
||||||
<h4>Nextcloud Office</h4>
|
|
||||||
<p class="office-powered-by">powered by Euro-Office</p>
|
|
||||||
</div>
|
|
||||||
<svg class="office-checkmark" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<circle cx="12" cy="12" r="10" fill="var(--color-nextcloud-blue)"/>
|
|
||||||
<path d="M7 12L10.5 15.5L17 9" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<ul class="office-features">
|
|
||||||
<li>Good Nextcloud integration</li>
|
|
||||||
<li>Open source</li>
|
|
||||||
<li>Best performance</li>
|
|
||||||
<li>Limited ODF compatibility</li>
|
|
||||||
<li>Best Microsoft compatibility</li>
|
|
||||||
<li>Good security</li>
|
|
||||||
</ul>
|
|
||||||
{% if isAnyRunning == false %}
|
|
||||||
<a href="https://github.com/Euro-Office" target="_blank" class="office-learn-more" data-stop-event-propagation="true">
|
|
||||||
Learn more
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
</label>
|
|
||||||
<input type="hidden" id="eurooffice" name="eurooffice" value="" data-initial-state="{% if is_eurooffice_enabled == true %}true{% else %}false{% endif %}">
|
|
||||||
<input
|
<input
|
||||||
type="radio"
|
type="radio"
|
||||||
id="office-collabora"
|
id="office-collabora"
|
||||||
@@ -62,10 +26,7 @@
|
|||||||
>
|
>
|
||||||
<label class="office-card{{ isAnyRunning ? ' office-card-disabled' : '' }}" for="office-collabora">
|
<label class="office-card{{ isAnyRunning ? ' office-card-disabled' : '' }}" for="office-collabora">
|
||||||
<div class="office-card-header">
|
<div class="office-card-header">
|
||||||
<div>
|
|
||||||
<h4>Nextcloud Office</h4>
|
<h4>Nextcloud Office</h4>
|
||||||
<p class="office-powered-by">powered by Collabora Online</p>
|
|
||||||
</div>
|
|
||||||
<svg class="office-checkmark" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg class="office-checkmark" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<circle cx="12" cy="12" r="10" fill="var(--color-nextcloud-blue)"/>
|
<circle cx="12" cy="12" r="10" fill="var(--color-nextcloud-blue)"/>
|
||||||
<path d="M7 12L10.5 15.5L17 9" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
<path d="M7 12L10.5 15.5L17 9" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
@@ -75,9 +36,9 @@
|
|||||||
<li>Best Nextcloud integration</li>
|
<li>Best Nextcloud integration</li>
|
||||||
<li>Open source</li>
|
<li>Open source</li>
|
||||||
<li>Good performance</li>
|
<li>Good performance</li>
|
||||||
|
<li>Best security: documents never leave your server</li>
|
||||||
<li>Best ODF compatibility</li>
|
<li>Best ODF compatibility</li>
|
||||||
<li>Best support for legacy files</li>
|
<li>Best support for legacy files</li>
|
||||||
<li>Best security: documents never leave your server</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
{% if isAnyRunning == false %}
|
{% if isAnyRunning == false %}
|
||||||
<a href="https://www.collaboraoffice.com/code/" target="_blank" class="office-learn-more" data-stop-event-propagation="true">
|
<a href="https://www.collaboraoffice.com/code/" target="_blank" class="office-learn-more" data-stop-event-propagation="true">
|
||||||
@@ -99,22 +60,18 @@
|
|||||||
>
|
>
|
||||||
<label class="office-card{{ isAnyRunning ? ' office-card-disabled' : '' }}" for="office-onlyoffice">
|
<label class="office-card{{ isAnyRunning ? ' office-card-disabled' : '' }}" for="office-onlyoffice">
|
||||||
<div class="office-card-header">
|
<div class="office-card-header">
|
||||||
<div>
|
<h4>OnlyOffice</h4>
|
||||||
<h4>ONLYOFFICE (deprecated)</h4>
|
|
||||||
<p class="office-powered-by">by Ascensio System SIA</p>
|
|
||||||
</div>
|
|
||||||
<svg class="office-checkmark" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg class="office-checkmark" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<circle cx="12" cy="12" r="10" fill="var(--color-nextcloud-blue)"/>
|
<circle cx="12" cy="12" r="10" fill="var(--color-nextcloud-blue)"/>
|
||||||
<path d="M7 12L10.5 15.5L17 9" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
<path d="M7 12L10.5 15.5L17 9" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<ul class="office-features">
|
<ul class="office-features">
|
||||||
<li>OK Nextcloud integration</li>
|
<li>Good Nextcloud integration</li>
|
||||||
<li>Open Core</li>
|
<li>Open core</li>
|
||||||
<li>Best performance</li>
|
<li>Best performance</li>
|
||||||
<li>Limited ODF compatibility</li>
|
|
||||||
<li>Best Microsoft compatibility</li>
|
<li>Best Microsoft compatibility</li>
|
||||||
<li>Good security</li>
|
<li>Limited ODF compatibility</li>
|
||||||
</ul>
|
</ul>
|
||||||
{% if isAnyRunning == false %}
|
{% if isAnyRunning == false %}
|
||||||
<a href="https://www.onlyoffice.com/" target="_blank" class="office-learn-more" data-stop-event-propagation="true">
|
<a href="https://www.onlyoffice.com/" target="_blank" class="office-learn-more" data-stop-event-propagation="true">
|
||||||
@@ -133,7 +90,7 @@
|
|||||||
name="office_suite_choice"
|
name="office_suite_choice"
|
||||||
value=""
|
value=""
|
||||||
class="office-radio"
|
class="office-radio"
|
||||||
{% if is_collabora_enabled == false and is_onlyoffice_enabled == false and is_eurooffice_enabled == false %}
|
{% if is_collabora_enabled == false and is_onlyoffice_enabled == false %}
|
||||||
checked="checked"
|
checked="checked"
|
||||||
{% endif %}
|
{% endif %}
|
||||||
>
|
>
|
||||||
@@ -267,7 +224,7 @@
|
|||||||
</form>
|
</form>
|
||||||
<p><strong>Minimal system requirements:</strong> When any optional container is enabled, at least 2GB RAM, a dual-core CPU and 40GB system storage are required. When enabling ClamAV, Nextcloud Talk Recording-server or Fulltextsearch, at least 3GB RAM are required. For Talk Recording-server additional 2 vCPUs are required. When enabling everything, at least 5GB RAM and a quad-core CPU are required. Recommended are at least 1GB more RAM than the minimal requirement. For further advice and recommendations see <strong><a target="_blank" href="https://github.com/nextcloud/all-in-one/discussions/1335">this documentation</a></strong></p>
|
<p><strong>Minimal system requirements:</strong> When any optional container is enabled, at least 2GB RAM, a dual-core CPU and 40GB system storage are required. When enabling ClamAV, Nextcloud Talk Recording-server or Fulltextsearch, at least 3GB RAM are required. For Talk Recording-server additional 2 vCPUs are required. When enabling everything, at least 5GB RAM and a quad-core CPU are required. Recommended are at least 1GB more RAM than the minimal requirement. For further advice and recommendations see <strong><a target="_blank" href="https://github.com/nextcloud/all-in-one/discussions/1335">this documentation</a></strong></p>
|
||||||
{% if isAnyRunning == true %}
|
{% if isAnyRunning == true %}
|
||||||
<script type="text/javascript" src="disable-containers.js?v1"></script>
|
<script type="text/javascript" src="disable-containers.js"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if is_collabora_enabled == true and isAnyRunning == false and was_start_button_clicked == true %}
|
{% if is_collabora_enabled == true and isAnyRunning == false and was_start_button_clicked == true %}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<title>AIO</title>
|
<title>AIO</title>
|
||||||
<link rel="stylesheet" href="style.css?v12" media="all" />
|
<link rel="stylesheet" href="style.css?v10" media="all" />
|
||||||
<link rel="icon" href="img/favicon.png">
|
<link rel="icon" href="img/favicon.png">
|
||||||
<script type="text/javascript" src="forms.js?v2"></script>
|
<script type="text/javascript" src="forms.js?v2"></script>
|
||||||
<script type="text/javascript" src="toggle-dark-mode.js?v2"></script>
|
<script type="text/javascript" src="toggle-dark-mode.js?v2"></script>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>AIO</title>
|
<title>AIO</title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||||
<link rel="stylesheet" href="style.css?v12">
|
<link rel="stylesheet" href="style.css?v1">
|
||||||
<link rel="stylesheet" href="logs.css?v1">
|
<link rel="stylesheet" href="logs.css?v1">
|
||||||
<link rel="icon" href="img/favicon.png">
|
<link rel="icon" href="img/favicon.png">
|
||||||
<script src="apply-theme.js?v1"></script>
|
<script src="apply-theme.js?v1"></script>
|
||||||
|
|||||||
@@ -118,7 +118,6 @@ flowchart TB
|
|||||||
subgraph OPT[" 🧩 Optional Built-in Containers (enable in AIO interface) "]
|
subgraph OPT[" 🧩 Optional Built-in Containers (enable in AIO interface) "]
|
||||||
COLLA(["📄 Nextcloud Office"]):::opt
|
COLLA(["📄 Nextcloud Office"]):::opt
|
||||||
OO(["📄 OnlyOffice\nDocument Server"]):::opt
|
OO(["📄 OnlyOffice\nDocument Server"]):::opt
|
||||||
EO(["📄 EuroOffice\nDocument Server"]):::opt
|
|
||||||
TALK(["🎙️ Talk\nVideo & Voice calls"]):::opt
|
TALK(["🎙️ Talk\nVideo & Voice calls"]):::opt
|
||||||
TALKREC(["🎬 Talk Recording"]):::opt
|
TALKREC(["🎬 Talk Recording"]):::opt
|
||||||
FTS(["🔎 Full-text Search\n(Elasticsearch)"]):::opt
|
FTS(["🔎 Full-text Search\n(Elasticsearch)"]):::opt
|
||||||
|
|||||||
@@ -523,7 +523,6 @@ server {
|
|||||||
location / {
|
location / {
|
||||||
proxy_pass http://127.0.0.1:11000$request_uri; # Adjust to match APACHE_PORT and APACHE_IP_BINDING. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md#adapting-the-sample-web-server-configurations-below
|
proxy_pass http://127.0.0.1:11000$request_uri; # Adjust to match APACHE_PORT and APACHE_IP_BINDING. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md#adapting-the-sample-web-server-configurations-below
|
||||||
|
|
||||||
proxy_set_header X-Forwarded-Host $host;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
proxy_set_header X-Forwarded-Port $server_port;
|
proxy_set_header X-Forwarded-Port $server_port;
|
||||||
proxy_set_header X-Forwarded-Scheme $scheme;
|
proxy_set_header X-Forwarded-Scheme $scheme;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ For the below to work, it is important that you have a domain that you point ont
|
|||||||
- [ ] Below that you should see a section `Optional addons` which shows a checkbox list with addons that can be enabled or disabled.
|
- [ ] Below that you should see a section `Optional addons` which shows a checkbox list with addons that can be enabled or disabled.
|
||||||
- [ ] Collabora, Imaginary, Talk and Whiteboard should be enabled, the rest disabled
|
- [ ] Collabora, Imaginary, Talk and Whiteboard should be enabled, the rest disabled
|
||||||
- [ ] Unchecking/Checking any of these should insert a button that allows to save the set config
|
- [ ] Unchecking/Checking any of these should insert a button that allows to save the set config
|
||||||
- [ ] Only one of Collabora, OnlyOffice and EuroOffice should be selectable at the same time
|
- [ ] Checking OnlyOffice and Collabora at the same time should show a warning that this is not supported and should not saving the new config
|
||||||
- [ ] Recommended is to uncheck all options now
|
- [ ] Recommended is to uncheck all options now
|
||||||
- [ ] Clicking on the save button should reload the page and activate the new config
|
- [ ] Clicking on the save button should reload the page and activate the new config
|
||||||
- [ ] Clickig on the `Start containers` button should finally reveal a big spinning wheel that should block all elements on the side of being clicked.
|
- [ ] Clickig on the `Start containers` button should finally reveal a big spinning wheel that should block all elements on the side of being clicked.
|
||||||
|
|||||||
Reference in New Issue
Block a user