mirror of
https://github.com/nextcloud/all-in-one.git
synced 2026-05-22 11:20:13 +00:00
Compare commits
251 Commits
enh/noid/h
...
v10.15.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b94d807328 | ||
|
|
62f043d1cb | ||
|
|
5536121899 | ||
|
|
a53f0819c2 | ||
|
|
74e4db570b | ||
|
|
28f627bdd4 | ||
|
|
076b923f3d | ||
|
|
4e943a9382 | ||
|
|
e6df869990 | ||
|
|
28295b16c3 | ||
|
|
8be747c9e7 | ||
|
|
d5b24b63be | ||
|
|
a5a7a97794 | ||
|
|
c129792662 | ||
|
|
397a3c7913 | ||
|
|
5c853efc1e | ||
|
|
ec399dc5ee | ||
|
|
9dc56694c2 | ||
|
|
b28b706d77 | ||
|
|
5e553da4d6 | ||
|
|
96a7bb0c22 | ||
|
|
9f44eb91cd | ||
|
|
c14b5f5590 | ||
|
|
ddb9b179bd | ||
|
|
89b9400e68 | ||
|
|
61ccc553aa | ||
|
|
7b92179c24 | ||
|
|
c306ec7351 | ||
|
|
cffc7cf8a7 | ||
|
|
a0248bfc2b | ||
|
|
efce94a6ef | ||
|
|
30e09a0d31 | ||
|
|
69bd0bde49 | ||
|
|
f49a0f0b69 | ||
|
|
be3a6abd78 | ||
|
|
4584b78877 | ||
|
|
f795742b39 | ||
|
|
0fe25a6925 | ||
|
|
75d5a92ed5 | ||
|
|
f86c9f66d6 | ||
|
|
a06a47443a | ||
|
|
7197ba184f | ||
|
|
af5a881492 | ||
|
|
34e7039e36 | ||
|
|
12fd6f41f2 | ||
|
|
bee7449718 | ||
|
|
2ba806c830 | ||
|
|
2f64d7e608 | ||
|
|
36d8029457 | ||
|
|
7109925d73 | ||
|
|
64663d51c0 | ||
|
|
5af54ebbe2 | ||
|
|
5b5e8b810c | ||
|
|
3ace41913e | ||
|
|
12fcefee77 | ||
|
|
dce4cc2ca3 | ||
|
|
1e7c19bcc6 | ||
|
|
cbdc180e73 | ||
|
|
bbab0cf41c | ||
|
|
75aea91962 | ||
|
|
efcddf059b | ||
|
|
498e5a2186 | ||
|
|
6bf219de25 | ||
|
|
af8cac0c37 | ||
|
|
918df45e12 | ||
|
|
8f5752dea7 | ||
|
|
bbdd7b2490 | ||
|
|
8ebc0d8cce | ||
|
|
52355d4fb6 | ||
|
|
d5db9c323b | ||
|
|
42c34ca189 | ||
|
|
3a97691190 | ||
|
|
7a92c00bac | ||
|
|
4862342476 | ||
|
|
2219994176 | ||
|
|
bc6d37b629 | ||
|
|
62878cc694 | ||
|
|
44ca709ac0 | ||
|
|
4616ea8cbd | ||
|
|
bd0ab4c9cc | ||
|
|
0fc19bb19b | ||
|
|
c8f942e834 | ||
|
|
5c50af06e0 | ||
|
|
c8c150e4cd | ||
|
|
fe49c7873e | ||
|
|
a68223265f | ||
|
|
3f1c2384b7 | ||
|
|
0696622ddc | ||
|
|
73197960c3 | ||
|
|
137defad9b | ||
|
|
47f0b75fcb | ||
|
|
e0d16725d4 | ||
|
|
307b0ab4ae | ||
|
|
b8995a98a3 | ||
|
|
f4b5dbe005 | ||
|
|
6f47512c59 | ||
|
|
8103aebb58 | ||
|
|
a7a5e849fa | ||
|
|
ed0365c597 | ||
|
|
7b60313eaa | ||
|
|
5b5f49b00b | ||
|
|
1c4fa05601 | ||
|
|
a47be369e9 | ||
|
|
da0c3acb05 | ||
|
|
0ec6fd1117 | ||
|
|
0c76d14fcb | ||
|
|
3146735cc0 | ||
|
|
0508331fb4 | ||
|
|
d55b13f974 | ||
|
|
0a5fecad4b | ||
|
|
9f5710917d | ||
|
|
cc0ff39357 | ||
|
|
d01af0a5fb | ||
|
|
9550135e3a | ||
|
|
f49de27ca3 | ||
|
|
ae00778180 | ||
|
|
fd033ff328 | ||
|
|
417af36b5f | ||
|
|
9255ff4387 | ||
|
|
71b932e910 | ||
|
|
d495c1910e | ||
|
|
b05d22aa81 | ||
|
|
5564f8be5f | ||
|
|
b82943046d | ||
|
|
ca0af37eaa | ||
|
|
72fe74da71 | ||
|
|
45a3f6ad36 | ||
|
|
9d9ef6e4b8 | ||
|
|
23f7b405ce | ||
|
|
25c31323c6 | ||
|
|
7ce74e36e6 | ||
|
|
ec20ff8318 | ||
|
|
4eed6b6f38 | ||
|
|
b6b5d59228 | ||
|
|
30cdddebb8 | ||
|
|
2a2df5b12b | ||
|
|
3345e9a357 | ||
|
|
4f25a8ff10 | ||
|
|
a5c44aae9a | ||
|
|
1b8d80b204 | ||
|
|
6dac917936 | ||
|
|
df40236217 | ||
|
|
855a1d00dc | ||
|
|
3dd5407301 | ||
|
|
6ebc5de9b4 | ||
|
|
c011488111 | ||
|
|
74c498238d | ||
|
|
c8bb751847 | ||
|
|
f0fd6bb445 | ||
|
|
d501b7cfcb | ||
|
|
10e9cae12d | ||
|
|
ae5f4b7999 | ||
|
|
d04d7c9fab | ||
|
|
c0835f49a9 | ||
|
|
32ed64bc4a | ||
|
|
2516938702 | ||
|
|
631253ef71 | ||
|
|
203d196e9e | ||
|
|
496365e107 | ||
|
|
95491af7bd | ||
|
|
242179f079 | ||
|
|
faef75dafd | ||
|
|
2e2a7dd302 | ||
|
|
847f0c28cb | ||
|
|
1175cf8f58 | ||
|
|
266254a226 | ||
|
|
b163229723 | ||
|
|
41ec77438a | ||
|
|
1a5efefd62 | ||
|
|
72e0150897 | ||
|
|
8754533fd6 | ||
|
|
65f721601d | ||
|
|
9245aa1dd5 | ||
|
|
f88b123cc3 | ||
|
|
33fac7d67a | ||
|
|
e04696c97c | ||
|
|
c24cebba12 | ||
|
|
0852b00cc8 | ||
|
|
19ab4ae308 | ||
|
|
dbe73ab0db | ||
|
|
55f77ade81 | ||
|
|
0f92f8e40c | ||
|
|
62b03a1de2 | ||
|
|
9a9ea694b2 | ||
|
|
f415bba72b | ||
|
|
25c580bca3 | ||
|
|
80920778fb | ||
|
|
c5a9da8bb3 | ||
|
|
ca151e86ac | ||
|
|
9e0f5b31d2 | ||
|
|
d3ac48f352 | ||
|
|
627c2d3192 | ||
|
|
23d0fd0cef | ||
|
|
328a85511f | ||
|
|
f7183b8d32 | ||
|
|
13e9829a85 | ||
|
|
7cb96aed74 | ||
|
|
ecb2e1ad87 | ||
|
|
378346c9c1 | ||
|
|
edbdac6af4 | ||
|
|
a4fa22ec22 | ||
|
|
fa87a5ca6a | ||
|
|
c65eb16a15 | ||
|
|
3dffd46e8b | ||
|
|
7f76f622e1 | ||
|
|
ac2c97a08e | ||
|
|
d5c195aa0c | ||
|
|
5d090018f9 | ||
|
|
b8d08fc77b | ||
|
|
4669ad430c | ||
|
|
348a08a720 | ||
|
|
167c2dc389 | ||
|
|
4c14fa9b13 | ||
|
|
9b8a9de565 | ||
|
|
b9a04858ca | ||
|
|
91e99dcba9 | ||
|
|
6b9e68d55f | ||
|
|
0ed524baba | ||
|
|
7eabc59328 | ||
|
|
8ddd123568 | ||
|
|
b1f2d6f691 | ||
|
|
2cc4c6813f | ||
|
|
91ca184262 | ||
|
|
6d1f1c1aeb | ||
|
|
f876b23c0b | ||
|
|
d6446d5f03 | ||
|
|
c1b60f9a51 | ||
|
|
e37611a759 | ||
|
|
4f68d3ed1c | ||
|
|
43f73ccbfe | ||
|
|
a4aa1baf54 | ||
|
|
38254f76ab | ||
|
|
80ae736633 | ||
|
|
0e0dc0da6f | ||
|
|
4e922c0943 | ||
|
|
1fbc3074dd | ||
|
|
4cb258e7d2 | ||
|
|
f90631125e | ||
|
|
7062b6aa90 | ||
|
|
38a11c4624 | ||
|
|
c525f802d5 | ||
|
|
c973834733 | ||
|
|
ccc6487877 | ||
|
|
1b6524b904 | ||
|
|
47964fc16c | ||
|
|
63d9343972 | ||
|
|
d164eea1ee | ||
|
|
fbb71586e8 | ||
|
|
8fe6821038 | ||
|
|
5004a46e2a | ||
|
|
36dc60e9d2 |
2
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
@@ -5,8 +5,10 @@ labels: 0. Needs triage
|
||||
---
|
||||
|
||||
<!---
|
||||
- Before submitting a bug report, please read through the documentation available at https://github.com/nextcloud/all-in-one#faq
|
||||
- If you use Cloudflare Tunnel or Cloudflare Proxy, see https://github.com/nextcloud/all-in-one#notes-on-cloudflare-proxytunnel for known issues/limitations and workarounds.
|
||||
- For issues with Collabora or Talk, make sure to follow https://github.com/nextcloud/all-in-one/discussions/1358. It may already resolve your issue and makes it easier to help you.
|
||||
|
||||
--->
|
||||
|
||||
<!--- Please fill out the whole template below -->
|
||||
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
5
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,5 +1,8 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: 📘 Documentation on Nextcloud AIO
|
||||
url: https://github.com/nextcloud/all-in-one#faq
|
||||
about: Please read the docs first before submitting any report or request!
|
||||
- name: ⛑️ General questions and support
|
||||
url: https://help.nextcloud.com/tag/aio
|
||||
about: For general questions, support and help
|
||||
@@ -11,4 +14,4 @@ contact_links:
|
||||
about: For questions specifically about AIO
|
||||
- name: 💼 Nextcloud Enterprise
|
||||
url: https://portal.nextcloud.com/
|
||||
about: If you are a Nextcloud Enterprise customer, or need Professional support, so it can be resolved directly by our dedicated engineers more quickly
|
||||
about: If you are a Nextcloud Enterprise customer, or need Professional support, so it can be resolved directly by our dedicated engineers more quickly
|
||||
|
||||
3
.github/dependabot.yml
vendored
3
.github/dependabot.yml
vendored
@@ -1,7 +1,7 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
directory: ".github/workflows"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
time: "12:00"
|
||||
@@ -22,6 +22,7 @@ updates:
|
||||
- dependencies
|
||||
- package-ecosystem: "docker"
|
||||
directories:
|
||||
- "/Containers/alpine"
|
||||
- "/Containers/apache"
|
||||
- "/Containers/borgbackup"
|
||||
- "/Containers/clamav"
|
||||
|
||||
2
.github/workflows/codespell.yml
vendored
2
.github/workflows/codespell.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v4
|
||||
- name: Check spelling
|
||||
uses: codespell-project/actions-codespell@v2
|
||||
uses: codespell-project/actions-codespell@406322ec52dd7b488e48c1c4b82e2a8b3a1bf630 # v2
|
||||
with:
|
||||
check_filenames: true
|
||||
check_hidden: true
|
||||
|
||||
8
.github/workflows/dependency-updates.yml
vendored
8
.github/workflows/dependency-updates.yml
vendored
@@ -8,12 +8,12 @@ on:
|
||||
jobs:
|
||||
dependency_updates:
|
||||
name: Run dependency update script
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: shivammathur/setup-php@v2
|
||||
- uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a # v2
|
||||
with:
|
||||
php-version: 8.3
|
||||
php-version: 8.4
|
||||
extensions: apcu
|
||||
- name: Run dependency update script
|
||||
run: |
|
||||
@@ -44,7 +44,7 @@ jobs:
|
||||
)"
|
||||
sed -i "s|pecl install APCu.*\;|pecl install APCu-$apcu_version\;|" ./Containers/mastercontainer/Dockerfile
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7
|
||||
with:
|
||||
commit-message: php dependency updates
|
||||
signoff: true
|
||||
|
||||
6
.github/workflows/helm-release.yml
vendored
6
.github/workflows/helm-release.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Turnstyle
|
||||
uses: softprops/turnstyle@v2
|
||||
uses: softprops/turnstyle@f9f8ef3f634144b126a09ea5b3bfe51ddebc700f # v2
|
||||
with:
|
||||
continue-after-seconds: 180
|
||||
env:
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
|
||||
# See https://github.com/helm/chart-releaser-action/issues/6
|
||||
- name: Set up Helm
|
||||
uses: azure/setup-helm@v4
|
||||
uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 # v4
|
||||
with:
|
||||
version: v3.6.3
|
||||
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
helm lint ./nextcloud-aio-helm-chart
|
||||
|
||||
- name: Run chart-releaser
|
||||
uses: helm/chart-releaser-action@v1.7.0
|
||||
uses: helm/chart-releaser-action@cae68fefc6b5f367a0275617c9f83181ba54714f # v1.7.0
|
||||
with:
|
||||
mark_as_latest: false
|
||||
charts_dir: .
|
||||
|
||||
2
.github/workflows/imaginary-update.yml
vendored
2
.github/workflows/imaginary-update.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
||||
sed -i "s|^ENV IMAGINARY_HASH.*$|ENV IMAGINARY_HASH=$imaginary_version|" ./Containers/imaginary/Dockerfile
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7
|
||||
with:
|
||||
commit-message: imaginary-update automated change
|
||||
signoff: true
|
||||
|
||||
2
.github/workflows/lint-helm.yml
vendored
2
.github/workflows/lint-helm.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install Helm
|
||||
uses: azure/setup-helm@v4
|
||||
uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 # v4
|
||||
with:
|
||||
version: v3.11.1
|
||||
|
||||
|
||||
4
.github/workflows/lint-php.yml
vendored
4
.github/workflows/lint-php.yml
vendored
@@ -27,7 +27,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: [ "8.3" ]
|
||||
php-versions: [ "8.4" ]
|
||||
|
||||
name: php-lint
|
||||
|
||||
@@ -36,7 +36,7 @@ jobs:
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a # v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
coverage: none
|
||||
|
||||
2
.github/workflows/lock-threads.yml
vendored
2
.github/workflows/lock-threads.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
action:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v5
|
||||
- uses: dessant/lock-threads@1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771 # v5
|
||||
with:
|
||||
issue-inactive-days: '14'
|
||||
process-only: 'issues'
|
||||
|
||||
8
.github/workflows/nextcloud-update.yml
vendored
8
.github/workflows/nextcloud-update.yml
vendored
@@ -60,12 +60,6 @@ jobs:
|
||||
)"
|
||||
sed -i "s|\(pecl install[^;]*imagick-\)[0-9.]*|\1$imagick_version|" ./Containers/nextcloud/Dockerfile
|
||||
|
||||
# Imagick git-commit-hash from HEAD
|
||||
imagick_commit_hash="$(
|
||||
git ls-remote https://github.com/imagick/imagick.git HEAD | awk '{print $1}'
|
||||
)"
|
||||
sed -i "s/\(ARG IMAGICK_COMMIT_HASH=\)[a-fA-F0-9]*$/\1$imagick_commit_hash/" ./Containers/nextcloud/Dockerfile
|
||||
|
||||
# Igbinary
|
||||
igbinary_version="$(
|
||||
git ls-remote --tags https://github.com/igbinary/igbinary.git \
|
||||
@@ -85,7 +79,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7
|
||||
with:
|
||||
commit-message: nextcloud-update automated change
|
||||
signoff: true
|
||||
|
||||
@@ -18,9 +18,9 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@v2
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a # v2
|
||||
with:
|
||||
php-version: 8.3
|
||||
php-version: 8.4
|
||||
extensions: apcu
|
||||
coverage: none
|
||||
|
||||
|
||||
77
.github/workflows/playwright.yml
vendored
Normal file
77
.github/workflows/playwright.yml
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
name: Playwright Tests
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
BASE_URL: https://localhost:8080
|
||||
|
||||
jobs:
|
||||
test:
|
||||
timeout-minutes: 60
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: lts/*
|
||||
|
||||
- name: Install dependencies
|
||||
run: cd php/tests && npm ci
|
||||
|
||||
- name: Install Playwright Browsers
|
||||
run: cd php/tests && npx playwright install --with-deps chromium
|
||||
|
||||
- name: Start fresh development server
|
||||
run: |
|
||||
docker rm --force nextcloud-aio-{mastercontainer,apache,notify-push,nextcloud,redis,database,domaincheck,whiteboard,imaginary,talk,collabora,borgbackup} || true
|
||||
docker volume rm nextcloud_aio_{mastercontainer,apache,database,database_dump,nextcloud,nextcloud_data,redis,backup_cache,elasticsearch} || true
|
||||
docker pull ghcr.io/nextcloud-releases/all-in-one:develop
|
||||
docker run \
|
||||
-d \
|
||||
--init \
|
||||
--name nextcloud-aio-mastercontainer \
|
||||
--restart always \
|
||||
--publish 8080:8080 \
|
||||
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
|
||||
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
|
||||
--env SKIP_DOMAIN_VALIDATION=true \
|
||||
--env APACHE_PORT=11000 \
|
||||
ghcr.io/nextcloud-releases/all-in-one:develop
|
||||
echo Waiting for 10 seconds for the development container to start ...
|
||||
sleep 10
|
||||
|
||||
- name: Run Playwright tests for initial setup
|
||||
run: cd php/tests && DEBUG=pw:api npx playwright test tests/initial-setup.spec.js
|
||||
|
||||
- name: Start fresh development server
|
||||
run: |
|
||||
docker rm --force nextcloud-aio-{mastercontainer,apache,notify-push,nextcloud,redis,database,domaincheck,whiteboard,imaginary,talk,collabora,borgbackup} || true
|
||||
docker volume rm nextcloud_aio_{mastercontainer,apache,database,database_dump,nextcloud,nextcloud_data,redis,backup_cache,elasticsearch} || true
|
||||
docker run \
|
||||
-d \
|
||||
--init \
|
||||
--name nextcloud-aio-mastercontainer \
|
||||
--restart always \
|
||||
--publish 8080:8080 \
|
||||
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
|
||||
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
|
||||
--env SKIP_DOMAIN_VALIDATION=false \
|
||||
--env APACHE_PORT=11000 \
|
||||
ghcr.io/nextcloud-releases/all-in-one:develop
|
||||
echo Waiting for 10 seconds for the development container to start ...
|
||||
sleep 10
|
||||
|
||||
- name: Run Playwright tests for backup restore
|
||||
run: cd php/tests && DEBUG=pw:api npx playwright test tests/restore-instance.spec.js
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: ${{ !cancelled() }}
|
||||
with:
|
||||
name: playwright-report
|
||||
path: php/tests/playwright-report/
|
||||
retention-days: 14
|
||||
overwrite: true
|
||||
6
.github/workflows/psalm-update-baseline.yml
vendored
6
.github/workflows/psalm-update-baseline.yml
vendored
@@ -13,9 +13,9 @@ jobs:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@v2
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a # v2
|
||||
with:
|
||||
php-version: 8.3
|
||||
php-version: 8.4
|
||||
extensions: apcu
|
||||
coverage: none
|
||||
|
||||
@@ -30,7 +30,7 @@ jobs:
|
||||
continue-on-error: true
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: Update psalm baseline
|
||||
|
||||
4
.github/workflows/psalm.yml
vendored
4
.github/workflows/psalm.yml
vendored
@@ -29,9 +29,9 @@ jobs:
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a # v2
|
||||
with:
|
||||
php-version: 8.3
|
||||
php-version: 8.4
|
||||
extensions: apcu
|
||||
coverage: none
|
||||
ini-file: development
|
||||
|
||||
2
.github/workflows/shellcheck.yml
vendored
2
.github/workflows/shellcheck.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Run Shellcheck
|
||||
uses: ludeeus/action-shellcheck@2.0.0
|
||||
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # v2.0.0
|
||||
with:
|
||||
check_together: 'yes'
|
||||
env:
|
||||
|
||||
2
.github/workflows/talk.yml
vendored
2
.github/workflows/talk.yml
vendored
@@ -45,7 +45,7 @@ jobs:
|
||||
sed -i "s|^ARG JANUS_VERSION=.*$|ARG JANUS_VERSION=$janus_version|" ./Containers/talk/Dockerfile
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7
|
||||
with:
|
||||
commit-message: talk-update automated change
|
||||
signoff: true
|
||||
|
||||
4
.github/workflows/twig-lint.yml
vendored
4
.github/workflows/twig-lint.yml
vendored
@@ -27,9 +27,9 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@v2
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a # v2
|
||||
with:
|
||||
php-version: 8.3
|
||||
php-version: 8.4
|
||||
extensions: apcu
|
||||
coverage: none
|
||||
|
||||
|
||||
9
.github/workflows/update-helm.yml
vendored
9
.github/workflows/update-helm.yml
vendored
@@ -14,13 +14,16 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
- name: update helm chart
|
||||
run: |
|
||||
DOCKER_TAG="$(curl -L -s 'https://registry.hub.docker.com/v2/repositories/nextcloud/all-in-one/tags?page_size=1024' | jq '."results"[]["name"]' | sed 's|"||g' | grep '^20[0-9_]\+' | grep -v latest | sort -r | head -1)"
|
||||
set -x
|
||||
GHCR_TOKEN="$(curl https://ghcr.io/token?scope=repository:nextcloud-releases/nce-php-fpm-mgmt:pull | jq '.token' | sed 's|"||g')"
|
||||
DOCKER_TAG="$(curl -H "Authorization: Bearer ${GHCR_TOKEN}" -L -s 'https://ghcr.io/v2/nextcloud-releases/all-in-one/tags/list?page_size=1024' | jq '.tags' | sed 's|"||g;s|[[:space:]]||g;s|,||g' | grep '^20[0-9_]\+' | grep -v latest | sort -r | head -1)"
|
||||
export DOCKER_TAG
|
||||
if [ -n "$DOCKER_TAG" ] && ! grep -q "$DOCKER_TAG" ./nextcloud-aio-helm-chart/templates/nextcloud-aio-nextcloud-deployment.yaml; then
|
||||
set +x
|
||||
if [ -n "$DOCKER_TAG" ] && ! grep -q "aio-nextcloud:$DOCKER_TAG" ./nextcloud-aio-helm-chart/templates/nextcloud-aio-nextcloud-deployment.yaml; then
|
||||
sudo bash nextcloud-aio-helm-chart/update-helm.sh "$DOCKER_TAG"
|
||||
fi
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7
|
||||
with:
|
||||
commit-message: Helm Chart updates
|
||||
signoff: true
|
||||
|
||||
2
.github/workflows/update-yaml.yml
vendored
2
.github/workflows/update-yaml.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
||||
run: |
|
||||
sudo bash manual-install/update-yaml.sh
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7
|
||||
with:
|
||||
commit-message: Yaml updates
|
||||
signoff: true
|
||||
|
||||
7
Containers/alpine/Dockerfile
Normal file
7
Containers/alpine/Dockerfile
Normal file
@@ -0,0 +1,7 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
FROM alpine:3.21.3
|
||||
|
||||
RUN set -ex; \
|
||||
apk upgrade --no-cache -a
|
||||
|
||||
LABEL org.label-schema.vendor="Nextcloud"
|
||||
@@ -1,5 +1,5 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
FROM caddy:2.9.1-alpine AS caddy
|
||||
FROM caddy:2.10.0-alpine AS caddy
|
||||
|
||||
# From https://github.com/docker-library/httpd/blob/master/2.4/alpine/Dockerfile
|
||||
FROM httpd:2.4.63-alpine3.21
|
||||
@@ -87,4 +87,5 @@ ENTRYPOINT ["/start.sh"]
|
||||
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
|
||||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -23,5 +23,6 @@ ENTRYPOINT ["/start.sh"]
|
||||
# hadolint ignore=DL3002
|
||||
USER root
|
||||
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
ENV BORG_RETENTION_POLICY="--keep-within=7d --keep-weekly=4 --keep-monthly=6"
|
||||
|
||||
@@ -191,7 +191,7 @@ if [ "$BORG_MODE" = backup ]; then
|
||||
fi
|
||||
|
||||
# Exclude the nextcloud log and audit log for GDPR reasons
|
||||
BORG_EXCLUDE=(--exclude "/nextcloud_aio_volumes/nextcloud_aio_nextcloud/data/nextcloud.log*" --exclude "/nextcloud_aio_volumes/nextcloud_aio_nextcloud/data/audit.log")
|
||||
BORG_EXCLUDE=(--exclude "/nextcloud_aio_volumes/nextcloud_aio_nextcloud/data/nextcloud.log*" --exclude "/nextcloud_aio_volumes/nextcloud_aio_nextcloud/data/audit.log" --exclude "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data/lost+found")
|
||||
BORG_INCLUDE=()
|
||||
|
||||
# Exclude datadir if .noaiobackup file was found
|
||||
@@ -405,6 +405,7 @@ if [ "$BORG_MODE" = restore ]; then
|
||||
--exclude "nextcloud_aio_mastercontainer/data/daily_backup_running" \
|
||||
--exclude "nextcloud_aio_mastercontainer/data/session_date_file" \
|
||||
--exclude "nextcloud_aio_mastercontainer/session/**" \
|
||||
--exclude "nextcloud_aio_nextcloud_data/lost+found" \
|
||||
"${ADDITIONAL_RSYNC_EXCLUDES[@]}" \
|
||||
/tmp/borg/nextcloud_aio_volumes/ /nextcloud_aio_volumes/; then
|
||||
RESTORE_FAILED=1
|
||||
@@ -459,6 +460,7 @@ if [ "$BORG_MODE" = restore ]; then
|
||||
-o -path nextcloud_aio_volumes/nextcloud_aio_mastercontainer/data/daily_backup_running \
|
||||
-o -path nextcloud_aio_volumes/nextcloud_aio_mastercontainer/data/session_date_file \
|
||||
-o -path "nextcloud_aio_volumes/nextcloud_aio_mastercontainer/data/id_borg*" \
|
||||
-o -path "nextcloud_aio_nextcloud_data/lost+found" \
|
||||
"${ADDITIONAL_FIND_EXCLUDES[@]}" \
|
||||
\) \
|
||||
| LC_ALL=C sort \
|
||||
|
||||
@@ -21,5 +21,6 @@ USER 100
|
||||
VOLUME /var/lib/clamav
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
HEALTHCHECK --start-period=60s --retries=9 CMD /healthcheck.sh
|
||||
|
||||
@@ -13,7 +13,7 @@ stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
command=freshclam --foreground --stdout --daemon
|
||||
command=freshclam --foreground --stdout --daemon --daemon-notify=/tmp/clamd.conf
|
||||
|
||||
[program:clamd]
|
||||
stdout_logfile=/dev/stdout
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
# From a file located probably somewhere here: https://github.com/CollaboraOnline/online/tree/master/docker
|
||||
FROM collabora/code:24.04.12.4.1
|
||||
# From a file located probably somewhere here: https://github.com/CollaboraOnline/online/blob/master/docker/from-packages/Dockerfile
|
||||
FROM collabora/code:24.04.13.3.1
|
||||
|
||||
USER root
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
@@ -10,15 +10,14 @@ RUN set -ex; \
|
||||
\
|
||||
apt-get update; \
|
||||
apt-get install -y --no-install-recommends \
|
||||
# # Disable because seems to be failing currently
|
||||
# # tzdata \
|
||||
netcat-openbsd \
|
||||
; \
|
||||
rm -rf /var/lib/apt/lists/*;
|
||||
|
||||
COPY --chmod=775 healthcheck.sh /healthcheck.sh
|
||||
|
||||
USER 100
|
||||
USER 1001
|
||||
|
||||
HEALTHCHECK --start-period=60s --retries=9 CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
FROM haproxy:3.1.5-alpine
|
||||
FROM haproxy:3.1.7-alpine
|
||||
|
||||
# hadolint ignore=DL3002
|
||||
USER root
|
||||
@@ -18,4 +18,5 @@ COPY --chmod=664 haproxy.cfg /haproxy.cfg
|
||||
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -4,16 +4,18 @@ global
|
||||
maxconn 10
|
||||
|
||||
defaults
|
||||
timeout connect 10s
|
||||
timeout client 10s
|
||||
timeout server 10s
|
||||
timeout connect 30s
|
||||
timeout client 30s
|
||||
timeout server 1800s
|
||||
|
||||
frontend http
|
||||
mode http
|
||||
bind :::2375 v4v6
|
||||
http-request deny unless { src 127.0.0.1 } || { src ::1 } || { src NC_IPV4_PLACEHOLDER } || { src NC_IPV6_PLACEHOLDER }
|
||||
# docker system _ping
|
||||
http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/_ping } METH_GET
|
||||
http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/_ping$ } METH_GET
|
||||
# docker inspect image: GET images/%s/json
|
||||
http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/images/.*/json } METH_GET
|
||||
# container inspect: GET containers/%s/json
|
||||
http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/containers/nc_app_[a-zA-Z0-9_.-]+/json } METH_GET
|
||||
# container inspect: GET containers/%s/logs
|
||||
@@ -38,19 +40,19 @@ frontend http
|
||||
# ACL to deny if there are any binds
|
||||
acl binds_present req.body -m reg -i "\"HostConfig\"\s*:.*\"Binds\"\s*:"
|
||||
# ACL to restrict the type of Mounts to volume
|
||||
acl type_not_volume req.body -m reg -i "\"Mounts\":\s*\[[^\]]*(\"Type\":\s*\"(?!volume\b)\w+\"[^\]]*)+\]"
|
||||
acl type_not_volume req.body -m reg -i "\"Mounts\"\s*:\s*\[[^\]]*(\"Type\"\s*:\s*\"(?!volume\b)\w+\"[^\]]*)+\]"
|
||||
http-request deny if { path,url_dec -m reg -i ^(/v[\d\.]+)?/containers/create } nc_app_container_name !one_mount_volume binds_present type_not_volume METH_POST
|
||||
|
||||
# ACL to restrict container creation, that it has HostConfig.Privileged not set
|
||||
acl no_privileged_flag req.body -m reg -i "\"HostConfig\":\s?{[^}]*\"Privileged\""
|
||||
# ACL to restrict container creation, that it has HostConfig.Privileged(by searching for "Privileged" word in all payload)
|
||||
acl no_privileged_flag req.body -m reg -i "\"Privileged\""
|
||||
# ACL to allow mount volume with strict pattern for name: nc_app_[a-zA-Z0-9_.-]+_data
|
||||
acl nc_app_volume_data_only req.body -m reg -i "\"Mounts\":\s?\[\s?{[^}]*\"Source\":\s?\"nc_app_[a-zA-Z0-9_.-]+_data\""
|
||||
acl nc_app_volume_data_only req.body -m reg -i "\"Mounts\"\s*:\s*\[\s*{[^}]*\"Source\"\s*:\s*\"nc_app_[a-zA-Z0-9_.-]+_data\""
|
||||
http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/containers/create } nc_app_container_name !no_privileged_flag nc_app_volume_data_only METH_POST
|
||||
# end of container create
|
||||
|
||||
# volume create: POST volumes/create
|
||||
# restrict name
|
||||
acl nc_app_volume_data req.body -m reg -i "\"Name\":\s?\"nc_app_[a-zA-Z0-9_.-]+_data\""
|
||||
acl nc_app_volume_data req.body -m reg -i "\"Name\"\s*:\s*\"nc_app_[a-zA-Z0-9_.-]+_data\""
|
||||
# do not allow to use "device" word e.g., "--opt device=:/path/to/dir"
|
||||
acl volume_no_device req.body -m reg -i "\"device\""
|
||||
http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/volumes/create } nc_app_volume_data !volume_no_device METH_POST
|
||||
|
||||
@@ -17,4 +17,5 @@ USER www-data
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
|
||||
HEALTHCHECK CMD nc -z 127.0.0.1 $APACHE_PORT || exit 1
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
# Probably from here https://github.com/elastic/elasticsearch/blob/main/distribution/docker/src/docker/Dockerfile
|
||||
FROM elasticsearch:8.17.3
|
||||
FROM elasticsearch:8.18.1
|
||||
|
||||
USER root
|
||||
|
||||
@@ -21,5 +21,6 @@ COPY --chmod=775 healthcheck.sh /healthcheck.sh
|
||||
USER 1000:0
|
||||
|
||||
HEALTHCHECK --interval=10s --timeout=5s --start-period=1m --retries=5 CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
ENV ES_JAVA_OPTS="-Xms512M -Xmx512M"
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
FROM golang:1.24.1-alpine3.21 AS go
|
||||
FROM golang:1.24.3-alpine3.21 AS go
|
||||
|
||||
ENV IMAGINARY_HASH=1d4e251cfcd58ea66f8361f8721d7b8cc85002a3
|
||||
ENV IMAGINARY_HASH=1d4e251cfcd58ea66f8361f8721d7b8cc85002a3
|
||||
|
||||
RUN set -ex; \
|
||||
apk upgrade --no-cache -a; \
|
||||
apk add --no-cache \
|
||||
vips-dev \
|
||||
vips-magick \
|
||||
@@ -41,4 +42,5 @@ ENV MALLOC_ARENA_MAX=2
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
# Docker CLI is a requirement
|
||||
FROM docker:28.0.1-cli AS docker
|
||||
FROM docker:28.1.1-cli AS docker
|
||||
|
||||
# Caddy is a requirement
|
||||
FROM caddy:2.9.1-alpine AS caddy
|
||||
FROM caddy:2.10.0-alpine AS caddy
|
||||
|
||||
# From https://github.com/docker-library/php/blob/master/8.3/alpine3.21/fpm/Dockerfile
|
||||
FROM php:8.3.17-fpm-alpine3.21
|
||||
# From https://github.com/docker-library/php/blob/master/8.4/alpine3.21/fpm/Dockerfile
|
||||
FROM php:8.4.7-fpm-alpine3.21
|
||||
|
||||
EXPOSE 80
|
||||
EXPOSE 8080
|
||||
@@ -66,6 +66,7 @@ RUN set -ex; \
|
||||
cd /var/www/docker-aio; \
|
||||
git clone https://github.com/nextcloud-releases/all-in-one.git --depth 1 .; \
|
||||
find ./ -maxdepth 1 -mindepth 1 -not -path ./php -not -path ./community-containers -exec rm -r {} \; ; \
|
||||
rm -r ./php/tests; \
|
||||
chown www-data:www-data -R /var/www/docker-aio; \
|
||||
cd php; \
|
||||
sudo -u www-data composer install --no-dev; \
|
||||
@@ -121,6 +122,8 @@ COPY --chmod=664 Caddyfile /Caddyfile
|
||||
COPY --chmod=664 supervisord.conf /supervisord.conf
|
||||
COPY mastercontainer.conf /etc/apache2/sites-available/mastercontainer.conf
|
||||
|
||||
LABEL org.label-schema.vendor="Nextcloud"
|
||||
|
||||
# hadolint ignore=DL3002
|
||||
USER root
|
||||
|
||||
|
||||
@@ -20,6 +20,11 @@ APACHE_PORT="$(docker inspect nextcloud-aio-apache --format "{{.Config.Env}}" |
|
||||
if [ -z "$APACHE_PORT" ]; then
|
||||
echo "APACHE_PORT is not set which is not expected..."
|
||||
else
|
||||
# Connect mastercontainer to nextcloud-aio network to make sure that nextcloud-aio-apache is reachable
|
||||
# Prevent issues like https://github.com/nextcloud/all-in-one/discussions/5222
|
||||
docker network connect nextcloud-aio nextcloud-aio-mastercontainer &>/dev/null
|
||||
|
||||
# Wait for apache to start
|
||||
while docker ps --format "{{.Names}}" | grep -q "^nextcloud-aio-apache$" && ! nc -z nextcloud-aio-apache "$APACHE_PORT"; do
|
||||
echo "Waiting for apache to become available"
|
||||
sleep 30
|
||||
|
||||
@@ -272,23 +272,13 @@ It is set to '$AIO_COMMUNITY_CONTAINERS'."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check DNS resolution
|
||||
# Prevents issues like https://github.com/nextcloud/all-in-one/discussions/565
|
||||
curl https://nextcloud.com &>/dev/null
|
||||
if [ "$?" = 6 ]; then
|
||||
print_red "Could not resolve the host nextcloud.com."
|
||||
echo "Most likely the DNS resolving does not work."
|
||||
echo "You should be able to fix this by following https://dockerlabs.collabnix.com/intermediate/networking/Configuring_DNS.html"
|
||||
echo "Apart from that, there has been this: https://github.com/nextcloud/all-in-one/discussions/2065"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if auth.docker.io is reachable
|
||||
# Check if ghcr.io is reachable
|
||||
# Solves issues like https://github.com/nextcloud/all-in-one/discussions/5268
|
||||
if ! curl https://auth.docker.io/token 2>&1 | grep -q token; then
|
||||
print_red "Could not reach https://auth.docker.io."
|
||||
if ! curl --no-progress-meter https://ghcr.io/v2/ >/dev/null; then
|
||||
print_red "Could not reach https://ghcr.io."
|
||||
echo "Most likely is something blocking access to it."
|
||||
echo "You should be able to fix this by using https://github.com/nextcloud/all-in-one/tree/main/manual-install"
|
||||
echo "You should be able to fix this by following https://dockerlabs.collabnix.com/intermediate/networking/Configuring_DNS.html"
|
||||
echo "Another solution is using https://github.com/nextcloud/all-in-one/tree/main/manual-install"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
FROM php:8.3.17-fpm-alpine3.21
|
||||
FROM php:8.3.21-fpm-alpine3.21
|
||||
|
||||
ENV PHP_MEMORY_LIMIT=512M
|
||||
ENV PHP_UPLOAD_LIMIT=16G
|
||||
@@ -8,14 +8,11 @@ ENV SOURCE_LOCATION=/usr/src/nextcloud
|
||||
ENV REDIS_DB_INDEX=0
|
||||
|
||||
# AIO settings start # Do not remove or change this line!
|
||||
ENV NEXTCLOUD_VERSION=30.0.7
|
||||
ENV NEXTCLOUD_VERSION=30.0.11
|
||||
ENV AIO_TOKEN=123456
|
||||
ENV AIO_URL=localhost
|
||||
# AIO settings end # Do not remove or change this line!
|
||||
|
||||
# Define the commit hash for imagick as a variable
|
||||
ARG IMAGICK_COMMIT_HASH=28f27044e435a2b203e32675e942eb8de620ee58
|
||||
|
||||
COPY --chmod=775 *.sh /
|
||||
COPY --chmod=774 upgrade.exclude /upgrade.exclude
|
||||
COPY config/*.php /
|
||||
@@ -84,21 +81,8 @@ RUN set -ex; \
|
||||
pecl install -o igbinary-3.2.16; \
|
||||
pecl install APCu-5.1.24; \
|
||||
pecl install -D 'enable-memcached-igbinary="yes"' memcached-3.3.0; \
|
||||
pecl install -oD 'enable-redis-igbinary="yes" enable-redis-zstd="yes" enable-redis-lz4="yes"' redis-6.1.0; \
|
||||
# pecl install -o imagick-3.7.0; \
|
||||
# Begin workaround ->
|
||||
# The master version on the imagick repository is compatible with PHP 8.3. However, the PECL version is not updated yet.
|
||||
# As soon as it will get updated, we can switch back to the PECL version, instead of having this workaround.
|
||||
apk add --no-cache --virtual .git-build-deps git \
|
||||
&& git clone https://github.com/imagick/imagick.git --depth 1 /tmp/imagick \
|
||||
&& cd /tmp/imagick \
|
||||
&& git fetch --depth 1 origin ${IMAGICK_COMMIT_HASH} \
|
||||
&& git checkout ${IMAGICK_COMMIT_HASH} \
|
||||
&& sed -i "s/@PACKAGE_VERSION@/git-${IMAGICK_COMMIT_HASH:0:7}/" php_imagick.h \
|
||||
&& phpize && ./configure && make && make install; \
|
||||
apk del .git-build-deps; \
|
||||
cd && rm -r /tmp/imagick; \
|
||||
# <- End workaround
|
||||
pecl install -oD 'enable-redis-igbinary="yes" enable-redis-zstd="yes" enable-redis-lz4="yes"' redis-6.2.0; \
|
||||
pecl install -o imagick-3.8.0; \
|
||||
\
|
||||
docker-php-ext-enable \
|
||||
igbinary \
|
||||
@@ -142,7 +126,7 @@ RUN set -ex; \
|
||||
echo 'post_max_size=${PHP_UPLOAD_LIMIT}'; \
|
||||
echo 'max_execution_time=${PHP_MAX_TIME}'; \
|
||||
echo 'max_input_time=${PHP_MAX_TIME}'; \
|
||||
echo 'default_socket_timeout=600'; \
|
||||
echo 'default_socket_timeout=${PHP_MAX_TIME}'; \
|
||||
} > /usr/local/etc/php/conf.d/nextcloud.ini; \
|
||||
\
|
||||
{ \
|
||||
@@ -281,4 +265,5 @@ ENTRYPOINT ["/start.sh"]
|
||||
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
|
||||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -33,7 +33,7 @@ while ! nc -z "$REDIS_HOST" "6379"; do
|
||||
done
|
||||
|
||||
# Check permissions in ncdata
|
||||
touch "$NEXTCLOUD_DATA_DIR/this-is-a-test-file" &>/dev/null
|
||||
touch "$NEXTCLOUD_DATA_DIR/this-is-a-test-file"
|
||||
if ! [ -f "$NEXTCLOUD_DATA_DIR/this-is-a-test-file" ]; then
|
||||
echo "The www-data user doesn't seem to have access rights in the datadir.
|
||||
Most likely are the files located on a drive that does not follow linux permissions.
|
||||
@@ -535,6 +535,13 @@ php /var/www/html/occ config:system:set upgrade.cli-upgrade-link --value="https:
|
||||
php /var/www/html/occ config:system:set logfile --value="/var/www/html/data/nextcloud.log"
|
||||
php /var/www/html/occ config:app:set admin_audit logfile --value="/var/www/html/data/audit.log"
|
||||
php /var/www/html/occ config:system:set updatedirectory --value="/nc-updater"
|
||||
if [ -n "$NEXTCLOUD_SKELETON_DIRECTORY" ]; then
|
||||
if [ "$NEXTCLOUD_SKELETON_DIRECTORY" = "empty" ]; then
|
||||
php /var/www/html/occ config:system:set skeletondirectory --value=""
|
||||
else
|
||||
php /var/www/html/occ config:system:set skeletondirectory --value="$NEXTCLOUD_SKELETON_DIRECTORY"
|
||||
fi
|
||||
fi
|
||||
if [ -n "$SERVERINFO_TOKEN" ] && [ -z "$(php /var/www/html/occ config:app:get serverinfo token)" ]; then
|
||||
php /var/www/html/occ config:app:set serverinfo token --value="$SERVERINFO_TOKEN"
|
||||
fi
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Warning: You have logged in into the Nextcloud container as root user.
|
||||
See https://github.com/nextcloud/all-in-one#how-to-run-occ-commands if you want to run occ commands.
|
||||
Apart from that, you can use 'sudo -u www-data -E php occ <your-command>' in order to run occ commands.
|
||||
Apart from that, you can use 'sudo -E -u www-data php occ <your-command>' in order to run occ commands.
|
||||
Of course <your-command> needs to be substituted with the command that you want to use.
|
||||
|
||||
@@ -39,5 +39,7 @@ stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
command=nc -lk 9001
|
||||
# Restart the netcat command once a day to ensure that it stays reachable
|
||||
# See https://github.com/nextcloud/all-in-one/issues/6334
|
||||
command=timeout 86400 nc -lk 9001
|
||||
user=www-data
|
||||
|
||||
@@ -21,4 +21,5 @@ USER 33
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
# From https://github.com/ONLYOFFICE/Docker-DocumentServer/blob/master/Dockerfile
|
||||
FROM onlyoffice/documentserver:8.3.1.1
|
||||
FROM onlyoffice/documentserver:8.3.3.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"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
# From https://github.com/docker-library/postgres/blob/master/16/alpine3.21/Dockerfile
|
||||
FROM postgres:16.8-alpine
|
||||
FROM postgres:16.9-alpine
|
||||
|
||||
COPY --chmod=775 start.sh /start.sh
|
||||
COPY --chmod=775 healthcheck.sh /healthcheck.sh
|
||||
@@ -43,4 +43,5 @@ USER 999
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
# From https://github.com/docker-library/redis/blob/master/7.2/alpine/Dockerfile
|
||||
FROM redis:7.2.7-alpine
|
||||
FROM redis:7.2.8-alpine
|
||||
|
||||
COPY --chmod=775 start.sh /start.sh
|
||||
|
||||
@@ -20,4 +20,5 @@ USER 999
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
FROM python:3.13.2-alpine3.21
|
||||
FROM python:3.13.3-alpine3.21
|
||||
|
||||
COPY --chmod=775 start.sh /start.sh
|
||||
COPY --chmod=775 healthcheck.sh /healthcheck.sh
|
||||
@@ -7,6 +7,7 @@ COPY --chmod=775 healthcheck.sh /healthcheck.sh
|
||||
ENV RECORDING_VERSION=v0.1
|
||||
ENV ALLOW_ALL=false
|
||||
ENV HPB_PROTOCOL=https
|
||||
ENV NC_PROTOCOL=https
|
||||
ENV SKIP_VERIFY=false
|
||||
ENV HPB_PATH=/standalone-signaling/
|
||||
|
||||
@@ -56,4 +57,5 @@ ENTRYPOINT ["/start.sh"]
|
||||
CMD ["python", "-m", "nextcloud.talk.recording", "--config", "/conf/recording.conf"]
|
||||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -39,7 +39,7 @@ videoheight = 1080
|
||||
directory = /tmp
|
||||
|
||||
[backend-1]
|
||||
url = ${HPB_PROTOCOL}://${NC_DOMAIN}
|
||||
url = ${NC_PROTOCOL}://${NC_DOMAIN}
|
||||
secret = ${RECORDING_SECRET}
|
||||
skipverify = ${SKIP_VERIFY}
|
||||
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
FROM nats:2.10.26-scratch AS nats
|
||||
FROM nats:2.11.3-scratch AS nats
|
||||
FROM eturnal/eturnal:1.12.1 AS eturnal
|
||||
FROM strukturag/nextcloud-spreed-signaling:2.0.2 AS signaling
|
||||
FROM strukturag/nextcloud-spreed-signaling:2.0.3 AS signaling
|
||||
FROM alpine:3.21.3 AS janus
|
||||
|
||||
ARG JANUS_VERSION=v1.3.1
|
||||
WORKDIR /src
|
||||
RUN set -ex; \
|
||||
apk upgrade --no-cache -a; \
|
||||
apk add --no-cache \
|
||||
ca-certificates \
|
||||
git \
|
||||
@@ -104,4 +105,5 @@ ENTRYPOINT ["/start.sh"]
|
||||
CMD ["supervisord", "-c", "/supervisord.conf"]
|
||||
|
||||
HEALTHCHECK CMD /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
# syntax=docker/dockerfile:latest
|
||||
# From https://github.com/containrrr/watchtower/blob/main/dockerfiles/Dockerfile.self-contained
|
||||
FROM containrrr/watchtower:1.7.1 AS watchtower
|
||||
FROM golang:1.24.3-alpine3.21 AS go
|
||||
|
||||
RUN set -ex; \
|
||||
apk upgrade --no-cache -a; \
|
||||
apk add --no-cache \
|
||||
build-base; \
|
||||
go install github.com/containrrr/watchtower@76f9cea516593fabb8ca91ff13de55caa6aa0a8b;
|
||||
|
||||
FROM alpine:3.21.3
|
||||
|
||||
RUN set -ex; \
|
||||
apk upgrade --no-cache -a; \
|
||||
apk add --no-cache bash
|
||||
apk add --no-cache bash ca-certificates tzdata
|
||||
|
||||
COPY --from=watchtower /watchtower /watchtower
|
||||
COPY --from=go /go/bin/watchtower /watchtower
|
||||
|
||||
COPY --chmod=775 start.sh /start.sh
|
||||
|
||||
@@ -16,4 +21,5 @@ COPY --chmod=775 start.sh /start.sh
|
||||
USER root
|
||||
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -18,4 +18,5 @@ WORKDIR /tmp
|
||||
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
|
||||
LABEL com.centurylinklabs.watchtower.enable="false"
|
||||
LABEL com.centurylinklabs.watchtower.enable="false" \
|
||||
org.label-schema.vendor="Nextcloud"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"image_tag": "v1",
|
||||
"display_name": "Borg Backup Viewer",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/borgbackup-viewer",
|
||||
"image": "szaimen/aio-borgbackup-viewer",
|
||||
"image": "ghcr.io/szaimen/aio-borgbackup-viewer",
|
||||
"internal_port": "5801",
|
||||
"ports": [
|
||||
{
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"container_name": "nextcloud-aio-caddy",
|
||||
"display_name": "Caddy with geoblocking",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/caddy",
|
||||
"image": "szaimen/aio-caddy",
|
||||
"image": "ghcr.io/szaimen/aio-caddy",
|
||||
"image_tag": "v2",
|
||||
"internal_port": "443",
|
||||
"restart": "unless-stopped",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"container_name": "nextcloud-aio-fail2ban",
|
||||
"display_name": "Fail2ban",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/fail2ban",
|
||||
"image": "szaimen/aio-fail2ban",
|
||||
"image": "ghcr.io/szaimen/aio-fail2ban",
|
||||
"image_tag": "v1",
|
||||
"internal_port": "host",
|
||||
"restart": "unless-stopped",
|
||||
|
||||
@@ -4,6 +4,7 @@ This container bundles fail2ban and auto-configures it for you in order to block
|
||||
### Notes
|
||||
- If you get an error like `"ip6tables v1.8.9 (legacy): can't initialize ip6tables table filter': Table does not exist (do you need to insmod?)"`, you need to enable ip6tables on your host via `sudo modprobe ip6table_filter`.
|
||||
- If you get an error like `stderr: 'iptables: No chain/target/match by that name.'` and `stderr: 'ip6tables: No chain/target/match by that name.'`, you need to follow https://github.com/szaimen/aio-fail2ban/issues/9#issuecomment-2026898790 in order to resolve this.
|
||||
- You can unban ip addresses like so for example: `docker exec -it nextcloud-aio-fail2ban fail2ban-client set nextcloud unbanip 203.113.167.162`.
|
||||
- See https://github.com/nextcloud/all-in-one/tree/main/community-containers#community-containers how to add it to the AIO stack
|
||||
|
||||
### Repository
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"container_name": "nextcloud-aio-libretranslate",
|
||||
"display_name": "LibreTranslate",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/libretranslate",
|
||||
"image": "szaimen/aio-libretranslate",
|
||||
"image": "ghcr.io/szaimen/aio-libretranslate",
|
||||
"image_tag": "v1",
|
||||
"internal_port": "5000",
|
||||
"restart": "unless-stopped",
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
## LibreTranslate
|
||||
This container bundles LibreTranslate and auto-configures it for you.
|
||||
|
||||
> [!WARNING]
|
||||
> The LibreTranslate container and app is deprecated!
|
||||
> Please use the [translate2 app](https://apps.nextcloud.com/apps/translate2) instead.
|
||||
> You can activate it by first enabling the Docker-Socket-Proxy in the AIO-interface and then heading over to `https://your-nc-domain.com/settings/apps/tools` and installing and enabling the `Local Machine Translation` app.
|
||||
|
||||
### Notes
|
||||
- After the initial startup is done, you might want to change the default language to translate from and to via:
|
||||
```bash
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"container_name": "nextcloud-aio-local-ai",
|
||||
"display_name": "Local AI",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/local-ai",
|
||||
"image": "szaimen/aio-local-ai",
|
||||
"image": "ghcr.io/szaimen/aio-local-ai",
|
||||
"image_tag": "v2",
|
||||
"internal_port": "8080",
|
||||
"restart": "unless-stopped",
|
||||
|
||||
@@ -7,7 +7,7 @@ All containers that are in this directory are community maintained so the respon
|
||||
## How to use this?
|
||||
Before adding any additional container, make sure to create a backup via the AIO interface!
|
||||
|
||||
Afterwards, you might want to add additional community containers to the default AIO stack. You can do so by adding `--env AIO_COMMUNITY_CONTAINERS="container1 container2"` to the docker run command of the mastercontainer (but before the last line `nextcloud/all-in-one:latest`! If it was started already, you will need to stop the mastercontainer, remove it (no data will be lost) and recreate it using the docker run command that you initially used) and customize the value to your fitting. It must match the folder names in this directory! ⚠️⚠️⚠️ Please review the folder for documentation on each of the containers before adding them! Not reviewing the documentation for each of them first might break starting the AIO containers because e.g. fail2ban only works on Linux and not on Docker Desktop! **Hint:** If the containers where running already, in order to actually start the added container, you need to click on `Stop containers` and the `Update and start containers` in order to actually start it.
|
||||
Afterwards, you might want to add additional community containers to the default AIO stack. You can do so by adding `--env AIO_COMMUNITY_CONTAINERS="container1 container2"` to the docker run command of the mastercontainer (but before the last line `ghcr.io/nextcloud-releases/all-in-one:latest`! If it was started already, you will need to stop the mastercontainer, remove it (no data will be lost) and recreate it using the docker run command that you initially used) and customize the value to your fitting. It must match the folder names in this directory! ⚠️⚠️⚠️ Please review the folder for documentation on each of the containers before adding them! Not reviewing the documentation for each of them first might break starting the AIO containers because e.g. fail2ban only works on Linux and not on Docker Desktop! **Hint:** If the containers where running already, in order to actually start the added container, you need to click on `Stop containers` and the `Update and start containers` in order to actually start it.
|
||||
|
||||
## How to add containers?
|
||||
Simply submit a PR by creating a new folder in this directory: https://github.com/nextcloud/all-in-one/tree/main/community-containers with the name of your container. It must include a json file with the same name and with correct syntax and a readme.md with additional information. You might get inspired by caddy, fail2ban, local-ai, libretranslate, plex, pi-hole or vaultwarden (subfolders in this directory). For a full-blown example of the json file, see https://github.com/nextcloud/all-in-one/blob/main/php/containers.json. The json-schema that it validates against can be found here: https://github.com/nextcloud/all-in-one/blob/main/php/containers-schema.json.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"container_name": "nextcloud-aio-scrutiny",
|
||||
"display_name": "Scrutiny",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/scrutiny",
|
||||
"image": "szaimen/aio-scrutiny",
|
||||
"image": "ghcr.io/szaimen/aio-scrutiny",
|
||||
"image_tag": "v1",
|
||||
"internal_port": "8000",
|
||||
"init": false,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"container_name": "nextcloud-aio-smbserver",
|
||||
"display_name": "SMB-server",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/smbserver",
|
||||
"image": "szaimen/aio-smbserver",
|
||||
"image": "ghcr.io/szaimen/aio-smbserver",
|
||||
"image_tag": "v1",
|
||||
"internal_port": "5803",
|
||||
"restart": "unless-stopped",
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"display_name": "Stalwart",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/stalwart",
|
||||
"image": "ghcr.io/docjyj/aio-stalwart",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"image_tag": "v3",
|
||||
"internal_port": "10003",
|
||||
"restart": "unless-stopped",
|
||||
"ports": [
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"container_name": "nextcloud-aio-vaultwarden",
|
||||
"display_name": "Vaultwarden",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/vaultwarden",
|
||||
"image": "vaultwarden/server",
|
||||
"image": "ghcr.io/dani-garcia/vaultwarden",
|
||||
"image_tag": "alpine",
|
||||
"internal_port": "8812",
|
||||
"restart": "unless-stopped",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
nextcloud-aio-mastercontainer:
|
||||
image: nextcloud/all-in-one:latest
|
||||
image: ghcr.io/nextcloud-releases/all-in-one:latest
|
||||
init: true
|
||||
restart: always
|
||||
container_name: nextcloud-aio-mastercontainer # This line is not allowed to be changed as otherwise AIO will not work correctly
|
||||
|
||||
@@ -11,7 +11,7 @@ sudo docker run \
|
||||
--publish 8443:8443 \
|
||||
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
|
||||
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
|
||||
nextcloud/all-in-one:develop
|
||||
ghcr.io/nextcloud-releases/all-in-one:develop
|
||||
```
|
||||
And you are done :)
|
||||
It will now also select the developer channel for all other containers automatically.
|
||||
@@ -19,6 +19,9 @@ It will now also select the developer channel for all other containers automatic
|
||||
## How to publish new releases?
|
||||
Simply use https://github.com/nextcloud/all-in-one/issues/180 as template.
|
||||
|
||||
## How to update existing instances to a new major Nextcloud version?
|
||||
Simply use https://github.com/nextcloud/all-in-one/issues/6198 as template.
|
||||
|
||||
## How to build new containers
|
||||
Go to https://github.com/nextcloud-releases/all-in-one/actions/workflows/repo-sync.yml and run the workflow that will first sync the repo and then build new container that automatically get published to `develop` and `develop-arm64`.
|
||||
|
||||
@@ -27,6 +30,8 @@ Before testing, make sure that at least the amd64 containers are built successfu
|
||||
|
||||
There is a testing-VM available for the maintainer of AIO that allows for some final testing before releasing new version. See [this](https://cloud.nextcloud.com/apps/collectives/Nextcloud%20Handbook/Technical/AIO%20testing%20VM?fileId=6350152) for details.
|
||||
|
||||
Additionally, there are now E2E tests available that can be run via https://github.com/nextcloud/all-in-one/actions/workflows/playwright.yml
|
||||
|
||||
## How to promote builds from develop to beta
|
||||
1. Verify that no job is running here: https://github.com/nextcloud-releases/all-in-one/actions/workflows/build_images.yml
|
||||
2. Go to https://github.com/nextcloud-releases/all-in-one/actions/workflows/promote-to-beta.yml, click on `Run workflow`.
|
||||
|
||||
@@ -19,7 +19,7 @@ services:
|
||||
nextcloud-aio-whiteboard:
|
||||
condition: service_started
|
||||
required: false
|
||||
image: nextcloud/aio-apache:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-apache:latest
|
||||
user: "33"
|
||||
init: true
|
||||
healthcheck:
|
||||
@@ -60,7 +60,7 @@ services:
|
||||
- NET_RAW
|
||||
|
||||
nextcloud-aio-database:
|
||||
image: nextcloud/aio-postgresql:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-postgresql:latest
|
||||
user: "999"
|
||||
init: true
|
||||
healthcheck:
|
||||
@@ -110,7 +110,7 @@ services:
|
||||
nextcloud-aio-imaginary:
|
||||
condition: service_started
|
||||
required: false
|
||||
image: nextcloud/aio-nextcloud:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-nextcloud:latest
|
||||
init: true
|
||||
healthcheck:
|
||||
start_period: 0s
|
||||
@@ -185,7 +185,7 @@ services:
|
||||
- NET_RAW
|
||||
|
||||
nextcloud-aio-notify-push:
|
||||
image: nextcloud/aio-notify-push:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-notify-push:latest
|
||||
user: "33"
|
||||
init: true
|
||||
healthcheck:
|
||||
@@ -216,7 +216,7 @@ services:
|
||||
- NET_RAW
|
||||
|
||||
nextcloud-aio-redis:
|
||||
image: nextcloud/aio-redis:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-redis:latest
|
||||
user: "999"
|
||||
init: true
|
||||
healthcheck:
|
||||
@@ -240,7 +240,7 @@ services:
|
||||
|
||||
nextcloud-aio-collabora:
|
||||
command: ${ADDITIONAL_COLLABORA_OPTIONS}
|
||||
image: nextcloud/aio-collabora:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-collabora:latest
|
||||
init: true
|
||||
healthcheck:
|
||||
start_period: 60s
|
||||
@@ -264,11 +264,12 @@ services:
|
||||
cap_add:
|
||||
- MKNOD
|
||||
- SYS_ADMIN
|
||||
- CHOWN
|
||||
cap_drop:
|
||||
- NET_RAW
|
||||
|
||||
nextcloud-aio-talk:
|
||||
image: nextcloud/aio-talk:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-talk:latest
|
||||
user: "1000"
|
||||
init: true
|
||||
healthcheck:
|
||||
@@ -306,7 +307,7 @@ services:
|
||||
- NET_RAW
|
||||
|
||||
nextcloud-aio-talk-recording:
|
||||
image: nextcloud/aio-talk-recording:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-talk-recording:latest
|
||||
user: "122"
|
||||
init: true
|
||||
healthcheck:
|
||||
@@ -336,12 +337,12 @@ services:
|
||||
- NET_RAW
|
||||
|
||||
nextcloud-aio-clamav:
|
||||
image: nextcloud/aio-clamav:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-clamav:latest
|
||||
user: "100"
|
||||
init: false
|
||||
healthcheck:
|
||||
start_period: 60s
|
||||
test: clamdcheck.sh
|
||||
test: /healthcheck.sh
|
||||
interval: 30s
|
||||
timeout: 30s
|
||||
start_interval: 5s
|
||||
@@ -351,7 +352,6 @@ services:
|
||||
environment:
|
||||
- TZ=${TIMEZONE}
|
||||
- MAX_SIZE=${NEXTCLOUD_UPLOAD_LIMIT}
|
||||
- CLAMD_STARTUP_TIMEOUT=90
|
||||
volumes:
|
||||
- nextcloud_aio_clamav:/var/lib/clamav:rw
|
||||
restart: unless-stopped
|
||||
@@ -359,14 +359,16 @@ services:
|
||||
- clamav
|
||||
read_only: true
|
||||
tmpfs:
|
||||
- /var/lock
|
||||
- /var/log/clamav
|
||||
- /tmp
|
||||
- /var/log/clamav
|
||||
- /run/clamav
|
||||
- /var/log/supervisord
|
||||
- /var/run/supervisord
|
||||
cap_drop:
|
||||
- NET_RAW
|
||||
|
||||
nextcloud-aio-onlyoffice:
|
||||
image: nextcloud/aio-onlyoffice:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-onlyoffice:latest
|
||||
init: true
|
||||
healthcheck:
|
||||
start_period: 60s
|
||||
@@ -391,7 +393,7 @@ services:
|
||||
- NET_RAW
|
||||
|
||||
nextcloud-aio-imaginary:
|
||||
image: nextcloud/aio-imaginary:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-imaginary:latest
|
||||
user: "65534"
|
||||
init: true
|
||||
healthcheck:
|
||||
@@ -418,7 +420,7 @@ services:
|
||||
- /tmp
|
||||
|
||||
nextcloud-aio-fulltextsearch:
|
||||
image: nextcloud/aio-fulltextsearch:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-fulltextsearch:latest
|
||||
init: false
|
||||
healthcheck:
|
||||
start_period: 60s
|
||||
@@ -449,7 +451,7 @@ services:
|
||||
- NET_RAW
|
||||
|
||||
nextcloud-aio-whiteboard:
|
||||
image: nextcloud/aio-whiteboard:latest
|
||||
image: ghcr.io/nextcloud-releases/aio-whiteboard:latest
|
||||
user: "65534"
|
||||
init: true
|
||||
healthcheck:
|
||||
|
||||
@@ -35,13 +35,13 @@ The only way to fix this on your side is upgrading regularly (e.g. by enabling d
|
||||
|
||||
| To change | Replace with |
|
||||
|----------------------------------------|-----------------------------------------------------|
|
||||
| `nextcloud/aio-nextcloud:latest` | `nextcloud/aio-nextcloud:php{version}-latest` |
|
||||
| `nextcloud/aio-nextcloud:latest-arm64` | `nextcloud/aio-nextcloud:php{version}-latest-arm64` |
|
||||
| `ghcr.io/nextcloud-releases/aio-nextcloud:latest` | `ghcr.io/nextcloud-releases/aio-nextcloud:php{version}-latest` |
|
||||
| `ghcr.io/nextcloud-releases/aio-nextcloud:latest-arm64` | `ghcr.io/nextcloud-releases/aio-nextcloud:php{version}-latest-arm64` |
|
||||
|
||||
|
||||
|
||||
- e.g. `nextcloud/aio-nextcloud:php8.0-latest` or `nextcloud/aio-nextcloud:php8.0-latest-arm64`
|
||||
- However, if you are unsure check the docker hub (https://hub.docker.com/r/nextcloud/aio-nextcloud/tags)
|
||||
- e.g. `ghcr.io/nextcloud-releases/aio-nextcloud:php8.0-latest` or `ghcr.io/nextcloud-releases/aio-nextcloud:php8.0-latest-arm64`
|
||||
- However, if you are unsure check the ghcr.io (https://github.com/nextcloud-releases/all-in-one/pkgs/container/aio-nextcloud/versions?filters%5Bversion_type%5D=tagged) and docker hub: https://hub.docker.com/r/nextcloud/aio-nextcloud/tags?name=php
|
||||
- Using nano and the arrow keys to navigate:
|
||||
- `sudo nano /tmp/nextcloud-aio-nextcloud` making changes as above, then `[Ctrl]+[o]` -> `[Enter]` and `[Ctrl]+[x]` to save and exit.
|
||||
6. Next, stop and remove the current container:
|
||||
@@ -94,8 +94,8 @@ Make **note** of the version which is compatible, rounding down to 1 digit after
|
||||
- In this example we would want php 8.1 since anything with 8.2 or above is incompatible
|
||||
|
||||
##### 5. Find the correct container version
|
||||
In general it should be ```nextcloud/aio-nextcloud:php8.x-latest-arm64``` or `nextcloud/aio-nextcloud:php8.x-latest` replacing `x` with the version you require.
|
||||
However, if you are unsure check the docker hub (https://hub.docker.com/r/nextcloud/aio-nextcloud/tags)
|
||||
In general it should be ```ghcr.io/nextcloud-releases/aio-nextcloud:php8.x-latest-arm64``` or `ghcr.io/nextcloud-releases/aio-nextcloud:php8.x-latest` replacing `x` with the version you require.
|
||||
However, if you are unsure check the ghcr.io (https://github.com/nextcloud-releases/all-in-one/pkgs/container/aio-nextcloud/versions?filters%5Bversion_type%5D=tagged) and docker hub: https://hub.docker.com/r/nextcloud/aio-nextcloud/tags?name=php
|
||||
|
||||
##### 6. Replace the container
|
||||
- Navigate to the ```nextcloud-aio-nextcloud``` container within portainer
|
||||
|
||||
@@ -149,7 +149,7 @@ apt install --no-install-recommends qemu-system qemu-utils libvirt-clients libvi
|
||||
--env TALK_PORT=3478 \
|
||||
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
|
||||
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
|
||||
nextcloud/all-in-one:latest
|
||||
ghcr.io/nextcloud-releases/all-in-one:latest
|
||||
```
|
||||
The last command may take a few minutes. When it's finished, you should see a success message, saying "Initial startup of Nextcloud All-in-One complete!". Now exit the console session with `Ctrl + [c]`. This concludes the setup for this particular VM.
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: nextcloud-aio-helm-chart
|
||||
description: A generated Helm Chart for Nextcloud AIO from Skippbox Kompose
|
||||
version: 10.7.0
|
||||
version: 10.14.0
|
||||
apiVersion: v2
|
||||
keywords:
|
||||
- latest
|
||||
|
||||
@@ -61,7 +61,7 @@ spec:
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
- name: WHITEBOARD_HOST
|
||||
value: nextcloud-aio-whiteboard
|
||||
image: nextcloud/aio-apache:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-apache:20250512_082954
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
||||
@@ -36,7 +36,7 @@ spec:
|
||||
{{- end }}
|
||||
initContainers:
|
||||
- name: init-subpath
|
||||
image: "alpine:3.20"
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20250512_082954
|
||||
command:
|
||||
- mkdir
|
||||
- "-p"
|
||||
@@ -55,17 +55,15 @@ spec:
|
||||
{{- end }}
|
||||
containers:
|
||||
- env:
|
||||
- name: CLAMD_STARTUP_TIMEOUT
|
||||
value: "90"
|
||||
- name: MAX_SIZE
|
||||
value: "{{ .Values.NEXTCLOUD_UPLOAD_LIMIT }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-clamav:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-clamav:20250512_082954
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
- clamdcheck.sh
|
||||
- /healthcheck.sh
|
||||
failureThreshold: 9
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 30
|
||||
@@ -73,7 +71,7 @@ spec:
|
||||
livenessProbe:
|
||||
exec:
|
||||
command:
|
||||
- clamdcheck.sh
|
||||
- /healthcheck.sh
|
||||
failureThreshold: 9
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 30
|
||||
|
||||
@@ -35,7 +35,7 @@ spec:
|
||||
value: --o:ssl.enable=false --o:ssl.termination=true --o:mount_jail_tree=false --o:logging.level=warning --o:home_mode.enable=true --o:remote_font_config.url=https://{{ .Values.NC_DOMAIN }}/apps/richdocuments/settings/fonts.json --o:net.post_allow.host[0]=.+
|
||||
- name: server_name
|
||||
value: "{{ .Values.NC_DOMAIN }}"
|
||||
image: nextcloud/aio-collabora:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-collabora:20250512_082954
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
||||
@@ -35,7 +35,7 @@ spec:
|
||||
{{- end }}
|
||||
initContainers:
|
||||
- name: init-subpath
|
||||
image: "alpine:3.20"
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20250512_082954
|
||||
command:
|
||||
- mkdir
|
||||
- "-p"
|
||||
@@ -64,7 +64,7 @@ spec:
|
||||
value: nextcloud
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-postgresql:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-postgresql:20250512_082954
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
||||
@@ -24,7 +24,7 @@ spec:
|
||||
spec:
|
||||
initContainers:
|
||||
- name: init-volumes
|
||||
image: "alpine:3.20"
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20250512_082954
|
||||
command:
|
||||
- chmod
|
||||
- "777"
|
||||
@@ -54,7 +54,7 @@ spec:
|
||||
value: basic
|
||||
- name: xpack.security.enabled
|
||||
value: "false"
|
||||
image: nextcloud/aio-fulltextsearch:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-fulltextsearch:20250512_082954
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
||||
@@ -38,7 +38,7 @@ spec:
|
||||
value: "{{ .Values.IMAGINARY_SECRET }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-imaginary:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-imaginary:20250512_082954
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
||||
@@ -4,4 +4,8 @@ kind: Namespace
|
||||
metadata:
|
||||
name: "{{ .Values.NAMESPACE }}"
|
||||
namespace: "{{ .Values.NAMESPACE }}"
|
||||
{{- if eq (.Values.RPSS_ENABLED | default "no") "yes" }}
|
||||
labels:
|
||||
pod-security.kubernetes.io/enforce: restricted
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
@@ -38,7 +38,7 @@ spec:
|
||||
# AIO settings start # Do not remove or change this line!
|
||||
initContainers:
|
||||
- name: init-volumes
|
||||
image: "alpine:3.20"
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20250512_082954
|
||||
command:
|
||||
- chmod
|
||||
- "777"
|
||||
@@ -80,6 +80,8 @@ spec:
|
||||
value: "{{ .Values.SERVERINFO_TOKEN }}"
|
||||
- name: NEXTCLOUD_DEFAULT_QUOTA
|
||||
value: "{{ .Values.NEXTCLOUD_DEFAULT_QUOTA }}"
|
||||
- name: NEXTCLOUD_SKELETON_DIRECTORY
|
||||
value: "{{ .Values.NEXTCLOUD_SKELETON_DIRECTORY }}"
|
||||
- name: NEXTCLOUD_MAINTENANCE_WINDOW
|
||||
value: "{{ .Values.NEXTCLOUD_MAINTENANCE_WINDOW }}"
|
||||
- name: ADDITIONAL_APKS
|
||||
@@ -180,7 +182,7 @@ spec:
|
||||
value: "{{ .Values.WHITEBOARD_ENABLED }}"
|
||||
- name: WHITEBOARD_SECRET
|
||||
value: "{{ .Values.WHITEBOARD_SECRET }}"
|
||||
image: nextcloud/aio-nextcloud:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-nextcloud:20250512_082954
|
||||
{{- if eq (.Values.RPSS_ENABLED | default "no") "yes" }} # AIO-config - do not change this comment!
|
||||
securityContext:
|
||||
# The items below only work in container context
|
||||
|
||||
@@ -55,7 +55,7 @@ spec:
|
||||
value: "{{ .Values.REDIS_PASSWORD }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-notify-push:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-notify-push:20250512_082954
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
||||
@@ -24,7 +24,7 @@ spec:
|
||||
spec:
|
||||
initContainers:
|
||||
- name: init-volumes
|
||||
image: "alpine:3.20"
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:20250512_082954
|
||||
command:
|
||||
- chmod
|
||||
- "777"
|
||||
@@ -42,7 +42,7 @@ spec:
|
||||
value: "{{ .Values.ONLYOFFICE_SECRET }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-onlyoffice:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-onlyoffice:20250512_082954
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
||||
@@ -39,7 +39,7 @@ spec:
|
||||
value: "{{ .Values.REDIS_PASSWORD }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-redis:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-redis:20250512_082954
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
||||
@@ -52,7 +52,7 @@ spec:
|
||||
value: "{{ .Values.TURN_SECRET }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-talk:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-talk:20250512_082954
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
||||
@@ -44,7 +44,7 @@ spec:
|
||||
value: "{{ .Values.RECORDING_SECRET }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-talk-recording:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-talk-recording:20250512_082954
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
||||
@@ -48,7 +48,7 @@ spec:
|
||||
value: redis
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-whiteboard:20250306_093458
|
||||
image: ghcr.io/nextcloud-releases/aio-whiteboard:20250512_082954
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
|
||||
@@ -72,7 +72,7 @@ find ./ -name '*networkpolicy.yaml' -exec sed -i "s|manual-install-nextcloud-aio
|
||||
cat << EOL > /tmp/initcontainers
|
||||
initContainers:
|
||||
- name: init-volumes
|
||||
image: "alpine:3.20"
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:$DOCKER_TAG
|
||||
command:
|
||||
- chmod
|
||||
- "777"
|
||||
@@ -81,7 +81,7 @@ EOL
|
||||
cat << EOL > /tmp/initcontainers.database
|
||||
initContainers:
|
||||
- name: init-subpath
|
||||
image: "alpine:3.20"
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:$DOCKER_TAG
|
||||
command:
|
||||
- mkdir
|
||||
- "-p"
|
||||
@@ -94,7 +94,7 @@ EOL
|
||||
cat << EOL > /tmp/initcontainers.clamav
|
||||
initContainers:
|
||||
- name: init-subpath
|
||||
image: "alpine:3.20"
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:$DOCKER_TAG
|
||||
command:
|
||||
- mkdir
|
||||
- "-p"
|
||||
@@ -108,7 +108,7 @@ cat << EOL > /tmp/initcontainers.nextcloud
|
||||
# AIO settings start # Do not remove or change this line!
|
||||
initContainers:
|
||||
- name: init-volumes
|
||||
image: "alpine:3.20"
|
||||
image: ghcr.io/nextcloud-releases/aio-alpine:$DOCKER_TAG
|
||||
command:
|
||||
- chmod
|
||||
- "777"
|
||||
@@ -259,6 +259,15 @@ find ./ \( -not -name '*service.yaml' -name '*.yaml' \) -exec sed -i "/^status:/
|
||||
find ./ \( -not -name '*persistentvolumeclaim.yaml' -name '*.yaml' \) -exec sed -i "/resources:/d" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name "*namespace.yaml" -exec sed -i "1i\\{{- if and \(ne .Values.NAMESPACE \"default\"\) \(ne .Values.NAMESPACE_DISABLED \"yes\"\) }}" \{} \;
|
||||
# Additional config
|
||||
cat << EOL > /tmp/additional-namespace.config
|
||||
{{- if eq (.Values.RPSS_ENABLED | default "no") "yes" }}
|
||||
labels:
|
||||
pod-security.kubernetes.io/enforce: restricted
|
||||
{{- end }}
|
||||
EOL
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name "*namespace.yaml" -exec sed -i "/namespace.*/r /tmp/additional-namespace.config" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name "*namespace.yaml" -exec sed -i "$ a {{- end }}" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
@@ -302,6 +311,8 @@ cat << EOL > /tmp/additional.config
|
||||
value: "{{ .Values.SERVERINFO_TOKEN }}"
|
||||
- name: NEXTCLOUD_DEFAULT_QUOTA
|
||||
value: "{{ .Values.NEXTCLOUD_DEFAULT_QUOTA }}"
|
||||
- name: NEXTCLOUD_SKELETON_DIRECTORY
|
||||
value: "{{ .Values.NEXTCLOUD_SKELETON_DIRECTORY }}"
|
||||
- name: NEXTCLOUD_MAINTENANCE_WINDOW
|
||||
value: "{{ .Values.NEXTCLOUD_MAINTENANCE_WINDOW }}"
|
||||
EOL
|
||||
@@ -414,6 +425,7 @@ APPS_ALLOWLIST: # This allows to configure allowed apps that will be show
|
||||
ADDITIONAL_TRUSTED_PROXY: # Allows to add one additional ip-address to Nextcloud's trusted proxies and to the Office WOPI-allowlist automatically. Set it e.g. like this: 'your.public.ip-address'. You can also use an ip-range here.
|
||||
ADDITIONAL_TRUSTED_DOMAIN: # Allows to add one domain to Nextcloud's trusted domains and also generates a certificate automatically for it
|
||||
NEXTCLOUD_DEFAULT_QUOTA: "10 GB" # Allows to adjust the default quota that will be taken into account in Nextcloud for new users. Setting it to "unlimited" will set it to unlimited
|
||||
NEXTCLOUD_SKELETON_DIRECTORY: # Allows to adjust the sekeleton dir for Nextcloud. Setting it to "empty" will set the value to an empty string "" which will turn off the setting for new users in Nextcloud.
|
||||
NEXTCLOUD_MAINTENANCE_WINDOW: # Allows to define the maintenance window for Nextcloud. See https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/background_jobs_configuration.html#parameters for possible values
|
||||
SMTP_HOST: # (empty by default): The hostname of the SMTP server.
|
||||
SMTP_SECURE: # (empty by default): Set to 'ssl' to use SSL, or 'tls' to use STARTTLS.
|
||||
@@ -502,7 +514,7 @@ cat << EOL > /tmp/security.conf
|
||||
{{- end }} # AIO-config - do not change this comment!
|
||||
EOL
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*nextcloud-deployment.yaml*' -exec sed -i "/nextcloud\/aio-nextcloud:.*/r /tmp/security.conf" \{} \;
|
||||
find ./ -name '*nextcloud-deployment.yaml*' -exec sed -i "/image: .*nextcloud.*aio-nextcloud:.*/r /tmp/security.conf" \{} \;
|
||||
|
||||
chmod 777 -R ./
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@ APPS_ALLOWLIST: # This allows to configure allowed apps that will be show
|
||||
ADDITIONAL_TRUSTED_PROXY: # Allows to add one additional ip-address to Nextcloud's trusted proxies and to the Office WOPI-allowlist automatically. Set it e.g. like this: 'your.public.ip-address'. You can also use an ip-range here.
|
||||
ADDITIONAL_TRUSTED_DOMAIN: # Allows to add one domain to Nextcloud's trusted domains and also generates a certificate automatically for it
|
||||
NEXTCLOUD_DEFAULT_QUOTA: "10 GB" # Allows to adjust the default quota that will be taken into account in Nextcloud for new users. Setting it to "unlimited" will set it to unlimited
|
||||
NEXTCLOUD_SKELETON_DIRECTORY: # Allows to adjust the sekeleton dir for Nextcloud. Setting it to "empty" will set the value to an empty string "" which will turn off the setting for new users in Nextcloud.
|
||||
NEXTCLOUD_MAINTENANCE_WINDOW: # Allows to define the maintenance window for Nextcloud. See https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/background_jobs_configuration.html#parameters for possible values
|
||||
SMTP_HOST: # (empty by default): The hostname of the SMTP server.
|
||||
SMTP_SECURE: # (empty by default): Set to 'ssl' to use SSL, or 'tls' to use STARTTLS.
|
||||
|
||||
@@ -34,7 +34,7 @@ docker run \
|
||||
--name nextcloud-aio-mastercontainer \
|
||||
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
|
||||
--volume /var/run/docker.sock:/var/run/docker.sock \
|
||||
nextcloud/all-in-one:latest
|
||||
ghcr.io/nextcloud-releases/all-in-one:latest
|
||||
```
|
||||
|
||||
### 4. Start your server
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
}
|
||||
},
|
||||
"require": {
|
||||
"php": "8.3.*",
|
||||
"php": "8.4.*",
|
||||
"ext-json": "*",
|
||||
"ext-sodium": "*",
|
||||
"ext-curl": "*",
|
||||
@@ -20,7 +20,7 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"sserbin/twig-linter": "@dev",
|
||||
"vimeo/psalm": "^5.25",
|
||||
"vimeo/psalm": "^6.0",
|
||||
"wapmorgan/php-deprecation-detector": "dev-master"
|
||||
},
|
||||
"scripts": {
|
||||
@@ -33,6 +33,6 @@
|
||||
"psalm:strict": "psalm --threads=1 --show-info=true",
|
||||
"lint": "php -l src/*.php src/**/*.php public/index.php",
|
||||
"lint:twig": "twig-linter lint ./templates",
|
||||
"php-deprecation-detector": "phpdd scan -n -t 8.3 src/*.php src/**/*.php public/index.php"
|
||||
"php-deprecation-detector": "phpdd scan -n -t 8.4 src/*.php src/**/*.php public/index.php"
|
||||
}
|
||||
}
|
||||
|
||||
1529
php/composer.lock
generated
1529
php/composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -13,7 +13,7 @@
|
||||
"nextcloud-aio-whiteboard"
|
||||
],
|
||||
"display_name": "Apache",
|
||||
"image": "nextcloud/aio-apache",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-apache",
|
||||
"user": "33",
|
||||
"init": true,
|
||||
"healthcheck": {
|
||||
@@ -84,7 +84,7 @@
|
||||
"container_name": "nextcloud-aio-database",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"display_name": "Database",
|
||||
"image": "nextcloud/aio-postgresql",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-postgresql",
|
||||
"user": "999",
|
||||
"init": true,
|
||||
"healthcheck": {
|
||||
@@ -149,7 +149,7 @@
|
||||
"nextcloud-aio-docker-socket-proxy"
|
||||
],
|
||||
"display_name": "Nextcloud",
|
||||
"image": "nextcloud/aio-nextcloud",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-nextcloud",
|
||||
"init": true,
|
||||
"healthcheck": {
|
||||
"start_period": "0s",
|
||||
@@ -271,7 +271,7 @@
|
||||
"container_name": "nextcloud-aio-notify-push",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"display_name": "Notify Push",
|
||||
"image": "nextcloud/aio-notify-push",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-notify-push",
|
||||
"user": "33",
|
||||
"init": true,
|
||||
"healthcheck": {
|
||||
@@ -319,7 +319,7 @@
|
||||
"container_name": "nextcloud-aio-redis",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"display_name": "Redis",
|
||||
"image": "nextcloud/aio-redis",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-redis",
|
||||
"user": "999",
|
||||
"init": true,
|
||||
"healthcheck": {
|
||||
@@ -361,7 +361,7 @@
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/discussions/1358",
|
||||
"display_name": "Collabora",
|
||||
"image": "nextcloud/aio-collabora",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-collabora",
|
||||
"init": true,
|
||||
"healthcheck": {
|
||||
"start_period": "60s",
|
||||
@@ -393,7 +393,8 @@
|
||||
],
|
||||
"cap_add": [
|
||||
"MKNOD",
|
||||
"SYS_ADMIN"
|
||||
"SYS_ADMIN",
|
||||
"CHOWN"
|
||||
],
|
||||
"cap_drop": [
|
||||
"NET_RAW"
|
||||
@@ -404,7 +405,7 @@
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/discussions/1358",
|
||||
"display_name": "Talk",
|
||||
"image": "nextcloud/aio-talk",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-talk",
|
||||
"user": "1000",
|
||||
"init": true,
|
||||
"healthcheck": {
|
||||
@@ -466,7 +467,7 @@
|
||||
"container_name": "nextcloud-aio-talk-recording",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"display_name": "Talk Recording",
|
||||
"image": "nextcloud/aio-talk-recording",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-talk-recording",
|
||||
"user": "122",
|
||||
"init": true,
|
||||
"healthcheck": {
|
||||
@@ -518,7 +519,7 @@
|
||||
{
|
||||
"container_name": "nextcloud-aio-borgbackup",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"image": "nextcloud/aio-borgbackup",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-borgbackup",
|
||||
"init": true,
|
||||
"environment": [
|
||||
"BORG_REMOTE_REPO=%BORGBACKUP_REMOTE_REPO%",
|
||||
@@ -586,7 +587,7 @@
|
||||
{
|
||||
"container_name": "nextcloud-aio-watchtower",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"image": "nextcloud/aio-watchtower",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-watchtower",
|
||||
"init": true,
|
||||
"environment": [
|
||||
"CONTAINER_TO_UPDATE=nextcloud-aio-mastercontainer"
|
||||
@@ -606,7 +607,7 @@
|
||||
{
|
||||
"container_name": "nextcloud-aio-domaincheck",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"image": "nextcloud/aio-domaincheck",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-domaincheck",
|
||||
"init": true,
|
||||
"ports": [
|
||||
{
|
||||
@@ -637,7 +638,7 @@
|
||||
"container_name": "nextcloud-aio-clamav",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"display_name": "ClamAV",
|
||||
"image": "nextcloud/aio-clamav",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-clamav",
|
||||
"user": "100",
|
||||
"init": false,
|
||||
"healthcheck": {
|
||||
@@ -683,7 +684,7 @@
|
||||
"container_name": "nextcloud-aio-onlyoffice",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"display_name": "OnlyOffice",
|
||||
"image": "nextcloud/aio-onlyoffice",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-onlyoffice",
|
||||
"init": true,
|
||||
"healthcheck": {
|
||||
"start_period": "60s",
|
||||
@@ -729,7 +730,7 @@
|
||||
"container_name": "nextcloud-aio-imaginary",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"display_name": "Imaginary",
|
||||
"image": "nextcloud/aio-imaginary",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-imaginary",
|
||||
"user": "65534",
|
||||
"init": true,
|
||||
"healthcheck": {
|
||||
@@ -771,7 +772,7 @@
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"documentation": "https://github.com/nextcloud/all-in-one/discussions/1709",
|
||||
"display_name": "Fulltextsearch",
|
||||
"image": "nextcloud/aio-fulltextsearch",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-fulltextsearch",
|
||||
"init": false,
|
||||
"healthcheck": {
|
||||
"start_period": "60s",
|
||||
@@ -819,7 +820,7 @@
|
||||
"container_name": "nextcloud-aio-docker-socket-proxy",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"display_name": "Docker Socket Proxy",
|
||||
"image": "nextcloud/aio-docker-socket-proxy",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-docker-socket-proxy",
|
||||
"init": true,
|
||||
"internal_port": "2375",
|
||||
"environment": [
|
||||
@@ -845,7 +846,7 @@
|
||||
"container_name": "nextcloud-aio-whiteboard",
|
||||
"image_tag": "%AIO_CHANNEL%",
|
||||
"display_name": "Whiteboard",
|
||||
"image": "nextcloud/aio-whiteboard",
|
||||
"image": "ghcr.io/nextcloud-releases/aio-whiteboard",
|
||||
"user": "65534",
|
||||
"init": true,
|
||||
"healthcheck": {
|
||||
|
||||
@@ -1,2 +1,170 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files psalm-version="5.26.1@d747f6500b38ac4f7dfc5edbcae6e4b637d7add0"/>
|
||||
<files psalm-version="6.10.3@90b5b9f5e7c8e441b191d3c82c58214753d7c7c1">
|
||||
<file src="src/Auth/AuthManager.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[AuthManager]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Auth/PasswordGenerator.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[PasswordGenerator]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Container/AioVariables.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[AioVariables]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Container/Container.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[Container]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Container/ContainerEnvironmentVariables.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[ContainerEnvironmentVariables]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Container/ContainerPort.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[ContainerPort]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Container/ContainerPorts.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[ContainerPorts]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Container/ContainerVolume.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[ContainerVolume]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Container/ContainerVolumes.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[ContainerVolumes]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/ContainerDefinitionFetcher.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[ContainerDefinitionFetcher]]></code>
|
||||
</ClassMustBeFinal>
|
||||
<PossiblyFalseArgument>
|
||||
<code><![CDATA[file_get_contents($path)]]></code>
|
||||
<code><![CDATA[file_get_contents(__DIR__ . '/../containers.json')]]></code>
|
||||
</PossiblyFalseArgument>
|
||||
</file>
|
||||
<file src="src/Controller/ConfigurationController.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[ConfigurationController]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Controller/DockerController.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[DockerController]]></code>
|
||||
</ClassMustBeFinal>
|
||||
<InvalidOperand>
|
||||
<code><![CDATA[$port]]></code>
|
||||
</InvalidOperand>
|
||||
</file>
|
||||
<file src="src/Controller/LoginController.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[LoginController]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Data/ConfigurationManager.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[ConfigurationManager]]></code>
|
||||
</ClassMustBeFinal>
|
||||
<FalsableReturnStatement>
|
||||
<code><![CDATA[$additionalBackupDirectories]]></code>
|
||||
</FalsableReturnStatement>
|
||||
<InvalidFalsableReturnType>
|
||||
<code><![CDATA[string]]></code>
|
||||
</InvalidFalsableReturnType>
|
||||
<PossiblyFalseArgument>
|
||||
<code><![CDATA[$ch]]></code>
|
||||
<code><![CDATA[$ch]]></code>
|
||||
<code><![CDATA[$ch]]></code>
|
||||
<code><![CDATA[$ch]]></code>
|
||||
<code><![CDATA[$ch]]></code>
|
||||
<code><![CDATA[$ch]]></code>
|
||||
<code><![CDATA[$configContent]]></code>
|
||||
<code><![CDATA[$content]]></code>
|
||||
<code><![CDATA[$content]]></code>
|
||||
<code><![CDATA[$dailyBackupFile]]></code>
|
||||
<code><![CDATA[$dailyBackupFile]]></code>
|
||||
<code><![CDATA[file_get_contents(DataConst::GetBackupPublicKey())]]></code>
|
||||
</PossiblyFalseArgument>
|
||||
</file>
|
||||
<file src="src/Data/DataConst.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[DataConst]]></code>
|
||||
</ClassMustBeFinal>
|
||||
<FalsableReturnStatement>
|
||||
<code><![CDATA[realpath(__DIR__ . '/../../../community-containers/')]]></code>
|
||||
<code><![CDATA[realpath(__DIR__ . '/../../data/')]]></code>
|
||||
<code><![CDATA[realpath(__DIR__ . '/../../session/')]]></code>
|
||||
</FalsableReturnStatement>
|
||||
<InvalidFalsableReturnType>
|
||||
<code><![CDATA[string]]></code>
|
||||
<code><![CDATA[string]]></code>
|
||||
<code><![CDATA[string]]></code>
|
||||
</InvalidFalsableReturnType>
|
||||
</file>
|
||||
<file src="src/Data/InvalidSettingConfigurationException.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[InvalidSettingConfigurationException]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Data/Setup.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[Setup]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/DependencyInjection.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[DependencyInjection]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Docker/DockerActionManager.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[DockerActionManager]]></code>
|
||||
</ClassMustBeFinal>
|
||||
<PossiblyFalseArgument>
|
||||
<code><![CDATA[$line]]></code>
|
||||
<code><![CDATA[$line]]></code>
|
||||
</PossiblyFalseArgument>
|
||||
</file>
|
||||
<file src="src/Docker/DockerHubManager.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[DockerHubManager]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Docker/GitHubContainerRegistryManager.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[GitHubContainerRegistryManager]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Middleware/AuthMiddleware.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[AuthMiddleware]]></code>
|
||||
</ClassMustBeFinal>
|
||||
</file>
|
||||
<file src="src/Twig/ClassExtension.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[ClassExtension]]></code>
|
||||
</ClassMustBeFinal>
|
||||
<MissingOverrideAttribute>
|
||||
<code><![CDATA[public function getFunctions() : array]]></code>
|
||||
</MissingOverrideAttribute>
|
||||
</file>
|
||||
<file src="src/Twig/CsrfExtension.php">
|
||||
<ClassMustBeFinal>
|
||||
<code><![CDATA[CsrfExtension]]></code>
|
||||
</ClassMustBeFinal>
|
||||
<MissingOverrideAttribute>
|
||||
<code><![CDATA[public function getGlobals() : array]]></code>
|
||||
</MissingOverrideAttribute>
|
||||
</file>
|
||||
</files>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
|
||||
errorBaseline="psalm-baseline.xml"
|
||||
findUnusedBaselineEntry="true"
|
||||
findUnusedCode="false"
|
||||
>
|
||||
<projectFiles>
|
||||
<directory name="templates"/>
|
||||
|
||||
@@ -41,12 +41,12 @@ readonly class DockerController {
|
||||
}
|
||||
}
|
||||
|
||||
// Check if docker hub is reachable in order to make sure that we do not try to pull an image if it is down
|
||||
// Check if registry is reachable in order to make sure that we do not try to pull an image if it is down
|
||||
// and try to mitigate issues that are arising due to that
|
||||
if ($pullImage) {
|
||||
if (!$this->dockerActionManager->isDockerHubReachable($container)) {
|
||||
if (!$this->dockerActionManager->isRegistryReachable($container)) {
|
||||
$pullImage = false;
|
||||
error_log('Not pulling the ' . $container->GetContainerName() . ' image for the ' . $container->GetIdentifier() . ' container because docker hub does not seem to be reachable.');
|
||||
error_log('Not pulling the ' . $container->GetContainerName() . ' image for the ' . $container->GetIdentifier() . ' container because the registry does not seem to be reachable.');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -900,7 +900,7 @@ class ConfigurationManager
|
||||
}
|
||||
|
||||
public function shouldDomainValidationBeSkipped() : bool {
|
||||
if (getenv('SKIP_DOMAIN_VALIDATION') !== false) {
|
||||
if (getenv('SKIP_DOMAIN_VALIDATION') === 'true') {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -599,7 +599,7 @@ readonly class DockerActionManager {
|
||||
|
||||
}
|
||||
|
||||
public function isDockerHubReachable(Container $container): bool {
|
||||
public function isRegistryReachable(Container $container): bool {
|
||||
$tag = $container->GetImageTag();
|
||||
if ($tag === '%AIO_CHANNEL%') {
|
||||
$tag = $this->GetCurrentChannel();
|
||||
@@ -742,6 +742,33 @@ readonly class DockerActionManager {
|
||||
}
|
||||
}
|
||||
|
||||
private function GetCurrentImageName(): string {
|
||||
$cacheKey = 'aio-image-name';
|
||||
$imageName = apcu_fetch($cacheKey);
|
||||
if ($imageName !== false && is_string($imageName)) {
|
||||
return $imageName;
|
||||
}
|
||||
|
||||
$containerName = 'nextcloud-aio-mastercontainer';
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s/json', $containerName));
|
||||
try {
|
||||
$output = json_decode($this->guzzleClient->get($url)->getBody()->getContents(), true);
|
||||
$imageNameArray = explode(':', $output['Config']['Image']);
|
||||
if (count($imageNameArray) === 2) {
|
||||
$imageName = $imageNameArray[0];
|
||||
} else {
|
||||
error_log("No tag was found when getting the current channel. You probably did not follow the documentation correctly. Changing the imageName to the default " . $output['Config']['Image']);
|
||||
$imageName = $output['Config']['Image'];
|
||||
}
|
||||
apcu_add($cacheKey, $imageName);
|
||||
return $imageName;
|
||||
} catch (\Exception $e) {
|
||||
error_log('Could not get current imageName ' . $e->getMessage());
|
||||
}
|
||||
|
||||
return 'nextcloud/all-in-one';
|
||||
}
|
||||
|
||||
public function GetCurrentChannel(): string {
|
||||
$cacheKey = 'aio-ChannelName';
|
||||
$channelName = apcu_fetch($cacheKey);
|
||||
@@ -753,7 +780,6 @@ readonly class DockerActionManager {
|
||||
$url = $this->BuildApiUrl(sprintf('containers/%s/json', $containerName));
|
||||
try {
|
||||
$output = json_decode($this->guzzleClient->get($url)->getBody()->getContents(), true);
|
||||
$containerChecksum = $output['Image'];
|
||||
$tagArray = explode(':', $output['Config']['Image']);
|
||||
if (count($tagArray) === 2) {
|
||||
$tag = $tagArray[1];
|
||||
@@ -771,7 +797,7 @@ readonly class DockerActionManager {
|
||||
}
|
||||
|
||||
public function IsMastercontainerUpdateAvailable(): bool {
|
||||
$imageName = 'nextcloud/all-in-one';
|
||||
$imageName = $this->GetCurrentImageName();
|
||||
$containerName = 'nextcloud-aio-mastercontainer';
|
||||
|
||||
$tag = $this->GetCurrentChannel();
|
||||
@@ -1004,8 +1030,8 @@ readonly class DockerActionManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
private function GetCreatedTimeOfNextcloudImage(): ?string {
|
||||
$imageName = 'nextcloud/aio-nextcloud' . ':' . $this->GetCurrentChannel();
|
||||
private function GetCreatedTimeOfNextcloudImage(string $imageName): ?string {
|
||||
$imageName = $imageName . ':' . $this->GetCurrentChannel();
|
||||
try {
|
||||
$imageUrl = $this->BuildApiUrl(sprintf('images/%s/json', $imageName));
|
||||
$imageOutput = json_decode($this->guzzleClient->get($imageUrl)->getBody()->getContents(), true);
|
||||
@@ -1026,7 +1052,11 @@ readonly class DockerActionManager {
|
||||
}
|
||||
|
||||
public function isNextcloudImageOutdated(): bool {
|
||||
$createdTime = $this->GetCreatedTimeOfNextcloudImage();
|
||||
$createdTime = $this->GetCreatedTimeOfNextcloudImage('ghcr.io/nextcloud-releases/aio-nextcloud');
|
||||
|
||||
if ($createdTime === null) {
|
||||
$createdTime = $this->GetCreatedTimeOfNextcloudImage('nextcloud/aio-nextcloud');
|
||||
}
|
||||
|
||||
if ($createdTime === null) {
|
||||
return false;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
<div class="container">
|
||||
<main>
|
||||
<h1>Nextcloud AIO v10.8.0</h1>
|
||||
<h1>Nextcloud AIO v10.15.0</h1>
|
||||
|
||||
{# Add 2nd tab warning #}
|
||||
<script type="text/javascript" src="second-tab-warning.js"></script>
|
||||
@@ -60,7 +60,7 @@
|
||||
{% endfor %}
|
||||
|
||||
{% if is_daily_backup_running == true %}
|
||||
<p><span class="status running"></span> Daily backup currently running. (<a href="/api/docker/logs?id=nextcloud-aio-mastercontainer" target="_blank">Logs</a>)</p>
|
||||
<p><span class="status running"></span> Daily backup currently running. (<a href="/api/docker/logs?id=nextcloud-aio-mastercontainer" target="_blank">Mastercontainer logs</a>) (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Borg backup container logs</a>)</p>
|
||||
{% if automatic_updates == true %}
|
||||
<p>This will update your containers, the mastercontainer and, on Saturdays, your Nextcloud apps if the backup is successful.</p>
|
||||
{% if is_mastercontainer_update_available == true %}
|
||||
@@ -101,12 +101,12 @@
|
||||
{% else %}
|
||||
<p>AIO is currently in "reverse proxy mode" which means that it can be installed behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else) and does not do the TLS proxying itself.</p>
|
||||
{% endif %}
|
||||
<p>Please type the domain that will be used for Nextcloud.</p>
|
||||
<p>Please type in the domain that will be used for Nextcloud and submit it.</p>
|
||||
{% if skip_domain_validation == true %}
|
||||
<p><strong>Please note:</strong> The domain validation is disabled so any domain will be accepted here! Make sure you do not make a typo here as you will not be able to change it afterwards!</p>
|
||||
{% endif %}
|
||||
<form method="POST" action="/api/configuration" class="xhr">
|
||||
<input type="text" name="domain" value="{{ domain }}" placeholder="nextcloud.yourdomain.com"/>
|
||||
<input type="text" id="domain" name="domain" value="{{ domain }}" placeholder="nextcloud.yourdomain.com"/>
|
||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||
<input type="submit" value="Submit domain" />
|
||||
@@ -192,12 +192,12 @@
|
||||
<p>
|
||||
Please enter the location of the backup archive on your host or a
|
||||
<a target="_blank" href="https://borgbackup.readthedocs.io/en/stable/usage/general.html#repository-urls">remote borg repo url</a>
|
||||
if stored remotely; and the encryption password of the backup archive below:
|
||||
if stored remotely; and the encryption password of the backup archive below and submit all values:
|
||||
</p>
|
||||
<form method="POST" action="/api/configuration" class="xhr">
|
||||
<label>Local backup location</label> <input type="text" name="borg_restore_host_location" value="{{borg_backup_host_location}}" placeholder="/mnt/backup"/><br>
|
||||
<label>Local backup location</label> <input type="text" id="borg_restore_host_location" name="borg_restore_host_location" value="{{borg_backup_host_location}}" placeholder="/mnt/backup"/><br>
|
||||
<label>Remote borg repo</label> <input type="text" name="borg_restore_remote_repo" value="{{borg_remote_repo}}" placeholder="ssh://user@host:port/path/to/repo"/><br>
|
||||
<label>Borg passphrase</label> <input type="text" name="borg_restore_password" value="{{borg_restore_password}}" placeholder="encryption password"/><br>
|
||||
<label>Borg passphrase</label> <input type="text" id="borg_restore_password" name="borg_restore_password" value="{{borg_restore_password}}" placeholder="encryption password"/><br>
|
||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||
<input type="submit" value="Submit location and encryption password" />
|
||||
@@ -241,9 +241,9 @@
|
||||
<p>Initial Nextcloud username: <strong>admin</strong></p>
|
||||
{% if hasBackupLocation %}
|
||||
{# nextcloud_password needs to be duplicated due to a bug in Firefox. See https://github.com/nextcloud/all-in-one/issues/638. #}
|
||||
<p>Initial Nextcloud password: <strong>{{ nextcloud_password }}</strong></p></details>
|
||||
<p>Initial Nextcloud password: <strong id="initial-nextcloud-password">{{ nextcloud_password }}</strong></p></details>
|
||||
{% else %}
|
||||
<p>Initial Nextcloud password: <strong>{{ nextcloud_password }}</strong></p>
|
||||
<p>Initial Nextcloud password: <strong id="initial-nextcloud-password">{{ nextcloud_password }}</strong></p>
|
||||
{% endif %}
|
||||
<p><a href="https://{{ domain }}" class="button" target="_blank">Open your Nextcloud ↗</a></p>
|
||||
{% if not hasBackupLocation %}
|
||||
@@ -364,13 +364,13 @@
|
||||
{% else %}
|
||||
{% if is_backup_container_running == false and not hasBackupLocation and isApacheStarting != true %}
|
||||
<h2>Backup and restore</h2>
|
||||
<p>Please enter the directory path below where backups will be created on the host system. It's best to choose a location on a separate drive and not on your root drive.</p>
|
||||
<p>Please enter the directory path below where backups will be created on the host system and submit it. It's best to choose a location on a separate drive and not on your root drive.</p>
|
||||
<p>
|
||||
To store backups remotely instead, fill in the
|
||||
<a target="_blank" href="https://borgbackup.readthedocs.io/en/stable/usage/general.html#repository-urls">remote borg repo url</a>.
|
||||
<a target="_blank" href="https://borgbackup.readthedocs.io/en/stable/usage/general.html#repository-urls">remote borg repo url and submit it</a>.
|
||||
</p>
|
||||
<form method="POST" action="/api/configuration" class="xhr">
|
||||
<label>Local backup location</label> <input type="text" name="borg_backup_host_location" placeholder="/mnt/backup"/><br>
|
||||
<label>Local backup location</label> <input type="text" id="borg_backup_host_location" name="borg_backup_host_location" placeholder="/mnt/backup"/><br>
|
||||
<label>Remote borg repo</label> <input type="text" name="borg_remote_repo" placeholder="ssh://user@host:port/path/to/repo"/><br>
|
||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||
@@ -408,7 +408,7 @@
|
||||
To try again, click <strong>Create backup</strong>.
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
|
||||
<p>You may change the backup path again since the initial backup was not successful. After submitting the new value, you need to click on <strong>Create Backup</strong> to test the new value.</p>
|
||||
<form method="POST" action="/api/configuration" class="xhr">
|
||||
<label>Local backup location</label> <input type="text" name="borg_backup_host_location" placeholder="/mnt/backup"/><br>
|
||||
@@ -433,7 +433,7 @@
|
||||
<summary>Click here to reveal all backup options (including an option for automatic updates)</summary>
|
||||
{% endif %}
|
||||
<h3>Backup information</h3>
|
||||
<p>This is your encryption password for backups: <strong>{{ borgbackup_password }}</strong></p>
|
||||
<p>This is your encryption password for backups: <strong id="borg-backup-password">{{ borgbackup_password }}</strong></p>
|
||||
<p>Please save this password in a safe place. You won't be able to restore from backup if you lose this password!</p>
|
||||
<p>All important data from your Nextcloud AIO instance such as the database, your files and the mastercontainer's configuration files, will be backed up.</p>
|
||||
<p>The backup uses a tool called <a target="_blank" href="https://github.com/borgbackup/borg#what-is-borgbackup"><strong>BorgBackup</strong></a>, a well-known server backup tool that efficiently backs up your files and encrypts them on the fly.</p>
|
||||
@@ -507,12 +507,12 @@
|
||||
|
||||
<h3>Daily backup and automatic updates</h3>
|
||||
{% if daily_backup_time == "" %}
|
||||
<p>By entering a time below, you can enable daily backups. It will create them at the entered time in 24h format. E.g. <strong>04:00</strong> will create backups at 4 am UTC and <strong>16:00</strong> at 4 pm UTC. When creating the backup, containers will be stopped and restarted after the backup is complete.</p>
|
||||
<p>By entering a time below and submitting it, you can enable daily backups. It will create them at the entered time in 24h format. E.g. <strong>04:00</strong> will create backups at 4 am UTC and <strong>16:00</strong> at 4 pm UTC. When creating the backup, containers will be stopped and restarted after the backup is complete.</p>
|
||||
<form method="POST" action="/api/configuration" class="xhr">
|
||||
<input type="text" name="daily_backup_time" value="04:00" placeholder="04:00"/>
|
||||
<input type="text" name="daily_backup_time" placeholder="04:00"/>
|
||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||
<input type="submit" value="Submit backup time" /><br>
|
||||
<input type="submit" value="Submit daily backup time and settings" /><br>
|
||||
<input type="checkbox" id="automatic_updates" name="automatic_updates" checked="checked"><label for="automatic_updates">Automatically update all containers, the mastercontainer and on saturdays your Nextcloud apps</label><br>
|
||||
<input type="checkbox" id="success_notification" name="success_notification" checked="checked"><label for="success_notification">Send notifications about successful backups (notifications about unsuccessful backups will always be sent)</label>
|
||||
</form>
|
||||
@@ -526,12 +526,12 @@
|
||||
<input type="hidden" name="delete_daily_backup_time" value="yes"/>
|
||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||
<input type="submit" value="Disable or change daily backups" />
|
||||
<input type="submit" value="Disable or change daily backup settings" />
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
<h3>Back up additional directories and docker volumes of your host</h3>
|
||||
<p>Below you can enter directories and docker volumes of your host that will be backed up into the same borg backup archive.</p>
|
||||
<p>Below you can enter directories and docker volumes of your host that will be backed up into the same borg backup archive. Make sure to press the submit button after changing anything.</p>
|
||||
<form method="POST" action="/api/configuration" class="xhr">
|
||||
<textarea id="additional_backup_directories" name="additional_backup_directories" rows="4" cols="50" placeholder="/directory/on/the/host my_custom_docker_volume">{{ additional_backup_directories }}</textarea>
|
||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||
@@ -584,7 +584,7 @@
|
||||
{% else %}
|
||||
{% if timezone == "" %}
|
||||
<p>To get the correct time values for certain Nextcloud features, set the timezone for Nextcloud to the one that your users mainly use. Please note that this setting does not apply to the mastercontainer and any backup option.</p>
|
||||
<p>You can configure the timezone for Nextcloud below:</p>
|
||||
<p>You can configure the timezone for Nextcloud below (Do not forget to submit the value!):</p>
|
||||
<form method="POST" action="/api/configuration" class="xhr">
|
||||
<input type="text" id="timezone" name="timezone" placeholder="Europe/Berlin" />
|
||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
<p>
|
||||
{% if nextcloud_mount == '' %}
|
||||
The Nextcloud container is confied and local external storage in Nextcloud is disabled.
|
||||
The Nextcloud container is confined and local external storage in Nextcloud is disabled.
|
||||
{% else %}
|
||||
The Nextcloud container is getting access to the {{ nextcloud_mount }} directory and local external storage in Nextcloud is enabled.
|
||||
{% endif %}
|
||||
|
||||
@@ -184,14 +184,14 @@
|
||||
|
||||
{% if collabora_additional_options == "" %}
|
||||
<p>You can configure additional options for collabora below.</p>
|
||||
<p>(This can be used for configuring the net.content_security_policy and more)</p>
|
||||
<p>(This can be used for configuring the net.content_security_policy and more. Make sure to submit the value!)</p>
|
||||
<form method="POST" action="/api/configuration" class="xhr">
|
||||
<input type="text" name="collabora_additional_options" />
|
||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||
<input type="submit" value="Submit additional collabora options" />
|
||||
</form>
|
||||
<p>You need to make sure that the options that you enter are valid. An example is <strong>--o:net.content_security_policy="frame-ancestors *.example.com:*;"</strong>.</p>
|
||||
<p>You need to make sure that the options that you enter are valid. An example is <strong>--o:net.content_security_policy=frame-ancestors *.example.com:*;</strong>.</p>
|
||||
{% else %}
|
||||
<p>The additioinal options for Collabora are currently set to <strong>{{ collabora_additional_options }}</strong>. You can reset them again by clicking on the button below.</p>
|
||||
<form method="POST" action="/api/configuration" class="xhr">
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<h1>All-in-One setup</h1>
|
||||
<p>The official Nextcloud installation method. Nextcloud All-in-One provides easy deployment and maintenance with most features included in this one Nextcloud instance.</p>
|
||||
<p>⚠️ <strong>Please note down the passphrase to access the AIO interface and don't lose it!</strong></p>
|
||||
<strong>Passphrase</strong><br/><span class="monospace">{{ password }}</span><br>
|
||||
<strong>Passphrase</strong><br/><span id="initial-password" class="monospace">{{ password }}</span><br>
|
||||
<a href="/" class="button" target="_blank">Open Nextcloud AIO login ↗</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
7
php/tests/.gitignore
vendored
Normal file
7
php/tests/.gitignore
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
# Playwright
|
||||
node_modules/
|
||||
/test-results/
|
||||
/playwright-report/
|
||||
/blob-report/
|
||||
/playwright/.cache/
|
||||
97
php/tests/package-lock.json
generated
Normal file
97
php/tests/package-lock.json
generated
Normal file
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"name": "e2e",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "e2e",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.51.1",
|
||||
"@types/node": "^22.13.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@playwright/test": {
|
||||
"version": "1.51.1",
|
||||
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.51.1.tgz",
|
||||
"integrity": "sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"playwright": "1.51.1"
|
||||
},
|
||||
"bin": {
|
||||
"playwright": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "22.13.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz",
|
||||
"integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~6.20.0"
|
||||
}
|
||||
},
|
||||
"node_modules/fsevents": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
|
||||
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/playwright": {
|
||||
"version": "1.51.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.51.1.tgz",
|
||||
"integrity": "sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"playwright-core": "1.51.1"
|
||||
},
|
||||
"bin": {
|
||||
"playwright": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/playwright-core": {
|
||||
"version": "1.51.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.51.1.tgz",
|
||||
"integrity": "sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"playwright-core": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "6.20.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
|
||||
"integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
}
|
||||
8
php/tests/package.json
Normal file
8
php/tests/package.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "nextcloud-aio-mastercontainer-tests",
|
||||
"version": "1.0.0",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.51.1"
|
||||
}
|
||||
}
|
||||
29
php/tests/playwright.config.js
Normal file
29
php/tests/playwright.config.js
Normal file
@@ -0,0 +1,29 @@
|
||||
import { defineConfig, devices } from '@playwright/test'
|
||||
|
||||
/**
|
||||
* @see https://playwright.dev/docs/test-configuration
|
||||
*/
|
||||
export default defineConfig({
|
||||
testDir: './tests',
|
||||
fullyParallel: false,
|
||||
forbidOnly: !!process.env.CI,
|
||||
retries: 0,
|
||||
workers: 1,
|
||||
reporter: [
|
||||
['list'],
|
||||
['html'],
|
||||
],
|
||||
use: {
|
||||
baseURL: process.env.BASE_URL ?? 'http://localhost:8080',
|
||||
trace: 'on',
|
||||
},
|
||||
projects: [
|
||||
{
|
||||
name: 'chromium',
|
||||
use: {
|
||||
...devices['Desktop Chrome'],
|
||||
ignoreHTTPSErrors: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
})
|
||||
96
php/tests/tests/initial-setup.spec.js
Normal file
96
php/tests/tests/initial-setup.spec.js
Normal file
@@ -0,0 +1,96 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
import { writeFileSync } from 'node:fs'
|
||||
|
||||
test('Initial setup', async ({ page: setupPage }) => {
|
||||
test.setTimeout(10 * 60 * 1000)
|
||||
|
||||
// Extract initial password
|
||||
await setupPage.goto('./setup');
|
||||
const password = await setupPage.locator('#initial-password').innerText()
|
||||
const containersPagePromise = setupPage.waitForEvent('popup');
|
||||
await setupPage.getByRole('link', { name: 'Open Nextcloud AIO login ↗' }).click();
|
||||
const containersPage = await containersPagePromise;
|
||||
|
||||
// Log in and wait for redirect
|
||||
await containersPage.locator('#master-password').click();
|
||||
await containersPage.locator('#master-password').fill(password);
|
||||
await containersPage.getByRole('button', { name: 'Log in' }).click();
|
||||
await containersPage.waitForURL('./containers');
|
||||
|
||||
// Reject IP addresses
|
||||
await containersPage.locator('#domain').click();
|
||||
await containersPage.locator('#domain').fill('1.1.1.1');
|
||||
await containersPage.getByRole('button', { name: 'Submit domain' }).click();
|
||||
await expect(containersPage.locator('body')).toContainText('Please enter a domain and not an IP-address!');
|
||||
|
||||
// Accept example.com (requires disabled domain validation)
|
||||
await containersPage.locator('#domain').click();
|
||||
await containersPage.locator('#domain').fill('example.com');
|
||||
await containersPage.getByRole('button', { name: 'Submit domain' }).click();
|
||||
|
||||
// Disable all additional containers
|
||||
await containersPage.locator('#talk').uncheck();
|
||||
await containersPage.getByRole('checkbox', { name: 'Whiteboard' }).uncheck();
|
||||
await containersPage.getByRole('checkbox', { name: 'Imaginary' }).uncheck();
|
||||
await containersPage.getByRole('checkbox', { name: 'Collabora' }).uncheck();
|
||||
await containersPage.getByRole('button', { name: 'Save changes' }).click();
|
||||
await expect(containersPage.locator('#talk')).not.toBeChecked()
|
||||
await expect(containersPage.getByRole('checkbox', { name: 'Whiteboard' })).not.toBeChecked()
|
||||
await expect(containersPage.getByRole('checkbox', { name: 'Imaginary' })).not.toBeChecked()
|
||||
await expect(containersPage.getByRole('checkbox', { name: 'Collabora' })).not.toBeChecked()
|
||||
|
||||
// Reject invalid time zones
|
||||
await containersPage.locator('#timezone').click();
|
||||
await containersPage.locator('#timezone').fill('Invalid time zone');
|
||||
containersPage.once('dialog', dialog => {
|
||||
console.log(`Dialog message: ${dialog.message()}`)
|
||||
dialog.accept()
|
||||
});
|
||||
await containersPage.getByRole('button', { name: 'Submit timezone' }).click();
|
||||
await expect(containersPage.locator('body')).toContainText('The entered timezone does not seem to be a valid timezone!')
|
||||
|
||||
// Accept valid time zone
|
||||
await containersPage.locator('#timezone').click();
|
||||
await containersPage.locator('#timezone').fill('Europe/Berlin');
|
||||
containersPage.once('dialog', dialog => {
|
||||
console.log(`Dialog message: ${dialog.message()}`)
|
||||
dialog.accept()
|
||||
});
|
||||
await containersPage.getByRole('button', { name: 'Submit timezone' }).click();
|
||||
|
||||
// Start containers and wait for starting message
|
||||
await containersPage.getByRole('button', { name: 'Download and start containers' }).click();
|
||||
await expect(containersPage.getByRole('main')).toContainText('Containers are currently starting.', { timeout: 3 * 60 * 1000 });
|
||||
await expect(containersPage.getByRole('link', { name: 'Open your Nextcloud ↗' })).toBeVisible({ timeout: 2 * 60 * 1000 });
|
||||
await expect(containersPage.getByRole('link', { name: 'Open your Nextcloud ↗' })).toHaveAttribute('href', 'https://example.com');
|
||||
|
||||
// Extract initial nextcloud password
|
||||
await expect(containersPage.getByRole('main')).toContainText('Initial Nextcloud password:')
|
||||
const initialNextcloudPassword = await containersPage.locator('#initial-nextcloud-password').innerText();
|
||||
|
||||
// Set backup location and create backup
|
||||
const borgBackupLocation = `/mnt/test/aio-${Math.floor(Math.random() * 2147483647)}`
|
||||
await containersPage.locator('#borg_backup_host_location').click();
|
||||
await containersPage.locator('#borg_backup_host_location').fill(borgBackupLocation);
|
||||
await containersPage.getByRole('button', { name: 'Submit backup location' }).click();
|
||||
containersPage.once('dialog', dialog => {
|
||||
console.log(`Dialog message: ${dialog.message()}`)
|
||||
dialog.accept()
|
||||
});
|
||||
await containersPage.getByRole('button', { name: 'Create backup' }).click();
|
||||
await expect(containersPage.getByRole('main')).toContainText('Backup container is currently running:', { timeout: 3 * 60 * 1000 });
|
||||
await expect(containersPage.getByRole('main')).toContainText('Last backup successful on', { timeout: 3 * 60 * 1000 });
|
||||
await containersPage.getByText('Click here to reveal all backup options').click();
|
||||
await expect(containersPage.locator('#borg-backup-password')).toBeVisible();
|
||||
const borgBackupPassword = await containersPage.locator('#borg-backup-password').innerText();
|
||||
|
||||
// Assert that all containers are stopped
|
||||
await expect(containersPage.getByRole('button', { name: 'Start containers' })).toBeVisible();
|
||||
|
||||
// Save passwords for restore backup test
|
||||
writeFileSync('test_data.json', JSON.stringify({
|
||||
initialNextcloudPassword,
|
||||
borgBackupLocation,
|
||||
borgBackupPassword,
|
||||
}))
|
||||
});
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user