mirror of
https://github.com/nextcloud/all-in-one.git
synced 2026-05-21 10:50:10 +00:00
Compare commits
382 Commits
v4.3.1
...
helm-chart
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c5d9f0eb7 | ||
|
|
9ba70425f4 | ||
|
|
7acdb2dc92 | ||
|
|
cab39e59be | ||
|
|
ac005eb5c9 | ||
|
|
b75e10e5f3 | ||
|
|
033f0166f4 | ||
|
|
e7e29a2731 | ||
|
|
916a25a62e | ||
|
|
5a8989bb9f | ||
|
|
714815e9f0 | ||
|
|
3a9d5d52d5 | ||
|
|
854b4115e8 | ||
|
|
23f2e96c71 | ||
|
|
07adf95c35 | ||
|
|
9848ceec38 | ||
|
|
cbfc5d4d15 | ||
|
|
28b9755a50 | ||
|
|
34a5e6badf | ||
|
|
2d1ddccb28 | ||
|
|
06733e8009 | ||
|
|
0b2c7f09b6 | ||
|
|
73e734b011 | ||
|
|
e1890c8f3b | ||
|
|
904d23147c | ||
|
|
46ec1ea7f5 | ||
|
|
1fa1c90e22 | ||
|
|
1ce496a323 | ||
|
|
d93c01f368 | ||
|
|
ee5d9493de | ||
|
|
c5a1a00e38 | ||
|
|
99f29aaaed | ||
|
|
0435609521 | ||
|
|
d3b099e8e3 | ||
|
|
3cebbb6487 | ||
|
|
c6fc7baf2d | ||
|
|
0c93ad6def | ||
|
|
cd2208f295 | ||
|
|
e55500640b | ||
|
|
ab8b455b71 | ||
|
|
81a8352d64 | ||
|
|
93a0616f7e | ||
|
|
409dda00bd | ||
|
|
517ac319ba | ||
|
|
34d8ae8e5a | ||
|
|
ed36ba6c8d | ||
|
|
15c90407bc | ||
|
|
287a5a08cd | ||
|
|
187bf3f767 | ||
|
|
7a10602c63 | ||
|
|
aba666859b | ||
|
|
00a7e65a2d | ||
|
|
fb3b040290 | ||
|
|
baf7778ed3 | ||
|
|
565a84a7bf | ||
|
|
6b0ce132f9 | ||
|
|
cc13161ec6 | ||
|
|
7ccc699402 | ||
|
|
9954641e02 | ||
|
|
c1595afe2d | ||
|
|
974190fd86 | ||
|
|
1bf1b2b284 | ||
|
|
291d543f37 | ||
|
|
8b6bb94539 | ||
|
|
1cae0980cd | ||
|
|
bd4d16ebb0 | ||
|
|
ba2b5a4638 | ||
|
|
98eb90360b | ||
|
|
2a9c4e3198 | ||
|
|
94f7ca00b5 | ||
|
|
b4a8d7d649 | ||
|
|
63e7be45fe | ||
|
|
f6f5598e97 | ||
|
|
736e93b5eb | ||
|
|
db9657f125 | ||
|
|
2b1ae17e88 | ||
|
|
e6510c21cf | ||
|
|
92dd734993 | ||
|
|
556afe5f51 | ||
|
|
23e495fc45 | ||
|
|
5002de61a2 | ||
|
|
c56959b9d0 | ||
|
|
5d9573602b | ||
|
|
aba40c4633 | ||
|
|
ec6b37178b | ||
|
|
a0267c6efa | ||
|
|
f0222394a1 | ||
|
|
ba88aa1d35 | ||
|
|
f726e4a8c6 | ||
|
|
7da2c627c6 | ||
|
|
e75a426749 | ||
|
|
5058270c99 | ||
|
|
e0f4024ead | ||
|
|
c63d44c1cf | ||
|
|
cb3d8d6b30 | ||
|
|
fe336cf6d8 | ||
|
|
386533b02f | ||
|
|
cd6f5ccebd | ||
|
|
9c0ea8a23c | ||
|
|
d5c857325b | ||
|
|
ef42467cc2 | ||
|
|
d0f11028d3 | ||
|
|
0e7e1eaf3d | ||
|
|
20062b6095 | ||
|
|
bf9482e560 | ||
|
|
b7e012f886 | ||
|
|
b4bd4d115d | ||
|
|
961f894372 | ||
|
|
a68b00b126 | ||
|
|
1c2b4f042d | ||
|
|
c9acb396ad | ||
|
|
af974046f5 | ||
|
|
62afa918f0 | ||
|
|
69cb6bee4d | ||
|
|
fc56c262c1 | ||
|
|
ed1e6191b8 | ||
|
|
4ffc3fc866 | ||
|
|
cf8cfc5dff | ||
|
|
f1edbd71c5 | ||
|
|
de64fceab9 | ||
|
|
d20489de7c | ||
|
|
83fb39dabf | ||
|
|
4256dc8021 | ||
|
|
af78a8ff4c | ||
|
|
48f93991bb | ||
|
|
a86555da16 | ||
|
|
e16340ffcb | ||
|
|
28ec69e505 | ||
|
|
9a1371a96b | ||
|
|
71f143b4aa | ||
|
|
a9a3f74d45 | ||
|
|
43b15ae7e7 | ||
|
|
3d8fa710c1 | ||
|
|
dbe30bba2c | ||
|
|
d41d0c7f94 | ||
|
|
4b30bcd92e | ||
|
|
01a670e503 | ||
|
|
9876491446 | ||
|
|
cc3b94a4c1 | ||
|
|
3c1dcb374f | ||
|
|
1322eea980 | ||
|
|
c22a94ccc3 | ||
|
|
51f3964c27 | ||
|
|
e50ad0b850 | ||
|
|
569975297a | ||
|
|
e6b63cf9ef | ||
|
|
1546db7f9f | ||
|
|
2666313d63 | ||
|
|
cfbb6752ee | ||
|
|
cd34d8d6f5 | ||
|
|
0b15352132 | ||
|
|
c5bfdbb653 | ||
|
|
cbc19c17ca | ||
|
|
067604ceac | ||
|
|
e6ecf52df9 | ||
|
|
5e6e433cd2 | ||
|
|
86b6d92761 | ||
|
|
a97af08bb8 | ||
|
|
264980df57 | ||
|
|
e94f63bd26 | ||
|
|
4689e402f8 | ||
|
|
ba760b060e | ||
|
|
4800888da6 | ||
|
|
8539b25278 | ||
|
|
5ddf989703 | ||
|
|
90c2328400 | ||
|
|
f5ee38247c | ||
|
|
f51029270b | ||
|
|
d27aa357db | ||
|
|
4b3e192ee6 | ||
|
|
d974023c8d | ||
|
|
204aa5649c | ||
|
|
8cd5f604c4 | ||
|
|
fdb0330959 | ||
|
|
4f5062080b | ||
|
|
39b669ae83 | ||
|
|
671a73a6c4 | ||
|
|
a4f0852bdf | ||
|
|
46ae99e36b | ||
|
|
07054d869b | ||
|
|
ebbcb998ce | ||
|
|
9f8d17d888 | ||
|
|
56a95182c7 | ||
|
|
e218c1d041 | ||
|
|
356792ec68 | ||
|
|
30ae4eeecd | ||
|
|
8685107e2e | ||
|
|
f01a5841b9 | ||
|
|
2a01e9683b | ||
|
|
0873e526b4 | ||
|
|
2306587a7d | ||
|
|
69b0911db1 | ||
|
|
6587530242 | ||
|
|
cf3f1f04cd | ||
|
|
ba6efd2a9c | ||
|
|
1e96eed341 | ||
|
|
c54395aa4c | ||
|
|
4590b28b50 | ||
|
|
a77ae20e5d | ||
|
|
c5e481b767 | ||
|
|
c23b7aa396 | ||
|
|
a12022f290 | ||
|
|
01291bbcce | ||
|
|
97b0622cc3 | ||
|
|
f67cae35fa | ||
|
|
50aa368169 | ||
|
|
5748f111d3 | ||
|
|
aec815119e | ||
|
|
6463ea368a | ||
|
|
2aef10ce47 | ||
|
|
81dff779b6 | ||
|
|
a34d6c1726 | ||
|
|
9bddac5937 | ||
|
|
fba13e8824 | ||
|
|
bc3e13bf69 | ||
|
|
ee06a04f51 | ||
|
|
1f66f4c9ca | ||
|
|
6a22d5443b | ||
|
|
98078cbe0a | ||
|
|
de9b2bba0e | ||
|
|
5fbe902145 | ||
|
|
0dcdbf8be2 | ||
|
|
9758c12491 | ||
|
|
d9ec23e0f8 | ||
|
|
a06add045c | ||
|
|
5fd0b3294e | ||
|
|
bcdb692dd1 | ||
|
|
ac7c7b19d8 | ||
|
|
d8de7e0765 | ||
|
|
cf8d3dd437 | ||
|
|
3eb3a9ff9f | ||
|
|
73b4c2d3ea | ||
|
|
d7a174615c | ||
|
|
e2f92a30c6 | ||
|
|
e28aef0c6a | ||
|
|
8a0c495d4d | ||
|
|
70eefd1f0d | ||
|
|
457644dc52 | ||
|
|
3f22ec8b4d | ||
|
|
85e3172d7f | ||
|
|
c9f2d260f1 | ||
|
|
6506594155 | ||
|
|
491693f402 | ||
|
|
2c546fd5be | ||
|
|
9e8cab8eec | ||
|
|
d686d3eae0 | ||
|
|
7c9cbdc121 | ||
|
|
f8457a2830 | ||
|
|
6a86209451 | ||
|
|
ea5219f40d | ||
|
|
f2154bf2b7 | ||
|
|
fc1d8e0b32 | ||
|
|
9e9e991cb6 | ||
|
|
c2444912b8 | ||
|
|
e85c43d075 | ||
|
|
66851eda8f | ||
|
|
93bd1ce2ee | ||
|
|
c3d3a29c6b | ||
|
|
cad3b0968a | ||
|
|
a2585fffe4 | ||
|
|
b8930bc577 | ||
|
|
e0a7ca3656 | ||
|
|
dfc2d9798e | ||
|
|
403cc5cae7 | ||
|
|
1a329d83aa | ||
|
|
f4e471e002 | ||
|
|
a8ac8a8c00 | ||
|
|
ef4835fcef | ||
|
|
00293d3ac0 | ||
|
|
7058cf2090 | ||
|
|
342a3b8b8f | ||
|
|
98a32b1ccf | ||
|
|
78db980b2f | ||
|
|
31ca661345 | ||
|
|
e97aa44fe4 | ||
|
|
f97bfc7dd1 | ||
|
|
758bc8b3ff | ||
|
|
5ab67cea1e | ||
|
|
4fd365764c | ||
|
|
a57185a34b | ||
|
|
60399acbc7 | ||
|
|
6d2d054328 | ||
|
|
bc100b9fd8 | ||
|
|
394b899578 | ||
|
|
32124235ba | ||
|
|
7bb713eaaa | ||
|
|
0df1db6b8f | ||
|
|
5b2b60841d | ||
|
|
e638aa3b89 | ||
|
|
42c0dadb11 | ||
|
|
4362406587 | ||
|
|
f1dff9b3e2 | ||
|
|
a6667496c7 | ||
|
|
355175cc36 | ||
|
|
2ade84e7ab | ||
|
|
244424efee | ||
|
|
775889edc4 | ||
|
|
8a23a1cb6b | ||
|
|
e17dfd9e66 | ||
|
|
de2c915bba | ||
|
|
40be1e1d07 | ||
|
|
e60dcdc2b3 | ||
|
|
90f49b128e | ||
|
|
2115e1dcf7 | ||
|
|
554745ac13 | ||
|
|
4f91809d41 | ||
|
|
e52647caf3 | ||
|
|
c1f882b95f | ||
|
|
0710b64899 | ||
|
|
e7e3de0335 | ||
|
|
88c95e292b | ||
|
|
73674c6167 | ||
|
|
e9497634b6 | ||
|
|
cf69a3114a | ||
|
|
f7ec7da366 | ||
|
|
2e9a908d07 | ||
|
|
849c0c4c89 | ||
|
|
43ef6cb056 | ||
|
|
194446fc71 | ||
|
|
63f2b4a3d9 | ||
|
|
285aee962b | ||
|
|
6787d322cc | ||
|
|
b7e593a64d | ||
|
|
eb52264f3b | ||
|
|
93de08cd54 | ||
|
|
d65e94b3b2 | ||
|
|
0f38928dd8 | ||
|
|
1dc69dca29 | ||
|
|
96f3ca2506 | ||
|
|
9c63e9707f | ||
|
|
feffba739a | ||
|
|
8a0dda3002 | ||
|
|
df34ecb282 | ||
|
|
0dda394f5c | ||
|
|
86a8a2d2fd | ||
|
|
be2df389ab | ||
|
|
a9f0cf6df5 | ||
|
|
31d7fff62b | ||
|
|
6d7df693b3 | ||
|
|
cba398df2d | ||
|
|
398cf969ac | ||
|
|
8b8059b6d2 | ||
|
|
23509fc18a | ||
|
|
7be09e89d3 | ||
|
|
b2c92d1b39 | ||
|
|
cb527ad29c | ||
|
|
3209e69c1d | ||
|
|
eb024f0460 | ||
|
|
69c4df538a | ||
|
|
34c47c06cb | ||
|
|
ccbd7a847c | ||
|
|
9f2e2cdbb8 | ||
|
|
208b6a4960 | ||
|
|
57b921bc5e | ||
|
|
3eba28888b | ||
|
|
b68f1b9703 | ||
|
|
c28952fc9c | ||
|
|
345f0f5f30 | ||
|
|
d7dc6bdea6 | ||
|
|
847b285e41 | ||
|
|
d141471bcd | ||
|
|
053a8e6a88 | ||
|
|
9130a242e3 | ||
|
|
4d8b26d2f4 | ||
|
|
097a04f2a1 | ||
|
|
a36141e02f | ||
|
|
51d94130ab | ||
|
|
f838a99508 | ||
|
|
20ca378b4c | ||
|
|
058cadb053 | ||
|
|
d74ed475df | ||
|
|
a5f9ff9c74 | ||
|
|
6889568c21 | ||
|
|
5c62640551 | ||
|
|
4c06f893fc | ||
|
|
a84433a6d3 | ||
|
|
ae3b121823 | ||
|
|
2192ea49b2 | ||
|
|
f83864764f | ||
|
|
bb64990618 | ||
|
|
2e8f9bc5fa | ||
|
|
e18babbbde |
4
.github/workflows/command-rebase.yml
vendored
4
.github/workflows/command-rebase.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Add reaction on start
|
||||
uses: peter-evans/create-or-update-comment@v2
|
||||
uses: peter-evans/create-or-update-comment@v3
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
repository: ${{ github.event.repository.full_name }}
|
||||
@@ -42,7 +42,7 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
- name: Add reaction on failure
|
||||
uses: peter-evans/create-or-update-comment@v2
|
||||
uses: peter-evans/create-or-update-comment@v3
|
||||
if: failure()
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
25
.github/workflows/dependency-updates.yml
vendored
25
.github/workflows/dependency-updates.yml
vendored
@@ -19,17 +19,18 @@ jobs:
|
||||
run: |
|
||||
set -x
|
||||
cd ./php
|
||||
composer update
|
||||
set +e
|
||||
ALL_LINES="$(composer outdated | grep -v "^$\|Direct dependencies\|Everything up to date\|Transitive dependencies")"
|
||||
set -e
|
||||
while [ -n "$ALL_LINES" ]; do
|
||||
CURRENT_LINE="$(echo "$ALL_LINES" | head -1)"
|
||||
composer require "$(echo "$CURRENT_LINE" | awk '{print $1}')" "^$(echo "$CURRENT_LINE" | awk '{print $4}')" --with-all-dependencies
|
||||
ALL_LINES="$(echo "$ALL_LINES" | sed '1d')"
|
||||
done
|
||||
echo "outdated dependencies:
|
||||
$(composer outdated)"
|
||||
composer update --with-all-dependencies
|
||||
# Disable dependency updates for now
|
||||
# set +e
|
||||
# ALL_LINES="$(composer outdated | grep -v "^$\|Direct dependencies\|Everything up to date\|Transitive dependencies")"
|
||||
# set -e
|
||||
# while [ -n "$ALL_LINES" ]; do
|
||||
# CURRENT_LINE="$(echo "$ALL_LINES" | head -1)"
|
||||
# composer require "$(echo "$CURRENT_LINE" | awk '{print $1}')" "^$(echo "$CURRENT_LINE" | awk '{print $4}')" --with-all-dependencies
|
||||
# ALL_LINES="$(echo "$ALL_LINES" | sed '1d')"
|
||||
# done
|
||||
# echo "outdated dependencies:
|
||||
# $(composer outdated)"
|
||||
- name: Update apcu
|
||||
run: |
|
||||
# APCU
|
||||
@@ -43,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@v4
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
with:
|
||||
commit-message: dependency updates
|
||||
signoff: true
|
||||
|
||||
48
.github/workflows/helm-release.yml
vendored
Normal file
48
.github/workflows/helm-release.yml
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
|
||||
name: Helm Chart Releaser
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'nextcloud-aio-helm-chart/**'
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Turnstyle
|
||||
uses: softprops/turnstyle@v1
|
||||
with:
|
||||
continue-after-seconds: 180
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Fetch history
|
||||
run: git fetch --prune --unshallow
|
||||
|
||||
- name: Configure Git
|
||||
run: |
|
||||
git config user.name "$GITHUB_ACTOR"
|
||||
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
||||
|
||||
# See https://github.com/helm/chart-releaser-action/issues/6
|
||||
- name: Set up Helm
|
||||
uses: azure/setup-helm@v3.1
|
||||
with:
|
||||
version: v3.6.3
|
||||
|
||||
- name: Run chart-releaser
|
||||
# TODO: switch back @main to a specific version like @v1.5.1 or higher
|
||||
uses: helm/chart-releaser-action@main
|
||||
with:
|
||||
mark_as_latest: false
|
||||
charts_dir: .
|
||||
env:
|
||||
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||
CR_RELEASE_NAME_TEMPLATE: "helm-chart-{{ .Version }}"
|
||||
CR_SKIP_EXISTING: true
|
||||
2
.github/workflows/nextcloud-update.yml
vendored
2
.github/workflows/nextcloud-update.yml
vendored
@@ -66,7 +66,7 @@ jobs:
|
||||
sed -i "s|^ENV NEXTCLOUD_VERSION.*|ENV NEXTCLOUD_VERSION $NCVERSION|" ./Containers/nextcloud/Dockerfile
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
with:
|
||||
commit-message: nextcloud-update automated change
|
||||
signoff: true
|
||||
|
||||
@@ -26,4 +26,7 @@ jobs:
|
||||
cd php
|
||||
composer global require wapmorgan/php-deprecation-detector dev-master
|
||||
composer install
|
||||
composer run php-deprecation-detector
|
||||
composer run php-deprecation-detector | tee -i ./phpdd.log
|
||||
if grep "Total issues:" ./phpdd.log; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
2
.github/workflows/psalm-update-baseline.yml
vendored
2
.github/workflows/psalm-update-baseline.yml
vendored
@@ -31,7 +31,7 @@ jobs:
|
||||
continue-on-error: true
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: Update psalm baseline
|
||||
|
||||
8
.github/workflows/update-helm.yml
vendored
8
.github/workflows/update-helm.yml
vendored
@@ -15,13 +15,13 @@ jobs:
|
||||
- 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' | sort -r | head -1)"
|
||||
DOCKER_TAG="${DOCKER_TAG%%latest*}"
|
||||
DOCKER_TAG="${DOCKER_TAG%%-latest*}"
|
||||
export DOCKER_TAG
|
||||
if [ -n "$DOCKER_TAG" ] && ! grep -q "$DOCKER_TAG" ./helm-chart/templates/nextcloud-aio-nextcloud-deployment.yaml; then
|
||||
sudo bash helm-chart/update-helm.sh "$DOCKER_TAG"
|
||||
if [ -n "$DOCKER_TAG" ] && ! grep -q "$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@v4
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
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@v4
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
with:
|
||||
commit-message: Yaml updates
|
||||
signoff: true
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
storage file_system {
|
||||
root /mnt/data/caddy
|
||||
}
|
||||
|
||||
log {
|
||||
level ERROR
|
||||
}
|
||||
}
|
||||
|
||||
{$PROTOCOL}://{$NC_DOMAIN}:{$APACHE_PORT} {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Caddy is a requirement
|
||||
FROM caddy:2.6.2-alpine as caddy
|
||||
FROM caddy:2.6.4-alpine as caddy
|
||||
|
||||
FROM httpd:2.4.55-alpine3.17
|
||||
FROM httpd:2.4.57-alpine3.17
|
||||
|
||||
RUN set -ex; \
|
||||
apk add --no-cache shadow; \
|
||||
|
||||
@@ -2,8 +2,5 @@
|
||||
|
||||
nc -z "$NEXTCLOUD_HOST" 9000 || exit 0
|
||||
nc -z localhost 8000 || exit 1
|
||||
if [ "$APACHE_PORT" != '443' ]; then
|
||||
nc -z localhost "$APACHE_PORT" || exit 1
|
||||
else
|
||||
nc -z "$NC_DOMAIN" "$APACHE_PORT" || exit 1
|
||||
fi
|
||||
nc -z localhost "$APACHE_PORT" || exit 1
|
||||
nc -z "$NC_DOMAIN" 443 || exit 1
|
||||
|
||||
@@ -45,6 +45,9 @@ else
|
||||
fi
|
||||
echo "$CADDYFILE" > /Caddyfile
|
||||
|
||||
# Fix the Caddyfile format
|
||||
caddy fmt --overwrite /Caddyfile
|
||||
|
||||
# Add caddy path
|
||||
mkdir -p /mnt/data/caddy/
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
FROM alpine:3.17.1
|
||||
FROM alpine:3.17.3
|
||||
|
||||
RUN set -ex; \
|
||||
\
|
||||
apk add --no-cache \
|
||||
util-linux-misc \
|
||||
bash \
|
||||
borgbackup \
|
||||
rsync \
|
||||
|
||||
@@ -129,10 +129,13 @@ if [ "$BORG_MODE" = backup ]; then
|
||||
# https://forum.level1techs.com/t/optimal-compression-for-borg-backups/145870/6
|
||||
BORG_OPTS=(-v --stats --compression "auto,zstd" --exclude-caches --checkpoint-interval 86400)
|
||||
|
||||
# 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")
|
||||
|
||||
# Create the backup
|
||||
echo "Starting the backup..."
|
||||
get_start_time
|
||||
if ! borg create "${BORG_OPTS[@]}" "$BORG_BACKUP_DIRECTORY::$CURRENT_DATE-nextcloud-aio" "/nextcloud_aio_volumes/"; then
|
||||
if ! borg create "${BORG_OPTS[@]}" "${BORG_EXCLUDE[@]}" "$BORG_BACKUP_DIRECTORY::$CURRENT_DATE-nextcloud-aio" "/nextcloud_aio_volumes/"; then
|
||||
echo "Deleting the failed backup archive..."
|
||||
borg delete --stats "$BORG_BACKUP_DIRECTORY::$CURRENT_DATE-nextcloud-aio"
|
||||
echo "Backup failed!"
|
||||
@@ -264,17 +267,18 @@ if [ "$BORG_MODE" = restore ]; then
|
||||
|
||||
# Restore everything except the configuration file
|
||||
if ! rsync --stats --archive --human-readable -vv --delete \
|
||||
--exclude "nextcloud_aio_apache/caddy/"** \
|
||||
--exclude "nextcloud_aio_mastercontainer/caddy/"** \
|
||||
--exclude "nextcloud_aio_mastercontainer/certs/"** \
|
||||
--exclude "nextcloud_aio_apache/caddy/**" \
|
||||
--exclude "nextcloud_aio_mastercontainer/caddy/**" \
|
||||
--exclude "nextcloud_aio_nextcloud/data/nextcloud.log*" \
|
||||
--exclude "nextcloud_aio_nextcloud/data/audit.log" \
|
||||
--exclude "nextcloud_aio_mastercontainer/certs/**" \
|
||||
--exclude "nextcloud_aio_mastercontainer/data/configuration.json" \
|
||||
--exclude "nextcloud_aio_mastercontainer/data/daily_backup_running" \
|
||||
--exclude "nextcloud_aio_mastercontainer/data/session_date_file" \
|
||||
--exclude "nextcloud_aio_mastercontainer/session/"** \
|
||||
--exclude "nextcloud_aio_mastercontainer/session/**" \
|
||||
/tmp/borg/nextcloud_aio_volumes/ /nextcloud_aio_volumes; then
|
||||
RESTORE_FAILED=1
|
||||
echo "Something failed while restoring from backup."
|
||||
umount /tmp/borg
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Save current aio password
|
||||
@@ -294,9 +298,8 @@ if [ "$BORG_MODE" = restore ]; then
|
||||
if ! rsync --archive --human-readable -vv \
|
||||
/tmp/borg/nextcloud_aio_volumes/nextcloud_aio_mastercontainer/data/configuration.json \
|
||||
/nextcloud_aio_volumes/nextcloud_aio_mastercontainer/data/configuration.json; then
|
||||
RESTORE_FAILED=1
|
||||
echo "Something failed while restoring the configuration.json."
|
||||
umount /tmp/borg
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Set backup-mode to restore since it was a restore
|
||||
@@ -331,6 +334,10 @@ if [ "$BORG_MODE" = restore ]; then
|
||||
|
||||
umount /tmp/borg
|
||||
|
||||
if [ "$RESTORE_FAILED" = 1 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Inform user
|
||||
get_expiration_time
|
||||
echo "Restore finished successfully on $END_DATE_READABLE ($DURATION_READABLE)"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Probably from this file: https://github.com/Cisco-Talos/clamav-docker/blob/main/clamav/0.105/alpine/Dockerfile
|
||||
FROM clamav/clamav:0.105.1-7
|
||||
FROM clamav/clamav:1.0.1-2
|
||||
|
||||
RUN apk add --no-cache tzdata
|
||||
COPY clamav.conf /tmp/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# From a file located probably somewhere here: https://github.com/CollaboraOnline/online/tree/master/docker
|
||||
FROM collabora/code:22.05.10.1.1
|
||||
FROM collabora/code:22.05.12.4.1
|
||||
|
||||
USER root
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM alpine:3.17.1
|
||||
FROM alpine:3.17.3
|
||||
RUN apk add --no-cache lighttpd bash netcat-openbsd
|
||||
|
||||
RUN adduser -S www-data -G www-data
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Probably from here https://github.com/elastic/elasticsearch/blob/main/distribution/docker/src/docker/Dockerfile
|
||||
FROM elasticsearch:7.17.8
|
||||
FROM elasticsearch:7.17.9
|
||||
|
||||
RUN elasticsearch-plugin install --batch ingest-attachment
|
||||
|
||||
@@ -11,10 +11,5 @@ RUN set -ex; \
|
||||
; \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY start.sh /
|
||||
|
||||
RUN chmod +x /start.sh
|
||||
ENTRYPOINT ["/bin/tini", "--", "/start.sh"]
|
||||
|
||||
HEALTHCHECK CMD nc -z localhost 9200 || exit 1
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Only start container if database is accessible (needed for backup to work correctly)
|
||||
while ! nc -z "$POSTGRES_HOST" 5432; do
|
||||
echo "Waiting for database to start..."
|
||||
sleep 5
|
||||
done
|
||||
|
||||
# Show wiki if vm.max_map_count is too low
|
||||
if [ "$(sysctl -n vm.max_map_count)" -le 65530 ]; then
|
||||
echo "max_map_count is too low and needs to be adjusted."
|
||||
echo "See https://github.com/nextcloud/all-in-one/discussions/1775 how to change max_map_count"
|
||||
fi
|
||||
|
||||
# Run initial entrypoint
|
||||
/usr/local/bin/docker-entrypoint.sh
|
||||
|
||||
exec "$@"
|
||||
@@ -1,5 +1,5 @@
|
||||
# From https://github.com/h2non/imaginary/blob/master/Dockerfile
|
||||
FROM nextcloud/imaginary:20230201
|
||||
FROM nextcloud/imaginary:20230301
|
||||
|
||||
USER root
|
||||
RUN set -ex; \
|
||||
@@ -8,6 +8,15 @@ RUN set -ex; \
|
||||
apt-get install -y --no-install-recommends \
|
||||
netcat \
|
||||
; \
|
||||
echo "deb http://deb.debian.org/debian bookworm main" > /etc/apt/sources.list.d/bookworm.list; \
|
||||
apt-get update; \
|
||||
apt-get install -t bookworm -y --no-install-recommends \
|
||||
libheif1 \
|
||||
libde265-0 \
|
||||
libx265-199 \
|
||||
libvips \
|
||||
; \
|
||||
rm /etc/apt/sources.list.d/bookworm.list; \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
USER nobody
|
||||
|
||||
@@ -15,3 +24,6 @@ ENTRYPOINT ["/usr/local/bin/imaginary", "-return-size", "-max-allowed-resolution
|
||||
|
||||
HEALTHCHECK CMD nc -z localhost 9000 || exit 1
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
|
||||
# https://github.com/h2non/imaginary#memory-issues
|
||||
ENV MALLOC_ARENA_MAX=2
|
||||
|
||||
@@ -6,17 +6,29 @@
|
||||
storage file_system {
|
||||
root /mnt/docker-aio-config/caddy/
|
||||
}
|
||||
|
||||
log {
|
||||
level ERROR
|
||||
}
|
||||
}
|
||||
|
||||
http://:80 {
|
||||
redir https://{host}{uri}
|
||||
}
|
||||
|
||||
https://:8443 {
|
||||
# Match only host names and not ip-addresses:
|
||||
https://*.*:8443,
|
||||
https://*.*.*:8443,
|
||||
https://*.*.*.*:8443,
|
||||
https://*.*.*.*.*:8443,
|
||||
https://*.*.*.*.*.*:8443 {
|
||||
|
||||
reverse_proxy localhost:8000
|
||||
|
||||
tls {
|
||||
on_demand
|
||||
issuer acme {
|
||||
disable_tlsalpn_challenge
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
# Docker CLI is a requirement
|
||||
FROM docker:20.10.23-dind as dind
|
||||
FROM docker:23.0.3-cli as docker
|
||||
|
||||
# Caddy is a requirement
|
||||
FROM caddy:2.6.2-alpine as caddy
|
||||
FROM caddy:2.6.4-alpine as caddy
|
||||
|
||||
# From https://github.com/docker-library/php/blob/master/8.1/alpine3.17/fpm/Dockerfile
|
||||
FROM php:8.1.14-fpm-alpine3.17
|
||||
FROM php:8.1.17-fpm-alpine3.17
|
||||
|
||||
RUN set -ex; \
|
||||
apk add --no-cache shadow; \
|
||||
@@ -18,19 +18,15 @@ EXPOSE 80
|
||||
EXPOSE 8080
|
||||
EXPOSE 8443
|
||||
|
||||
RUN mkdir -p /mnt/docker-aio-config/;
|
||||
|
||||
VOLUME /mnt/docker-aio-config/
|
||||
|
||||
RUN mkdir -p /var/www/docker-aio;
|
||||
|
||||
WORKDIR /var/www/docker-aio
|
||||
|
||||
RUN set -ex; \
|
||||
apk add --no-cache \
|
||||
util-linux-misc \
|
||||
ca-certificates \
|
||||
wget \
|
||||
tzdata \
|
||||
bash \
|
||||
apache2 \
|
||||
apache2-proxy \
|
||||
@@ -58,12 +54,15 @@ RUN set -ex; \
|
||||
)"; \
|
||||
apk add --virtual .nextcloud-aio-rundeps $runDeps; \
|
||||
apk del .build-deps; \
|
||||
grep -q '^pm = dynamic' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
sed -i 's/^pm = dynamic/pm = ondemand/' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
sed -i 's/^pm.max_children =.*/pm.max_children = 80/' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
sed -i 's|access.log = /proc/self/fd/2|access.log = /proc/self/fd/1|' /usr/local/etc/php-fpm.d/docker.conf
|
||||
|
||||
COPY --from=caddy /usr/bin/caddy /usr/bin/
|
||||
RUN chmod +x /usr/bin/caddy
|
||||
|
||||
COPY --from=dind /usr/local/bin/docker /usr/local/bin/
|
||||
COPY --from=docker /usr/local/bin/docker /usr/local/bin/
|
||||
RUN chmod +x /usr/local/bin/docker
|
||||
|
||||
RUN set -e && \
|
||||
|
||||
@@ -38,8 +38,10 @@ while true; do
|
||||
# Make sure to delete the lock file always
|
||||
rm -f "/mnt/docker-aio-config/data/daily_backup_running"
|
||||
|
||||
# Check for updates and send notification if yes
|
||||
sudo -u www-data php /var/www/docker-aio/php/src/Cron/UpdateNotification.php
|
||||
# Check for updates and send notification if yes on saturdays
|
||||
if [ "$(date +%u)" = 6 ]; then
|
||||
sudo -u www-data php /var/www/docker-aio/php/src/Cron/UpdateNotification.php
|
||||
fi
|
||||
|
||||
# Check if AIO is outdated
|
||||
sudo -u www-data php /var/www/docker-aio/php/src/Cron/OutdatedNotification.php
|
||||
@@ -47,8 +49,13 @@ while true; do
|
||||
# Remove sessions older than 24h
|
||||
find "/mnt/docker-aio-config/session/" -mindepth 1 -mmin +1440 -delete
|
||||
|
||||
# Remove nextcloud-aio-domaincheck container
|
||||
if sudo -u www-data docker ps --format "{{.Names}}" --filter "status=exited" | grep -q "^nextcloud-aio-domaincheck$"; then
|
||||
sudo -u www-data docker container remove nextcloud-aio-domaincheck
|
||||
fi
|
||||
|
||||
# Remove dangling images
|
||||
sudo -u www-data docker image prune -f
|
||||
sudo -u www-data docker image prune --force
|
||||
|
||||
# Wait 60s so that the whole loop will not be executed again
|
||||
sleep 60
|
||||
|
||||
@@ -11,7 +11,7 @@ fi
|
||||
# Delete all active sessions and create a lock file
|
||||
# But don't kick out the user if the mastercontainer was just updated since we block the interface either way with the lock file
|
||||
if [ "$LOCK_FILE_PRESENT" = 0 ] || ! [ -f "/mnt/docker-aio-config/data/daily_backup_running" ]; then
|
||||
rm -f "/mnt/docker-aio-config/session/"*
|
||||
find "/mnt/docker-aio-config/session/" -mindepth 1 -delete
|
||||
fi
|
||||
sudo -u www-data touch "/mnt/docker-aio-config/data/daily_backup_running"
|
||||
|
||||
@@ -38,9 +38,10 @@ if [ "$AUTOMATIC_UPDATES" = 1 ]; then
|
||||
fi
|
||||
|
||||
# Wait for watchtower to stop
|
||||
if [ "$AUTOMATIC_UPDATES" = 1 ] && ! docker ps --format "{{.Names}}" | grep -q "^nextcloud-aio-watchtower$"; then
|
||||
echo "Something seems to be wrong: Watchtower should be started at this step."
|
||||
else
|
||||
if [ "$AUTOMATIC_UPDATES" = 1 ]; then
|
||||
if ! docker ps --format "{{.Names}}" | grep -q "^nextcloud-aio-watchtower$"; then
|
||||
echo "Something seems to be wrong: Watchtower should be started at this step."
|
||||
fi
|
||||
while docker ps --format "{{.Names}}" | grep -q "^nextcloud-aio-watchtower$"; do
|
||||
echo "Waiting for watchtower to stop"
|
||||
sleep 30
|
||||
@@ -58,6 +59,13 @@ fi
|
||||
if [ "$DAILY_BACKUP" = 1 ]; then
|
||||
echo "Creating daily backup..."
|
||||
sudo -u www-data php /var/www/docker-aio/php/src/Cron/CreateBackup.php
|
||||
if ! docker ps --format "{{.Names}}" | grep -q "^nextcloud-aio-borgbackup$"; then
|
||||
echo "Something seems to be wrong: the borg container should be started at this step."
|
||||
fi
|
||||
while docker ps --format "{{.Names}}" | grep -q "^nextcloud-aio-borgbackup$"; do
|
||||
echo "Waiting for backup container to stop"
|
||||
sleep 30
|
||||
done
|
||||
fi
|
||||
|
||||
# Execute backup check
|
||||
|
||||
@@ -77,23 +77,28 @@ elif echo "$STORAGE_DRIVER" | grep -q fuse-overlayfs; then
|
||||
fi
|
||||
|
||||
# Check if startup command was executed correctly
|
||||
if ! sudo -u www-data docker ps | grep -q "nextcloud-aio-mastercontainer"; then
|
||||
echo "It seems like you did not give the mastercontainer the correct name?
|
||||
Using a different name is not supported!"
|
||||
if ! sudo -u www-data docker ps --format "{{.Names}}" | grep -q "^nextcloud-aio-mastercontainer$"; then
|
||||
echo "It seems like you did not give the mastercontainer the correct name? (The 'nextcloud-aio-mastercontainer' container was not found.)
|
||||
Using a different name is not supported since mastercontainer updates will not work in that case!
|
||||
If you are on docker swarm and try to run AIO, see https://github.com/nextcloud/all-in-one#can-i-run-this-with-docker-swarm"
|
||||
exit 1
|
||||
elif ! sudo -u www-data docker volume ls | grep -q "nextcloud_aio_mastercontainer"; then
|
||||
echo "It seems like you did not give the mastercontainer volume the correct name?
|
||||
Using a different name is not supported!"
|
||||
elif ! sudo -u www-data docker volume ls --format "{{.Name}}" | grep -q "^nextcloud_aio_mastercontainer$"; then
|
||||
echo "It seems like you did not give the mastercontainer volume the correct name? (The 'nextcloud_aio_mastercontainer' volume was not found.)
|
||||
Using a different name is not supported since the built-in backup solution will not work in that case!"
|
||||
exit 1
|
||||
elif ! sudo -u www-data docker inspect nextcloud-aio-mastercontainer | grep -q "nextcloud_aio_mastercontainer"; then
|
||||
echo "It seems like you did not attach the 'nextcloud_aio_mastercontainer' volume to the mastercontainer?
|
||||
This is not supported since the built-in backup solution will not work in that case!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for other options
|
||||
if [ -n "$NEXTCLOUD_DATADIR" ]; then
|
||||
if [ "$NEXTCLOUD_DATADIR" = "nextcloud_aio_nextcloud_datadir" ]; then
|
||||
echo "NEXTCLOUD_DATADIR is set to $NEXTCLOUD_DATADIR"
|
||||
sleep 1
|
||||
elif ! echo "$NEXTCLOUD_DATADIR" | grep -q "^/" || [ "$NEXTCLOUD_DATADIR" = "/" ]; then
|
||||
echo "You've set NEXTCLOUD_DATADIR but not to an allowed value.
|
||||
The string must start with '/' and must not be equal to '/'.
|
||||
The string must start with '/' and must not be equal to '/'. Also allowed is 'nextcloud_aio_nextcloud_datadir'.
|
||||
It is set to '$NEXTCLOUD_DATADIR'."
|
||||
exit 1
|
||||
fi
|
||||
@@ -189,9 +194,9 @@ It is set to '$NEXTCLOUD_TRUSTED_CACERTS_DIR '."
|
||||
fi
|
||||
fi
|
||||
if [ -n "$NEXTCLOUD_STARTUP_APPS" ]; then
|
||||
if ! echo "$NEXTCLOUD_STARTUP_APPS" | grep -q "^[a-z _-]\+$"; then
|
||||
if ! echo "$NEXTCLOUD_STARTUP_APPS" | grep -q "^[a-z0-9 _-]\+$"; then
|
||||
echo "You've set NEXTCLOUD_STARTUP_APPS but not to an allowed value.
|
||||
It needs to be a string. Allowed are small letters a-z, spaces, hyphens and '_'.
|
||||
It needs to be a string. Allowed are small letters a-z, 0-9, spaces, hyphens and '_'.
|
||||
It is set to '$NEXTCLOUD_STARTUP_APPS'."
|
||||
exit 1
|
||||
fi
|
||||
@@ -219,7 +224,8 @@ curl https://nextcloud.com &>/dev/null
|
||||
if [ "$?" = 6 ]; then
|
||||
echo "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 adding the '--dns=\"ip.address.of.dns.server\"' option to the docker run command."
|
||||
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
|
||||
|
||||
@@ -280,4 +286,10 @@ export TZ=UTC
|
||||
# Fix apache startup
|
||||
rm -f /var/run/apache2/httpd.pid
|
||||
|
||||
# Fix the Caddyfile format
|
||||
caddy fmt --overwrite /Caddyfile
|
||||
|
||||
# Fix caddy log
|
||||
chmod 777 /root
|
||||
|
||||
exec "$@"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# From https://github.com/nextcloud/docker/blob/master/23/fpm-alpine/Dockerfile
|
||||
FROM php:8.0.27-fpm-alpine3.16
|
||||
FROM php:8.0.28-fpm-alpine3.16
|
||||
|
||||
# Custom: change id of www-data user as it needs to be the same like on old installations
|
||||
RUN set -ex; \
|
||||
@@ -27,32 +27,21 @@ RUN set -ex; \
|
||||
apk add --no-cache --virtual .build-deps \
|
||||
$PHPIZE_DEPS \
|
||||
autoconf \
|
||||
libtool \
|
||||
freetype-dev \
|
||||
gmp-dev \
|
||||
icu-dev \
|
||||
imagemagick-dev \
|
||||
libevent-dev \
|
||||
libjpeg-turbo-dev \
|
||||
libmcrypt-dev \
|
||||
libpng-dev \
|
||||
libmemcached-dev \
|
||||
libpng-dev \
|
||||
libwebp-dev \
|
||||
libxml2-dev \
|
||||
libzip-dev \
|
||||
openldap-dev \
|
||||
pcre-dev \
|
||||
postgresql-dev \
|
||||
libwebp-dev \
|
||||
gmp-dev \
|
||||
lcms2-dev \
|
||||
fontconfig-dev \
|
||||
freetype-dev \
|
||||
ghostscript-dev \
|
||||
tiff-dev \
|
||||
zlib-dev \
|
||||
imagemagick-dev \
|
||||
libheif-dev \
|
||||
librsvg-dev \
|
||||
libxext-dev \
|
||||
ghostscript-fonts \
|
||||
; \
|
||||
\
|
||||
docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp; \
|
||||
@@ -61,13 +50,14 @@ RUN set -ex; \
|
||||
bcmath \
|
||||
exif \
|
||||
gd \
|
||||
gmp \
|
||||
intl \
|
||||
ldap \
|
||||
opcache \
|
||||
pcntl \
|
||||
pdo_pgsql \
|
||||
sysvsem \
|
||||
zip \
|
||||
gmp \
|
||||
; \
|
||||
\
|
||||
# pecl will claim success even if one install fails, so we need to perform each install separately
|
||||
@@ -98,6 +88,8 @@ RUN { \
|
||||
echo 'opcache.interned_strings_buffer=32'; \
|
||||
echo 'opcache.save_comments=1'; \
|
||||
echo 'opcache.revalidate_freq=60'; \
|
||||
echo 'opcache.jit=1255'; \
|
||||
echo 'opcache.jit_buffer_size=128M'; \
|
||||
} > /usr/local/etc/php/conf.d/opcache-recommended.ini; \
|
||||
\
|
||||
echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \
|
||||
@@ -116,7 +108,7 @@ RUN { \
|
||||
|
||||
VOLUME /var/www/html
|
||||
|
||||
ENV NEXTCLOUD_VERSION 25.0.3
|
||||
ENV NEXTCLOUD_VERSION 25.0.5
|
||||
|
||||
RUN set -ex; \
|
||||
apk add --no-cache --virtual .fetch-deps \
|
||||
@@ -213,12 +205,8 @@ RUN set -ex; \
|
||||
mawk \
|
||||
sudo \
|
||||
grep \
|
||||
coreutils \
|
||||
libjpeg \
|
||||
librsvg \
|
||||
libheif \
|
||||
libpng \
|
||||
ghostscript-fonts;
|
||||
nodejs \
|
||||
coreutils;
|
||||
|
||||
RUN set -ex; \
|
||||
grep -q '^pm = dynamic' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
@@ -262,6 +250,11 @@ RUN set -ex; \
|
||||
|
||||
VOLUME /mnt/ncdata
|
||||
|
||||
RUN set -ex; \
|
||||
mkdir -p /nc-updater; \
|
||||
chown -R www-data:www-data /nc-updater; \
|
||||
chmod -R 770 /nc-updater
|
||||
|
||||
# Give root a random password
|
||||
RUN echo "root:$(openssl rand -base64 12)" | chpasswd
|
||||
|
||||
|
||||
@@ -39,7 +39,10 @@ $(stat -c "%u:%g %a" "$NEXTCLOUD_DATA_DIR")
|
||||
(userID:groupID permissions)
|
||||
but they should be:
|
||||
33:0 750
|
||||
(userID:groupID permissions)"
|
||||
(userID:groupID permissions)
|
||||
Also make sure that the parent directories on the host of the directory that you've chosen as datadir are publicly readable with e.g. 'sudo chmod +r /mnt' (adjust the command accordingly to your case) and the same for all subdirectories.
|
||||
Additionally, if you want to use a Fuse-mount as datadir, set 'allow_other' as additional mount option.
|
||||
For SMB/CIFS mounts as datadir, see https://github.com/nextcloud/all-in-one#can-i-use-a-cifssmb-share-as-nextclouds-datadir"
|
||||
exit 1
|
||||
fi
|
||||
rm "$NEXTCLOUD_DATA_DIR/this-is-a-test-file"
|
||||
@@ -98,10 +101,6 @@ if ! [ -f "$NEXTCLOUD_DATA_DIR/skip.update" ]; then
|
||||
# Write output to logfile.
|
||||
exec > >(tee -i "/var/www/html/data/update.log")
|
||||
exec 2>&1
|
||||
else
|
||||
# Write output to logfile.
|
||||
exec > >(tee -i "/var/www/html/data/install.log")
|
||||
exec 2>&1
|
||||
fi
|
||||
|
||||
if [ "$installed_version" != "0.0.0.0" ] && [ "$((IMAGE_MAJOR - INSTALLED_MAJOR))" -gt 1 ]; then
|
||||
@@ -121,9 +120,9 @@ if ! [ -f "$NEXTCLOUD_DATA_DIR/skip.update" ]; then
|
||||
mkdir -p /usr/src/tmp/nextcloud/data
|
||||
mkdir -p /usr/src/tmp/nextcloud/custom_apps
|
||||
chmod +x /usr/src/tmp/nextcloud/occ
|
||||
cp /usr/src/nextcloud/config/* /usr/src/tmp/nextcloud/config/
|
||||
cp -r /usr/src/nextcloud/config/* /usr/src/tmp/nextcloud/config/
|
||||
mkdir -p /usr/src/tmp/nextcloud/apps/nextcloud-aio
|
||||
cp /usr/src/nextcloud/apps/nextcloud-aio/* /usr/src/tmp/nextcloud/apps/nextcloud-aio/
|
||||
cp -r /usr/src/nextcloud/apps/nextcloud-aio/* /usr/src/tmp/nextcloud/apps/nextcloud-aio/
|
||||
mv /usr/src/nextcloud /usr/src/temp-nextcloud
|
||||
mv /usr/src/tmp/nextcloud /usr/src/nextcloud
|
||||
rm -r /usr/src/tmp
|
||||
@@ -194,7 +193,12 @@ if ! [ -f "$NEXTCLOUD_DATA_DIR/skip.update" ]; then
|
||||
|
||||
#install
|
||||
if [ "$installed_version" = "0.0.0.0" ]; then
|
||||
echo "New nextcloud instance"
|
||||
echo "New Nextcloud instance."
|
||||
|
||||
# Write output to logfile.
|
||||
mkdir -p /var/www/html/data
|
||||
exec > >(tee -i "/var/www/html/data/install.log")
|
||||
exec 2>&1
|
||||
|
||||
INSTALL_OPTIONS=(-n --admin-user "$ADMIN_USER" --admin-pass "$ADMIN_PASSWORD")
|
||||
if [ -n "${NEXTCLOUD_DATA_DIR}" ]; then
|
||||
@@ -204,26 +208,64 @@ if ! [ -f "$NEXTCLOUD_DATA_DIR/skip.update" ]; then
|
||||
echo "Installing with PostgreSQL database"
|
||||
INSTALL_OPTIONS+=(--database pgsql --database-name "$POSTGRES_DB" --database-user "$POSTGRES_USER" --database-pass "$POSTGRES_PASSWORD" --database-host "$POSTGRES_HOST")
|
||||
|
||||
echo "starting nextcloud installation"
|
||||
max_retries=10
|
||||
try=0
|
||||
until php /var/www/html/occ maintenance:install "${INSTALL_OPTIONS[@]}" || [ "$try" -gt "$max_retries" ]
|
||||
do
|
||||
echo "retrying install..."
|
||||
try=$((try+1))
|
||||
sleep 10s
|
||||
done
|
||||
if [ "$try" -gt "$max_retries" ]; then
|
||||
echo "installing of nextcloud failed!"
|
||||
echo "Starting Nextcloud installation..."
|
||||
if ! php /var/www/html/occ maintenance:install "${INSTALL_OPTIONS[@]}"; then
|
||||
echo "Installation of Nextcloud failed!"
|
||||
touch "$NEXTCLOUD_DATA_DIR/install.failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# We do our own permission check so the permission check is not needed
|
||||
cat << DATADIR_PERMISSION_CONF > /var/www/html/config/datadir.permission.config.php
|
||||
<?php
|
||||
\$CONFIG = array (
|
||||
'check_data_directory_permissions' => false
|
||||
);
|
||||
DATADIR_PERMISSION_CONF
|
||||
php /var/www/html/occ config:system:set check_data_directory_permissions --value=false --type=bool
|
||||
|
||||
# Try to force generation of appdata dir:
|
||||
php /var/www/html/occ maintenance:repair
|
||||
|
||||
if [ -z "$OBJECTSTORE_S3_BUCKET" ] && [ -z "$OBJECTSTORE_SWIFT_URL" ]; then
|
||||
max_retries=10
|
||||
try=0
|
||||
while [ -z "$(find "$NEXTCLOUD_DATA_DIR/" -maxdepth 1 -mindepth 1 -type d -name "appdata_*")" ] && [ "$try" -lt "$max_retries" ]; do
|
||||
echo "Waiting for appdata to become available..."
|
||||
try=$((try+1))
|
||||
sleep 10s
|
||||
done
|
||||
|
||||
if [ "$try" -ge "$max_retries" ]; then
|
||||
echo "Installation of Nextcloud failed!"
|
||||
echo "Install errors: $(cat /var/www/html/data/nextcloud.log)"
|
||||
touch "$NEXTCLOUD_DATA_DIR/install.failed"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# This autoconfig is not needed anymore and should be able to be overwritten by the user
|
||||
rm /var/www/html/config/datadir.permission.config.php
|
||||
|
||||
# unset admin password
|
||||
unset ADMIN_PASSWORD
|
||||
|
||||
# Post Install logs: For questions like https://help.nextcloud.com/t/nextcloud-aio-error-could-not-get-appdata-folder-after-container-has-already-written-data-in-it/151122/5
|
||||
echo "Install errors: $(cat /var/www/html/data/nextcloud.log)"
|
||||
if [ "$INSTALL_LATEST_MAJOR" = yes ]; then
|
||||
php /var/www/html/occ config:system:set updater.release.channel --value=beta
|
||||
php /var/www/html/occ config:system:set updatedirectory --value="/nc-updater"
|
||||
php /var/www/html/updater/updater.phar --no-interaction
|
||||
php /var/www/html/occ app:enable nextcloud-aio --force
|
||||
if ! php /var/www/html/occ -V || php /var/www/html/occ status | grep maintenance | grep -q 'true'; then
|
||||
echo "Installation of Nextcloud failed!"
|
||||
touch "$NEXTCLOUD_DATA_DIR/install.failed"
|
||||
exit 1
|
||||
fi
|
||||
php /var/www/html/occ config:system:set updater.release.channel --value=stable
|
||||
php /var/www/html/occ db:add-missing-indices
|
||||
php /var/www/html/occ db:add-missing-columns
|
||||
php /var/www/html/occ db:add-missing-primary-keys
|
||||
yes | php /var/www/html/occ db:convert-filecache-bigint
|
||||
fi
|
||||
|
||||
# Apply log settings
|
||||
echo "Applying default settings..."
|
||||
@@ -341,6 +383,8 @@ if ! [ -f "$NEXTCLOUD_DATA_DIR/skip.update" ]; then
|
||||
# Performing update of all apps if daily backups are enabled, running and successful and if it is saturday
|
||||
if [ "$UPDATE_NEXTCLOUD_APPS" = 'yes' ] && [ "$(date +%u)" = 6 ]; then
|
||||
UPDATED_APPS="$(php /var/www/html/occ app:update --all)"
|
||||
# Update all apps again and try to prevent something like https://github.com/nextcloud/polls/issues/2793 from happening
|
||||
php /var/www/html/occ app:update --all
|
||||
if [ -n "$UPDATED_APPS" ]; then
|
||||
bash /notify.sh "Your apps just got updated!" "$UPDATED_APPS"
|
||||
fi
|
||||
@@ -349,18 +393,18 @@ else
|
||||
SKIP_UPDATE=1
|
||||
fi
|
||||
|
||||
# Check if appdata is present
|
||||
# If not, something broke (e.g. changing ncdatadir after aio was first started)
|
||||
if [ -z "$(find "$NEXTCLOUD_DATA_DIR/" -maxdepth 1 -mindepth 1 -type d -name "appdata_*")" ]; then
|
||||
echo "Appdata is not present. Did you maybe change the datadir after aio was first started?"
|
||||
echo "See https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir"
|
||||
echo "In the datadir was found:"
|
||||
ls -la "$NEXTCLOUD_DATA_DIR/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Configure tempdirectory
|
||||
if [ -z "$OBJECTSTORE_S3_BUCKET" ] && [ -z "$OBJECTSTORE_SWIFT_URL" ]; then
|
||||
# Check if appdata is present
|
||||
# If not, something broke (e.g. changing ncdatadir after aio was first started)
|
||||
if [ -z "$(find "$NEXTCLOUD_DATA_DIR/" -maxdepth 1 -mindepth 1 -type d -name "appdata_*")" ]; then
|
||||
echo "Appdata is not present. Did you maybe change the datadir after aio was first started?"
|
||||
echo "See https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir"
|
||||
echo "In the datadir was found:"
|
||||
ls -la "$NEXTCLOUD_DATA_DIR/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Configure tempdirectory
|
||||
mkdir -p "$NEXTCLOUD_DATA_DIR/tmp/"
|
||||
if ! grep -q upload_tmp_dir /usr/local/etc/php/conf.d/nextcloud.ini; then
|
||||
echo "upload_tmp_dir = $NEXTCLOUD_DATA_DIR/tmp/" >> /usr/local/etc/php/conf.d/nextcloud.ini
|
||||
@@ -385,6 +429,7 @@ php /var/www/html/occ app:enable support
|
||||
echo "Adjusting log files..."
|
||||
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"
|
||||
|
||||
# Apply network settings
|
||||
echo "Applying network settings..."
|
||||
@@ -431,10 +476,10 @@ if [ "$COLLABORA_ENABLED" = 'yes' ]; then
|
||||
php /var/www/html/occ config:system:set allow_local_remote_servers --type=bool --value=true
|
||||
# Make collabora more save
|
||||
COLLABORA_IPv4_ADDRESS="$(echo "<?php echo gethostbyname('$NC_DOMAIN');" | php | head -1)"
|
||||
COLLABORA_IPv6_Address="<?php \$record = dns_get_record('$NC_DOMAIN', DNS_AAAA);"
|
||||
COLLABORA_IPv6_ADDRESS="<?php \$record = dns_get_record('$NC_DOMAIN', DNS_AAAA);"
|
||||
# shellcheck disable=SC2016
|
||||
COLLABORA_IPv6_Address+='if (!empty($record)) {echo $record[0]["ipv6"];}'
|
||||
COLLABORA_IPv6_Address="$(echo "$COLLABORA_IPv6_Address" | php | head -1)"
|
||||
COLLABORA_IPv6_ADDRESS+='if (!empty($record)) {echo $record[0]["ipv6"];}'
|
||||
COLLABORA_IPv6_ADDRESS="$(echo "$COLLABORA_IPv6_ADDRESS" | php | head -1)"
|
||||
COLLABORA_ALLOW_LIST="$(php /var/www/html/occ config:app:get richdocuments wopi_allowlist)"
|
||||
if [ -n "$COLLABORA_IPv4_ADDRESS" ]; then
|
||||
if ! echo "$COLLABORA_ALLOW_LIST" | grep -q "$COLLABORA_IPv4_ADDRESS"; then
|
||||
@@ -509,7 +554,8 @@ if [ "$TALK_ENABLED" = 'yes' ]; then
|
||||
if [ -z "$(php /var/www/html/occ talk:turn:list --output="plain")" ]; then
|
||||
php /var/www/html/occ talk:turn:add turn "$NC_DOMAIN:$TALK_PORT" "udp,tcp" --secret="$TURN_SECRET"
|
||||
fi
|
||||
if php /var/www/html/occ talk:stun:list --output="plain" | grep -oP '[a-zA-Z.:0-9]+' | grep -q "^stun.nextcloud.com:443$"; then
|
||||
STUN_SERVER="$(php /var/www/html/occ talk:stun:list --output="plain")"
|
||||
if [ -z "$STUN_SERVER" ] || echo "$STUN_SERVER" | grep -oP '[a-zA-Z.:0-9]+' | grep -q "^stun.nextcloud.com:443$"; then
|
||||
php /var/www/html/occ talk:stun:add "$NC_DOMAIN:$TALK_PORT"
|
||||
php /var/www/html/occ talk:stun:delete "stun.nextcloud.com:443"
|
||||
fi
|
||||
@@ -524,23 +570,30 @@ fi
|
||||
|
||||
# Clamav
|
||||
if [ "$CLAMAV_ENABLED" = 'yes' ]; then
|
||||
while ! nc -z "$CLAMAV_HOST" 3310; do
|
||||
count=0
|
||||
while ! nc -z "$CLAMAV_HOST" 3310 && [ "$count" -lt 90 ]; do
|
||||
echo "waiting for clamav to become available..."
|
||||
count=$((count+5))
|
||||
sleep 5
|
||||
done
|
||||
if ! [ -d "/var/www/html/custom_apps/files_antivirus" ]; then
|
||||
php /var/www/html/occ app:install files_antivirus
|
||||
elif [ "$(php /var/www/html/occ config:app:get files_antivirus enabled)" != "yes" ]; then
|
||||
php /var/www/html/occ app:enable files_antivirus
|
||||
elif [ "$SKIP_UPDATE" != 1 ]; then
|
||||
php /var/www/html/occ app:update files_antivirus
|
||||
if [ "$count" -ge 90 ]; then
|
||||
echo "Clamav did not start in time. Skipping initialization and disabling files_antivirus app."
|
||||
php /var/www/html/occ app:disable files_antivirus
|
||||
else
|
||||
if ! [ -d "/var/www/html/custom_apps/files_antivirus" ]; then
|
||||
php /var/www/html/occ app:install files_antivirus
|
||||
elif [ "$(php /var/www/html/occ config:app:get files_antivirus enabled)" != "yes" ]; then
|
||||
php /var/www/html/occ app:enable files_antivirus
|
||||
elif [ "$SKIP_UPDATE" != 1 ]; then
|
||||
php /var/www/html/occ app:update files_antivirus
|
||||
fi
|
||||
php /var/www/html/occ config:app:set files_antivirus av_mode --value="daemon"
|
||||
php /var/www/html/occ config:app:set files_antivirus av_port --value="3310"
|
||||
php /var/www/html/occ config:app:set files_antivirus av_host --value="$CLAMAV_HOST"
|
||||
php /var/www/html/occ config:app:set files_antivirus av_stream_max_length --value="104857600"
|
||||
php /var/www/html/occ config:app:set files_antivirus av_max_file_size --value="-1"
|
||||
php /var/www/html/occ config:app:set files_antivirus av_infected_action --value="only_log"
|
||||
fi
|
||||
php /var/www/html/occ config:app:set files_antivirus av_mode --value="daemon"
|
||||
php /var/www/html/occ config:app:set files_antivirus av_port --value="3310"
|
||||
php /var/www/html/occ config:app:set files_antivirus av_host --value="$CLAMAV_HOST"
|
||||
php /var/www/html/occ config:app:set files_antivirus av_stream_max_length --value="104857600"
|
||||
php /var/www/html/occ config:app:set files_antivirus av_max_file_size --value="-1"
|
||||
php /var/www/html/occ config:app:set files_antivirus av_infected_action --value="only_log"
|
||||
else
|
||||
if [ -d "/var/www/html/custom_apps/files_antivirus" ]; then
|
||||
php /var/www/html/occ app:remove files_antivirus
|
||||
@@ -552,18 +605,23 @@ if version_greater "$installed_version" "24.0.0.0"; then
|
||||
if [ "$IMAGINARY_ENABLED" = 'yes' ]; then
|
||||
php /var/www/html/occ config:system:set enabledPreviewProviders 0 --value="OC\\Preview\\Imaginary"
|
||||
php /var/www/html/occ config:system:set preview_imaginary_url --value="http://$IMAGINARY_HOST:9000"
|
||||
php /var/www/html/occ config:system:set enabledPreviewProviders 20 --value="OC\\Preview\\HEIC"
|
||||
php /var/www/html/occ config:system:set enabledPreviewProviders 21 --value="OC\\Preview\\TIFF"
|
||||
php /var/www/html/occ config:system:set enabledPreviewProviders 22 --value="OC\\Preview\\WebP"
|
||||
else
|
||||
php /var/www/html/occ config:system:delete enabledPreviewProviders 0
|
||||
php /var/www/html/occ config:system:delete preview_imaginary_url
|
||||
php /var/www/html/occ config:system:delete enabledPreviewProviders 20
|
||||
php /var/www/html/occ config:system:delete enabledPreviewProviders 21
|
||||
php /var/www/html/occ config:system:delete enabledPreviewProviders 22
|
||||
if [ -n "$(php /var/www/html/occ config:system:get preview_imaginary_url)" ]; then
|
||||
php /var/www/html/occ config:system:delete enabledPreviewProviders 0
|
||||
php /var/www/html/occ config:system:delete preview_imaginary_url
|
||||
php /var/www/html/occ config:system:delete enabledPreviewProviders 20
|
||||
php /var/www/html/occ config:system:delete enabledPreviewProviders 21
|
||||
php /var/www/html/occ config:system:delete enabledPreviewProviders 22
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Migration to ES8 is pending, thus disabling FTS for now.
|
||||
if [ "$INSTALL_LATEST_MAJOR" = yes ] || version_greater "$installed_version" "26.0.0.0"; then
|
||||
export FULLTEXTSEARCH_ENABLED=no
|
||||
echo "Fulltextsearch is not compatible with Nextcloud 26 and is getting disabled."
|
||||
fi
|
||||
|
||||
# Fulltextsearch
|
||||
if [ "$FULLTEXTSEARCH_ENABLED" = 'yes' ]; then
|
||||
while ! nc -z "$FULLTEXTSEARCH_HOST" 9200; do
|
||||
|
||||
@@ -17,10 +17,11 @@ if [ -f "/var/www/html/config/config.php" ]; then
|
||||
echo "Waiting for the database to start..."
|
||||
sleep 5
|
||||
done
|
||||
if [ "$POSTGRES_USER" = "oc_nextcloud" ] && echo "$POSTGRES_PASSWORD" | grep -q '^[a-z0-9]\+$'; then
|
||||
# this was introduced with https://github.com/nextcloud/all-in-one/pull/218
|
||||
if [ "$POSTGRES_USER" = "oc_nextcloud" ] && [ "$POSTGRES_DB" = "nextcloud_database" ] && echo "$POSTGRES_PASSWORD" | grep -q '^[a-z0-9]\+$'; then
|
||||
# This was introduced with https://github.com/nextcloud/all-in-one/pull/218
|
||||
sed -i "s|'dbuser'.*=>.*$|'dbuser' => '$POSTGRES_USER',|" /var/www/html/config/config.php
|
||||
sed -i "s|'dbpassword'.*=>.*$|'dbpassword' => '$POSTGRES_PASSWORD',|" /var/www/html/config/config.php
|
||||
sed -i "s|'db_name'.*=>.*$|'db_name' => '$POSTGRES_DB',|" /var/www/html/config/config.php
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# From https://github.com/ONLYOFFICE/Docker-DocumentServer/blob/master/Dockerfile
|
||||
FROM onlyoffice/documentserver:7.2.2.56
|
||||
FROM onlyoffice/documentserver:7.3.3.49
|
||||
|
||||
HEALTHCHECK CMD nc -z localhost 80 || exit 1
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# From https://github.com/docker-library/postgres/blob/master/15/alpine/Dockerfile
|
||||
FROM postgres:15.1-alpine
|
||||
FROM postgres:15.2-alpine
|
||||
|
||||
RUN apk add --no-cache bash openssl shadow netcat-openbsd grep mawk
|
||||
RUN apk add --no-cache bash openssl shadow grep mawk
|
||||
|
||||
# We need to use the same gid and uid as on old installations
|
||||
RUN set -ex; \
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
test -f "/mnt/data/backup-is-running" && exit 0
|
||||
|
||||
psql -d "postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@localhost:5432/$POSTGRES_DB" -c "select now()" || exit 1
|
||||
psql -d "postgresql://oc_$POSTGRES_USER:$POSTGRES_PASSWORD@localhost:5432/$POSTGRES_DB" -c "select now()" || exit 1
|
||||
|
||||
@@ -85,7 +85,7 @@ if ( [ -f "$DATADIR/PG_VERSION" ] && [ "$PG_MAJOR" != "$(cat "$DATADIR/PG_VERSIO
|
||||
exec docker-entrypoint.sh postgres &
|
||||
|
||||
# Wait for creation
|
||||
while ! nc -z localhost 11000; do
|
||||
while ! psql -d "postgresql://oc_$POSTGRES_USER:$POSTGRES_PASSWORD@localhost:11000/$POSTGRES_DB" -c "select now()"; do
|
||||
echo "Waiting for the database to start."
|
||||
sleep 5
|
||||
done
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# From https://github.com/docker-library/redis/blob/master/7.0/alpine/Dockerfile
|
||||
FROM redis:7.0.8-alpine
|
||||
FROM redis:7.0.10-alpine
|
||||
|
||||
RUN apk add --no-cache openssl bash
|
||||
|
||||
|
||||
@@ -1,69 +1,64 @@
|
||||
FROM ubuntu:focal-20230126
|
||||
FROM nats:2.9.15-scratch as nats
|
||||
FROM strukturag/nextcloud-spreed-signaling:1.1.2 as signaling
|
||||
FROM coturn/coturn:4.6.2-alpine
|
||||
USER root
|
||||
|
||||
COPY --from=nats /nats-server /usr/local/bin/nats-server
|
||||
COPY --from=signaling /usr/bin/nextcloud-spreed-signaling /usr/local/bin/nextcloud-spreed-signaling
|
||||
|
||||
RUN set -ex; \
|
||||
\
|
||||
apt-get update; \
|
||||
apt-get install -y --no-install-recommends \
|
||||
openssl \
|
||||
coturn \
|
||||
supervisor \
|
||||
curl \
|
||||
apk add --no-cache \
|
||||
ca-certificates \
|
||||
netcat \
|
||||
; \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN set -ex; \
|
||||
curl -sL -o "/etc/apt/trusted.gpg.d/morph027-nats-server.asc" "https://packaging.gitlab.io/nats-server/gpg.key"; \
|
||||
echo "deb https://packaging.gitlab.io/nats-server nats main" > /etc/apt/sources.list.d/morph027-nats-server.list; \
|
||||
. /etc/lsb-release; \
|
||||
curl -sL -o "/etc/apt/trusted.gpg.d/morph027-janus.asc" "https://packaging.gitlab.io/janus/gpg.key"; \
|
||||
echo "deb https://packaging.gitlab.io/janus/$DISTRIB_CODENAME $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/morph027-janus.list; \
|
||||
curl -sL -o "/etc/apt/trusted.gpg.d/morph027-nextcloud-spreed-signaling.asc" "https://packaging.gitlab.io/nextcloud-spreed-signaling/gpg.key"; \
|
||||
echo "deb https://packaging.gitlab.io/nextcloud-spreed-signaling signaling main" > /etc/apt/sources.list.d/morph027-nextcloud-spreed-signaling.list
|
||||
|
||||
RUN set -ex; \
|
||||
\
|
||||
apt-get update; \
|
||||
apt-get install -y --no-install-recommends \
|
||||
nats-server \
|
||||
janus \
|
||||
nextcloud-spreed-signaling \
|
||||
; \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN adduser --system --group talk
|
||||
|
||||
RUN mkdir /var/log/supervisord; \
|
||||
mkdir /var/run/supervisord; \
|
||||
chown talk:talk /var/run/supervisord; \
|
||||
chown talk:talk /var/log/supervisord;
|
||||
|
||||
COPY start.sh /usr/bin/
|
||||
COPY supervisord.conf /
|
||||
RUN chmod +x /usr/bin/start.sh; \
|
||||
chmod +r /supervisord.conf; \
|
||||
touch /etc/turnserver.conf; \
|
||||
chown talk:talk /etc/turnserver.conf; \
|
||||
sed -i '/TURNSERVER_ENABLED/c\TURNSERVER_ENABLED=1' /etc/default/coturn; \
|
||||
mkdir -p /var/tmp;
|
||||
|
||||
RUN curl -sL -o "/usr/share/janus/lua/json.lua" "https://raw.githubusercontent.com/rxi/json.lua/master/json.lua"; \
|
||||
curl -sL -o "/usr/share/janus/lua/ansicolors.lua" "https://raw.githubusercontent.com/kikito/ansicolors.lua/master/ansicolors.lua"
|
||||
|
||||
RUN mkdir -p /etc/nats; \
|
||||
echo "listen: 127.0.0.1:4222" > /etc/nats/nats.conf; \
|
||||
mkdir /var/lib/turn; \
|
||||
chown talk:talk /etc; \
|
||||
chown talk:talk -R /etc/nats; \
|
||||
chown talk:talk -R /etc/janus; \
|
||||
chown talk:talk -R /etc/signaling; \
|
||||
chown talk:talk -R /usr; \
|
||||
chown talk:talk -R /var/lib/turn;
|
||||
tzdata \
|
||||
bash \
|
||||
openssl \
|
||||
supervisor \
|
||||
bind-tools \
|
||||
netcat-openbsd \
|
||||
shadow \
|
||||
util-linux \
|
||||
build-base \
|
||||
lua5.3-dev \
|
||||
luarocks5.3; \
|
||||
apk add --no-cache janus-gateway --repository http://dl-cdn.alpinelinux.org/alpine/edge/community; \
|
||||
useradd --system talk; \
|
||||
luarocks-5.3 install luajson; \
|
||||
luarocks-5.3 install ansicolors; \
|
||||
rename -v ".jcfg.sample" ".jcfg" /etc/janus/*.sample; \
|
||||
apk del --no-cache \
|
||||
shadow \
|
||||
util-linux \
|
||||
build-base \
|
||||
lua5.3-dev \
|
||||
luarocks5.3;
|
||||
|
||||
# Give root a random password
|
||||
RUN echo "root:$(openssl rand -base64 12)" | chpasswd
|
||||
|
||||
COPY --chmod=775 start.sh /usr/bin/start.sh
|
||||
COPY --chmod=664 supervisord.conf /supervisord.conf
|
||||
|
||||
RUN set -ex; \
|
||||
touch \
|
||||
/etc/nats.conf \
|
||||
/etc/signaling.conf \
|
||||
/etc/turnserver.conf; \
|
||||
echo "listen: 127.0.0.1:4222" | tee /etc/nats.conf; \
|
||||
mkdir -p \
|
||||
/var/tmp \
|
||||
/var/lib/turn \
|
||||
/var/log/supervisord \
|
||||
/var/run/supervisord; \
|
||||
chown talk:talk -R \
|
||||
/usr \
|
||||
/etc/janus \
|
||||
/etc/nats.conf \
|
||||
/etc/signaling.conf \
|
||||
/etc/turnserver.conf \
|
||||
/var/lib/turn \
|
||||
/var/log/supervisord \
|
||||
/var/run/supervisord;
|
||||
|
||||
# Set default talk port https://github.com/nextcloud/all-in-one/issues/1011
|
||||
ENV TALK_PORT=3478
|
||||
|
||||
@@ -71,5 +66,5 @@ USER talk
|
||||
ENTRYPOINT ["start.sh"]
|
||||
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
|
||||
|
||||
HEALTHCHECK CMD (nc -z localhost 8081 && nc -z localhost 8188 && nc -z localhost 4222 && nc -z localhost $TALK_PORT) || exit 1
|
||||
HEALTHCHECK CMD (nc -z localhost 8081 && nc -z localhost 8188 && nc -z localhost 4222 && nc -z localhost "$TALK_PORT" && nc -z "$NC_DOMAIN" "$TALK_PORT") || exit 1
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
|
||||
@@ -7,15 +7,16 @@ if [ -z "$NC_DOMAIN" ]; then
|
||||
elif [ -z "$TURN_SECRET" ]; then
|
||||
echo "You need to provide the TURN_SECRET."
|
||||
exit 1
|
||||
elif [ -z "$JANUS_API_KEY" ]; then
|
||||
echo "You need to provide the JANUS_API_KEY."
|
||||
exit 1
|
||||
elif [ -z "$SIGNALING_SECRET" ]; then
|
||||
echo "You need to provide the SIGNALING_SECRET."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Turn: https://github.com/coturn/coturn/blob/master/examples/etc/turnserver.conf
|
||||
set -x
|
||||
IPv4_ADDRESS_TALK="$(dig nextcloud-aio-talk A +short)"
|
||||
set +x
|
||||
|
||||
# Turn
|
||||
cat << TURN_CONF > "/etc/turnserver.conf"
|
||||
listening-port=$TALK_PORT
|
||||
fingerprint
|
||||
@@ -32,26 +33,26 @@ pidfile=/var/tmp/turnserver.pid
|
||||
no-tls
|
||||
no-dtls
|
||||
userdb=/var/lib/turn/turndb
|
||||
# Based on https://nextcloud-talk.readthedocs.io/en/latest/TURN/#turn-server-and-internal-networks
|
||||
allowed-peer-ip=$IPv4_ADDRESS_TALK
|
||||
denied-peer-ip=0.0.0.0-0.255.255.255
|
||||
denied-peer-ip=10.0.0.0-10.255.255.255
|
||||
denied-peer-ip=100.64.0.0-100.127.255.255
|
||||
denied-peer-ip=127.0.0.0-127.255.255.255
|
||||
denied-peer-ip=169.254.0.0-169.254.255.255
|
||||
denied-peer-ip=172.16.0.0-172.31.255.255
|
||||
denied-peer-ip=192.0.0.0-192.0.0.255
|
||||
denied-peer-ip=192.0.2.0-192.0.2.255
|
||||
denied-peer-ip=192.88.99.0-192.88.99.255
|
||||
denied-peer-ip=192.168.0.0-192.168.255.255
|
||||
denied-peer-ip=198.18.0.0-198.19.255.255
|
||||
denied-peer-ip=198.51.100.0-198.51.100.255
|
||||
denied-peer-ip=203.0.113.0-203.0.113.255
|
||||
denied-peer-ip=240.0.0.0-255.255.255.255
|
||||
TURN_CONF
|
||||
|
||||
# Janus
|
||||
set -x
|
||||
sed -i "s|#turn_rest_api_key.*|turn_rest_api_key = \"$JANUS_API_KEY\"|" /etc/janus/janus.jcfg
|
||||
sed -i "s|#full_trickle.*|full_trickle = true|g" /etc/janus/janus.jcfg
|
||||
sed -i 's|#stun_server.*|stun_server = "127.0.0.1"|g' /etc/janus/janus.jcfg
|
||||
sed -i "s|#stun_port.*|stun_port = $TALK_PORT|g" /etc/janus/janus.jcfg
|
||||
sed -i "s|#turn_port.*|turn_port = $TALK_PORT|g" /etc/janus/janus.jcfg
|
||||
sed -i 's|#turn_server.*|turn_server = "127.0.0.1"|g' /etc/janus/janus.jcfg
|
||||
sed -i 's|#turn_type .*|turn_type = "udp"|g' /etc/janus/janus.jcfg
|
||||
sed -i 's|#ice_ignore_list .*|ice_ignore_list = "udp"|g' /etc/janus/janus.jcfg
|
||||
sed -i 's|#interface.*|interface = "lo"|g' /etc/janus/janus.transport.websockets.jcfg
|
||||
sed -i 's|#ws_interface.*|ws_interface = "lo"|g' /etc/janus/janus.transport.websockets.jcfg
|
||||
sed -i 's|certfile =|#certfile =|g' /etc/janus/janus.transport.mqtt.jcfg
|
||||
sed -i 's|keyfile =|#keyfile =|g' /etc/janus/janus.transport.mqtt.jcfg
|
||||
set +x
|
||||
|
||||
# Signling
|
||||
cat << SIGNALING_CONF > "/etc/signaling/server.conf"
|
||||
cat << SIGNALING_CONF > "/etc/signaling.conf"
|
||||
[http]
|
||||
listen = 0.0.0.0:8081
|
||||
|
||||
@@ -81,11 +82,6 @@ url = nats://127.0.0.1:4222
|
||||
[mcu]
|
||||
type = janus
|
||||
url = ws://127.0.0.1:8188
|
||||
|
||||
[turn]
|
||||
apikey = ${JANUS_API_KEY}
|
||||
secret = ${TURN_SECRET}
|
||||
servers = turn:$NC_DOMAIN:$TALK_PORT?transport=tcp,turn:$NC_DOMAIN:$TALK_PORT?transport=udp
|
||||
SIGNALING_CONF
|
||||
|
||||
exec "$@"
|
||||
|
||||
@@ -13,25 +13,25 @@ stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
command=turnserver
|
||||
command=turnserver -c /etc/turnserver.conf
|
||||
|
||||
[program:nats-server]
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
command=nats-server -c /etc/nats/nats.conf
|
||||
command=nats-server -c /etc/nats.conf
|
||||
|
||||
[program:janus]
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
command=/usr/bin/janus --config=/etc/janus/janus.jcfg --disable-colors --log-stdout
|
||||
command=janus --config=/etc/janus/janus.jcfg --disable-colors --log-stdout
|
||||
|
||||
[program:signaling]
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
command=signaling --config /etc/signaling/server.conf
|
||||
command=nextcloud-spreed-signaling -config /etc/signaling.conf
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# From https://github.com/containrrr/watchtower/blob/main/dockerfiles/Dockerfile.self-contained
|
||||
FROM containrrr/watchtower:1.5.3 as watchtower
|
||||
|
||||
FROM alpine:3.17.1
|
||||
FROM alpine:3.17.3
|
||||
|
||||
RUN apk add --no-cache bash
|
||||
COPY --from=watchtower /watchtower /
|
||||
|
||||
@@ -6,19 +6,19 @@ volumes:
|
||||
|
||||
services:
|
||||
nextcloud:
|
||||
image: nextcloud/all-in-one:latest # Must be changed to 'nextcloud/all-in-one:latest-arm64' when used with an arm64 CPU
|
||||
image: nextcloud/all-in-one:latest
|
||||
restart: always
|
||||
container_name: nextcloud-aio-mastercontainer # This line is not allowed to be changed
|
||||
volumes:
|
||||
- nextcloud_aio_mastercontainer:/mnt/docker-aio-config # This line is not allowed to be changed
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro # May be changed on macOS, Windows or docker rootless. See the applicable documentation. If adjusting, don't forget to also set 'DOCKER_SOCKET_PATH'!
|
||||
ports:
|
||||
- 80:80 # Can be removed when running behind a reverse proxy. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
||||
- 80:80 # Can be removed when running behind a web server or reverse proxy (like Apache, Nginx and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
||||
- 8080:8080
|
||||
- 8443:8443 # Can be removed when running behind a reverse proxy. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
||||
- 8443:8443 # Can be removed when running behind a web server or reverse proxy (like Apache, Nginx and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
||||
# environment: # Is needed when using any of the options below
|
||||
# - APACHE_PORT=11000 # Is needed when running behind a reverse proxy. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
||||
# - APACHE_IP_BINDING=127.0.0.1 # Should be set when running behind a reverse proxy that is running on the same host. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
||||
# - APACHE_PORT=11000 # Is needed when running behind a web server or reverse proxy (like Apache, Nginx and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
||||
# - APACHE_IP_BINDING=127.0.0.1 # Should be set when running behind a web server or reverse proxy (like Apache, Nginx and else) that is running on the same host. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
||||
# - COLLABORA_SECCOMP_DISABLED=false # Setting this to true allows to disable Collabora's Seccomp feature. See https://github.com/nextcloud/all-in-one#how-to-disable-collaboras-seccomp-feature
|
||||
# - DOCKER_SOCKET_PATH=/var/run/docker.sock # Needs to be specified if the docker socket on the host is not located in the default '/var/run/docker.sock'. Otherwise mastercontainer updates will fail. For macos it needs to be '/var/run/docker.sock'
|
||||
# - DISABLE_BACKUP_SECTION=false # Setting this to true allows to hide the backup section in the AIO interface.
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
name: Nextcloud AIO Helm Chart
|
||||
description: A generated Helm Chart for Nextcloud AIO from Skippbox Kompose
|
||||
version: 4.2.0
|
||||
apiVersion: v2
|
||||
keywords:
|
||||
- latest
|
||||
sources:
|
||||
- https://github.com/nextcloud/all-in-one/tree/main/helm-chart
|
||||
home: https://github.com/nextcloud/all-in-one/tree/main/helm-chart
|
||||
@@ -1,3 +0,0 @@
|
||||
# You can also install the AIO containers on Kubernetes using this Helm Chart
|
||||
|
||||
This is currently beta and not ready yet.
|
||||
@@ -7,7 +7,7 @@ services:
|
||||
- nextcloud-aio-collabora
|
||||
- nextcloud-aio-talk
|
||||
- nextcloud-aio-nextcloud
|
||||
image: nextcloud/aio-apache:${IMAGE_TAG}
|
||||
image: nextcloud/aio-apache:latest
|
||||
ports:
|
||||
- ${APACHE_IP_BINDING}:${APACHE_PORT}:${APACHE_PORT}/tcp
|
||||
environment:
|
||||
@@ -28,7 +28,9 @@ services:
|
||||
- nextcloud-aio
|
||||
|
||||
nextcloud-aio-database:
|
||||
image: nextcloud/aio-postgresql:${IMAGE_TAG}
|
||||
image: nextcloud/aio-postgresql:latest
|
||||
expose:
|
||||
- "5432"
|
||||
volumes:
|
||||
- nextcloud_aio_database:/var/lib/postgresql/data:rw
|
||||
- nextcloud_aio_database_dump:/mnt/data:rw
|
||||
@@ -42,6 +44,7 @@ services:
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
shm_size: 268435456
|
||||
|
||||
nextcloud-aio-nextcloud:
|
||||
depends_on:
|
||||
@@ -50,7 +53,10 @@ services:
|
||||
- nextcloud-aio-clamav
|
||||
- nextcloud-aio-fulltextsearch
|
||||
- nextcloud-aio-imaginary
|
||||
image: nextcloud/aio-nextcloud:${IMAGE_TAG}
|
||||
image: nextcloud/aio-nextcloud:latest
|
||||
expose:
|
||||
- "9000"
|
||||
- "7867"
|
||||
volumes:
|
||||
- nextcloud_aio_nextcloud:/var/www/html:rw
|
||||
- ${NEXTCLOUD_DATADIR}:/mnt/ncdata:rw
|
||||
@@ -96,12 +102,15 @@ services:
|
||||
- STARTUP_APPS=${NEXTCLOUD_STARTUP_APPS}
|
||||
- ADDITIONAL_APKS=${NEXTCLOUD_ADDITIONAL_APKS}
|
||||
- ADDITIONAL_PHP_EXTENSIONS=${NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS}
|
||||
- INSTALL_LATEST_MAJOR=${INSTALL_LATEST_MAJOR}
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
|
||||
nextcloud-aio-redis:
|
||||
image: nextcloud/aio-redis:${IMAGE_TAG}
|
||||
image: nextcloud/aio-redis:latest
|
||||
expose:
|
||||
- "6379"
|
||||
environment:
|
||||
- REDIS_HOST_PASSWORD=${REDIS_PASSWORD}
|
||||
- TZ=${TIMEZONE}
|
||||
@@ -113,12 +122,15 @@ services:
|
||||
|
||||
nextcloud-aio-collabora:
|
||||
profiles: ["collabora"]
|
||||
image: nextcloud/aio-collabora:${IMAGE_TAG}
|
||||
image: nextcloud/aio-collabora:latest
|
||||
expose:
|
||||
- "9980"
|
||||
environment:
|
||||
- aliasgroup1=https://${NC_DOMAIN}:443
|
||||
- extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:logging.level=warning --o:home_mode.enable=true ${COLLABORA_SECCOMP_POLICY} --o:remote_font_config.url=https://${NC_DOMAIN}/apps/richdocuments/settings/fonts.json
|
||||
- extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:mount_jail_tree=false --o:logging.level=warning --o:home_mode.enable=true ${COLLABORA_SECCOMP_POLICY} --o:remote_font_config.url=https://${NC_DOMAIN}/apps/richdocuments/settings/fonts.json
|
||||
- dictionaries=${COLLABORA_DICTIONARIES}
|
||||
- TZ=${TIMEZONE}
|
||||
- server_name=${NC_DOMAIN}
|
||||
volumes:
|
||||
- nextcloud_aio_collabora_fonts:/opt/cool/systemplate/tmpfonts:rw
|
||||
restart: unless-stopped
|
||||
@@ -127,15 +139,16 @@ services:
|
||||
|
||||
nextcloud-aio-talk:
|
||||
profiles: ["talk"]
|
||||
image: nextcloud/aio-talk:${IMAGE_TAG}
|
||||
image: nextcloud/aio-talk:latest
|
||||
ports:
|
||||
- ${TALK_PORT}:${TALK_PORT}/tcp
|
||||
- ${TALK_PORT}:${TALK_PORT}/udp
|
||||
expose:
|
||||
- "8081"
|
||||
environment:
|
||||
- NC_DOMAIN=${NC_DOMAIN}
|
||||
- TURN_SECRET=${TURN_SECRET}
|
||||
- SIGNALING_SECRET=${SIGNALING_SECRET}
|
||||
- JANUS_API_KEY=${JANUS_API_KEY}
|
||||
- TZ=${TIMEZONE}
|
||||
- TALK_PORT=${TALK_PORT}
|
||||
restart: unless-stopped
|
||||
@@ -144,7 +157,9 @@ services:
|
||||
|
||||
nextcloud-aio-clamav:
|
||||
profiles: ["clamav"]
|
||||
image: nextcloud/aio-clamav:${IMAGE_TAG}
|
||||
image: nextcloud/aio-clamav:latest
|
||||
expose:
|
||||
- "3310"
|
||||
environment:
|
||||
- TZ=${TIMEZONE}
|
||||
- CLAMD_STARTUP_TIMEOUT=90
|
||||
@@ -156,7 +171,9 @@ services:
|
||||
|
||||
nextcloud-aio-onlyoffice:
|
||||
profiles: ["onlyoffice"]
|
||||
image: nextcloud/aio-onlyoffice:${IMAGE_TAG}
|
||||
image: nextcloud/aio-onlyoffice:latest
|
||||
expose:
|
||||
- "80"
|
||||
environment:
|
||||
- TZ=${TIMEZONE}
|
||||
- JWT_ENABLED=true
|
||||
@@ -170,20 +187,27 @@ services:
|
||||
|
||||
nextcloud-aio-imaginary:
|
||||
profiles: ["imaginary"]
|
||||
image: nextcloud/aio-imaginary:${IMAGE_TAG}
|
||||
image: nextcloud/aio-imaginary:latest
|
||||
expose:
|
||||
- "9000"
|
||||
environment:
|
||||
- TZ=${TIMEZONE}
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
cap_add:
|
||||
- SYS_NICE
|
||||
|
||||
nextcloud-aio-fulltextsearch:
|
||||
profiles: ["fulltextsearch"]
|
||||
image: nextcloud/aio-fulltextsearch:${IMAGE_TAG}
|
||||
image: nextcloud/aio-fulltextsearch:latest
|
||||
expose:
|
||||
- "9200"
|
||||
environment:
|
||||
- TZ=${TIMEZONE}
|
||||
- discovery.type=single-node
|
||||
- ES_JAVA_OPTS=-Xms1024M -Xmx1024M
|
||||
- POSTGRES_HOST=nextcloud-aio-database
|
||||
volumes:
|
||||
- nextcloud_aio_elasticsearch:/usr/share/elasticsearch/data:rw
|
||||
restart: unless-stopped
|
||||
|
||||
@@ -21,16 +21,16 @@ First, install docker and docker-compose if not already done. Then simply run th
|
||||
git clone https://github.com/nextcloud/all-in-one.git
|
||||
cd all-in-one/manual-install
|
||||
```
|
||||
Then copy the sample.conf to default environment file, e.g. `cp sample.conf .env`, open the new conf file, e.g. with `nano .env`, edit all values that are marked with `# TODO!`, close and save the file. For arm64 support use `IMAGE_TAG=latest-arm64` (Note: there is no clamav image for arm64).
|
||||
Then copy the sample.conf to default environment file, e.g. `cp sample.conf .env`, open the new conf file, e.g. with `nano .env`, edit all values that are marked with `# TODO!`, close and save the file. (Note: there is no clamav image for arm64).
|
||||
|
||||
Now copy the provided yaml file to a docker-compose file by running `cp latest.yml docker-compose.yml`.
|
||||
|
||||
Now you should be ready to go with `sudo docker-compose up`.
|
||||
|
||||
## Docker profiles
|
||||
The default profile of `latest.yml` only provide the minimum necessary services: nextcloud, database, redis and apache. To get optional services collabora, onlyoffice, talk, clamav, imaginary or fulltextsearch use additional arguments for each of them, for example `--profile collabora`.
|
||||
The default profile of `latest.yml` only provide the minimum necessary services: nextcloud, database, redis and apache. To get optional services collabora, onlyoffice, talk, clamav, imaginary or fulltextsearch use additional arguments for each of them, for example `--profile collabora`. (Note: there is no clamav image for arm64).
|
||||
|
||||
For a complete all-in-one with collabora use `sudo docker-compose --profile collabora --profile talk --profile clamav --profile imaginary --profile fulltextsearch up`.
|
||||
For a complete all-in-one with collabora use `sudo docker-compose --profile collabora --profile talk --profile clamav --profile imaginary --profile fulltextsearch up`. (Note: there is no clamav image for arm64).
|
||||
|
||||
## How to update?
|
||||
Since the AIO containers may change in the future, it is highly recommended to strictly follow the following procedure whenever you want to upgrade your containers.
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
IMAGE_TAG=latest # Version of docker images, should be latest or latest-arm64. Note: latest-arm64 has no clamav support
|
||||
AIO_TOKEN=123456 # Has no function but needs to be set!
|
||||
AIO_URL=localhost # Has no function but needs to be set!
|
||||
APACHE_IP_BINDING=0.0.0.0 # This can be changed to e.g. 127.0.0.1 if you want to run AIO behind a reverse proxy and if that is running on the same host and using localhost to connect
|
||||
APACHE_IP_BINDING=0.0.0.0 # This can be changed to e.g. 127.0.0.1 if you want to run AIO behind a web server or reverse proxy (like Apache, Nginx and else) and if that is running on the same host and using localhost to connect
|
||||
APACHE_MAX_SIZE=10737418240 # This needs to be an integer and in sync with NEXTCLOUD_UPLOAD_LIMIT
|
||||
APACHE_PORT=443 # Changing this to a different value than 443 will allow you to run it behind a reverse proxy.
|
||||
CLAMAV_ENABLED=no # Setting this to "yes" enables the option in Nextcloud automatically. Note: latest-arm64 has no clamav support
|
||||
APACHE_PORT=443 # Changing this to a different value than 443 will allow you to run it behind a web server or reverse proxy (like Apache, Nginx and else).
|
||||
CLAMAV_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
COLLABORA_DICTIONARIES="de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru" # You can change this in order to enable other dictionaries for collabora
|
||||
COLLABORA_ENABLED=yes # Setting this to "yes" enables the option in Nextcloud automatically.
|
||||
COLLABORA_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
COLLABORA_SECCOMP_POLICY=--o:security.seccomp=true # Changing the value to false allows to disable the seccomp feature of the Collabora container.
|
||||
DATABASE_PASSWORD= # TODO! This needs to be a unique and good password!
|
||||
FULLTEXTSEARCH_ENABLED=no # Setting this to "yes" enables the option in Nextcloud automatically.
|
||||
IMAGINARY_ENABLED=no # Setting this to "yes" enables the option in Nextcloud automatically.
|
||||
JANUS_API_KEY= # TODO! This needs to be a unique and good password!
|
||||
FULLTEXTSEARCH_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
IMAGINARY_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
INSTALL_LATEST_MAJOR=no # Setting this to yes will install the latest Major Nextcloud version upon the first installation
|
||||
NC_DOMAIN=yourdomain.com # TODO! Needs to be changed to the domain that you want to use for Nextcloud.
|
||||
NEXTCLOUD_ADDITIONAL_APKS=imagemagick # This allows to add additional packages to the Nextcloud container permanently. Default is imagemagick but can be overwritten by modifying this value.
|
||||
NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS=imagick # This allows to add additional php extensions to the Nextcloud container permanently. Default is imagick but can be overwritten by modifying this value.
|
||||
@@ -23,12 +22,12 @@ NEXTCLOUD_PASSWORD= # TODO! This is the password of the initially creat
|
||||
NEXTCLOUD_STARTUP_APPS="deck twofactor_totp tasks calendar contacts" # Allows to modify the Nextcloud apps that are installed on starting AIO the first time
|
||||
NEXTCLOUD_TRUSTED_CACERTS_DIR=/usr/local/share/ca-certificates/my-custom-ca # Nextcloud container will trust all the Certification Authorities, whose certificates are included in the given directory.
|
||||
NEXTCLOUD_UPLOAD_LIMIT=10G # This allows to change the upload limit of the Nextcloud container
|
||||
ONLYOFFICE_ENABLED=no # Setting this to "yes" enables the option in Nextcloud automatically.
|
||||
ONLYOFFICE_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
ONLYOFFICE_SECRET= # TODO! This needs to be a unique and good password!
|
||||
REDIS_PASSWORD= # TODO! This needs to be a unique and good password!
|
||||
SIGNALING_SECRET= # TODO! This needs to be a unique and good password!
|
||||
TALK_ENABLED=yes # Setting this to "yes" enables the option in Nextcloud automatically.
|
||||
TALK_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
TALK_PORT=3478 # This allows to adjust the port that the talk container is using.
|
||||
TIMEZONE=Europe/Berlin # TODO! This is the timezone that your containers will use.
|
||||
TURN_SECRET= # TODO! This needs to be a unique and good password!
|
||||
UPDATE_NEXTCLOUD_APPS=no # When setting to yes, it will automatically update all installed Nextcloud apps upon container startup on saturdays.
|
||||
UPDATE_NEXTCLOUD_APPS="no" # When setting to "yes" (with quotes), it will automatically update all installed Nextcloud apps upon container startup on saturdays.
|
||||
|
||||
@@ -48,7 +48,6 @@ do
|
||||
done
|
||||
|
||||
rm -f sample.conf
|
||||
echo 'IMAGE_TAG=latest # Version of docker images, should be latest or latest-arm64. Note: latest-arm64 has no clamav support' >> sample.conf
|
||||
VARIABLES="$(grep -oP '%[A-Z_a-z0-6]+%' containers.yml | sort -u)"
|
||||
mapfile -t VARIABLES <<< "$VARIABLES"
|
||||
for variable in "${VARIABLES[@]}"
|
||||
@@ -59,8 +58,8 @@ do
|
||||
sed -i "s|$variable|\${$sole_variable}|g" containers.yml
|
||||
done
|
||||
|
||||
sed -i 's|_ENABLED=|_ENABLED=no # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.|' sample.conf
|
||||
sed -i 's|CLAMAV_ENABLED=no.*|CLAMAV_ENABLED=no # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically. Note: latest-arm64 has no clamav support|' sample.conf
|
||||
sed -i 's|_ENABLED=|_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.|' sample.conf
|
||||
sed -i 's|CLAMAV_ENABLED=no.*|CLAMAV_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically. Note: arm64 has no clamav support|' sample.conf
|
||||
sed -i 's|TALK_ENABLED=no|TALK_ENABLED="yes"|' sample.conf
|
||||
sed -i 's|COLLABORA_ENABLED=no|COLLABORA_ENABLED="yes"|' sample.conf
|
||||
sed -i 's|COLLABORA_DICTIONARIES=|COLLABORA_DICTIONARIES="de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru" # You can change this in order to enable other dictionaries for collabora|' sample.conf
|
||||
@@ -71,9 +70,9 @@ sed -i 's|NEXTCLOUD_MEMORY_LIMIT=|NEXTCLOUD_MEMORY_LIMIT=512M # This al
|
||||
sed -i 's|APACHE_MAX_SIZE=|APACHE_MAX_SIZE=10737418240 # This needs to be an integer and in sync with NEXTCLOUD_UPLOAD_LIMIT|' sample.conf
|
||||
sed -i 's|NEXTCLOUD_MAX_TIME=|NEXTCLOUD_MAX_TIME=3600 # This allows to change the upload time limit of the Nextcloud container|' sample.conf
|
||||
sed -i 's|NEXTCLOUD_TRUSTED_CACERTS_DIR=|NEXTCLOUD_TRUSTED_CACERTS_DIR=/usr/local/share/ca-certificates/my-custom-ca # Nextcloud container will trust all the Certification Authorities, whose certificates are included in the given directory.|' sample.conf
|
||||
sed -i 's|UPDATE_NEXTCLOUD_APPS=|UPDATE_NEXTCLOUD_APPS=no # When setting to "yes" (with quotes), it will automatically update all installed Nextcloud apps upon container startup on saturdays.|' sample.conf
|
||||
sed -i 's|APACHE_PORT=|APACHE_PORT=443 # Changing this to a different value than 443 will allow you to run it behind a reverse proxy.|' sample.conf
|
||||
sed -i 's|APACHE_IP_BINDING=|APACHE_IP_BINDING=0.0.0.0 # This can be changed to e.g. 127.0.0.1 if you want to run AIO behind a reverse proxy and if that is running on the same host and using localhost to connect|' sample.conf
|
||||
sed -i 's|UPDATE_NEXTCLOUD_APPS=|UPDATE_NEXTCLOUD_APPS="no" # When setting to "yes" (with quotes), it will automatically update all installed Nextcloud apps upon container startup on saturdays.|' sample.conf
|
||||
sed -i 's|APACHE_PORT=|APACHE_PORT=443 # Changing this to a different value than 443 will allow you to run it behind a web server or reverse proxy (like Apache, Nginx and else).|' sample.conf
|
||||
sed -i 's|APACHE_IP_BINDING=|APACHE_IP_BINDING=0.0.0.0 # This can be changed to e.g. 127.0.0.1 if you want to run AIO behind a web server or reverse proxy (like Apache, Nginx and else) and if that is running on the same host and using localhost to connect|' sample.conf
|
||||
sed -i 's|TALK_PORT=|TALK_PORT=3478 # This allows to adjust the port that the talk container is using.|' sample.conf
|
||||
sed -i 's|AIO_TOKEN=|AIO_TOKEN=123456 # Has no function but needs to be set!|' sample.conf
|
||||
sed -i 's|AIO_URL=|AIO_URL=localhost # Has no function but needs to be set!|' sample.conf
|
||||
@@ -84,6 +83,7 @@ sed -i 's|COLLABORA_SECCOMP_POLICY=|COLLABORA_SECCOMP_POLICY=--o:security.seccom
|
||||
sed -i 's|NEXTCLOUD_STARTUP_APPS=|NEXTCLOUD_STARTUP_APPS="deck twofactor_totp tasks calendar contacts" # Allows to modify the Nextcloud apps that are installed on starting AIO the first time|' sample.conf
|
||||
sed -i 's|NEXTCLOUD_ADDITIONAL_APKS=|NEXTCLOUD_ADDITIONAL_APKS=imagemagick # This allows to add additional packages to the Nextcloud container permanently. Default is imagemagick but can be overwritten by modifying this value.|' sample.conf
|
||||
sed -i 's|NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS=|NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS=imagick # This allows to add additional php extensions to the Nextcloud container permanently. Default is imagick but can be overwritten by modifying this value.|' sample.conf
|
||||
sed -i 's|INSTALL_LATEST_MAJOR=|INSTALL_LATEST_MAJOR=no # Setting this to yes will install the latest Major Nextcloud version upon the first installation|' sample.conf
|
||||
sed -i 's|=$|= # TODO! This needs to be a unique and good password!|' sample.conf
|
||||
|
||||
cat sample.conf
|
||||
@@ -133,7 +133,7 @@ networks:
|
||||
NETWORK
|
||||
|
||||
cat containers.yml > latest.yml
|
||||
sed -i "/image:/s/$/:\${IMAGE_TAG}/" latest.yml
|
||||
sed -i "/image:/s/$/:latest/" latest.yml
|
||||
|
||||
rm containers.yml
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ The only way to fix this on your side is upgrading regularly (e.g. by enabling d
|
||||
sudo docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike -p nextcloud-aio-nextcloud >> /tmp/nextcloud-aio-nextcloud
|
||||
sudo chown root:root /tmp/nextcloud-aio-nextcloud
|
||||
```
|
||||
1. Now open the file with e.g. nano: `sudo nano /tmp/nextcloud-aio-nextcloud` and change the line that should probably be `nextcloud/aio-nextcloud:latest` on x64 or `nextcloud/aio-nextcloud:latest-arm64` on arm64 to the highest compatible PHP version: E.g. `nextcloud/aio-nextcloud:php8.0-latest` on x64 or `nextcloud/aio-nextcloud:php8.0-latest-arm64` on arm64. Then save the file and close it with `[Ctrl]+[o]` -> `[Enter]` and `[Ctrl]+[x]`.
|
||||
1. Now open the file with e.g. nano: `sudo nano /tmp/nextcloud-aio-nextcloud` and change the line that should probably be `nextcloud/aio-nextcloud:latest` on x64 or `nextcloud/aio-nextcloud:latest-arm64` on arm64 to the highest compatible PHP version: E.g. `nextcloud/aio-nextcloud:php8.0-latest`. Then save the file and close it with `[Ctrl]+[o]` -> `[Enter]` and `[Ctrl]+[x]`.
|
||||
1. After doing so, remove the Nextcloud container with `sudo docker rm nextcloud-aio-nextcloud`.
|
||||
1. Now start the Nextcloud container with the new tag by simply running `sudo bash /tmp/nextcloud-aio-nextcloud` which at startup should automatically upgrade Nextcloud to a more recent version. If not, make sure that there is no `skip.update` file in the Nextcloud datadir. If there is such a file, simply delete the file and restart the container again.<br>
|
||||
**Info**: You can open the Nextcloud container logs with `sudo docker logs -f nextcloud-aio-nextcloud`.
|
||||
|
||||
@@ -15,12 +15,12 @@ The procedure for migrating only the files works like this:
|
||||
1. Recreate all users that were present on your former installation
|
||||
1. Take a backup using Nextcloud AIO's built-in backup solution (so that you can easily restore to this state again) (Note: this will stop all containers and is expected: don't start the container again at this point!)
|
||||
1. Restore the datadirectory of your former instance: for `/path/to/nextcloud/data/` run `sudo docker cp --follow-link /path/to/nextcloud/data/ nextcloud-aio-nextcloud:/mnt/ncdata/` Note: the `/` at the end are necessary.
|
||||
1. Next, run `sudo docker run --rm --volume nextcloud_aio_nextcloud_data:/mnt/ncdata:rw alpine chown -R 33:0 /mnt/ncdata/"` and `sudo docker run --rm --volume nextcloud_aio_nextcloud_data:/mnt/ncdata:rw alpine chmod -R 750 /mnt/ncdata/` to apply the correct permissions. (Or if `NEXTCLOUD_DATADIR` was provided, apply `chown -R 33:0` and `chmod -R 750` to the chosen path.)
|
||||
1. Next, run `sudo docker run --rm --volume nextcloud_aio_nextcloud_data:/mnt/ncdata:rw alpine chown -R 33:0 /mnt/ncdata/` and `sudo docker run --rm --volume nextcloud_aio_nextcloud_data:/mnt/ncdata:rw alpine chmod -R 750 /mnt/ncdata/` to apply the correct permissions. (Or if `NEXTCLOUD_DATADIR` was provided, apply `chown -R 33:0` and `chmod -R 750` to the chosen path.)
|
||||
1. Start the containers again and wait until all containers are running
|
||||
1. Run `sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ files:scan-app-data && sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ files:scan --all` in order to scan all files in the datadirectory.
|
||||
|
||||
## Migrate the files and the database
|
||||
**Please note**: this is much more complicated than migrating only the files and also not as failproof so be warned! Also, this will not work on former snap installations as the snap is read-only and thus you cannot install the necessary `pdo_pgsql` PHP extension.
|
||||
**Please note**: this is much more complicated than migrating only the files and also not as failproof so be warned! Also, this will not work on former snap installations as the snap is read-only and thus you cannot install the necessary `pdo_pgsql` PHP extension. So if migrating from snap, you will need to use one of the other methods. However you could try to ask if the snaps maintainer could add this one small PHP extension to the snap here: https://github.com/nextcloud-snap/nextcloud-snap/issues which would allow for an easy migration.
|
||||
|
||||
The procedure for migrating the files and the database works like this:
|
||||
1. Make sure that your old instance is on exactly the same version like the version used in Nextcloud AIO. (e.g. 23.0.0) You can find the used version here: [click here](https://github.com/nextcloud/all-in-one/search?l=Dockerfile&q=NEXTCLOUD_VERSION&type=). If not, simply upgrade your former installation to that version or wait until the version used in Nextcloud AIO got updated to the same version of your former installation or the other way around.
|
||||
@@ -36,8 +36,10 @@ The procedure for migrating the files and the database works like this:
|
||||
export PG_PASSWORD="my-temporary-password"
|
||||
export PG_DATABASE="nextcloud_db"
|
||||
sudo -u postgres psql <<END
|
||||
CREATE USER $PG_USER WITH PASSWORD '$PG_PASSWORD';
|
||||
CREATE USER $PG_USER WITH PASSWORD '$PG_PASSWORD' CREATEDB;
|
||||
CREATE DATABASE $PG_DATABASE WITH OWNER $PG_USER TEMPLATE template0 ENCODING 'UTF8';
|
||||
GRANT ALL PRIVILEGES ON DATABASE $PG_DATABASE TO $PG_USER;
|
||||
GRANT ALL PRIVILEGES ON SCHEMA public TO $PG_USER;
|
||||
END
|
||||
```
|
||||
1. Run the following command to start the conversion:
|
||||
|
||||
13
nextcloud-aio-helm-chart/Chart.yaml
Executable file
13
nextcloud-aio-helm-chart/Chart.yaml
Executable file
@@ -0,0 +1,13 @@
|
||||
name: nextcloud-aio-helm-chart
|
||||
description: A generated Helm Chart for Nextcloud AIO from Skippbox Kompose
|
||||
version: 4.8.1
|
||||
apiVersion: v2
|
||||
keywords:
|
||||
- latest
|
||||
- nextcloud
|
||||
- helm-chart
|
||||
- open-source
|
||||
- cloud
|
||||
sources:
|
||||
- https://github.com/nextcloud/all-in-one/tree/main/nextcloud-aio-helm-chart
|
||||
home: https://github.com/nextcloud/all-in-one/tree/main/nextcloud-aio-helm-chart
|
||||
14
nextcloud-aio-helm-chart/readme.md
Executable file
14
nextcloud-aio-helm-chart/readme.md
Executable file
@@ -0,0 +1,14 @@
|
||||
# You can also install the AIO containers on Kubernetes using this Helm Chart
|
||||
|
||||
This is currently beta and not ready yet.
|
||||
|
||||
## How to use this?
|
||||
|
||||
First download this file: https://raw.githubusercontent.com/nextcloud/all-in-one/main/nextcloud-aio-helm-chart/values.yaml and adjust at least all values marked with `# TODO!`
|
||||
|
||||
Then run:
|
||||
|
||||
```
|
||||
helm repo add nextcloud-aio https://nextcloud.github.io/all-in-one/
|
||||
helm install my-release nextcloud-aio/nextcloud-aio-helm-chart -f values.yaml
|
||||
```
|
||||
@@ -54,11 +54,10 @@ spec:
|
||||
value: nextcloud-aio-talk
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-apache:20230124_100035-{{ .Values.IMAGE_TAG }}
|
||||
image: nextcloud/aio-apache:20230414_123705-latest
|
||||
name: nextcloud-aio-apache
|
||||
ports:
|
||||
- containerPort: {{ .Values.APACHE_PORT }}
|
||||
hostIP: {{ .Values.APACHE_IP_BINDING }}
|
||||
volumeMounts:
|
||||
- mountPath: /var/www/html
|
||||
name: nextcloud-aio-nextcloud
|
||||
@@ -8,6 +8,7 @@ metadata:
|
||||
io.kompose.service: nextcloud-aio-apache
|
||||
name: nextcloud-aio-apache
|
||||
spec:
|
||||
type: LoadBalancer
|
||||
ports:
|
||||
- name: "{{ .Values.APACHE_PORT }}"
|
||||
port: {{ .Values.APACHE_PORT }}
|
||||
@@ -38,7 +38,7 @@ spec:
|
||||
value: "90"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-clamav:20230124_100035-{{ .Values.IMAGE_TAG }}
|
||||
image: nextcloud/aio-clamav:20230414_123705-latest
|
||||
name: nextcloud-aio-clamav
|
||||
ports:
|
||||
- containerPort: 3310
|
||||
0
helm-chart/templates/nextcloud-aio-clamav-service.yaml → nextcloud-aio-helm-chart/templates/nextcloud-aio-clamav-service.yaml
Normal file → Executable file
0
helm-chart/templates/nextcloud-aio-clamav-service.yaml → nextcloud-aio-helm-chart/templates/nextcloud-aio-clamav-service.yaml
Normal file → Executable file
@@ -41,8 +41,10 @@ spec:
|
||||
- name: dictionaries
|
||||
value: "{{ .Values.COLLABORA_DICTIONARIES }}"
|
||||
- name: extra_params
|
||||
value: --o:ssl.enable=false --o:ssl.termination=true --o:logging.level=warning --o:home_mode.enable=true {{ .Values.COLLABORA_SECCOMP_POLICY }} --o:remote_font_config.url=https://{{ .Values.NC_DOMAIN }}/apps/richdocuments/settings/fonts.json
|
||||
image: nextcloud/aio-collabora:20230124_100035-{{ .Values.IMAGE_TAG }}
|
||||
value: --o:ssl.enable=false --o:ssl.termination=true --o:mount_jail_tree=false --o:logging.level=warning --o:home_mode.enable=true {{ .Values.COLLABORA_SECCOMP_POLICY }} --o:remote_font_config.url=https://{{ .Values.NC_DOMAIN }}/apps/richdocuments/settings/fonts.json
|
||||
- name: server_name
|
||||
value: "{{ .Values.NC_DOMAIN }}"
|
||||
image: nextcloud/aio-collabora:20230414_123705-latest
|
||||
name: nextcloud-aio-collabora
|
||||
ports:
|
||||
- containerPort: 9980
|
||||
@@ -46,7 +46,7 @@ spec:
|
||||
value: nextcloud
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-postgresql:20230124_100035-{{ .Values.IMAGE_TAG }}
|
||||
image: nextcloud/aio-postgresql:20230414_123705-latest
|
||||
name: nextcloud-aio-database
|
||||
ports:
|
||||
- containerPort: 5432
|
||||
@@ -36,11 +36,13 @@ spec:
|
||||
- env:
|
||||
- name: ES_JAVA_OPTS
|
||||
value: -Xms1024M -Xmx1024M
|
||||
- name: POSTGRES_HOST
|
||||
value: nextcloud-aio-database
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
- name: discovery.type
|
||||
value: single-node
|
||||
image: nextcloud/aio-fulltextsearch:20230124_100035-{{ .Values.IMAGE_TAG }}
|
||||
image: nextcloud/aio-fulltextsearch:20230414_123705-latest
|
||||
name: nextcloud-aio-fulltextsearch
|
||||
ports:
|
||||
- containerPort: 9200
|
||||
@@ -26,8 +26,12 @@ spec:
|
||||
- env:
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-imaginary:20230124_100035-{{ .Values.IMAGE_TAG }}
|
||||
image: nextcloud/aio-imaginary:20230414_123705-latest
|
||||
name: nextcloud-aio-imaginary
|
||||
ports:
|
||||
- containerPort: 9000
|
||||
securityContext:
|
||||
capabilities:
|
||||
add:
|
||||
- SYS_NICE
|
||||
{{- end }}
|
||||
@@ -28,13 +28,10 @@ spec:
|
||||
- chmod
|
||||
- "777"
|
||||
- /nextcloud-aio-nextcloud
|
||||
- /nextcloud-aio-nextcloud-data
|
||||
- /nextcloud-aio-nextcloud-trusted-cacerts
|
||||
volumeMounts:
|
||||
- name: nextcloud-aio-nextcloud-trusted-cacerts
|
||||
mountPath: /nextcloud-aio-nextcloud-trusted-cacerts
|
||||
- name: nextcloud-aio-nextcloud-data
|
||||
mountPath: /nextcloud-aio-nextcloud-data
|
||||
- name: nextcloud-aio-nextcloud
|
||||
mountPath: /nextcloud-aio-nextcloud
|
||||
containers:
|
||||
@@ -67,6 +64,8 @@ spec:
|
||||
value: "{{ .Values.IMAGINARY_ENABLED }}"
|
||||
- name: IMAGINARY_HOST
|
||||
value: nextcloud-aio-imaginary
|
||||
- name: INSTALL_LATEST_MAJOR
|
||||
value: "{{ .Values.INSTALL_LATEST_MAJOR }}"
|
||||
- name: NC_DOMAIN
|
||||
value: "{{ .Values.NC_DOMAIN }}"
|
||||
- name: NEXTCLOUD_DATA_DIR
|
||||
@@ -115,7 +114,7 @@ spec:
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
- name: UPDATE_NEXTCLOUD_APPS
|
||||
value: "{{ .Values.UPDATE_NEXTCLOUD_APPS }}"
|
||||
image: nextcloud/aio-nextcloud:20230124_100035-{{ .Values.IMAGE_TAG }}
|
||||
image: nextcloud/aio-nextcloud:20230414_123705-latest
|
||||
name: nextcloud-aio-nextcloud
|
||||
ports:
|
||||
- containerPort: 9000
|
||||
@@ -42,7 +42,7 @@ spec:
|
||||
value: "{{ .Values.ONLYOFFICE_SECRET }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-onlyoffice:20230124_100035-{{ .Values.IMAGE_TAG }}
|
||||
image: nextcloud/aio-onlyoffice:20230414_123705-latest
|
||||
name: nextcloud-aio-onlyoffice
|
||||
ports:
|
||||
- containerPort: 80
|
||||
@@ -37,7 +37,7 @@ spec:
|
||||
value: "{{ .Values.REDIS_PASSWORD }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-redis:20230124_100035-{{ .Values.IMAGE_TAG }}
|
||||
image: nextcloud/aio-redis:20230414_123705-latest
|
||||
name: nextcloud-aio-redis
|
||||
ports:
|
||||
- containerPort: 6379
|
||||
0
helm-chart/templates/nextcloud-aio-redis-service.yaml → nextcloud-aio-helm-chart/templates/nextcloud-aio-redis-service.yaml
Normal file → Executable file
0
helm-chart/templates/nextcloud-aio-redis-service.yaml → nextcloud-aio-helm-chart/templates/nextcloud-aio-redis-service.yaml
Normal file → Executable file
@@ -24,8 +24,6 @@ spec:
|
||||
spec:
|
||||
containers:
|
||||
- env:
|
||||
- name: JANUS_API_KEY
|
||||
value: "{{ .Values.JANUS_API_KEY }}"
|
||||
- name: NC_DOMAIN
|
||||
value: "{{ .Values.NC_DOMAIN }}"
|
||||
- name: SIGNALING_SECRET
|
||||
@@ -36,10 +34,11 @@ spec:
|
||||
value: "{{ .Values.TURN_SECRET }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-talk:20230124_100035-{{ .Values.IMAGE_TAG }}
|
||||
image: nextcloud/aio-talk:20230414_123705-latest
|
||||
name: nextcloud-aio-talk
|
||||
ports:
|
||||
- containerPort: {{ .Values.TALK_PORT }}
|
||||
- containerPort: {{ .Values.TALK_PORT }}
|
||||
protocol: UDP
|
||||
- containerPort: 8081
|
||||
{{- end }}
|
||||
@@ -1,4 +1,27 @@
|
||||
{{- if eq .Values.TALK_ENABLED "yes" }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.cmd: kompose convert -c -f latest.yml
|
||||
kompose.version: 1.28.0 (c4137012e)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-talk
|
||||
name: nextcloud-aio-talk-public
|
||||
spec:
|
||||
type: LoadBalancer
|
||||
ports:
|
||||
- name: "{{ .Values.TALK_PORT }}"
|
||||
port: {{ .Values.TALK_PORT }}
|
||||
targetPort: {{ .Values.TALK_PORT }}
|
||||
- name: {{ .Values.TALK_PORT }}-udp
|
||||
port: {{ .Values.TALK_PORT }}
|
||||
protocol: UDP
|
||||
targetPort: {{ .Values.TALK_PORT }}
|
||||
selector:
|
||||
io.kompose.service: nextcloud-aio-talk
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
@@ -10,13 +33,9 @@ metadata:
|
||||
name: nextcloud-aio-talk
|
||||
spec:
|
||||
ports:
|
||||
- name: "{{ .Values.TALK_PORT }}"
|
||||
port: {{ .Values.TALK_PORT }}
|
||||
targetPort: {{ .Values.TALK_PORT }}
|
||||
- name: {{ .Values.TALK_PORT }}-udp
|
||||
port: {{ .Values.TALK_PORT }}
|
||||
protocol: UDP
|
||||
targetPort: {{ .Values.TALK_PORT }}
|
||||
- name: "8081"
|
||||
port: 8081
|
||||
targetPort: 8081
|
||||
selector:
|
||||
io.kompose.service: nextcloud-aio-talk
|
||||
{{- end }}
|
||||
@@ -2,6 +2,9 @@
|
||||
|
||||
DOCKER_TAG="$1"
|
||||
|
||||
# The logic needs the files in ./helm-chart
|
||||
mv ./nextcloud-aio-helm-chart ./helm-chart
|
||||
|
||||
# Clean
|
||||
rm -f ./helm-chart/values.yaml
|
||||
rm -rf ./helm-chart/templates
|
||||
@@ -22,8 +25,8 @@ sed -i 's|^|export |' /tmp/sample.conf
|
||||
# shellcheck disable=SC1091
|
||||
source /tmp/sample.conf
|
||||
rm /tmp/sample.conf
|
||||
sed -i "s|\${IMAGE_TAG}|$DOCKER_TAG\${IMAGE_TAG}|" latest.yml
|
||||
sed -i "s|\${APACHE_IP_BINDING}|$APACHE_IP_BINDING|" latest.yml
|
||||
sed -i "s|:latest$|:$DOCKER_TAG-latest|" latest.yml
|
||||
sed -i "s|\${APACHE_IP_BINDING}:||" latest.yml
|
||||
sed -i "s|\${APACHE_PORT}:\${APACHE_PORT}/|$APACHE_PORT:$APACHE_PORT/|" latest.yml
|
||||
sed -i "s|\${TALK_PORT}:\${TALK_PORT}/|$TALK_PORT:$TALK_PORT/|g" latest.yml
|
||||
sed -i "s|- \${APACHE_PORT}|- $APACHE_PORT|" latest.yml
|
||||
@@ -73,8 +76,11 @@ for variable in "${DEPLOYMENTS[@]}"; do
|
||||
volumeNames="$(grep -A1 mountPath "$variable" | grep -v mountPath | sed 's|.*name: ||' | sed '/^--$/d')"
|
||||
mapfile -t volumeNames <<< "$volumeNames"
|
||||
for volumeName in "${volumeNames[@]}"; do
|
||||
sed -i "/^.*volumeMountsInitContainer:/i\ \ \ \ \ \ \ \ \ \ \ \ - /$volumeName" "$variable"
|
||||
sed -i "/volumeMountsInitContainer:/a\ \ \ \ \ \ \ \ \ \ \ \ - name: $volumeName\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ mountPath: /$volumeName" "$variable"
|
||||
# The Nextcloud container runs as root user and sets the correct permissions automatically for the data-dir if the www-data user cannot write to it
|
||||
if [ "$volumeName" != "nextcloud-aio-nextcloud-data" ]; then
|
||||
sed -i "/^.*volumeMountsInitContainer:/i\ \ \ \ \ \ \ \ \ \ \ \ - /$volumeName" "$variable"
|
||||
sed -i "/volumeMountsInitContainer:/a\ \ \ \ \ \ \ \ \ \ \ \ - name: $volumeName\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ mountPath: /$volumeName" "$variable"
|
||||
fi
|
||||
done
|
||||
sed -i "s|volumeMountsInitContainer|volumeMounts|" "$variable"
|
||||
if grep -q claimName "$variable"; then
|
||||
@@ -101,13 +107,31 @@ find ./ -name '*persistentvolumeclaim.yaml' -exec sed -i "/accessModes:/i\ \ sto
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*persistentvolumeclaim.yaml' -exec sed -i "/accessModes:/i\ \ {{- end }}" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*deployment.yaml' -exec sed -i "/restartPolicy:/d" \{} \;
|
||||
find ./ -name '*deployment.yaml' -exec sed -i "/restartPolicy:/d" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*apache*' -exec sed -i "s|$APACHE_IP_BINDING|{{ .Values.APACHE_IP_BINDING }}|" \{} \;
|
||||
find ./ -name '*apache*' -exec sed -i "s|$APACHE_PORT|{{ .Values.APACHE_PORT }}|" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*apache*' -exec sed -i "s|$APACHE_PORT|{{ .Values.APACHE_PORT }}|" \{} \;
|
||||
find ./ -name '*talk*' -exec sed -i "s|$TALK_PORT|{{ .Values.TALK_PORT }}|" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*talk*' -exec sed -i "s|$TALK_PORT|{{ .Values.TALK_PORT }}|" \{} \;
|
||||
find ./ -name '*apache-service.yaml' -exec sed -i "/^spec:/a\ \ type: LoadBalancer" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*talk-service.yaml' -exec sed -i "/^spec:/a\ \ type: LoadBalancer" \{} \;
|
||||
echo '---' > /tmp/talk-service.copy
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*talk-service.yaml' -exec cat \{} \; >> /tmp/talk-service.copy
|
||||
sed -i 's|name: nextcloud-aio-talk|name: nextcloud-aio-talk-public|' /tmp/talk-service.copy
|
||||
# shellcheck disable=SC1083
|
||||
INTERNAL_TALK_PORTS="$(find ./ -name '*talk-deployment.yaml' -exec grep -oP 'containerPort: [0-9]+' \{} \;)"
|
||||
mapfile -t INTERNAL_TALK_PORTS <<< "$INTERNAL_TALK_PORTS"
|
||||
for port in "${INTERNAL_TALK_PORTS[@]}"; do
|
||||
port="$(echo "$port" | grep -oP '[0-9]+')"
|
||||
sed -i "/$port/d" /tmp/talk-service.copy
|
||||
done
|
||||
echo '---' >> /tmp/talk-service.copy
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*talk-service.yaml' -exec grep -v '{{ .Values.*}}\|protocol: UDP\|type: LoadBalancer' \{} \; >> /tmp/talk-service.copy
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*talk-service.yaml' -exec mv /tmp/talk-service.copy \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*.yaml' -exec sed -i "s|'{{|\"{{|g;s|}}'|}}\"|g" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
@@ -120,7 +144,7 @@ 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 '*.yaml' -exec sed -i "/creationTimestamp: null/d" \{} \;
|
||||
VOLUMES="$(find ./ -name '*persistentvolumeclaim.yaml' | sed 's|-persistentvolumeclaim.yaml||g;s|.*nextcloud-aio-||g')"
|
||||
VOLUMES="$(find ./ -name '*persistentvolumeclaim.yaml' | sed 's|-persistentvolumeclaim.yaml||g;s|.*nextcloud-aio-||g' | sort)"
|
||||
mapfile -t VOLUMES <<< "$VOLUMES"
|
||||
for variable in "${VOLUMES[@]}"; do
|
||||
name="$(echo "$variable" | sed 's|-|_|g' | tr '[:lower:]' '[:upper:]')_STORAGE_SIZE"
|
||||
@@ -148,8 +172,10 @@ sed -i 's|"||g' /tmp/sample.conf
|
||||
sed -i 's|=|: |' /tmp/sample.conf
|
||||
sed -i 's|= |: |' /tmp/sample.conf
|
||||
sed -i '/^NEXTCLOUD_DATADIR/d' /tmp/sample.conf
|
||||
sed -i '/^APACHE_IP_BINDING/d' /tmp/sample.conf
|
||||
sed -i '/^NEXTCLOUD_MOUNT/d' /tmp/sample.conf
|
||||
sed -i '/_ENABLED.*/s/ yes / "yes" /' /tmp/sample.conf
|
||||
sed -i '/_ENABLED.*/s/ no / "no" /' /tmp/sample.conf
|
||||
sed -i 's|^NEXTCLOUD_TRUSTED_CACERTS_DIR: .*|NEXTCLOUD_TRUSTED_CACERTS_DIR: # Setting this to any value allows to automatically import root certificates into the Nextcloud container|' /tmp/sample.conf
|
||||
# shellcheck disable=SC2129
|
||||
echo 'STORAGE_CLASS: # By setting this, you can adjust the storage class for your volumes' >> /tmp/sample.conf
|
||||
@@ -176,4 +202,9 @@ done
|
||||
|
||||
chmod 777 -R ./
|
||||
|
||||
# Seems like the dir needs to match the name of the chart
|
||||
cd ../
|
||||
rm -rf ./nextcloud-aio-helm-chart
|
||||
mv ./helm-chart ./nextcloud-aio-helm-chart
|
||||
|
||||
set +ex
|
||||
@@ -1,17 +1,15 @@
|
||||
IMAGE_TAG: latest # Version of docker images, should be latest or latest-arm64. Note: latest-arm64 has no clamav support
|
||||
AIO_TOKEN: 123456 # Has no function but needs to be set!
|
||||
AIO_URL: localhost # Has no function but needs to be set!
|
||||
APACHE_IP_BINDING: 0.0.0.0 # This can be changed to e.g. 127.0.0.1 if you want to run AIO behind a reverse proxy and if that is running on the same host and using localhost to connect
|
||||
APACHE_MAX_SIZE: 10737418240 # This needs to be an integer and in sync with NEXTCLOUD_UPLOAD_LIMIT
|
||||
APACHE_PORT: 443 # Changing this to a different value than 443 will allow you to run it behind a reverse proxy.
|
||||
CLAMAV_ENABLED: no # Setting this to yes enables the option in Nextcloud automatically. Note: latest-arm64 has no clamav support
|
||||
APACHE_PORT: 443 # Changing this to a different value than 443 will allow you to run it behind a web server or reverse proxy (like Apache, Nginx and else).
|
||||
CLAMAV_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
COLLABORA_DICTIONARIES: de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru # You can change this in order to enable other dictionaries for collabora
|
||||
COLLABORA_ENABLED: yes # Setting this to yes enables the option in Nextcloud automatically.
|
||||
COLLABORA_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
COLLABORA_SECCOMP_POLICY: --o:security.seccomp=true # Changing the value to false allows to disable the seccomp feature of the Collabora container.
|
||||
DATABASE_PASSWORD: # TODO! This needs to be a unique and good password!
|
||||
FULLTEXTSEARCH_ENABLED: no # Setting this to yes enables the option in Nextcloud automatically.
|
||||
IMAGINARY_ENABLED: no # Setting this to yes enables the option in Nextcloud automatically.
|
||||
JANUS_API_KEY: # TODO! This needs to be a unique and good password!
|
||||
FULLTEXTSEARCH_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
IMAGINARY_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
INSTALL_LATEST_MAJOR: no # Setting this to yes will install the latest Major Nextcloud version upon the first installation
|
||||
NC_DOMAIN: yourdomain.com # TODO! Needs to be changed to the domain that you want to use for Nextcloud.
|
||||
NEXTCLOUD_ADDITIONAL_APKS: imagemagick # This allows to add additional packages to the Nextcloud container permanently. Default is imagemagick but can be overwritten by modifying this value.
|
||||
NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS: imagick # This allows to add additional php extensions to the Nextcloud container permanently. Default is imagick but can be overwritten by modifying this value.
|
||||
@@ -21,24 +19,24 @@ NEXTCLOUD_PASSWORD: # TODO! This is the password of the initially crea
|
||||
NEXTCLOUD_STARTUP_APPS: deck twofactor_totp tasks calendar contacts # Allows to modify the Nextcloud apps that are installed on starting AIO the first time
|
||||
NEXTCLOUD_TRUSTED_CACERTS_DIR: # Setting this to any value allows to automatically import root certificates into the Nextcloud container
|
||||
NEXTCLOUD_UPLOAD_LIMIT: 10G # This allows to change the upload limit of the Nextcloud container
|
||||
ONLYOFFICE_ENABLED: no # Setting this to yes enables the option in Nextcloud automatically.
|
||||
ONLYOFFICE_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
ONLYOFFICE_SECRET: # TODO! This needs to be a unique and good password!
|
||||
REDIS_PASSWORD: # TODO! This needs to be a unique and good password!
|
||||
SIGNALING_SECRET: # TODO! This needs to be a unique and good password!
|
||||
TALK_ENABLED: yes # Setting this to yes enables the option in Nextcloud automatically.
|
||||
TALK_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
TALK_PORT: 3478 # This allows to adjust the port that the talk container is using.
|
||||
TIMEZONE: Europe/Berlin # TODO! This is the timezone that your containers will use.
|
||||
TURN_SECRET: # TODO! This needs to be a unique and good password!
|
||||
UPDATE_NEXTCLOUD_APPS: no # When setting to yes, it will automatically update all installed Nextcloud apps upon container startup on saturdays.
|
||||
UPDATE_NEXTCLOUD_APPS: no # When setting to yes (with quotes), it will automatically update all installed Nextcloud apps upon container startup on saturdays.
|
||||
STORAGE_CLASS: # By setting this, you can adjust the storage class for your volumes
|
||||
ELASTICSEARCH_STORAGE_SIZE: 1Gi # You can change the size of the elasticsearch volume that default to 1Gi with this value
|
||||
NEXTCLOUD_TRUSTED_CACERTS_STORAGE_SIZE: 1Gi # You can change the size of the nextcloud-trusted-cacerts volume that default to 1Gi with this value
|
||||
COLLABORA_FONTS_STORAGE_SIZE: 1Gi # You can change the size of the collabora-fonts volume that default to 1Gi with this value
|
||||
ONLYOFFICE_STORAGE_SIZE: 1Gi # You can change the size of the onlyoffice volume that default to 1Gi with this value
|
||||
CLAMAV_STORAGE_SIZE: 1Gi # You can change the size of the clamav volume that default to 1Gi with this value
|
||||
DATABASE_DUMP_STORAGE_SIZE: 1Gi # You can change the size of the database-dump volume that default to 1Gi with this value
|
||||
NEXTCLOUD_DATA_STORAGE_SIZE: 1Gi # You can change the size of the nextcloud-data volume that default to 1Gi with this value
|
||||
NEXTCLOUD_STORAGE_SIZE: 1Gi # You can change the size of the nextcloud volume that default to 1Gi with this value
|
||||
REDIS_STORAGE_SIZE: 1Gi # You can change the size of the redis volume that default to 1Gi with this value
|
||||
DATABASE_STORAGE_SIZE: 1Gi # You can change the size of the database volume that default to 1Gi with this value
|
||||
APACHE_STORAGE_SIZE: 1Gi # You can change the size of the apache volume that default to 1Gi with this value
|
||||
CLAMAV_STORAGE_SIZE: 1Gi # You can change the size of the clamav volume that default to 1Gi with this value
|
||||
COLLABORA_FONTS_STORAGE_SIZE: 1Gi # You can change the size of the collabora-fonts volume that default to 1Gi with this value
|
||||
DATABASE_STORAGE_SIZE: 1Gi # You can change the size of the database volume that default to 1Gi with this value
|
||||
DATABASE_DUMP_STORAGE_SIZE: 1Gi # You can change the size of the database-dump volume that default to 1Gi with this value
|
||||
ELASTICSEARCH_STORAGE_SIZE: 1Gi # You can change the size of the elasticsearch volume that default to 1Gi with this value
|
||||
NEXTCLOUD_STORAGE_SIZE: 1Gi # You can change the size of the nextcloud volume that default to 1Gi with this value
|
||||
NEXTCLOUD_DATA_STORAGE_SIZE: 1Gi # You can change the size of the nextcloud-data volume that default to 1Gi with this value
|
||||
NEXTCLOUD_TRUSTED_CACERTS_STORAGE_SIZE: 1Gi # You can change the size of the nextcloud-trusted-cacerts volume that default to 1Gi with this value
|
||||
ONLYOFFICE_STORAGE_SIZE: 1Gi # You can change the size of the onlyoffice volume that default to 1Gi with this value
|
||||
REDIS_STORAGE_SIZE: 1Gi # You can change the size of the redis volume that default to 1Gi with this value
|
||||
129
php/composer.lock
generated
129
php/composer.lock
generated
@@ -220,16 +220,16 @@
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/psr7",
|
||||
"version": "2.4.3",
|
||||
"version": "2.4.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/psr7.git",
|
||||
"reference": "67c26b443f348a51926030c83481b85718457d3d"
|
||||
"reference": "3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
|
||||
"reference": "67c26b443f348a51926030c83481b85718457d3d",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf",
|
||||
"reference": "3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -319,7 +319,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/psr7/issues",
|
||||
"source": "https://github.com/guzzle/psr7/tree/2.4.3"
|
||||
"source": "https://github.com/guzzle/psr7/tree/2.4.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -335,7 +335,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-10-26T14:07:24+00:00"
|
||||
"time": "2023-03-09T13:19:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "http-interop/http-factory-guzzle",
|
||||
@@ -562,16 +562,16 @@
|
||||
},
|
||||
{
|
||||
"name": "php-di/php-di",
|
||||
"version": "7.0.1",
|
||||
"version": "7.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHP-DI/PHP-DI.git",
|
||||
"reference": "1c7f1cc9cf6f51ff7f5f44bb1fa59243fcb7474a"
|
||||
"reference": "5d1a8664e24f23b25e0426bbcb1288287fb49181"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/1c7f1cc9cf6f51ff7f5f44bb1fa59243fcb7474a",
|
||||
"reference": "1c7f1cc9cf6f51ff7f5f44bb1fa59243fcb7474a",
|
||||
"url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/5d1a8664e24f23b25e0426bbcb1288287fb49181",
|
||||
"reference": "5d1a8664e24f23b25e0426bbcb1288287fb49181",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -619,7 +619,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/PHP-DI/PHP-DI/issues",
|
||||
"source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.1"
|
||||
"source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -631,7 +631,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-01-13T22:30:45+00:00"
|
||||
"time": "2023-02-07T17:34:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "php-di/slim-bridge",
|
||||
@@ -729,21 +729,21 @@
|
||||
},
|
||||
{
|
||||
"name": "psr/http-client",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-client.git",
|
||||
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
|
||||
"reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
|
||||
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
|
||||
"url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31",
|
||||
"reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.0 || ^8.0",
|
||||
"psr/http-message": "^1.0"
|
||||
"psr/http-message": "^1.0 || ^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -763,7 +763,7 @@
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "http://www.php-fig.org/"
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for HTTP clients",
|
||||
@@ -775,27 +775,27 @@
|
||||
"psr-18"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/http-client/tree/master"
|
||||
"source": "https://github.com/php-fig/http-client/tree/1.0.2"
|
||||
},
|
||||
"time": "2020-06-29T06:28:15+00:00"
|
||||
"time": "2023-04-10T20:12:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-factory",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-factory.git",
|
||||
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
|
||||
"reference": "e616d01114759c4c489f93b099585439f795fe35"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
|
||||
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
|
||||
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
|
||||
"reference": "e616d01114759c4c489f93b099585439f795fe35",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.0.0",
|
||||
"psr/http-message": "^1.0"
|
||||
"psr/http-message": "^1.0 || ^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -815,7 +815,7 @@
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "http://www.php-fig.org/"
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interfaces for PSR-7 HTTP message factories",
|
||||
@@ -830,31 +830,31 @@
|
||||
"response"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/http-factory/tree/master"
|
||||
"source": "https://github.com/php-fig/http-factory/tree/1.0.2"
|
||||
},
|
||||
"time": "2019-04-30T12:38:16+00:00"
|
||||
"time": "2023-04-10T20:10:41+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-message",
|
||||
"version": "1.0.1",
|
||||
"version": "1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-message.git",
|
||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
|
||||
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
|
||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
|
||||
"url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
"dev-master": "1.1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -883,27 +883,27 @@
|
||||
"response"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/http-message/tree/master"
|
||||
"source": "https://github.com/php-fig/http-message/tree/1.1"
|
||||
},
|
||||
"time": "2016-08-06T14:39:51+00:00"
|
||||
"time": "2023-04-04T09:50:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-server-handler",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-server-handler.git",
|
||||
"reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7"
|
||||
"reference": "84c4fb66179be4caaf8e97bd239203245302e7d4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
|
||||
"reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
|
||||
"url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4",
|
||||
"reference": "84c4fb66179be4caaf8e97bd239203245302e7d4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.0",
|
||||
"psr/http-message": "^1.0"
|
||||
"psr/http-message": "^1.0 || ^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -923,7 +923,7 @@
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "http://www.php-fig.org/"
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for HTTP server-side request handler",
|
||||
@@ -939,28 +939,27 @@
|
||||
"server"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/php-fig/http-server-handler/issues",
|
||||
"source": "https://github.com/php-fig/http-server-handler/tree/master"
|
||||
"source": "https://github.com/php-fig/http-server-handler/tree/1.0.2"
|
||||
},
|
||||
"time": "2018-10-30T16:46:14+00:00"
|
||||
"time": "2023-04-10T20:06:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-server-middleware",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-server-middleware.git",
|
||||
"reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5"
|
||||
"reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5",
|
||||
"reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5",
|
||||
"url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
|
||||
"reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.0",
|
||||
"psr/http-message": "^1.0",
|
||||
"psr/http-message": "^1.0 || ^2.0",
|
||||
"psr/http-server-handler": "^1.0"
|
||||
},
|
||||
"type": "library",
|
||||
@@ -981,7 +980,7 @@
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "http://www.php-fig.org/"
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for HTTP server-side middleware",
|
||||
@@ -997,9 +996,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/php-fig/http-server-middleware/issues",
|
||||
"source": "https://github.com/php-fig/http-server-middleware/tree/master"
|
||||
"source": "https://github.com/php-fig/http-server-middleware/tree/1.0.2"
|
||||
},
|
||||
"time": "2018-10-30T17:12:04+00:00"
|
||||
"time": "2023-04-11T06:14:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/log",
|
||||
@@ -1335,16 +1334,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/deprecation-contracts",
|
||||
"version": "v3.2.0",
|
||||
"version": "v3.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||
"reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3"
|
||||
"reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3",
|
||||
"reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e",
|
||||
"reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1382,7 +1381,7 @@
|
||||
"description": "A generic function and convention to trigger deprecation notices",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0"
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1398,7 +1397,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-11-25T10:21:52+00:00"
|
||||
"time": "2023-03-01T10:25:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
@@ -1646,16 +1645,16 @@
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "v3.5.0",
|
||||
"version": "v3.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "3ffcf4b7d890770466da3b2666f82ac054e7ec72"
|
||||
"reference": "a6e0510cc793912b451fd40ab983a1d28f611c15"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/3ffcf4b7d890770466da3b2666f82ac054e7ec72",
|
||||
"reference": "3ffcf4b7d890770466da3b2666f82ac054e7ec72",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/a6e0510cc793912b451fd40ab983a1d28f611c15",
|
||||
"reference": "a6e0510cc793912b451fd40ab983a1d28f611c15",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1706,7 +1705,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/twigphp/Twig/issues",
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.5.0"
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.5.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1718,7 +1717,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-12-27T12:28:18+00:00"
|
||||
"time": "2023-02-08T07:49:20+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
|
||||
@@ -21,6 +21,12 @@
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"cap_add": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"depends_on": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
@@ -67,6 +73,9 @@
|
||||
"restart": {
|
||||
"type": "string"
|
||||
},
|
||||
"shm_size": {
|
||||
"type": "integer"
|
||||
},
|
||||
"secrets": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
|
||||
@@ -74,7 +74,8 @@
|
||||
"PGTZ=%TIMEZONE%"
|
||||
],
|
||||
"stop_grace_period": 1800,
|
||||
"restart": "unless-stopped"
|
||||
"restart": "unless-stopped",
|
||||
"shm_size": 268435456
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-nextcloud",
|
||||
@@ -160,7 +161,8 @@
|
||||
"TRUSTED_CACERTS_DIR=%NEXTCLOUD_TRUSTED_CACERTS_DIR%",
|
||||
"STARTUP_APPS=%NEXTCLOUD_STARTUP_APPS%",
|
||||
"ADDITIONAL_APKS=%NEXTCLOUD_ADDITIONAL_APKS%",
|
||||
"ADDITIONAL_PHP_EXTENSIONS=%NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS%"
|
||||
"ADDITIONAL_PHP_EXTENSIONS=%NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS%",
|
||||
"INSTALL_LATEST_MAJOR=%INSTALL_LATEST_MAJOR%"
|
||||
],
|
||||
"restart": "unless-stopped",
|
||||
"devices": [
|
||||
@@ -202,9 +204,10 @@
|
||||
"internal_port": "9980",
|
||||
"environment": [
|
||||
"aliasgroup1=https://%NC_DOMAIN%:443",
|
||||
"extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:logging.level=warning --o:home_mode.enable=true %COLLABORA_SECCOMP_POLICY% --o:remote_font_config.url=https://%NC_DOMAIN%/apps/richdocuments/settings/fonts.json",
|
||||
"extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:mount_jail_tree=false --o:logging.level=warning --o:home_mode.enable=true %COLLABORA_SECCOMP_POLICY% --o:remote_font_config.url=https://%NC_DOMAIN%/apps/richdocuments/settings/fonts.json",
|
||||
"dictionaries=%COLLABORA_DICTIONARIES%",
|
||||
"TZ=%TIMEZONE%"
|
||||
"TZ=%TIMEZONE%",
|
||||
"server_name=%NC_DOMAIN%"
|
||||
],
|
||||
"volumes": [
|
||||
{
|
||||
@@ -239,14 +242,12 @@
|
||||
"NC_DOMAIN=%NC_DOMAIN%",
|
||||
"TURN_SECRET=%TURN_SECRET%",
|
||||
"SIGNALING_SECRET=%SIGNALING_SECRET%",
|
||||
"JANUS_API_KEY=%JANUS_API_KEY%",
|
||||
"TZ=%TIMEZONE%",
|
||||
"TALK_PORT=%TALK_PORT%"
|
||||
],
|
||||
"secrets": [
|
||||
"TURN_SECRET",
|
||||
"SIGNALING_SECRET",
|
||||
"JANUS_API_KEY"
|
||||
"SIGNALING_SECRET"
|
||||
],
|
||||
"restart": "unless-stopped"
|
||||
},
|
||||
@@ -318,6 +319,9 @@
|
||||
],
|
||||
"devices": [
|
||||
"/dev/fuse"
|
||||
],
|
||||
"cap_add": [
|
||||
"SYS_ADMIN"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -411,7 +415,10 @@
|
||||
"environment": [
|
||||
"TZ=%TIMEZONE%"
|
||||
],
|
||||
"restart": "unless-stopped"
|
||||
"restart": "unless-stopped",
|
||||
"cap_add": [
|
||||
"SYS_NICE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-fulltextsearch",
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files psalm-version="5.6.0@e784128902dfe01d489c4123d69918a9f3c1eac5"/>
|
||||
<files psalm-version="5.9.0@8b9ad1eb9e8b7d3101f949291da2b9f7767cd163"/>
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
xmlns="https://getpsalm.org/schema/config"
|
||||
xsi:schemaLocation="https://getpsalm.org/schema/config"
|
||||
errorBaseline="psalm-baseline.xml"
|
||||
findUnusedBaselineEntry="true"
|
||||
findUnusedCode="false"
|
||||
>
|
||||
<projectFiles>
|
||||
<directory name="templates"/>
|
||||
|
||||
@@ -20,8 +20,10 @@
|
||||
if (xhr.status === 201) {
|
||||
window.location.replace(xhr.getResponseHeader('Location'));
|
||||
} else if (xhr.status === 422) {
|
||||
disableSpinner()
|
||||
showError(xhr.response);
|
||||
} else if (xhr.status === 500) {
|
||||
disableSpinner()
|
||||
showError("Server error. Please check the mastercontainer logs for details.");
|
||||
} else {
|
||||
// If the responose is not one of the above, we should reload to show the latest content
|
||||
@@ -29,16 +31,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
function disable(element) {
|
||||
function disableSpinnerSpinner() {
|
||||
document.getElementById('overlay').classList.add('loading');
|
||||
element.classList.add('loading');
|
||||
element.disabled = true;
|
||||
}
|
||||
|
||||
function enable(element) {
|
||||
function disableSpinner() {
|
||||
document.getElementById('overlay').classList.remove('loading');
|
||||
element.classList.remove('loading');
|
||||
element.disabled = false;
|
||||
}
|
||||
|
||||
function initForm(form) {
|
||||
@@ -50,11 +48,10 @@
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.addEventListener('load', handleEvent);
|
||||
xhr.addEventListener('error', () => showError("Failed to talk to server."));
|
||||
xhr.addEventListener('load', () => enable(event.submitter));
|
||||
xhr.addEventListener('error', () => enable(event.submitter));
|
||||
xhr.addEventListener('error', () => disableSpinner());
|
||||
xhr.open(form.method, form.getAttribute("action"));
|
||||
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
||||
disable(event.submitter);
|
||||
disableSpinnerSpinner();
|
||||
xhr.send(new URLSearchParams(new FormData(form)));
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
@@ -144,7 +144,7 @@ input {
|
||||
padding: 20px;
|
||||
max-width: 100%;
|
||||
word-break: break-word;
|
||||
max-width: 470px;
|
||||
max-width: 500px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,9 @@ class Container {
|
||||
private array $secrets;
|
||||
/** @var string[] */
|
||||
private array $devices;
|
||||
/** @var string[] */
|
||||
private array $capAdd;
|
||||
private int $shmSize;
|
||||
private DockerActionManager $dockerActionManager;
|
||||
|
||||
public function __construct(
|
||||
@@ -38,6 +41,8 @@ class Container {
|
||||
array $dependsOn,
|
||||
array $secrets,
|
||||
array $devices,
|
||||
array $capAdd,
|
||||
int $shmSize,
|
||||
DockerActionManager $dockerActionManager
|
||||
) {
|
||||
$this->identifier = $identifier;
|
||||
@@ -52,6 +57,8 @@ class Container {
|
||||
$this->dependsOn = $dependsOn;
|
||||
$this->secrets = $secrets;
|
||||
$this->devices = $devices;
|
||||
$this->capAdd = $capAdd;
|
||||
$this->shmSize = $shmSize;
|
||||
$this->dockerActionManager = $dockerActionManager;
|
||||
}
|
||||
|
||||
@@ -71,6 +78,10 @@ class Container {
|
||||
return $this->restartPolicy;
|
||||
}
|
||||
|
||||
public function GetShmSize() : int {
|
||||
return $this->shmSize;
|
||||
}
|
||||
|
||||
public function GetMaxShutdownTime() : int {
|
||||
return $this->maxShutdownTime;
|
||||
}
|
||||
@@ -83,6 +94,10 @@ class Container {
|
||||
return $this->devices;
|
||||
}
|
||||
|
||||
public function GetCapAdds() : array {
|
||||
return $this->capAdd;
|
||||
}
|
||||
|
||||
public function GetPorts() : ContainerPorts {
|
||||
return $this->ports;
|
||||
}
|
||||
|
||||
@@ -213,6 +213,16 @@ class ContainerDefinitionFetcher
|
||||
$devices = $entry['devices'];
|
||||
}
|
||||
|
||||
$capAdd = [];
|
||||
if (isset($entry['cap_add'])) {
|
||||
$capAdd = $entry['cap_add'];
|
||||
}
|
||||
|
||||
$shmSize = -1;
|
||||
if (isset($entry['shm_size'])) {
|
||||
$shmSize = $entry['shm_size'];
|
||||
}
|
||||
|
||||
$containers[] = new Container(
|
||||
$entry['container_name'],
|
||||
$displayName,
|
||||
@@ -226,6 +236,8 @@ class ContainerDefinitionFetcher
|
||||
$dependsOn,
|
||||
$secrets,
|
||||
$devices,
|
||||
$capAdd,
|
||||
$shmSize,
|
||||
$this->container->get(DockerActionManager::class)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -154,11 +154,19 @@ class DockerController
|
||||
$port = 443;
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['install_latest_major'])) {
|
||||
$installLatestMajor = 26;
|
||||
} else {
|
||||
$installLatestMajor = "";
|
||||
}
|
||||
|
||||
$config = $this->configurationManager->GetConfig();
|
||||
// set AIO_URL
|
||||
$config['AIO_URL'] = $host . ':' . $port;
|
||||
// set wasStartButtonClicked
|
||||
$config['wasStartButtonClicked'] = 1;
|
||||
// set install_latest_major
|
||||
$config['install_latest_major'] = $installLatestMajor;
|
||||
$this->configurationManager->WriteConfig($config);
|
||||
|
||||
// Start container
|
||||
|
||||
@@ -21,15 +21,17 @@ class LoginController
|
||||
|
||||
public function TryLogin(Request $request, Response $response, array $args) : Response {
|
||||
if (!$this->dockerActionManager->isLoginAllowed()) {
|
||||
return $response->withHeader('Location', '/')->withStatus(302);
|
||||
$response->getBody()->write("The login is blocked since Nextcloud is running.");
|
||||
return $response->withHeader('Location', '/')->withStatus(422);
|
||||
}
|
||||
$password = $request->getParsedBody()['password'] ?? '';
|
||||
if($this->authManager->CheckCredentials($password)) {
|
||||
$this->authManager->SetAuthState(true);
|
||||
return $response->withHeader('Location', '/')->withStatus(302);
|
||||
return $response->withHeader('Location', '/')->withStatus(201);
|
||||
}
|
||||
|
||||
return $response->withHeader('Location', '/')->withStatus(302);
|
||||
$response->getBody()->write("The password is false.");
|
||||
return $response->withHeader('Location', '/')->withStatus(422);
|
||||
}
|
||||
|
||||
public function GetTryLogin(Request $request, Response $response, array $args) : Response {
|
||||
|
||||
@@ -78,7 +78,10 @@ class ConfigurationManager
|
||||
}
|
||||
|
||||
$lastBackupLines = explode("\n", $content);
|
||||
$lastBackupLine = $lastBackupLines[sizeof($lastBackupLines) - 2];
|
||||
$lastBackupLine = "";
|
||||
if (count($lastBackupLines) >= 2) {
|
||||
$lastBackupLine = $lastBackupLines[sizeof($lastBackupLines) - 2];
|
||||
}
|
||||
if ($lastBackupLine === "") {
|
||||
return '';
|
||||
}
|
||||
@@ -231,6 +234,11 @@ class ConfigurationManager
|
||||
* @throws InvalidSettingConfigurationException
|
||||
*/
|
||||
public function SetDomain(string $domain) : void {
|
||||
// Validate that at least one dot is contained
|
||||
if (strpos($domain, '.') === false) {
|
||||
throw new InvalidSettingConfigurationException("Domain must contain at least one dot!");
|
||||
}
|
||||
|
||||
// Validate domain
|
||||
if (!filter_var($domain, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)) {
|
||||
throw new InvalidSettingConfigurationException("Domain is not a valid domain!");
|
||||
@@ -265,11 +273,10 @@ class ConfigurationManager
|
||||
$port = $this->GetApachePort();
|
||||
|
||||
if (!filter_var($dnsRecordIP, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
|
||||
$errorMessage = "It seems like the ip-address is set to an internal or reserved ip-address. This is not supported. (It was found to be set to '" . $dnsRecordIP . "')";
|
||||
if ($port === '443') {
|
||||
throw new InvalidSettingConfigurationException($errorMessage);
|
||||
throw new InvalidSettingConfigurationException("It seems like the ip-address is set to an internal or reserved ip-address. This is not supported. (It was found to be set to '" . $dnsRecordIP . "')");
|
||||
} else {
|
||||
error_log($errorMessage);
|
||||
error_log("It seems like the ip-address of " . $domain . " is set to an internal or reserved ip-address. (It was found to be set to '" . $dnsRecordIP . "')");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -296,6 +303,8 @@ class ConfigurationManager
|
||||
$testUrl = $protocol . $domain . ':443';
|
||||
curl_setopt($ch, CURLOPT_URL, $testUrl);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
|
||||
$response = (string)curl_exec($ch);
|
||||
# Get rid of trailing \n
|
||||
$response = str_replace("\n", "", $response);
|
||||
@@ -453,10 +462,12 @@ class ConfigurationManager
|
||||
throw new InvalidSettingConfigurationException(DataConst::GetDataDirectory() . " does not exist! Something was set up falsely!");
|
||||
}
|
||||
$df = disk_free_space(DataConst::GetDataDirectory());
|
||||
if ($df !== false && (int)$df < 10240) {
|
||||
$content = json_encode($config, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
|
||||
$size = strlen($content) + 10240;
|
||||
if ($df !== false && (int)$df < $size) {
|
||||
throw new InvalidSettingConfigurationException(DataConst::GetDataDirectory() . " does not have enough space for writing the config file! Not writing it back!");
|
||||
}
|
||||
file_put_contents(DataConst::GetConfigFile(), json_encode($config, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT));
|
||||
file_put_contents(DataConst::GetConfigFile(), $content);
|
||||
}
|
||||
|
||||
private function GetEnvironmentalVariableOrConfig(string $envVariableName, string $configName, string $defaultValue) : string {
|
||||
@@ -659,7 +670,7 @@ class ConfigurationManager
|
||||
// Trim all unwanted chars on both sites
|
||||
$entry = trim($entry);
|
||||
if ($entry !== "") {
|
||||
if (!preg_match("#^/[0-1a-zA-Z/-_]+$#", $entry) && !preg_match("#^[0-1a-zA-Z_-]+$#", $entry)) {
|
||||
if (!preg_match("#^/[.0-1a-zA-Z/-_]+$#", $entry) && !preg_match("#^[.0-1a-zA-Z_-]+$#", $entry)) {
|
||||
throw new InvalidSettingConfigurationException("You entered unallowed characters! Problematic is " . $entry);
|
||||
}
|
||||
$validDirectories .= rtrim($entry, '/') . PHP_EOL;
|
||||
@@ -673,6 +684,14 @@ class ConfigurationManager
|
||||
}
|
||||
}
|
||||
|
||||
public function shouldLatestMajorGetInstalled() : bool {
|
||||
$config = $this->GetConfig();
|
||||
if(!isset($config['install_latest_major'])) {
|
||||
$config['install_latest_major'] = '';
|
||||
}
|
||||
return $config['install_latest_major'] !== '';
|
||||
}
|
||||
|
||||
public function GetAdditionalBackupDirectoriesString() : string {
|
||||
if (!file_exists(DataConst::GetAdditionalBackupDirectoriesFile())) {
|
||||
return '';
|
||||
|
||||
@@ -348,6 +348,12 @@ class DockerActionManager
|
||||
$replacements[1] = $this->configurationManager->GetNextcloudAdditionalApks();
|
||||
} elseif ($out[1] === 'NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS') {
|
||||
$replacements[1] = $this->configurationManager->GetNextcloudAdditionalPhpExtensions();
|
||||
} elseif ($out[1] === 'INSTALL_LATEST_MAJOR') {
|
||||
if ($this->configurationManager->shouldLatestMajorGetInstalled()) {
|
||||
$replacements[1] = 'yes';
|
||||
} else {
|
||||
$replacements[1] = '';
|
||||
}
|
||||
} else {
|
||||
$secret = $this->configurationManager->GetSecret($out[1]);
|
||||
if ($secret === "") {
|
||||
@@ -372,6 +378,7 @@ class DockerActionManager
|
||||
$portWithProtocol = $value->port . '/' . $value->protocol;
|
||||
$exposedPorts[$portWithProtocol] = null;
|
||||
}
|
||||
$requestBody['HostConfig']['NetworkMode'] = 'nextcloud-aio';
|
||||
} else {
|
||||
$requestBody['HostConfig']['NetworkMode'] = 'host';
|
||||
}
|
||||
@@ -404,9 +411,18 @@ class DockerActionManager
|
||||
$requestBody['HostConfig']['Devices'] = $devices;
|
||||
}
|
||||
|
||||
$shmSize = $container->GetShmSize();
|
||||
if ($shmSize > 0) {
|
||||
$requestBody['HostConfig']['ShmSize'] = $shmSize;
|
||||
}
|
||||
|
||||
$capAdds = $container->GetCapAdds();
|
||||
if (count($capAdds) > 0) {
|
||||
$requestBody['HostConfig']['CapAdd'] = $capAdds;
|
||||
}
|
||||
|
||||
// Special things for the backup container which should not be exposed in the containers.json
|
||||
if ($container->GetIdentifier() === 'nextcloud-aio-borgbackup') {
|
||||
$requestBody['HostConfig']['CapAdd'] = ["SYS_ADMIN"];
|
||||
$requestBody['HostConfig']['SecurityOpt'] = ["apparmor:unconfined"];
|
||||
|
||||
// Additional backup directories
|
||||
@@ -622,11 +638,11 @@ class DockerActionManager
|
||||
}
|
||||
}
|
||||
|
||||
public function DisconnectContainerFromNetwork(Container $container) : void
|
||||
private function DisconnectContainerFromBridgeNetwork(string $id) : void
|
||||
{
|
||||
|
||||
$url = $this->BuildApiUrl(
|
||||
sprintf('networks/%s/disconnect', 'nextcloud-aio')
|
||||
sprintf('networks/%s/disconnect', 'bridge')
|
||||
);
|
||||
|
||||
try {
|
||||
@@ -635,12 +651,11 @@ class DockerActionManager
|
||||
$url,
|
||||
[
|
||||
'json' => [
|
||||
'container' => $container->GetIdentifier(),
|
||||
'container' => $id,
|
||||
],
|
||||
]
|
||||
);
|
||||
} catch (RequestException $e) {
|
||||
error_log('Could not disconnect container from network ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -663,7 +678,8 @@ class DockerActionManager
|
||||
'Driver' => 'bridge',
|
||||
'Internal' => false,
|
||||
'Options' => [
|
||||
'com.docker.network.bridge.enable_icc' => 'true'
|
||||
'com.docker.network.bridge.enable_icc' => 'true',
|
||||
'com.docker.network.bridge.enable_ip_masquerade' => 'true'
|
||||
]
|
||||
]
|
||||
]
|
||||
@@ -699,6 +715,7 @@ class DockerActionManager
|
||||
public function ConnectMasterContainerToNetwork() : void
|
||||
{
|
||||
$this->ConnectContainerIdToNetwork('nextcloud-aio-mastercontainer', '');
|
||||
$this->DisconnectContainerFromBridgeNetwork('nextcloud-aio-mastercontainer');
|
||||
}
|
||||
|
||||
public function ConnectContainerToNetwork(Container $container) : void
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
</header>
|
||||
|
||||
<div class="content">
|
||||
<h1>Nextcloud AIO v4.3.1</h1>
|
||||
<h1>Nextcloud AIO v4.8.1</h1>
|
||||
|
||||
{# Add 2nd tab warning #}
|
||||
<script type="text/javascript" src="second-tab-warning.js"></script>
|
||||
@@ -24,14 +24,12 @@
|
||||
{% set isAnyRunning = false %}
|
||||
{% set isAnyRestarting = false %}
|
||||
{% set isWatchtowerRunning = false %}
|
||||
{% set isRestoreRunning = false %}
|
||||
{% set isBackupOrRestoreRunning = false %}
|
||||
{% set isApacheStarting = false %}
|
||||
{# Setting newMajorVersion to '' will hide corresponding options/elements #}
|
||||
{% set newMajorVersion = 26 %}
|
||||
|
||||
{% if is_backup_container_running == true %}
|
||||
{% if borg_backup_mode == 'restore' %}
|
||||
{% set isRestoreRunning = true %}
|
||||
{% endif %}
|
||||
{% if borg_backup_mode == 'backup' or borg_backup_mode == 'restore' %}
|
||||
{% set isBackupOrRestoreRunning = true %}
|
||||
{% endif %}
|
||||
@@ -165,7 +163,8 @@
|
||||
An example for Linux is <b>/mnt/backup</b>.<br>
|
||||
On Synology it could be <b>/volume1/docker/nextcloud/backup</b>.<br>
|
||||
For macOS it may be <b>/var/backup</b>.<br>
|
||||
On Windows it must be <b>nextcloud_aio_backupdir</b>. You need to create the 'nextcloud_aio_backupdir' volume beforehand by following this documentation: <a href="https://github.com/nextcloud/all-in-one#how-to-run-aio-on-windows"><b>click here</b></a><br><br>
|
||||
On Windows it might be <b>/run/desktop/mnt/host/c/backup</b>. (This path is equivalent to 'C:\backup' on your Windows host so you need to translate the path accordingly. Hint: the path that you enter needs to start with '/run/desktop/mnt/host/'. Append to that the exact location on your windows host, e.g. 'c/backup' which is equivalent to 'C:\backup'.)<br>
|
||||
Another option is to enter a specific volume name here: <b>nextcloud_aio_backupdir</b>. This volume needs to be created beforehand manually by you in order to be able to use it.<br><br>
|
||||
⚠️ Please note that the backup archive must be located in a subfolder of the folder that you enter here and the subfolder which contains the archive must be named 'borg'. Otherwise will the backup container not find the backup archive!<br><br>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
@@ -248,11 +247,17 @@
|
||||
|
||||
{% if has_update_available == true %}
|
||||
{% if is_mastercontainer_update_available == false %}
|
||||
⚠️ Container updates are available. Click on 'Stop Containers' and 'Start Containers' to update them. You should consider creating a backup first.<br><br>
|
||||
⚠️ Container updates are available. Click on <b>Stop Containers</b> and <b>Start Containers</b> to update them. You should consider creating a backup first.<br><br>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if is_mastercontainer_update_available == false %}
|
||||
Your containers are up-to-date.<br><br>
|
||||
{% if newMajorVersion != '' and isAnyRunning == true and isApacheStarting != true %}
|
||||
<details>
|
||||
<summary>Note about <b>Nextcloud {{ newMajorVersion }}</b></summary><br>
|
||||
If you haven't upgraded to Nextcloud {{ newMajorVersion }} yet and want to do that now, feel free to follow <b><a href="https://github.com/nextcloud/all-in-one/discussions/2208">this documentation</a></b><br/>
|
||||
</details><br>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
@@ -276,10 +281,8 @@
|
||||
</form>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if isRestoreRunning == true %}
|
||||
Restore currently running. Cannot start the containers until that's done.<br /><br />
|
||||
{% elseif has_update_available == true and isBackupOrRestoreRunning == true %}
|
||||
Restore or Backup currently running and container update available. Cannot start the containers until that's done.<br /><br />
|
||||
{% if isBackupOrRestoreRunning == true %}
|
||||
Restore or Backup currently running. Cannot start the containers until that's done.<br /><br />
|
||||
{% else %}
|
||||
{% if was_start_button_clicked == false %}
|
||||
Clicking on the button below will download all docker containers and start them. This can take a lot of time depending on your internect connection. Since the overall size is a few GB, this will take around 5-10 min or more. So be aware and patient!<br><br>
|
||||
@@ -292,7 +295,16 @@
|
||||
<input class="button" type="submit" value="Update mastercontainer" />
|
||||
</form>
|
||||
{% else %}
|
||||
{% if was_start_button_clicked == false or has_update_available == false %}
|
||||
{% if was_start_button_clicked == false %}
|
||||
<form method="POST" action="/api/docker/start" class="xhr">
|
||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||
{% if newMajorVersion != '' %}
|
||||
<input type="checkbox" id="install_latest_major" name="install_latest_major"><label for="install_latest_major">Install Nextcloud {{ newMajorVersion }} (if unchecked, Nextcloud {{ newMajorVersion - 1 }} will get installed)</label><br>
|
||||
{% endif %}
|
||||
<input class="button" type="submit" value="Download and start containers" />
|
||||
</form>
|
||||
{% elseif has_update_available == false %}
|
||||
<form method="POST" action="/api/docker/start" class="xhr">
|
||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||
@@ -328,7 +340,8 @@
|
||||
An example for Linux is <b>/mnt/backup</b>.<br>
|
||||
On Synology it could be <b>/volume1/docker/nextcloud/backup</b>.<br>
|
||||
For macOS it may be <b>/var/backup</b>.<br>
|
||||
On Windows it must be <b>nextcloud_aio_backupdir</b>. You need to create the 'nextcloud_aio_backupdir' volume beforehand by following this documentation: <a href="https://github.com/nextcloud/all-in-one#how-to-run-aio-on-windows"><b>click here</b></a><br><br>
|
||||
On Windows it might be <b>/run/desktop/mnt/host/c/backup</b>. (This path is equivalent to 'C:\backup' on your Windows host so you need to translate the path accordingly. Hint: the path that you enter needs to start with '/run/desktop/mnt/host/'. Append to that the exact location on your windows host, e.g. 'c/backup' which is equivalent to 'C:\backup'.)<br>
|
||||
Another option is to enter a specific volume name here: <b>nextcloud_aio_backupdir</b>. This volume needs to be created beforehand manually by you in order to be able to use it.<br><br>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
@@ -445,7 +458,7 @@
|
||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||
<input class="button" type="submit" value="Submit" /><br>
|
||||
</form>
|
||||
Each line and entry needs to start with a slash or letter/digit. Allowed are only <b>a-z</b>, <b>A-Z</b>, <b>0-9</b>, <b>_</b>, <b>-</b>, and <b>/</b>. If the entry begins with a letter/digit are slashes not supported. Two valid entries are <b>/directory/on/the/host</b> and <b>my_custom_docker_volume</b>. You need to make sure yourself that all given directories exist. Otherwise the backup container will fail starting!<br><br/>
|
||||
Each line and entry needs to start with a slash or letter/digit. Allowed are only <b>a-z</b>, <b>A-Z</b>, <b>.</b>, <b>0-9</b>, <b>_</b>, <b>-</b>, and <b>/</b>. If the entry begins with a letter/digit are slashes not supported. Two valid entries are <b>/directory/on/the/host</b> and <b>my_custom_docker_volume</b>. You need to make sure yourself that all given directories exist. Otherwise the backup container will fail starting!<br><br/>
|
||||
Make sure to specify all storages that you want to back up separately since storages will not be mounted recursively. E.g. providing <b>/</b> as additional backup directory will only back up files and folders that are stored on the root partition and not on the EFI partition or any other. Excluded by the backup will be caches and a few other directories. You should make sure to stop all services before the backup can run correctly if you want to back up the root partition. For automating this see <a href="https://github.com/nextcloud/all-in-one#how-to-stopstartupdate-containers-or-trigger-the-daily-backup-from-a-script-externally">this documentation</a><br><br/>
|
||||
Please note that the chosen directories/volumes will not be restored when you restore your instance, so this would need to be done manually. <br><br>
|
||||
{% if additional_backup_directories != "" %}
|
||||
@@ -503,9 +516,9 @@
|
||||
<input type="checkbox" id="fulltextsearch" name="fulltextsearch"><label for="fulltextsearch">Fulltextsearch (needs ~1GB additional RAM)</label><br>
|
||||
{% endif %}
|
||||
{% if is_imaginary_enabled == true %}
|
||||
<input type="checkbox" id="imaginary" name="imaginary" checked="checked"><label for="imaginary">Imaginary (for previews of heic, tiff and webp)</label><br>
|
||||
<input type="checkbox" id="imaginary" name="imaginary" checked="checked"><label for="imaginary">Imaginary (for previews of heic, heif, illustrator, pdf, svg, tiff and webp)</label><br>
|
||||
{% else %}
|
||||
<input type="checkbox" id="imaginary" name="imaginary"><label for="imaginary">Imaginary (for previews of heic, tiff and webp)</label><br>
|
||||
<input type="checkbox" id="imaginary" name="imaginary"><label for="imaginary">Imaginary (for previews of heic, heif, illustrator, pdf, svg, tiff and webp)</label><br>
|
||||
{% endif %}
|
||||
{% if is_talk_enabled == true %}
|
||||
<input type="checkbox" id="talk" name="talk" checked="checked"><label for="talk">Nextcloud Talk (needs ports {{ talk_port }}/TCP and {{ talk_port }}/UDP open in your firewall/router)</label><br><br>
|
||||
@@ -518,6 +531,7 @@
|
||||
{#<input type="checkbox" id="onlyoffice" name="onlyoffice"><label for="onlyoffice">OnlyOffice</label><br>#}
|
||||
{% endif %}
|
||||
<input id="options-form-submit" class="button" type="submit" value="Save changes" />
|
||||
<script type="text/javascript" src="options-form-submit.js"></script>
|
||||
</form>
|
||||
<b>Minimal system requirements:</b> When any optional addon is enabled, at least 2GB RAM, a dual-core CPU and 40GB system storage are required. When enabling ClamAV or Fulltextsearch, at least 3GB RAM are required. When enabling everything, at least 4GB RAM are required. Recommended are at least 1GB more RAM than the minimal requirement.<br><br>
|
||||
{% if isAnyRunning == true or is_x64_platform == false %}
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
<link rel="stylesheet" href="/style.css" media="all" />
|
||||
<link rel="icon" href="/img/favicon.png">
|
||||
<script type="text/javascript" src="forms.js"></script>
|
||||
<script type="text/javascript" src="options-form-submit.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<h1>Nextcloud AIO Login</h1>
|
||||
{% if is_login_allowed == true %}
|
||||
<p>Log in using your Nextcloud AIO password:</p>
|
||||
<form method="POST" action="/api/auth/login">
|
||||
<form method="POST" action="/api/auth/login" class="xhr">
|
||||
<input type="text" autocomplete="off" name="password" placeholder="Password" />
|
||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||
@@ -19,5 +19,9 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="before-unload.js"></script>
|
||||
<div id="overlay">
|
||||
<div class="loader"></div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
114
readme.md
114
readme.md
@@ -7,21 +7,20 @@ Included are:
|
||||
- High performance backend for Nextcloud Files
|
||||
- High performance backend for Nextcloud Talk
|
||||
- Backup solution (based on [BorgBackup](https://github.com/borgbackup/borg#what-is-borgbackup))
|
||||
- Imaginary (for previews of heic, tiff and webp)
|
||||
- Imaginary (for previews of heic, heif, illustrator, pdf, svg, tiff and webp)
|
||||
- ClamAV (Antivirus backend for Nextcloud)
|
||||
- Fulltextsearch
|
||||
|
||||
## How to use this?
|
||||
The following instructions are especially meant for Linux. For macOS see [this](#how-to-run-aio-on-macos), for Windows see [this](#how-to-run-aio-on-windows) and for Synology see [this](#how-to-run-aio-on-synology-dsm). Also, the instructions are meant for installations without a reverse proxy already being in place. If you want to run AIO behind a reverse proxy, see the [reverse proxy documentation](https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md).
|
||||
The following instructions are meant for installations without a web server or reverse proxy (like Apache, Nginx and else) already being in place. If you want to run AIO behind a web server or reverse proxy (like Apache, Nginx and else), see the [reverse proxy documentation](https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md). Also, the instructions below are especially meant for Linux. For macOS see [this](#how-to-run-aio-on-macos), for Windows see [this](#how-to-run-aio-on-windows) and for Synology see [this](#how-to-run-aio-on-synology-dsm).
|
||||
1. Install Docker on your Linux installation by following the official documentation: https://docs.docker.com/engine/install/#server. The easiest way is installing it by **using the convenience script**:
|
||||
```sh
|
||||
curl -fsSL get.docker.com | sudo sh
|
||||
curl -fsSL https://get.docker.com | sudo sh
|
||||
```
|
||||
1. If you need ipv6 support, you should enable it by following https://docs.docker.com/config/daemon/ipv6/.
|
||||
2. Run the command below in order to start the container:<br><br>
|
||||
(For people that cannot use ports 80 and/or 443 on this server, please follow the [reverse proxy documentation](https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md) because port 443 is used by this project and opened on the host by default even though it does not look like this is the case. Otherwise please run the command below!)
|
||||
2. Run the command below in order to start the container:
|
||||
```
|
||||
# For x64 CPUs and without reverse proxy already in place:
|
||||
# For Linux and without a web server or reverse proxy (like Apache, Nginx and else) already in place:
|
||||
sudo docker run \
|
||||
--sig-proxy=false \
|
||||
--name nextcloud-aio-mastercontainer \
|
||||
@@ -33,25 +32,6 @@ The following instructions are especially meant for Linux. For macOS see [this](
|
||||
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
|
||||
nextcloud/all-in-one:latest
|
||||
```
|
||||
<details>
|
||||
<summary>Command for arm64 CPUs like the Raspberry Pi 4</summary>
|
||||
|
||||
```
|
||||
# For arm64 CPUs and without reverse proxy already in place:
|
||||
sudo docker run \
|
||||
--sig-proxy=false \
|
||||
--name nextcloud-aio-mastercontainer \
|
||||
--restart always \
|
||||
--publish 80:80 \
|
||||
--publish 8080:8080 \
|
||||
--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:latest-arm64
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Explanation of the command</summary>
|
||||
|
||||
@@ -59,15 +39,17 @@ The following instructions are especially meant for Linux. For macOS see [this](
|
||||
- `--sig-proxy=false` This option allows to exit the container shell that gets attached automatically when using `docker run` by using `[CTRL] + [C]` without shutting down the container.
|
||||
- `--name nextcloud-aio-mastercontainer` This is the name of the container. This line is not allowed to be changed, since mastercontainer updates would fail.
|
||||
- `--restart always` This is the "restart policy". `always` means that the container should always get started with the Docker daemon. See the Docker documentation for further detail about restart policies: https://docs.docker.com/config/containers/start-containers-automatically/
|
||||
- `--publish 80:80` This means that port 80 of the container should get published on the host using port 80. It is used for getting valid certificates for the AIO interface if you want to use port 8443. It is not needed if you run AIO behind a reverse proxy and can get removed in that case as you can simply use port 8080 for the AIO interface then.
|
||||
- `--publish 80:80` This means that port 80 of the container should get published on the host using port 80. It is used for getting valid certificates for the AIO interface if you want to use port 8443. It is not needed if you run AIO behind a web server or reverse proxy and can get removed in that case as you can simply use port 8080 for the AIO interface then.
|
||||
- `--publish 8080:8080` This means that port 8080 of the container should get published on the host using port 8080. This port is used for the AIO interface and uses a self-signed certificate by default. You can also use a different host port if port 8080 is already used on your host, for example `--publish 8081:8080` (only the first port can be changed for the host, the second port is for the container and must remain at 8080).
|
||||
- `--publish 8443:8443` This means that port 8443 of the container should get published on the host using port 8443. If you publish port 80 and 8443 to the public internet, you can access the AIO interface via this port with a valid certificate. It is not needed if you run AIO behind a reverse proxy and can get removed in that case as you can simply use port 8080 for the AIO interface then.
|
||||
- `--publish 8443:8443` This means that port 8443 of the container should get published on the host using port 8443. If you publish port 80 and 8443 to the public internet, you can access the AIO interface via this port with a valid certificate. It is not needed if you run AIO behind a web server or reverse proxy and can get removed in that case as you can simply use port 8080 for the AIO interface then.
|
||||
- `--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config` This means that the files that are created by the mastercontainer will be stored in a docker volume that is called `nextcloud_aio_mastercontainer`. This line is not allowed to be changed, since built-in backups would fail later on.
|
||||
- `--volume /var/run/docker.sock:/var/run/docker.sock:ro` The docker socket is mounted into the container which is used for spinning up all the other containers and for further features. It needs to be adjusted on Windows/macOS and on docker rootless. See the applicable documentation on this. If adjusting, don't forget to also set `DOCKER_SOCKET_PATH`! If you dislike this, see https://github.com/nextcloud/all-in-one/discussions/500#discussioncomment-2740767 and the whole thread for options.
|
||||
- `nextcloud/all-in-one:latest` or `nextcloud/all-in-one:latest-arm64` This is the docker container image that is used. See https://github.com/nextcloud/all-in-one/discussions/490 for why there are different images for the different CPU architectures.
|
||||
- `nextcloud/all-in-one:latest` This is the docker container image that is used.
|
||||
- Further options can be set using environment variables, for example `-e NEXTCLOUD_DATADIR="/mnt/ncdata"` (This is an example for Linux. See [this](https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir) for other OS' and for an explanation of what this value does. This specific one needs to be specified upon the first startup if you want to change it to a specific path instead of the default Docker volume). To see explanations and examples for further variables (like changing the location of Nextcloud's datadir or mounting some locations as external storage into the Nextcloud container), read through this readme and look at the docker-compose file: https://github.com/nextcloud/all-in-one/blob/main/docker-compose.yml
|
||||
</details>
|
||||
|
||||
Note: You may be interested in adjusting Nextcloud’s datadir to store the files in a different location than the default docker volume. See [this documentation](https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir) on how to do it.
|
||||
|
||||
3. After the initial startup, you should be able to open the Nextcloud AIO Interface now on port 8080 of this server.<br>
|
||||
E.g. `https://ip.address.of.this.server:8080`<br><br>
|
||||
If your firewall/router has port 80 and 8443 open and you point a domain to your server, you can get a valid certificate automatically by opening the Nextcloud AIO Interface via:<br>
|
||||
@@ -81,6 +63,11 @@ Nextcloud AIO is inspired by projects like Portainer that manage the docker daem
|
||||
### Are reverse proxies supported?
|
||||
Yes. Please refer to the following documentation on this: [reverse-proxy.md](https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md)
|
||||
|
||||
### Which CPU architectures are supported?
|
||||
You can check this on Linux by running: `uname -m`
|
||||
- x86_64/x64/amd64
|
||||
- aarch64/arm64/armv8 (Note: ClamAV is currently not supported on this CPU architecture)
|
||||
|
||||
### Which ports are mandatory to be open in your firewall/router?
|
||||
Only those (if you access the Mastercontainer Interface internally via port 8080):
|
||||
- `443/TCP` for the Apache container
|
||||
@@ -114,22 +101,10 @@ docker run ^
|
||||
nextcloud/all-in-one:latest
|
||||
```
|
||||
|
||||
**Please note:** In order to make the built-in backup solution able to back up to the host system, you need to create a volume with the name `nextcloud_aio_backupdir` beforehand:
|
||||
```
|
||||
docker volume create ^
|
||||
--driver local ^
|
||||
--name nextcloud_aio_backupdir ^
|
||||
-o device="/host_mnt/c/your/backup/path" ^
|
||||
-o type="none" ^
|
||||
-o o="bind"
|
||||
```
|
||||
(The value `/host_mnt/c/your/backup/path` in this example would be equivalent to `C:\your\backup\path` on the Windows host. So you need to translate the path that you want to use into the correct format.) ⚠️️ **Attention**: Make sure that the path exists on the host before you create the volume! Otherwise everything will bug out!
|
||||
|
||||
Also, you may be interested in adjusting Nextcloud's Datadir to store the files on the host system. See [this documentation](https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir) on how to do it.
|
||||
|
||||
⚠️ **Please note:** Almost all commands in this project's documentation use `sudo docker ...`. Since `sudo` is not available on Windows, you simply remove `sudo` from the commands and they should work.
|
||||
|
||||
|
||||
### How to run AIO on Synology DSM
|
||||
On Synology, there are two things different in comparison to Linux: instead of using `--volume /var/run/docker.sock:/var/run/docker.sock:ro`, you need to use `--volume /volume1/docker/docker.sock:/var/run/docker.sock:ro` to run it. You also need to add `-e DOCKER_SOCKET_PATH="/volume1/docker/docker.sock"`to the startup command. Apart from that it should work and behave the same like on Linux. Obviously the Synology Docker GUI will not work with that so you will need to either use SSH or create a user-defined script task in the task scheduler as the user 'root' in order to run the command.
|
||||
|
||||
@@ -140,7 +115,7 @@ You'll also need to adjust Synology's firewall, see below:
|
||||
<details>
|
||||
<summary>Click here to expand</summary>
|
||||
|
||||
The Synology DSM is vulnerable to attacks with it's open ports and login interfaces, which is why a firewall setup is always recommended. If a firewall is activated it is necessary to have exceptions for ports 80,443, the subnet of the docker bridge which includes the nextcloud containers, your public static IP (if you don't use DDNS) and if applicable your NC-Talk ports 3478 TCP+UDP:
|
||||
The Synology DSM is vulnerable to attacks with it's open ports and login interfaces, which is why a firewall setup is always recommended. If a firewall is activated it is necessary to have exceptions for ports 80,443, the subnet of the docker bridge which includes the Nextcloud containers, your public static IP (if you don't use DDNS) and if applicable your NC-Talk ports 3478 TCP+UDP:
|
||||
|
||||

|
||||
|
||||
@@ -156,13 +131,14 @@ The easiest way to run it with Portainer on Linux is to use Portainer's stacks f
|
||||
- It is known that the domain validation may not work correctly behind Cloudflare. You can simply skip it in that case by following: https://github.com/nextcloud/all-in-one#how-to-skip-the-domain-validation
|
||||
- Make sure to [disable Cloudflares Rocket Loader feature](https://help.nextcloud.com/t/login-page-not-working-solved/149417/8) as otherwise Nextcloud's login prompt will not be shown.
|
||||
- Cloudflare only supports uploading files up to 100 MB in the free plan, if you try to upload bigger files you will get an error (413 - Payload Too Large) if no chunking is used (e.g. for public uploads in the web, or if chunks are configured to be bigger than 100 MB in the clients or the web). If you need to upload bigger files, you need to disable the proxy option in your DNS settings, or you must use another proxy than Cloudflare tunnels. Both options will disable Cloudflare DDoS protection.
|
||||
- Cloudflare only allows a max timeout of 100s for requests which is not configurable. This means that any server-side processing e.g. for assembling chunks for big files during upload that take longer than 100s will simply not work. See https://github.com/nextcloud/server/issues/19223. If you need to upload big files reliably, you need to disable the proxy option in your DNS settings, or you must use another proxy than Cloudflare tunnels. Both options will disable Cloudflare DDoS protection.
|
||||
- It is known that the in AIO included collabora (Nextcloud Office) does not work out of the box behind Cloudflare. To make it work, you need to add all [Cloudflare IP-ranges](https://www.cloudflare.com/ips/) to the wopi-allowlist in `https://yourdomain.com/settings/admin/richdocuments`
|
||||
- The built-in High performance backend for Nextcloud Talk will potentially not work out-of-the-box since it needs a separate port (by default 3478 or as chosen) available on the same domain. If you still want to use the feature, you will need to adjust and test your settings in `https://yourdomain.com/settings/admin/talk`.
|
||||
- If you get an error in Nextcloud's admin overview that the HSTS header is not set correctly, you might need to enable it in Cloudflare manually.
|
||||
- If you are using AIO's built-in Reverse Proxy and don't use your own, then may the certificate issuing possibly not work out-of-the-box because Cloudflare might block the attempt. In that case you need to disable the Proxy feature at least temporarily in order to make it work. See https://github.com/nextcloud/all-in-one/discussions/1101.
|
||||
- The built-in High performance backend for Nextcloud Talk will potentially not work out-of-the-box since it needs a separate port (by default 3478 or as chosen) available on the same domain. If you still want to use the feature, you will need to adjust and test your settings in `https://yourdomain.com/settings/admin/talk`.
|
||||
|
||||
### How to run Nextcloud behind a Cloudflare Tunnel?
|
||||
Although it does not seems like it is the case but from AIO perspective a Cloudflare Tunnel works like a reverse proxy. So please follow the [reverse proxy documentation](./reverse-proxy.md) where is documented how to make it run behind a Cloudflare Tunnel.
|
||||
Although it does not seems like it is the case but from AIO perspective a Cloudflare Tunnel works like a reverse proxy. So please follow the [reverse proxy documentation](./reverse-proxy.md) where is documented how to make it run behind a Cloudflare Tunnel. Also see https://github.com/dani-garcia/vaultwarden/wiki/Running-a-private-vaultwarden-instance-with-Let%27s-Encrypt-certs#cloudflare-setup for additional docs on this topic.
|
||||
|
||||
### Disrecommended VPS providers
|
||||
- Stratos VPS crash/freeze/make errors when they reach an extremely low PID limit, which is very quickly reached by AIO, see [here](https://github.com/nextcloud/all-in-one/discussions/1747#discussioncomment-4716164), Strato does normally not increase this limit.
|
||||
@@ -172,12 +148,12 @@ Although it does not seems like it is the case but from AIO perspective a Cloudf
|
||||
In general recommended VPS are those that are KVM/non-virtualized as Docker should work best on them.
|
||||
|
||||
### Note on storage options
|
||||
- SD-cards are discrecommended for AIO since they cripple the performance and they are not meant for many write operations which is needed for the database and other parts
|
||||
- SD-cards are disrecommended for AIO since they cripple the performance and they are not meant for many write operations which is needed for the database and other parts
|
||||
- SSD storage is recommended
|
||||
- HDD storage should work as well but is of course much slower than SSD storage
|
||||
|
||||
### How to get Nextcloud running using the ACME DNS-challenge?
|
||||
You can install AIO in reverse proxy mode where is also documented how to get it running using the ACME DNS-challenge for getting a valid certificate for AIO. See the [reverse proxy documentation](./reverse-proxy.md). (Meant is the `Caddy with ACME DNS-challenge` section).
|
||||
You can install AIO in reverse proxy mode where is also documented how to get it running using the ACME DNS-challenge for getting a valid certificate for AIO. See the [reverse proxy documentation](./reverse-proxy.md). (Meant is the `Caddy with ACME DNS-challenge` section). Also see https://github.com/dani-garcia/vaultwarden/wiki/Running-a-private-vaultwarden-instance-with-Let%27s-Encrypt-certs#getting-a-custom-caddy-build for additional docs on this topic.
|
||||
|
||||
### How to run Nextcloud locally?
|
||||
If you do not want to open Nextcloud to the public internet, you may have a look at the following documentation how to set it up locally: [local-instance.md](./local-instance.md)
|
||||
@@ -188,7 +164,7 @@ No and they will not be. If you want to run it locally, without opening Nextclou
|
||||
### Can I use an ip-address for Nextcloud instead of a domain?
|
||||
No and it will not be added. If you only want to run it locally, you may have a look at the following documentation: [local-instance.md](./local-instance.md)
|
||||
|
||||
### Are other ports than then default 443 for Nextcloud supported?
|
||||
### Are other ports than the default 443 for Nextcloud supported?
|
||||
No and they will not be. Please use a dedicated domain for Nextcloud and set it up correctly by following the [reverse proxy documentation](./reverse-proxy.md). If port 443 and/or 80 is blocked for you, you may use the ACME DNS-challenge or a Cloudflare Tunnel.
|
||||
|
||||
### Can I run Nextcloud in a subdirectory on my domain?
|
||||
@@ -197,6 +173,7 @@ No and it will not be added. Please use a dedicated domain for Nextcloud and set
|
||||
### How can I access Nextcloud locally?
|
||||
The recommended way is to set up a local dns-server like a pi-hole and set up a custom dns-record for that domain that points to the internal ip-adddress of your server that runs Nextcloud AIO. Below are some guides:
|
||||
- https://www.howtogeek.com/devops/how-to-run-your-own-dns-server-on-your-local-network/
|
||||
- https://help.nextcloud.com/t/need-help-to-configure-internal-access/156075/6
|
||||
- https://howchoo.com/pi/pi-hole-setup together with https://docs.callitkarma.me/posts/PiHole-Local-DNS/
|
||||
- https://dockerlabs.collabnix.com/intermediate/networking/Configuring_DNS.html
|
||||
|
||||
@@ -229,7 +206,7 @@ Nextcloud features a built-in bruteforce protection which may get triggered and
|
||||
This project values stability over new features. That means that when a new major Nextcloud update gets introduced, we will wait at least until the first patch release, e.g. `24.0.1` is out before upgrading to it. Also we will wait with the upgrade until all important apps are compatible with the new major version. Minor or patch releases for Nextcloud and all dependencies as well as all containers will be updated to new versions as soon as possible but we try to give all updates first a good test round before pushing them. That means that it can take around 2 weeks before new updates reach the `latest` channel. If you want to help testing, you can switch to the `beta` channel by following [this documentation](#how-to-switch-the-channel) which will also give you the updates earlier.
|
||||
|
||||
### How to switch the channel?
|
||||
You can switch to a different channel like e.g. the beta channel or from the beta channel back to the latest channel by stopping the mastercontainer, removing it (no data will be lost) and recreating the container using the same command that you used initially to create the mastercontainer. For the beta channel on x64 you need to change the last line `nextcloud/all-in-one:latest` to `nextcloud/all-in-one:beta` and vice versa. For arm64 it is `nextcloud/all-in-one:latest-arm64` and `nextcloud/all-in-one:beta-arm64`, respectively.
|
||||
You can switch to a different channel like e.g. the beta channel or from the beta channel back to the latest channel by stopping the mastercontainer, removing it (no data will be lost) and recreating the container using the same command that you used initially to create the mastercontainer. You simply need to change the last line `nextcloud/all-in-one:latest` to `nextcloud/all-in-one:beta` and vice versa.
|
||||
|
||||
### How to update the containers?
|
||||
If we push new containers to `latest`, you will see in the AIO interface below the `containers` section that new container updates were found. In this case, just press `Stop containers` and `Start containers` in order to update the containers. The mastercontainer has its own update procedure though. See below. And don't forget to back up the current state of your instance using the built-in backup solution before starting the containers again! Otherwise you won't be able to restore your instance easily if something should break during the update.
|
||||
@@ -256,11 +233,14 @@ Here is how to reset the AIO instance properly:
|
||||
1. Stop all containers if they are running from the AIO interface
|
||||
1. Stop the mastercontainer with `sudo docker stop nextcloud-aio-mastercontainer`
|
||||
1. If the domaincheck container is still running, stop it with `sudo docker stop nextcloud-aio-domaincheck`
|
||||
1. Check that no AIO containers are running anymore by running `sudo docker ps --format {{.Names}}`. If no `nextcloud-aio` containers are listed, you can proceed with the steps below. If there should be some, you will need to stop them with `sudo docker stop <container_name>` until no one is listed anymore.
|
||||
1. Check which containers are stopped: `sudo docker ps --filter "status=exited"`
|
||||
1. Now remove all these stopped containers with `sudo docker container prune`
|
||||
1. Delete the docker network with `sudo docker network rm nextcloud-aio`
|
||||
1. Check which volumes are dangling with `sudo docker volume ls --filter "dangling=true"`
|
||||
1. Now remove all these dangling volumes: `sudo docker volume prune` (on Windows you might need to remove some volumes afterwards manually with `docker volume rm nextcloud_aio_backupdir`, `docker volume rm nextcloud_aio_nextcloud_datadir`). Also if you've configured `NEXTCLOUD_DATADIR` to a path on your host instead of the default volume, you need to clean that up as well.
|
||||
1. Now remove all these dangling volumes: `sudo docker volume prune` (on Windows you might need to remove some volumes afterwards manually with `docker volume rm nextcloud_aio_backupdir`, `docker volume rm nextcloud_aio_nextcloud_datadir`).
|
||||
1. If you've configured `NEXTCLOUD_DATADIR` to a path on your host instead of the default volume, you need to clean that up as well. (E.g. by simply deleting the directory).
|
||||
1. Make sure that no volumes are remaining with `sudo docker volume ls --format {{.Name}}`. If no `nextcloud-aio` volumes are listed, you can proceed with the steps below. If there should be some, you will need to stop them with `sudo docker volume rm <volume_name>` until no one is listed anymore.
|
||||
1. Optional: You can remove all docker images with `sudo docker image prune -a`.
|
||||
1. And you are done! Now feel free to start over with the recommended docker run command!
|
||||
|
||||
@@ -290,7 +270,16 @@ The backups itself get encrypted with an encryption key that gets shown to you i
|
||||
|
||||
Be aware that this solution does not back up files and folders that are mounted into Nextcloud using the external storage app.
|
||||
|
||||
Note that this implementation does not provide remote backups, for this you can use the [backup app](https://apps.nextcloud.com/apps/backup).
|
||||
---
|
||||
|
||||
#### Are remote borg backups supported?
|
||||
|
||||
Not directly but you have multiple options to achieve this:
|
||||
- Mount a network FS like SSHFS, SMB or NFS in the directory that you enter in AIO as backup directory
|
||||
- Use rsync or rclone for syncing the borg backup archive that AIO creates locally to a remote target (make sure to lock the backup archive correctly before starting the sync; search for "aio-lockfile"; you can find a local example script here: https://github.com/nextcloud/all-in-one#sync-the-backup-regularly-to-another-drive)
|
||||
- You can find a well written guide that uses rclone and e.g. BorgBase for remote backups here: https://github.com/nextcloud/all-in-one/discussions/2247
|
||||
- create your own backup solution using a script and borg, borgmatic or any other to backup tool for backing up to a remote target (make sure to stop and start the AIO containers correctly following https://github.com/nextcloud/all-in-one#how-to-enable-automatic-updates-without-creating-a-backup-beforehand)
|
||||
- Additionally, there is the [backup app](https://apps.nextcloud.com/apps/backup) for remote backups
|
||||
|
||||
---
|
||||
|
||||
@@ -338,7 +327,7 @@ sudo borg delete --stats --progress "/mnt/backup/borg::20220223_174237-nextcloud
|
||||
# If borg 1.2.0 or higher is installed, you then need to run borg compact in order to clean up the freed space
|
||||
sudo borg --version
|
||||
# If version number of the command above is higher than 1.2.0 you need to run the command below:
|
||||
sudo borg compact "/mnt/backup/"
|
||||
sudo borg compact "/mnt/backup/borg"
|
||||
|
||||
```
|
||||
|
||||
@@ -448,7 +437,7 @@ Afterwards apply the correct permissions with `sudo chown root:root /root/backup
|
||||
### How to stop/start/update containers or trigger the daily backup from a script externally?
|
||||
You can do so by running the `/daily-backup.sh` script that is stored in the mastercontainer. It accepts the following environmental varilables:
|
||||
- `AUTOMATIC_UPDATES` if set to `1`, it will automatically stop the containers, update them and start them including the mastercontainer. If the mastercontainer gets updated, this script's execution will stop as soon as the mastercontainer gets stopped. You can then wait until it is started again and run the script with this flag again in order to update all containers correctly afterwards.
|
||||
- `DAILY_BACKUP` if set to `1`, it will automatically stop the containers and create a backup. If you want to start them again afterwards, you may have a look at the `START_CONTAINERS` option. Please be aware that this option is non-blocking if `START_CONTAINERS` and `AUTOMATIC_UPDATES` is not enabled at the same time which means that the backup check is not done when the process is finished since it only start the borgbackup container with the correct configuration.
|
||||
- `DAILY_BACKUP` if set to `1`, it will automatically stop the containers and create a backup. If you want to start them again afterwards, you may have a look at the `START_CONTAINERS` option.
|
||||
- `START_CONTAINERS` if set to `1`, it will automatically start the containers without updating them.
|
||||
- `STOP_CONTAINERS` if set to `1`, it will automatically stop the containers.
|
||||
- `CHECK_BACKUP` if set to `1`, it will start the backup check. This is not allowed to be enabled at the same time like `DAILY_BACKUP`. Please be aware that this option is non-blocking which means that the backup check is not done when the process is finished since it only start the borgbackup container with the correct configuration.
|
||||
@@ -468,7 +457,8 @@ You can configure the Nextcloud container to use a specific directory on your ho
|
||||
- An example for Linux is `-e NEXTCLOUD_DATADIR="/mnt/ncdata"`.
|
||||
- On macOS it might be `-e NEXTCLOUD_DATADIR="/var/nextcloud-data"`
|
||||
- For Synology it may be `-e NEXTCLOUD_DATADIR="/volume1/docker/nextcloud/data"`.
|
||||
- On Windows it must be `-e NEXTCLOUD_DATADIR="nextcloud_aio_nextcloud_datadir"`. In order to use this, you need to create the `nextcloud_aio_nextcloud_datadir` volume beforehand:
|
||||
- On Windows it might be `-e NEXTCLOUD_DATADIR="/run/desktop/mnt/host/c/ncdata"`. (This path is equivalent to `C:\ncdata` on your Windows host so you need to translate the path accordingly. Hint: the path that you enter needs to start with `/run/desktop/mnt/host/`. Append to that the exact location on your windows host, e.g. `c/ncdata` which is equivalent to `C:\ncdata`.)
|
||||
- Another option is to provide a specific volume name here with: `-e NEXTCLOUD_DATADIR="nextcloud_aio_nextcloud_datadir"`. This volume needs to be created beforehand manually by you in order to be able to use it. e.g. with:
|
||||
```
|
||||
docker volume create ^
|
||||
--driver local ^
|
||||
@@ -477,16 +467,15 @@ You can configure the Nextcloud container to use a specific directory on your ho
|
||||
-o type="none" ^
|
||||
-o o="bind"
|
||||
```
|
||||
(The value `/host_mnt/c/your/data/path` in this example would be equivalent to `C:\your\data\path` on the Windows host. So you need to translate the path that you want to use into the correct format.) ⚠️️ **Attention**: Make sure that the path exists on the host before you create the volume! Otherwise everything will bug out!
|
||||
|
||||
### Can I use a CIFS/SMB share as Nextcloud's datadir?
|
||||
|
||||
Sure. Add this to the `/etc/fstab` file: <br>
|
||||
`<your-storage-host-and-subpath> <your-mount-dir> cifs rw,credentials=<your-credentials-file>,uid=33,gid=0,file_mode=0770,dir_mode=0770 0 0`<br>
|
||||
`<your-storage-host-and-subpath> <your-mount-dir> cifs rw,mfsymlinks,seal,credentials=<your-credentials-file>,uid=33,gid=0,file_mode=0770,dir_mode=0770 0 0`<br>
|
||||
(Of course you need to modify `<your-storage-host-and-subpath>`, `<your-mount-dir>` and `<your-credentials-file>` for your specific case.)
|
||||
|
||||
One example could look like this:<br>
|
||||
`//your-storage-host/subpath /mnt/storagebox cifs rw,credentials=/etc/storage-credentials,uid=33,gid=0,file_mode=0770,dir_mode=0770 0 0`<br>
|
||||
`//your-storage-host/subpath /mnt/storagebox cifs rw,mfsymlinks,seal,credentials=/etc/storage-credentials,uid=33,gid=0,file_mode=0770,dir_mode=0770 0 0`<br>
|
||||
and add into `/etc/storage-credentials`:
|
||||
```
|
||||
username=<smb/cifs username>
|
||||
@@ -500,10 +489,11 @@ Now you can use `/mnt/storagebox` as Nextcloud's datadir like described in the s
|
||||
By default, the Nextcloud container is confined and cannot access directories on the host OS. You might want to change this when you are planning to use local external storage in Nextcloud to store some files outside the data directory and can do so by adding the environmental variable `NEXTCLOUD_MOUNT` to the initial startup of the mastercontainer. Allowed values for that variable are strings that start with `/` and are not equal to `/`.
|
||||
|
||||
- Two examples for Linux are `-e NEXTCLOUD_MOUNT="/mnt/"` and `-e NEXTCLOUD_MOUNT="/media/"`.
|
||||
- On macOS it might be `-e NEXTCLOUD_MOUNT="/Volumes/your_drive/"`
|
||||
- For Synology it may be `-e NEXTCLOUD_MOUNT="/volume1/"`.
|
||||
- On Windows is this option not supported.
|
||||
- On Windows it might be `-e NEXTCLOUD_MOUNT="/run/desktop/mnt/host/d/your-folder/"`. (This path is equivalent to `D:\your-folder` on your Windows host so you need to translate the path accordingly. Hint: the path that you enter needs to start with `/run/desktop/mnt/host/`. Append to that the exact location on your windows host, e.g. `d/your-folder/` which is equivalent to `D:\your-folder`.)
|
||||
|
||||
After using this option, please make sure to apply the correct permissions to the directories that you want to use in Nextcloud. E.g. `sudo chown -R 33:0 /mnt/your-drive-mountpoint` and `sudo chmod -R 750 /mnt/your-drive-mountpoint` should make it work on Linux when you have used `-e NEXTCLOUD_MOUNT="/mnt/"`.
|
||||
After using this option, please make sure to apply the correct permissions to the directories that you want to use in Nextcloud. E.g. `sudo chown -R 33:0 /mnt/your-drive-mountpoint` and `sudo chmod -R 750 /mnt/your-drive-mountpoint` should make it work on Linux when you have used `-e NEXTCLOUD_MOUNT="/mnt/"`. On Windows you could do this e.g. with `docker exec -it nextcloud-aio-nextcloud chown -R 33:0 /run/desktop/mnt/host/d/your-folder/` and `docker exec -it nextcloud-aio-nextcloud chmod -R 750 /run/desktop/mnt/host/d/your-folder/`.
|
||||
|
||||
You can then navigate to the apps management page, activate the external storage app, navigate to `https://your-nc-domain.com/settings/admin/externalstorages` and add a local external storage directory that will be accessible inside the container at the same place that you've entered. E.g. `/mnt/your-drive-mountpoint` will be mounted to `/mnt/your-drive-mountpoint` inside the container, etc.
|
||||
|
||||
@@ -526,11 +516,17 @@ By default is each PHP process in the Nextcloud container limited to a max of 51
|
||||
### What can I do to fix the internal or reserved ip-address error?
|
||||
If you get an error during the domain validation which states that your ip-address is an internal or reserved ip-address, you can fix this by first making sure that your domain indeed has the correct public ip-address that points to the server and then adding `--add-host yourdomain.com:<public-ip-address>` to the initial docker run command which will allow the domain validation to work correctly. And so that you know: even if the `A` record of your domain should change over time, this is no problem since the mastercontainer will not make any attempt to access the chosen domain after the initial domain validation.
|
||||
|
||||
### How to run this with docker rootless?
|
||||
### Can I run this with Docker swarm?
|
||||
Yes. For that to work, you need to use and follow the [manual-install documentation](./manual-install/).
|
||||
|
||||
### How to run this with Docker rootless?
|
||||
You can run AIO also with docker rootless. How to do this is documented here: [docker-rootless.md](https://github.com/nextcloud/all-in-one/blob/main/docker-rootless.md)
|
||||
|
||||
### Can I run this with Podman instead of Docker?
|
||||
No. Since Podman is not 100% compatible with the Docker API, you cannot use Podman instead of Docker (since that would add yet another platform where the maintaner would need to test on). However you can use and follow the [manual-install documentation](./manual-install/) to get AIO's containers running with Podman or use Docker rootless, as described in the above section.
|
||||
|
||||
### How to change the Nextcloud apps that are installed on the first startup?
|
||||
You might want to adjust the Nextcloud apps that are installed upon the first startup of the Nextcloud container. You can do so by adding `-e NEXTCLOUD_STARTUP_APPS="deck twofactor_totp tasks calendar contacts"` to the docker run command of the mastercontainer and customize the value to your fitting. It must be a string with small letters a-z, spaces and hyphens or '_'. You can disable shipped and by default enabled apps by adding a hyphen in front of the appid. E.g. `-contactsinteraction`.
|
||||
You might want to adjust the Nextcloud apps that are installed upon the first startup of the Nextcloud container. You can do so by adding `-e NEXTCLOUD_STARTUP_APPS="deck twofactor_totp tasks calendar contacts"` to the docker run command of the mastercontainer and customize the value to your fitting. It must be a string with small letters a-z, 0-9, spaces and hyphens or '_'. You can disable shipped and by default enabled apps by adding a hyphen in front of the appid. E.g. `-contactsinteraction`.
|
||||
|
||||
### How to add OS packages permanently to the Nextcloud container?
|
||||
Some Nextcloud apps require additional external dependencies that must be bundled within Nextcloud container in order to work correctly. As we cannot put each and every dependency for all apps into the container - as this would make the project very fast unmaintainable - there is an official way how you can add additional dependencies into the Nextcloud container. However note that doing this is disrecommended since we do not test Nextcloud apps that require external dependencies.
|
||||
|
||||
@@ -1,20 +1,22 @@
|
||||
# Reverse Proxy Documentation
|
||||
|
||||
A [reverse proxy](https://en.wikipedia.org/wiki/Reverse_proxy) is basically a web server that enables computers on the internet to access a service in a [private subnet](https://en.wikipedia.org/wiki/Private_network).
|
||||
|
||||
**Please note:** Publishing the AIO interface with a valid certificate to the public internet is **not** the goal of this documentation! Instead, the main goal is to publish Nextcloud with a valid certificate to the public internet which is **not** running inside the mastercontainer but in a different container! If you need a valid certificate for the AIO interface, see [point 5](#5-optional-get-a-valid-certificate-for-the-aio-interface).
|
||||
|
||||
In order to run Nextcloud behind a reverse proxy, you need to specify the port that the Apache container shall use, add a specific config to your reverse proxy and modify the startup command a bit. All examples below will use port `11000` as example Apache port which will be exposed on the host. Modify it to your needings.
|
||||
In order to run Nextcloud behind a web server or reverse proxy (like Apache, Nginx and else), you need to specify the port that AIO's Apache container shall use, add a specific config to your web server or reverse proxy and modify the startup command a bit. All examples below will use port `11000` as example Apache port which will be exposed on the host. Modify the port to your needings.
|
||||
|
||||
**Attention:** The process to run Nextcloud behind a reverse proxy consists of at least steps 1, 2 and 4:
|
||||
1. **Configure the reverse proxy! See [point 1](#1-add-this-to-your-reverse-proxy-config)**
|
||||
1. **Use the in this document provided startup command! See [point 2](#2-use-this-startup-command)**
|
||||
1. Optional: If the reverse proxy is installed on the same host, you should limit the apache container to only listen on localhost. See [point 3](#3-if-the-reverse-proxy-is-installed-on-the-same-host-you-should-configure-the-apache-container-to-only-listen-on-localhost)
|
||||
1. Optional: If the reverse proxy is installed on the same host and in the host network, you should limit the apache container to only listen on localhost. See [point 3](#3-limit-the-access-to-the-apache-container)
|
||||
1. **Open the AIO interface. See [point 4](#4-open-the-aio-interface)**
|
||||
1. Optional: Get a valid certificate for the AIO interface! See [point 5](#5-optional-get-a-valid-certificate-for-the-aio-interface)
|
||||
1. Optional: How to debug things? See [point 6](#6-how-to-debug-things)
|
||||
|
||||
## 1. Add this to your reverse proxy config
|
||||
|
||||
**Please note:** Since the Apache container gets spawned by the mastercontainer, there is **NO** way to provide custom docker labels or custom environmental variables for the Apache container. So please do not attempt to do this because you will fail! Only the documented way will work!
|
||||
**Please note:** Since the Apache container gets created by the mastercontainer, there is **NO** way to provide custom docker labels or custom environmental variables for the Apache container. So please do not attempt to do this because you will fail! Only the documented way will work!
|
||||
|
||||
### Apache
|
||||
|
||||
@@ -46,7 +48,10 @@ Add this as a new Apache site config:
|
||||
RewriteEngine On
|
||||
ProxyPreserveHost On
|
||||
AllowEncodedSlashes NoDecode
|
||||
|
||||
ProxyPass / http://localhost:11000/ nocanon
|
||||
ProxyPassReverse / http://localhost:11000/
|
||||
|
||||
RewriteCond %{HTTP:Upgrade} websocket [NC]
|
||||
RewriteCond %{HTTP:Connection} upgrade [NC]
|
||||
RewriteCond %{THE_REQUEST} "^[a-zA-Z]+ /(.*) HTTP/\d+(\.\d+)?$"
|
||||
@@ -267,7 +272,6 @@ server {
|
||||
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Port $server_port;
|
||||
proxy_set_header Early-Data $ssl_early_data;
|
||||
proxy_set_header X-Forwarded-Scheme $scheme;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
@@ -287,7 +291,6 @@ server {
|
||||
ssl_certificate /etc/letsencrypt/live/<your-nc-domain>/fullchain.pem; # managed by certbot on host machine
|
||||
ssl_certificate_key /etc/letsencrypt/live/<your-nc-domain>/privkey.pem; # managed by certbot on host machine
|
||||
|
||||
ssl_early_data on;
|
||||
ssl_session_timeout 1d;
|
||||
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
|
||||
ssl_session_tickets off;
|
||||
@@ -428,8 +431,6 @@ The examples below define the dynamic configuration in YAML files. If you rather
|
||||
hostsProxyHeaders:
|
||||
- "X-Forwarded-Host"
|
||||
referrerPolicy: "same-origin"
|
||||
customResponseHeaders:
|
||||
X-Robots-Tag: "none"
|
||||
|
||||
https-redirect:
|
||||
redirectscheme:
|
||||
@@ -446,9 +447,11 @@ The examples below define the dynamic configuration in YAML files. If you rather
|
||||
---
|
||||
|
||||
Of course you need to modify `<your-nextcloud-domain>` in the `nextcloud.yml` to the domain on which you want to run Nextcloud. Also make sure to adjust the port `11000` to match the chosen `APACHE_PORT`.
|
||||
|
||||
|
||||
**Please note:** The above configuration will only work if your reverse proxy is running directly on the host that is running the docker daemon. If the reverse proxy is running in a docker container, you can use the `--network host` option (or `network_mode: host` for docker-compose) when starting the reverse proxy container in order to connect the reverse proxy container to the host network. If that is not an option for you, you can alternatively instead of `localhost` use the ip-address that is displayed after running the following command on the host OS: `ip a | grep "scope global" | head -1 | awk '{print $2}' | sed 's|/.*||'` (the command only works on Linux)
|
||||
|
||||
**Hint:** Possibly the following link is useful to understand how AIO configures things: https://github.com/nextcloud/all-in-one/blob/main/manual-install/latest.yml
|
||||
|
||||
</details>
|
||||
|
||||
### Others
|
||||
@@ -468,38 +471,22 @@ After adjusting your reverse proxy config, use the following command to start AI
|
||||
(For an docker-compose example, see the example further [below](#inspiration-for-a-docker-compose-file).)
|
||||
|
||||
```
|
||||
# For x64 CPUs:
|
||||
# For Linux:
|
||||
sudo docker run \
|
||||
--sig-proxy=false \
|
||||
--name nextcloud-aio-mastercontainer \
|
||||
--restart always \
|
||||
--publish 8080:8080 \
|
||||
-e APACHE_PORT=11000 \
|
||||
-e APACHE_IP_BINDING=0.0.0.0 \
|
||||
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
|
||||
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
|
||||
nextcloud/all-in-one:latest
|
||||
```
|
||||
|
||||
You should also think about limiting the apache container to listen only on localhost in case the reverse proxy is running on the same host by providing an additional environmental variable to this docker run command. See [point 3](#3-if-the-reverse-proxy-is-installed-on-the-same-host-you-should-configure-the-apache-container-to-only-listen-on-localhost).
|
||||
Note: You may be interested in adjusting Nextcloud’s datadir to store the files in a different location than the default docker volume. See [this documentation](https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir) on how to do it.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Command for arm64 CPUs like the Raspberry Pi 4</summary>
|
||||
|
||||
```
|
||||
# For arm64 CPUs:
|
||||
sudo docker run \
|
||||
--sig-proxy=false \
|
||||
--name nextcloud-aio-mastercontainer \
|
||||
--restart always \
|
||||
--publish 8080:8080 \
|
||||
-e APACHE_PORT=11000 \
|
||||
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
|
||||
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
|
||||
nextcloud/all-in-one:latest-arm64
|
||||
```
|
||||
|
||||
</details>
|
||||
You should also think about limiting the apache container to listen only on localhost in case the reverse proxy is running on the same host and in the host network, by providing an additional environmental variable to this docker run command. See [point 3](#3-limit-the-access-to-the-apache-container).
|
||||
|
||||
On macOS see https://github.com/nextcloud/all-in-one#how-to-run-aio-on-macos.
|
||||
|
||||
@@ -514,6 +501,7 @@ docker run ^
|
||||
--restart always ^
|
||||
--publish 8080:8080 ^
|
||||
-e APACHE_PORT=11000 ^
|
||||
-e APACHE_IP_BINDING=0.0.0.0 ^
|
||||
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config ^
|
||||
--volume //var/run/docker.sock:/var/run/docker.sock:ro ^
|
||||
nextcloud/all-in-one:latest
|
||||
@@ -529,9 +517,9 @@ On Synology DSM see https://github.com/nextcloud/all-in-one#how-to-run-aio-on-sy
|
||||
|
||||
Simply translate the docker run command into a docker-compose file. You can have a look at [this file](https://github.com/nextcloud/all-in-one/blob/main/docker-compose.yml) for some inspiration but you will need to modify it either way. You can find further examples here: https://github.com/nextcloud/all-in-one/discussions/588
|
||||
|
||||
## 3. If the reverse proxy is installed on the same host, you should configure the apache container to only listen on localhost.
|
||||
## 3. Limit the access to the apache container
|
||||
|
||||
Use this envorinmental variable during the initial startup of the mastercontainer to make the apache container only listen on localhost: `-e APACHE_IP_BINDING=127.0.0.1`. **Attention:** This is only recommended to be set if you use `localhost` in your reverse proxy config to connect to your AIO instance. If you use an ip-address, you can either simply skip this step or set it to `0.0.0.0` if you are unsure what the correct value is.
|
||||
Use this envorinmental variable during the initial startup of the mastercontainer to make the apache container only listen on localhost: `-e APACHE_IP_BINDING=127.0.0.1`. **Attention:** This is only recommended to be set if you use `localhost` in your reverse proxy config to connect to your AIO instance. If you use an ip-address instead of localhost, you should set it to `0.0.0.0`.
|
||||
|
||||
## 4. Open the AIO interface.
|
||||
After starting AIO, you should be able to access the AIO Interface via `https://ip.address.of.the.host:8080`. Enter your domain that you've entered in the reverse proxy config and you should be done. Please do not forget to open port `3478/TCP` and `3478/UDP` in your firewall/router for the Talk container!
|
||||
|
||||
Reference in New Issue
Block a user