mirror of
https://github.com/nextcloud/all-in-one.git
synced 2026-05-21 19:00:33 +00:00
Compare commits
306 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c16d15ee19 | ||
|
|
42affc7d73 | ||
|
|
166dc3a17c | ||
|
|
b7bd7132bd | ||
|
|
5e160b1bfe | ||
|
|
3538f55fc3 | ||
|
|
d106673e78 | ||
|
|
b7c5e0b953 | ||
|
|
c6f78ed87c | ||
|
|
2d11b6298e | ||
|
|
97e29274e8 | ||
|
|
2e87b41672 | ||
|
|
0a3db74971 | ||
|
|
24cfe38c8d | ||
|
|
955d486ade | ||
|
|
680dbc5432 | ||
|
|
7b7e3fdc04 | ||
|
|
66ce6cb03f | ||
|
|
89b3495740 | ||
|
|
251f0b89a0 | ||
|
|
3644e6f55e | ||
|
|
571b2feded | ||
|
|
417ebc5bae | ||
|
|
7a85532755 | ||
|
|
a1727d3f4f | ||
|
|
a8ed5d3dc8 | ||
|
|
799936e0be | ||
|
|
5e3ef12afb | ||
|
|
bc0570440e | ||
|
|
147564e6ff | ||
|
|
373f9e3c24 | ||
|
|
3dec47dc04 | ||
|
|
c3e71f2c19 | ||
|
|
776e350e52 | ||
|
|
8151b4a212 | ||
|
|
cc66d0dc4b | ||
|
|
d564202efb | ||
|
|
0a5c4d3d99 | ||
|
|
ec2603b3f7 | ||
|
|
cbba4cc2e6 | ||
|
|
0097abaed0 | ||
|
|
0a9ebc434a | ||
|
|
2d22e4a391 | ||
|
|
9ffb158bd2 | ||
|
|
f99136f553 | ||
|
|
066ecbfb11 | ||
|
|
a243a97bb6 | ||
|
|
db1f3e7759 | ||
|
|
1c595ab2ef | ||
|
|
3b85c59a68 | ||
|
|
0ad2591f53 | ||
|
|
370f4199c0 | ||
|
|
86ac831bb2 | ||
|
|
09d2dc3aba | ||
|
|
3fa798f192 | ||
|
|
3beba99734 | ||
|
|
75a32f6cf0 | ||
|
|
e22afe6031 | ||
|
|
8e42220e4e | ||
|
|
3bdbe7d59e | ||
|
|
4ff9d1b136 | ||
|
|
193cc26a32 | ||
|
|
997360da7f | ||
|
|
3b52620c8d | ||
|
|
52af926984 | ||
|
|
d9e923de0b | ||
|
|
65bb0cdf91 | ||
|
|
421d329e35 | ||
|
|
ad1d90d2d7 | ||
|
|
14b598adc4 | ||
|
|
81e0490e63 | ||
|
|
e28ef49663 | ||
|
|
daed2bdfb4 | ||
|
|
20167ab914 | ||
|
|
fde954be51 | ||
|
|
cf426fdabb | ||
|
|
4f253b5d31 | ||
|
|
dd053182f9 | ||
|
|
276a85421a | ||
|
|
cfd8d7c041 | ||
|
|
ec9e4d4dc3 | ||
|
|
051f202fdf | ||
|
|
adba1d645f | ||
|
|
c520db97c4 | ||
|
|
89e0be6f06 | ||
|
|
4bac9b29fc | ||
|
|
a99ecaa4cc | ||
|
|
b011c47abe | ||
|
|
541fad9bab | ||
|
|
bf24c10e9a | ||
|
|
3c105d5683 | ||
|
|
44e7f6c76a | ||
|
|
2502d22960 | ||
|
|
8c2b1316fd | ||
|
|
5dd2859ab1 | ||
|
|
cab4d8b1c4 | ||
|
|
83729f5ecb | ||
|
|
c2f34a33dc | ||
|
|
9c2ac69eac | ||
|
|
607a07d2e2 | ||
|
|
00adb7df2c | ||
|
|
f89d62abb2 | ||
|
|
bcf0f92d87 | ||
|
|
2be6e39ce3 | ||
|
|
713d48eecd | ||
|
|
17caf685e6 | ||
|
|
9bef36ca90 | ||
|
|
fad2558690 | ||
|
|
a984d9e520 | ||
|
|
3831c275d9 | ||
|
|
c6efd29faf | ||
|
|
c889d5a514 | ||
|
|
06eed79939 | ||
|
|
d7bb4d65df | ||
|
|
971afa4d80 | ||
|
|
a0627fdeca | ||
|
|
1f98b4ffb2 | ||
|
|
9af7be6d89 | ||
|
|
c613febbff | ||
|
|
a7989059d5 | ||
|
|
c14be6cbd8 | ||
|
|
632fb6b35d | ||
|
|
1750e29084 | ||
|
|
46f2847679 | ||
|
|
53defc5579 | ||
|
|
464b7be5f6 | ||
|
|
986f9030ea | ||
|
|
ca9ae69247 | ||
|
|
968097b692 | ||
|
|
7a78c4176b | ||
|
|
25716242d3 | ||
|
|
d0b5a03dd7 | ||
|
|
06bb29362d | ||
|
|
4ee68dfc2c | ||
|
|
fcaaa64555 | ||
|
|
53f0b6127b | ||
|
|
98b3759e15 | ||
|
|
f579080d29 | ||
|
|
45b75f91e5 | ||
|
|
b3264e7390 | ||
|
|
48b852149a | ||
|
|
82a53ab139 | ||
|
|
694a3f6356 | ||
|
|
9ccd6949ce | ||
|
|
3396c83df4 | ||
|
|
f0555b8b53 | ||
|
|
73526b92d4 | ||
|
|
b2b1753101 | ||
|
|
7e03bb4a7f | ||
|
|
4f7f1cb0a6 | ||
|
|
65e864479a | ||
|
|
9b1421980f | ||
|
|
45691e31df | ||
|
|
a9befa0359 | ||
|
|
1d6ba6dcc2 | ||
|
|
69e7de3cc0 | ||
|
|
13ddc5c524 | ||
|
|
561220e880 | ||
|
|
9a207eab29 | ||
|
|
56e3f27d6c | ||
|
|
3bc0b30778 | ||
|
|
5583f88d9c | ||
|
|
12e8266f98 | ||
|
|
8521b84008 | ||
|
|
d8b036bd61 | ||
|
|
623ce23264 | ||
|
|
f1c683a0db | ||
|
|
6eea28682c | ||
|
|
9c4116319d | ||
|
|
acd54544ca | ||
|
|
5a842af004 | ||
|
|
875de7dfce | ||
|
|
fa67e0a719 | ||
|
|
685ca196e0 | ||
|
|
a073033577 | ||
|
|
9fb238ac4d | ||
|
|
5ad7ee9cb3 | ||
|
|
0bbe867cad | ||
|
|
f3358fbe0a | ||
|
|
d637827c59 | ||
|
|
009f05f753 | ||
|
|
9d1ca231f0 | ||
|
|
a797f624ec | ||
|
|
ad570de0b1 | ||
|
|
b3470fe6a8 | ||
|
|
cbd86136cc | ||
|
|
dc77a2732c | ||
|
|
2556f38833 | ||
|
|
aff48b3479 | ||
|
|
68f64397ea | ||
|
|
b1eb97dc4b | ||
|
|
ac5a59c5b9 | ||
|
|
71e77c2147 | ||
|
|
3caec56d93 | ||
|
|
8ca525d333 | ||
|
|
f15f90f6df | ||
|
|
50779a329a | ||
|
|
80e689dc1f | ||
|
|
f430660ba2 | ||
|
|
d7ed356548 | ||
|
|
c1e3e65cdc | ||
|
|
5be23abaff | ||
|
|
a05c2bffcd | ||
|
|
529abf79e3 | ||
|
|
0ab721f1d6 | ||
|
|
c5ff752174 | ||
|
|
1446c31004 | ||
|
|
3ea04196b3 | ||
|
|
e9d8e1845a | ||
|
|
216f8a1272 | ||
|
|
d318c6e53a | ||
|
|
625faf7cae | ||
|
|
9add1c1148 | ||
|
|
4953ce95c6 | ||
|
|
70f27ae304 | ||
|
|
56bb0771da | ||
|
|
3604730d0b | ||
|
|
8190482718 | ||
|
|
852a80dc0c | ||
|
|
aac2ad10ff | ||
|
|
07faad0ab2 | ||
|
|
6bbbe68fdb | ||
|
|
e8b85917c0 | ||
|
|
87381bbfa3 | ||
|
|
e742549bf1 | ||
|
|
2e19b5ab58 | ||
|
|
ba6195815e | ||
|
|
ccc953d183 | ||
|
|
93f14608f3 | ||
|
|
3671cc9fe6 | ||
|
|
0368ce7ef9 | ||
|
|
0f9b230c9b | ||
|
|
78e7af4ae0 | ||
|
|
bacd8218a0 | ||
|
|
df068a809b | ||
|
|
af084c7c39 | ||
|
|
18804f8a79 | ||
|
|
6733a7407c | ||
|
|
a51d43c074 | ||
|
|
c14fa9d4b4 | ||
|
|
23d5267375 | ||
|
|
8f54de363f | ||
|
|
cf1efa9bb0 | ||
|
|
27d99efebf | ||
|
|
9a9d83825a | ||
|
|
0ea456ace1 | ||
|
|
e61b55ceab | ||
|
|
0e9d9ac215 | ||
|
|
a4ad1bfe9a | ||
|
|
bd550313bd | ||
|
|
28b1e249a8 | ||
|
|
0b50fbd7f1 | ||
|
|
e2dd2f8fcf | ||
|
|
c854e68188 | ||
|
|
675de94bcf | ||
|
|
d18b58d2a1 | ||
|
|
c50132a27a | ||
|
|
525a1be836 | ||
|
|
d037ebba66 | ||
|
|
e5a6449a34 | ||
|
|
a32b5c1bcf | ||
|
|
b85bdbbf1d | ||
|
|
bbcdb5172c | ||
|
|
8bd7e11ba8 | ||
|
|
16db14f72f | ||
|
|
f507329e45 | ||
|
|
52e70ac6b8 | ||
|
|
3696e08d27 | ||
|
|
aff5b08522 | ||
|
|
ef43d19a27 | ||
|
|
8c85e1ef2e | ||
|
|
a1680e9e3a | ||
|
|
16514bf07f | ||
|
|
fc47aa468a | ||
|
|
41bf7bdd3c | ||
|
|
f49634f0ea | ||
|
|
72856c4eeb | ||
|
|
6b0ee8566a | ||
|
|
2d41a606dd | ||
|
|
cc606bce8d | ||
|
|
c1bd5add9d | ||
|
|
3fbd54989a | ||
|
|
4570a43560 | ||
|
|
dc0ae75833 | ||
|
|
61e9e4e7c0 | ||
|
|
cdb245c9c6 | ||
|
|
955a3c25a2 | ||
|
|
66dfd9df8e | ||
|
|
e4de4dcb67 | ||
|
|
3e04dd5c2e | ||
|
|
5be582e327 | ||
|
|
8fe4406e90 | ||
|
|
4c8e6c07de | ||
|
|
9d1e8faf5c | ||
|
|
023ecce72f | ||
|
|
8dbdc8bb77 | ||
|
|
205c7eb6d2 | ||
|
|
9f2b61ee07 | ||
|
|
a8a80cbd72 | ||
|
|
65a9fe4c95 | ||
|
|
5e581d89f1 | ||
|
|
5c058691bd | ||
|
|
ccad3bc98c | ||
|
|
32690ae48f | ||
|
|
5e96aad3fd | ||
|
|
e4c5b12982 |
9
.github/dependabot.yml
vendored
9
.github/dependabot.yml
vendored
@@ -108,6 +108,15 @@ updates:
|
||||
labels:
|
||||
- 3. to review
|
||||
- dependencies
|
||||
- package-ecosystem: "docker"
|
||||
directory: "/Containers/talk-recording"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
time: "12:00"
|
||||
open-pull-requests-limit: 10
|
||||
labels:
|
||||
- 3. to review
|
||||
- dependencies
|
||||
- package-ecosystem: "docker"
|
||||
directory: "/Containers/watchtower"
|
||||
schedule:
|
||||
|
||||
20
.github/workflows/codespell.yml
vendored
Normal file
20
.github/workflows/codespell.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: 'Codespell'
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
codespell:
|
||||
name: Check spelling
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- name: Check spelling
|
||||
uses: codespell-project/actions-codespell@v2
|
||||
with:
|
||||
check_filenames: true
|
||||
check_hidden: true
|
||||
8
.github/workflows/command-rebase.yml
vendored
8
.github/workflows/command-rebase.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Add reaction on start
|
||||
uses: peter-evans/create-or-update-comment@v3
|
||||
uses: peter-evans/create-or-update-comment@c6c9a1a66007646a28c153e2a8580a5bad27bcfa # v3.0.2
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
repository: ${{ github.event.repository.full_name }}
|
||||
@@ -31,18 +31,18 @@ jobs:
|
||||
reaction-type: "+1"
|
||||
|
||||
- name: Checkout the latest code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
- name: Automatic Rebase
|
||||
uses: cirrus-actions/rebase@1.8
|
||||
uses: cirrus-actions/rebase@b87d48154a87a85666003575337e27b8cd65f691 # 1.8
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
- name: Add reaction on failure
|
||||
uses: peter-evans/create-or-update-comment@v3
|
||||
uses: peter-evans/create-or-update-comment@c6c9a1a66007646a28c153e2a8580a5bad27bcfa # v3.0.2
|
||||
if: failure()
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
54
.github/workflows/create-psalm-container.yml
vendored
54
.github/workflows/create-psalm-container.yml
vendored
@@ -1,54 +0,0 @@
|
||||
name: Create Psalm Container
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '5 4 * * *'
|
||||
|
||||
jobs:
|
||||
push_to_registry:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: Create Psalm Container
|
||||
|
||||
permissions:
|
||||
packages: write
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- name: Check out the repo
|
||||
run: |
|
||||
git clone https://github.com/psalm/psalm-github-actions.git
|
||||
|
||||
- name: Modify the Dockerfile
|
||||
run: |
|
||||
set -x
|
||||
sed -i 's|FROM php:7.4-alpine|FROM php:8.2-alpine|' "psalm-github-actions/Dockerfile"
|
||||
cat << APCU >> "psalm-github-actions/Dockerfile"
|
||||
RUN mkdir -p /usr/src/php/ext/apcu && \
|
||||
curl -fsSL https://pecl.php.net/get/apcu | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \
|
||||
docker-php-ext-install apcu
|
||||
APCU
|
||||
|
||||
- name: Log in to GitHub Docker Registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: docker.pkg.github.com
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Log in to GitHub Container Registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build container image
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
push: true
|
||||
context: 'psalm-github-actions'
|
||||
file: 'psalm-github-actions/Dockerfile'
|
||||
tags: |
|
||||
ghcr.io/nextcloud/all-in-one-psalm:latest
|
||||
54
.github/workflows/docker-lint.yml
vendored
Normal file
54
.github/workflows/docker-lint.yml
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
name: Docker Lint
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'Containers/**'
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'Containers/**'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: docker-lint-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
docker-lint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: docker-lint
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install npm and dockerfilelint
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install nodejs npm -y --no-install-recommends
|
||||
npm install -g dockerfilelint
|
||||
wget https://github.com/replicatedhq/dockerfilelint/pull/184.patch -O /usr/local/lib/node_modules/dockerfilelint/184.patch
|
||||
CURRENT_DIR=$PWD
|
||||
cd /usr/local/lib/node_modules/dockerfilelint/
|
||||
git apply 184.patch
|
||||
cd $CURRENT_DIR
|
||||
cat << RULES > ./.dockerfilelintrc
|
||||
rules:
|
||||
sudo_usage: off
|
||||
RULES
|
||||
|
||||
- name: run lint
|
||||
run: |
|
||||
DOCKERFILES="$(find ./Containers -name Dockerfile)"
|
||||
mapfile -t DOCKERFILES <<< "$DOCKERFILES"
|
||||
for file in "${DOCKERFILES[@]}"; do
|
||||
dockerfilelint "$file" --config ./ | tee -a ./dockerfilelint.log
|
||||
done
|
||||
if grep "^Issues: [0-9]" ./dockerfilelint.log; then
|
||||
exit 1
|
||||
fi
|
||||
2
.github/workflows/imaginary-update.yml
vendored
2
.github/workflows/imaginary-update.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
||||
| cut -f1 \
|
||||
| tail -1
|
||||
)"
|
||||
sed -i "s|go install github.com/h2non/imaginary.*;|go install github.com/h2non/imaginary@$imaginary_version;|" ./Containers/imaginary/Dockerfile
|
||||
sed -i "s|^ENV IMAGINARY_HASH.*$|ENV IMAGINARY_HASH $imaginary_version|" ./Containers/imaginary/Dockerfile
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
|
||||
9
.github/workflows/json-validator.yml
vendored
9
.github/workflows/json-validator.yml
vendored
@@ -2,12 +2,16 @@ name: Json Validator
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- '**.json'
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- '**.json'
|
||||
|
||||
jobs:
|
||||
psalm:
|
||||
json-validator:
|
||||
name: Json Validator
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -15,6 +19,7 @@ jobs:
|
||||
uses: actions/checkout@v3
|
||||
- name: Validate Json
|
||||
run: |
|
||||
sudo apt-get install python3-pip --no-install-recommends
|
||||
sudo apt-get update
|
||||
sudo apt-get install python3-pip -y --no-install-recommends
|
||||
sudo pip3 install json-spec
|
||||
json validate --schema-file=php/containers-schema.json --document-file=php/containers.json
|
||||
|
||||
19
.github/workflows/lint-php.yml
vendored
19
.github/workflows/lint-php.yml
vendored
@@ -3,18 +3,22 @@
|
||||
# https://github.com/nextcloud/.github
|
||||
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
|
||||
|
||||
name: PHP Lint
|
||||
name: Lint php
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'php/**'
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'php/**'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
concurrency:
|
||||
group: lint-php-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
@@ -23,24 +27,27 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ["8.2"]
|
||||
php-versions: [ "8.2" ]
|
||||
|
||||
name: php-lint
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@v2
|
||||
uses: shivammathur/setup-php@c5fc0d8281aba02c7fda07d3a70cc5371548067d # v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Lint
|
||||
run: cd php && composer run lint
|
||||
|
||||
summary:
|
||||
php-lint-summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -3,12 +3,16 @@ name: PHP Deprecation Detector
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'php/**'
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'php/**'
|
||||
|
||||
jobs:
|
||||
psalm:
|
||||
phpdd:
|
||||
name: PHP Deprecation Detector
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
28
.github/workflows/psalm-analysis.yml
vendored
28
.github/workflows/psalm-analysis.yml
vendored
@@ -1,28 +0,0 @@
|
||||
name: Psalm Analysis
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
psalm:
|
||||
name: Psalm
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up php8.2
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: 8.2
|
||||
extensions: apcu
|
||||
coverage: none
|
||||
|
||||
- name: Run script
|
||||
run: |
|
||||
set -x
|
||||
cd php
|
||||
composer global require vimeo/psalm --prefer-dist --no-progress --dev
|
||||
composer install
|
||||
composer run psalm
|
||||
25
.github/workflows/psalm-security.yml
vendored
25
.github/workflows/psalm-security.yml
vendored
@@ -1,25 +0,0 @@
|
||||
name: Psalm Security Analysis
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
psalm:
|
||||
name: Psalm
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
- name: Psalm
|
||||
uses: docker://ghcr.io/nextcloud/all-in-one-psalm
|
||||
with:
|
||||
relative_dir: php
|
||||
security_analysis: true
|
||||
composer_ignore_platform_reqs: false
|
||||
report_file: results.sarif
|
||||
- name: Upload Security Analysis results to GitHub
|
||||
uses: github/codeql-action/upload-sarif@v2
|
||||
with:
|
||||
sarif_file: php/results.sarif
|
||||
47
.github/workflows/psalm.yml
vendored
Normal file
47
.github/workflows/psalm.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
# This workflow is provided via the organization template repository
|
||||
#
|
||||
# https://github.com/nextcloud/.github
|
||||
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
|
||||
|
||||
name: Static analysis
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'php/**'
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'php/**'
|
||||
|
||||
concurrency:
|
||||
group: psalm-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
static-analysis:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: Nextcloud
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@c5fc0d8281aba02c7fda07d3a70cc5371548067d # v2
|
||||
with:
|
||||
php-version: 8.2
|
||||
extensions: apcu
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Install dependencies and run psalm
|
||||
run: |
|
||||
set -x
|
||||
cd php
|
||||
composer global require vimeo/psalm --prefer-dist --no-progress --dev
|
||||
composer install
|
||||
composer run psalm
|
||||
4
.github/workflows/shellcheck.yml
vendored
4
.github/workflows/shellcheck.yml
vendored
@@ -2,9 +2,13 @@ name: Shellcheck
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- '**.sh'
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- '**.sh'
|
||||
|
||||
jobs:
|
||||
shellcheck:
|
||||
|
||||
23
.github/workflows/spellcheck.yml
vendored
23
.github/workflows/spellcheck.yml
vendored
@@ -1,23 +0,0 @@
|
||||
name: 'Spellcheck'
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
spellcheck:
|
||||
name: Check spelling
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: spelling or typos
|
||||
uses: actions/checkout@v3
|
||||
- name: fix permission for reviewdog
|
||||
run: sudo chown -R root:root $GITHUB_WORKSPACE
|
||||
- name: misspell
|
||||
uses: reviewdog/action-misspell@v1
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
locale: "US"
|
||||
fail_on_error: true
|
||||
46
.github/workflows/talk.yml
vendored
Normal file
46
.github/workflows/talk.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
name: talk-update
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '00 12 * * *'
|
||||
|
||||
jobs:
|
||||
talk-update:
|
||||
name: update talk
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Run talk-update
|
||||
run: |
|
||||
# Spreed
|
||||
spreed_version="$(
|
||||
git ls-remote https://github.com/nextcloud/spreed v*.*.* \
|
||||
| cut -d/ -f3 \
|
||||
| sort -V \
|
||||
| grep -E "^v[0-9]+\.[0-9]+\.[0-9]+$" \
|
||||
| tail -1
|
||||
)"
|
||||
sed -i "s|^ENV RECORDING_VERSION.*$|ENV RECORDING_VERSION $spreed_version|" ./Containers/talk-recording/Dockerfile
|
||||
curl -L "https://raw.githubusercontent.com/nextcloud/spreed/$spreed_version/recording/server.conf.in" -o Containers/talk-recording/recording.conf
|
||||
|
||||
# Signaling
|
||||
signaling_version="$(
|
||||
git ls-remote https://github.com/strukturag/nextcloud-spreed-signaling v*.*.* \
|
||||
| cut -d/ -f3 \
|
||||
| sort -V \
|
||||
| grep -E "^v[0-9]+\.[0-9]+\.[0-9]+$" \
|
||||
| tail -1
|
||||
)"
|
||||
curl -L "https://raw.githubusercontent.com/strukturag/nextcloud-spreed-signaling/$signaling_version/server.conf.in" -o Containers/talk/server.conf.in
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
with:
|
||||
commit-message: talk-update automated change
|
||||
signoff: true
|
||||
title: talk update
|
||||
body: Automated talk container update
|
||||
labels: dependencies, 3. to review
|
||||
milestone: next
|
||||
branch: talk-container-update
|
||||
25
.github/workflows/twig-lint.yml
vendored
25
.github/workflows/twig-lint.yml
vendored
@@ -2,9 +2,13 @@ name: Twig Lint
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- '**.twig'
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- '**.twig'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -16,10 +20,6 @@ concurrency:
|
||||
jobs:
|
||||
twig-lint:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ["8.2"]
|
||||
|
||||
name: twig-lint
|
||||
|
||||
steps:
|
||||
@@ -29,7 +29,8 @@ jobs:
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
php-version: 8.2
|
||||
extensions: apcu
|
||||
coverage: none
|
||||
|
||||
- name: twig lint
|
||||
@@ -39,17 +40,3 @@ jobs:
|
||||
composer install
|
||||
chmod +x ./vendor/bin/twig-linter
|
||||
./vendor/bin/twig-linter lint ./templates
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest
|
||||
needs: twig-lint
|
||||
|
||||
if: always()
|
||||
|
||||
name: twig-lint-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.twig-lint.result != 'success' && needs.twig-lint.result != 'skipped' }}; then exit 1; fi
|
||||
|
||||
2
.github/workflows/update-helm.yml
vendored
2
.github/workflows/update-helm.yml
vendored
@@ -6,7 +6,7 @@ on:
|
||||
- cron: '00 12 * * *'
|
||||
|
||||
jobs:
|
||||
psalm:
|
||||
update-helm:
|
||||
name: update helm chart
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
2
.github/workflows/update-yaml.yml
vendored
2
.github/workflows/update-yaml.yml
vendored
@@ -6,7 +6,7 @@ on:
|
||||
- cron: '00 12 * * *'
|
||||
|
||||
jobs:
|
||||
psalm:
|
||||
update-yaml:
|
||||
name: update yaml files
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -6,4 +6,5 @@
|
||||
/manual-install/*.conf
|
||||
!/manual-install/sample.conf
|
||||
/manual-install/docker-compose.yml
|
||||
/manual-install/compose.yaml
|
||||
/manual-install/.env
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
# Notify Push
|
||||
route /push/* {
|
||||
uri strip_prefix /push
|
||||
reverse_proxy {$NEXTCLOUD_HOST}:7867
|
||||
reverse_proxy {$NOTIFY_PUSH_HOST}:7867
|
||||
}
|
||||
|
||||
# Onlyoffice
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# Caddy is a requirement
|
||||
FROM caddy:2.6.4-alpine as caddy
|
||||
|
||||
FROM httpd:2.4.57-alpine3.17
|
||||
FROM httpd:2.4.57-alpine3.18
|
||||
|
||||
COPY --from=caddy /usr/bin/caddy /usr/bin/caddy
|
||||
|
||||
@@ -45,6 +44,7 @@ RUN set -ex; \
|
||||
-e 's/^#\(LoadModule .*mod_authz_core.so\)/\1/' \
|
||||
-e 's/^#\(LoadModule .*mod_alias.so\)/\1/' \
|
||||
-e 's/^#\(LoadModule .*mod_mpm_event.so\)/\1/' \
|
||||
-e 's/^#\(LoadModule .*mod_brotli.so\)/\1/' \
|
||||
-e 's/\(LoadModule .*mod_mpm_worker.so\)/#\1/' \
|
||||
-e 's/\(LoadModule .*mod_mpm_prefork.so\)/#\1/' \
|
||||
/usr/local/apache2/conf/httpd.conf; \
|
||||
|
||||
@@ -3,13 +3,23 @@ Listen 8000
|
||||
ServerName localhost
|
||||
|
||||
# Add error log
|
||||
CustomLog /proc/self/fd/1 combined
|
||||
CustomLog /proc/self/fd/1 proxy
|
||||
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
|
||||
ErrorLog /proc/self/fd/2
|
||||
ErrorLogFormat "[%t] [%l] [%E] [client: %{X-Forwarded-For}i] [%M] [%{User-Agent}i]"
|
||||
LogLevel warn
|
||||
|
||||
# PHP match
|
||||
<FilesMatch "\.php$">
|
||||
SetHandler "proxy:fcgi://${NEXTCLOUD_HOST}:9000"
|
||||
</FilesMatch>
|
||||
|
||||
# Enable Brotli compression for js, css and svg files - other plain files are compressed by Nextcloud by default
|
||||
<IfModule mod_brotli.c>
|
||||
AddOutputFilterByType BROTLI_COMPRESS text/javascript application/javascript application/x-javascript text/css image/svg+xml
|
||||
BrotliCompressionQuality 0
|
||||
</IfModule>
|
||||
|
||||
# Nextcloud dir
|
||||
DocumentRoot /var/www/html/
|
||||
<Directory /var/www/html/>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM alpine:3.17.3
|
||||
FROM alpine:3.18.2
|
||||
|
||||
RUN set -ex; \
|
||||
\
|
||||
@@ -16,5 +16,7 @@ VOLUME /root
|
||||
COPY --chmod=770 *.sh /
|
||||
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
USER root
|
||||
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
ENV BORG_RETENTION_POLICY="--keep-within=7d --keep-weekly=4 --keep-monthly=6"
|
||||
|
||||
@@ -137,6 +137,9 @@ if [ "$BORG_MODE" = backup ]; then
|
||||
# auto,zstd compression seems to has the best ratio based on:
|
||||
# https://forum.level1techs.com/t/optimal-compression-for-borg-backups/145870/6
|
||||
BORG_OPTS=(-v --stats --compression "auto,zstd" --exclude-caches)
|
||||
if [ "$NEW_REPOSITORY" = 1 ]; then
|
||||
BORG_OPTS+=(--progress)
|
||||
fi
|
||||
|
||||
# Exclude the nextcloud log and audit log for GDPR reasons
|
||||
BORG_EXCLUDE=(--exclude "/nextcloud_aio_volumes/nextcloud_aio_nextcloud/data/nextcloud.log*" --exclude "/nextcloud_aio_volumes/nextcloud_aio_nextcloud/data/audit.log")
|
||||
@@ -167,11 +170,12 @@ if [ "$BORG_MODE" = backup ]; then
|
||||
rm -f "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data/skip.update"
|
||||
|
||||
# Prune options
|
||||
BORG_PRUNE_OPTS=(--stats --keep-within=7d --keep-weekly=4 --keep-monthly=6 "$BORG_BACKUP_DIRECTORY")
|
||||
read -ra BORG_PRUNE_OPTS <<< "$BORG_RETENTION_POLICY"
|
||||
echo "BORG_PRUNE_OPTS are ${BORG_PRUNE_OPTS[*]}"
|
||||
|
||||
# Prune archives
|
||||
echo "Pruning the archives..."
|
||||
if ! borg prune --glob-archives '*_*-nextcloud-aio' "${BORG_PRUNE_OPTS[@]}"; then
|
||||
if ! borg prune --stats --glob-archives '*_*-nextcloud-aio' "${BORG_PRUNE_OPTS[@]}" "$BORG_BACKUP_DIRECTORY"; then
|
||||
echo "Failed to prune archives!"
|
||||
exit 1
|
||||
fi
|
||||
@@ -202,7 +206,7 @@ if [ "$BORG_MODE" = backup ]; then
|
||||
exit 1
|
||||
fi
|
||||
echo "Pruning additional volumes..."
|
||||
if ! borg prune --glob-archives '*_*-additional-docker-volumes' "${BORG_PRUNE_OPTS[@]}"; then
|
||||
if ! borg prune --stats --glob-archives '*_*-additional-docker-volumes' "${BORG_PRUNE_OPTS[@]}" "$BORG_BACKUP_DIRECTORY"; then
|
||||
echo "Failed to prune additional docker-volumes archives!"
|
||||
exit 1
|
||||
fi
|
||||
@@ -232,7 +236,7 @@ if [ "$BORG_MODE" = backup ]; then
|
||||
exit 1
|
||||
fi
|
||||
echo "Pruning additional host mounts..."
|
||||
if ! borg prune --glob-archives '*_*-additional-host-mounts' "${BORG_PRUNE_OPTS[@]}"; then
|
||||
if ! borg prune --stats --glob-archives '*_*-additional-host-mounts' "${BORG_PRUNE_OPTS[@]}" "$BORG_BACKUP_DIRECTORY"; then
|
||||
echo "Failed to prune additional host-mount archives!"
|
||||
exit 1
|
||||
fi
|
||||
@@ -293,7 +297,7 @@ if [ "$BORG_MODE" = restore ]; then
|
||||
--exclude "nextcloud_aio_mastercontainer/data/daily_backup_running" \
|
||||
--exclude "nextcloud_aio_mastercontainer/data/session_date_file" \
|
||||
--exclude "nextcloud_aio_mastercontainer/session/**" \
|
||||
/tmp/borg/nextcloud_aio_volumes/ /nextcloud_aio_volumes; then
|
||||
/tmp/borg/nextcloud_aio_volumes/ /nextcloud_aio_volumes/; then
|
||||
RESTORE_FAILED=1
|
||||
echo "Something failed while restoring from backup."
|
||||
fi
|
||||
|
||||
@@ -6,5 +6,13 @@ COPY clamav.conf /tmp/clamav.conf
|
||||
RUN set -ex; \
|
||||
apk add --no-cache tzdata; \
|
||||
cat /tmp/clamav.conf | tee -a /etc/clamav/clamd.conf; \
|
||||
rm /tmp/clamav.conf
|
||||
rm /tmp/clamav.conf; \
|
||||
mkdir -p /var/run/clamav /run/lock; \
|
||||
chown -R clamav:clamav /var/run/clamav /run/clamav /var/log/clamav /var/lock /run/lock; \
|
||||
chmod 777 -R /var/run/clamav /run/clamav /var/log/clamav /var/lock /run/lock /tmp
|
||||
|
||||
VOLUME /var/lib/clamav
|
||||
|
||||
USER clamav
|
||||
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# From a file located probably somewhere here: https://github.com/CollaboraOnline/online/tree/master/docker
|
||||
FROM collabora/code:22.05.14.3.1
|
||||
FROM collabora/code:23.05.0.5.1
|
||||
|
||||
USER root
|
||||
|
||||
@@ -9,11 +9,11 @@ RUN set -ex; \
|
||||
export DEBIAN_FRONTEND=noninteractive; \
|
||||
apt-get install -y --no-install-recommends \
|
||||
tzdata \
|
||||
netcat \
|
||||
netcat-openbsd \
|
||||
; \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
USER 104
|
||||
USER 100
|
||||
|
||||
HEALTHCHECK CMD nc -z localhost 9980 || exit 1
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM alpine:3.17.3
|
||||
FROM alpine:3.18.2
|
||||
RUN set -ex; \
|
||||
apk add --no-cache bash lighttpd netcat-openbsd; \
|
||||
adduser -S www-data -G www-data; \
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# Probably from here https://github.com/elastic/elasticsearch/blob/main/distribution/docker/src/docker/Dockerfile
|
||||
FROM elasticsearch:7.17.10
|
||||
|
||||
USER root
|
||||
|
||||
RUN set -ex; \
|
||||
\
|
||||
export DEBIAN_FRONTEND=noninteractive; \
|
||||
@@ -11,5 +13,7 @@ RUN set -ex; \
|
||||
rm -rf /var/lib/apt/lists/*; \
|
||||
elasticsearch-plugin install --batch ingest-attachment
|
||||
|
||||
USER 1000:0
|
||||
|
||||
HEALTHCHECK CMD nc -z localhost 9200 || exit 1
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
FROM golang:1.20.4-alpine3.17 as go
|
||||
FROM golang:1.20.5-alpine3.18 as go
|
||||
|
||||
ENV IMAGINARY_HASH b632dae8cc321452c3f85bcae79c580b1ae1ed84
|
||||
|
||||
RUN set -ex; \
|
||||
apk add --no-cache \
|
||||
vips-dev \
|
||||
@@ -7,9 +10,9 @@ RUN set -ex; \
|
||||
vips-jxl \
|
||||
vips-poppler \
|
||||
build-base; \
|
||||
go install github.com/h2non/imaginary@b632dae8cc321452c3f85bcae79c580b1ae1ed84;
|
||||
go install github.com/h2non/imaginary@"$IMAGINARY_HASH";
|
||||
|
||||
FROM alpine:3.17.3
|
||||
FROM alpine:3.18.2
|
||||
RUN set -ex; \
|
||||
apk add --no-cache \
|
||||
tzdata \
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
# Docker CLI is a requirement
|
||||
FROM docker:23.0.6-cli as docker
|
||||
FROM docker:24.0.2-cli as docker
|
||||
|
||||
# Caddy is a requirement
|
||||
FROM caddy:2.6.4-alpine as caddy
|
||||
|
||||
# From https://github.com/docker-library/php/blob/master/8.2/alpine3.17/fpm/Dockerfile
|
||||
FROM php:8.2.6-fpm-alpine3.17
|
||||
# From https://github.com/docker-library/php/blob/master/8.2/alpine3.18/fpm/Dockerfile
|
||||
FROM php:8.2.7-fpm-alpine3.18
|
||||
|
||||
EXPOSE 80
|
||||
EXPOSE 8080
|
||||
@@ -62,7 +62,7 @@ RUN set -ex; \
|
||||
chmod +x /usr/local/bin/composer; \
|
||||
cd /var/www/docker-aio; \
|
||||
git clone https://github.com/nextcloud-releases/all-in-one.git --depth 1 .; \
|
||||
find ./ -not -path ./php -maxdepth 1 -mindepth 1 -delete; \
|
||||
find ./ -maxdepth 1 -mindepth 1 -not -path ./php -exec rm -r {} \; ; \
|
||||
chown www-data:www-data -R /var/www/docker-aio; \
|
||||
cd php; \
|
||||
sudo -u www-data composer install --no-dev; \
|
||||
@@ -80,6 +80,8 @@ RUN set -ex; \
|
||||
\
|
||||
sed -i \
|
||||
-e '/^Listen /d' \
|
||||
-e 's/^LogLevel .*/LogLevel error/' \
|
||||
-e 's|^ErrorLog .*|ErrorLog /proc/self/fd/2|' \
|
||||
-e 's/User apache/User www-data/g' \
|
||||
-e 's/Group apache/Group www-data/g' \
|
||||
-e 's/^#\(LoadModule .*mod_rewrite.so\)/\1/' \
|
||||
@@ -95,6 +97,9 @@ RUN set -ex; \
|
||||
mkdir -p /etc/apache2/logs; \
|
||||
rm /etc/apache2/conf.d/ssl.conf; \
|
||||
echo "ServerName localhost" | tee -a /etc/apache2/httpd.conf; \
|
||||
grep -q '^LoadModule lbmethod_heartbeat_module' /etc/apache2/conf.d/proxy.conf; \
|
||||
sed -i 's|^LoadModule lbmethod_heartbeat_module.*|#LoadModule lbmethod_heartbeat_module|' /etc/apache2/conf.d/proxy.conf; \
|
||||
echo "SSLSessionCache nonenotnull" | tee -a /etc/apache2/httpd.conf; \
|
||||
echo "LoadModule ssl_module modules/mod_ssl.so" | tee -a /etc/apache2/httpd.conf; \
|
||||
echo "LoadModule socache_shmcb_module modules/mod_socache_shmcb.so" | tee -a /etc/apache2/httpd.conf; \
|
||||
echo "Include /etc/apache2/sites-available/mastercontainer.conf" | tee -a /etc/apache2/httpd.conf; \
|
||||
|
||||
@@ -57,6 +57,11 @@ while true; do
|
||||
# Remove dangling images
|
||||
sudo -u www-data docker image prune --force
|
||||
|
||||
# Remove mastercontainer from default bridge network
|
||||
if sudo -u www-data docker inspect nextcloud-aio-mastercontainer --format "{{.NetworkSettings.Networks}}" | grep -q "bridge"; then
|
||||
sudo -u www-data docker network disconnect bridge nextcloud-aio-mastercontainer
|
||||
fi
|
||||
|
||||
# Wait 60s so that the whole loop will not be executed again
|
||||
sleep 60
|
||||
done
|
||||
|
||||
@@ -11,8 +11,11 @@ Listen 8080
|
||||
ServerName localhost
|
||||
|
||||
# Add error log
|
||||
CustomLog /proc/self/fd/1 combined
|
||||
CustomLog /proc/self/fd/1 proxy
|
||||
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
|
||||
ErrorLog /proc/self/fd/2
|
||||
ErrorLogFormat "[%t] [%l] [%E] [client: %{X-Forwarded-For}i] [%M] [%{User-Agent}i]"
|
||||
LogLevel warn
|
||||
|
||||
# PHP match
|
||||
<FilesMatch "\.php$">
|
||||
|
||||
@@ -29,10 +29,13 @@ fi
|
||||
# Check if socket is available and readable
|
||||
if ! [ -a "/var/run/docker.sock" ]; then
|
||||
print_red "Docker socket is not available. Cannot continue."
|
||||
echo "Please make sure to mount the docker socket into /var/run/docker.sock inside the container!"
|
||||
echo "If you did this by purpose because you don't want the container to have access to the docker socket, see https://github.com/nextcloud/all-in-one/tree/main/manual-install."
|
||||
exit 1
|
||||
elif ! mountpoint -q "/mnt/docker-aio-config"; then
|
||||
print_red "/mnt/docker-aio-config is not a mountpoint. Cannot proceed!"
|
||||
echo "Please make sure to mount the nextcloud_aio_mastercontainer docker volume into /mnt/docker-aio-config inside the container!"
|
||||
echo "If you are on TrueNas SCALE, see https://github.com/nextcloud/all-in-one#can-i-run-aio-on-truenas-scale"
|
||||
exit 1
|
||||
elif ! sudo -u www-data test -r /var/run/docker.sock; then
|
||||
echo "Trying to fix docker.sock permissions internally..."
|
||||
@@ -61,6 +64,9 @@ fi
|
||||
# Check if api version is supported
|
||||
if ! sudo -u www-data docker info &>/dev/null; then
|
||||
print_red "Cannot connect to the docker socket. Cannot proceed."
|
||||
echo "If you are on Docker Desktop v4.19 or higher, see https://github.com/nextcloud/all-in-one/issues/2450"
|
||||
echo "If SELinux is enabled on your host, see https://github.com/nextcloud/all-in-one#are-there-known-problems-when-selinux-is-enabled"
|
||||
echo "If you are on TrueNas SCALE, see https://github.com/nextcloud/all-in-one#can-i-run-aio-on-truenas-scale"
|
||||
exit 1
|
||||
fi
|
||||
API_VERSION_FILE="$(find ./ -name DockerActionManager.php | head -1)"
|
||||
|
||||
@@ -38,6 +38,7 @@ stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
command=/cron.sh
|
||||
user=root
|
||||
|
||||
[program:backup-time-file-watcher]
|
||||
stdout_logfile=/dev/stdout
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# From https://github.com/nextcloud/docker/blob/master/23/fpm-alpine/Dockerfile
|
||||
FROM php:8.0.28-fpm-alpine3.16
|
||||
FROM php:8.1.20-fpm-alpine3.18
|
||||
|
||||
ENV PHP_MEMORY_LIMIT 512M
|
||||
ENV PHP_UPLOAD_LIMIT 10G
|
||||
ENV PHP_MAX_TIME 3600
|
||||
ENV NEXTCLOUD_VERSION 26.0.3
|
||||
ENV AIO_TOKEN 123456
|
||||
ENV AIO_URL localhost
|
||||
|
||||
COPY --chmod=775 *.sh /
|
||||
COPY --chmod=774 upgrade.exclude /upgrade.exclude
|
||||
COPY config/*.php /
|
||||
COPY supervisord.conf /supervisord.conf
|
||||
|
||||
VOLUME /mnt/ncdata
|
||||
VOLUME /var/www/html
|
||||
|
||||
# Custom: change id of www-data user as it needs to be the same like on old installations
|
||||
RUN set -ex; \
|
||||
@@ -8,22 +22,14 @@ RUN set -ex; \
|
||||
groupmod -g 333 xfs; \
|
||||
usermod -u 333 -g 333 xfs; \
|
||||
addgroup -g 33 -S www-data; \
|
||||
adduser -u 33 -D -S -G www-data www-data
|
||||
|
||||
# entrypoint.sh and cron.sh dependencies
|
||||
RUN set -ex; \
|
||||
adduser -u 33 -D -S -G www-data www-data; \
|
||||
\
|
||||
# entrypoint.sh and cron.sh dependencies
|
||||
apk add --no-cache \
|
||||
rsync \
|
||||
;
|
||||
|
||||
; \
|
||||
# install the PHP extensions we need
|
||||
# see https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html
|
||||
ENV PHP_MEMORY_LIMIT 512M
|
||||
ENV PHP_UPLOAD_LIMIT 10G
|
||||
ENV PHP_MAX_TIME 3600
|
||||
RUN set -ex; \
|
||||
\
|
||||
apk add --no-cache --virtual .build-deps \
|
||||
$PHPIZE_DEPS \
|
||||
autoconf \
|
||||
@@ -80,16 +86,17 @@ RUN set -ex; \
|
||||
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
|
||||
)"; \
|
||||
apk add --virtual .nextcloud-phpext-rundeps $runDeps; \
|
||||
apk del .build-deps
|
||||
|
||||
apk del .build-deps; \
|
||||
\
|
||||
# set recommended PHP.ini settings
|
||||
# see https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/server_tuning.html#enable-php-opcache
|
||||
RUN { \
|
||||
echo 'opcache.interned_strings_buffer=32'; \
|
||||
{ \
|
||||
echo 'opcache.memory_consumption=256'; \
|
||||
echo 'opcache.interned_strings_buffer=64'; \
|
||||
echo 'opcache.save_comments=1'; \
|
||||
echo 'opcache.revalidate_freq=60'; \
|
||||
echo 'opcache.jit=1255'; \
|
||||
echo 'opcache.jit_buffer_size=128M'; \
|
||||
echo 'opcache.jit_buffer_size=8M'; \
|
||||
} > /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; \
|
||||
@@ -102,15 +109,10 @@ RUN { \
|
||||
echo 'max_input_time=${PHP_MAX_TIME}'; \
|
||||
} > /usr/local/etc/php/conf.d/nextcloud.ini; \
|
||||
\
|
||||
mkdir /var/www/data; \
|
||||
mkdir -p /var/www/data; \
|
||||
chown -R www-data:root /var/www; \
|
||||
chmod -R g=u /var/www
|
||||
|
||||
VOLUME /var/www/html
|
||||
|
||||
ENV NEXTCLOUD_VERSION 25.0.7
|
||||
|
||||
RUN set -ex; \
|
||||
chmod -R g=u /var/www; \
|
||||
\
|
||||
apk add --no-cache --virtual .fetch-deps \
|
||||
bzip2 \
|
||||
gnupg \
|
||||
@@ -130,27 +132,18 @@ RUN set -ex; \
|
||||
mkdir -p /usr/src/nextcloud/data; \
|
||||
mkdir -p /usr/src/nextcloud/custom_apps; \
|
||||
chmod +x /usr/src/nextcloud/occ; \
|
||||
apk del .fetch-deps
|
||||
|
||||
COPY *.sh upgrade.exclude /
|
||||
COPY config/* /usr/src/nextcloud/config/
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
CMD ["php-fpm"]
|
||||
|
||||
# Template from https://github.com/nextcloud/docker/blob/master/.examples/dockerfiles/full/fpm-alpine/Dockerfile
|
||||
|
||||
RUN set -ex; \
|
||||
mkdir -p /usr/src/nextcloud/config; \
|
||||
mv /*.php /usr/src/nextcloud/config/; \
|
||||
apk del .fetch-deps; \
|
||||
\
|
||||
# Template from https://github.com/nextcloud/docker/blob/master/.examples/dockerfiles/full/fpm-alpine/Dockerfile
|
||||
apk add --no-cache \
|
||||
ffmpeg \
|
||||
procps \
|
||||
samba-client \
|
||||
supervisor \
|
||||
# libreoffice \
|
||||
;
|
||||
|
||||
RUN set -ex; \
|
||||
; \
|
||||
\
|
||||
apk add --no-cache --virtual .build-deps \
|
||||
$PHPIZE_DEPS \
|
||||
@@ -178,21 +171,12 @@ RUN set -ex; \
|
||||
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
|
||||
)"; \
|
||||
apk add --virtual .nextcloud-phpext-rundeps $runDeps; \
|
||||
apk del .build-deps
|
||||
|
||||
RUN mkdir -p \
|
||||
apk del .build-deps; \
|
||||
\
|
||||
mkdir -p \
|
||||
/var/log/supervisord \
|
||||
/var/run/supervisord \
|
||||
;
|
||||
|
||||
COPY supervisord.conf /
|
||||
|
||||
ENV NEXTCLOUD_UPDATE=1
|
||||
|
||||
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
|
||||
|
||||
# Custom:
|
||||
RUN set -ex; \
|
||||
; \
|
||||
\
|
||||
apk add --no-cache \
|
||||
bash \
|
||||
@@ -202,64 +186,41 @@ RUN set -ex; \
|
||||
git \
|
||||
postgresql-client \
|
||||
tzdata \
|
||||
mawk \
|
||||
sudo \
|
||||
grep \
|
||||
nodejs \
|
||||
coreutils;
|
||||
|
||||
RUN set -ex; \
|
||||
coreutils; \
|
||||
\
|
||||
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/^pm.start_servers =.*/pm.start_servers = 2/' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
sed -i 's/^pm.min_spare_servers =.*/pm.min_spare_servers = 1/' /usr/local/etc/php-fpm.d/www.conf; \
|
||||
sed -i 's/^pm.max_spare_servers =.*/pm.max_spare_servers = 3/' /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
|
||||
|
||||
RUN set -ex; \
|
||||
sed -i 's|access.log = /proc/self/fd/2|access.log = /proc/self/fd/1|' /usr/local/etc/php-fpm.d/docker.conf; \
|
||||
\
|
||||
rm -rf /tmp/nextcloud-aio && \
|
||||
mkdir -p /tmp/nextcloud-aio && \
|
||||
cd /tmp/nextcloud-aio && \
|
||||
git clone https://github.com/nextcloud-releases/all-in-one.git --depth 1 .; \
|
||||
mkdir -p /usr/src/nextcloud/apps/nextcloud-aio; \
|
||||
cp -r ./app/* /usr/src/nextcloud/apps/nextcloud-aio/
|
||||
|
||||
RUN set -ex; \
|
||||
cp -r ./app/* /usr/src/nextcloud/apps/nextcloud-aio/; \
|
||||
\
|
||||
chown www-data:root -R /usr/src && \
|
||||
chown www-data:root -R /usr/local/etc/php/conf.d && \
|
||||
chown www-data:root -R /usr/local/etc/php-fpm.d && \
|
||||
rm -r /usr/src/nextcloud/apps/updatenotification
|
||||
|
||||
COPY start.sh /
|
||||
COPY notify.sh /
|
||||
COPY notify-all.sh /
|
||||
RUN set -ex; \
|
||||
chmod +x /start.sh && \
|
||||
chmod +x /entrypoint.sh && \
|
||||
chmod +r /upgrade.exclude && \
|
||||
chmod +x /cron.sh && \
|
||||
chmod +x /notify.sh && \
|
||||
chmod +x /notify-all.sh && \
|
||||
chmod +x /activate-collabora.sh && \
|
||||
chmod +x /healthcheck.sh
|
||||
|
||||
RUN set -ex; \
|
||||
mkdir /mnt/ncdata; \
|
||||
chown www-data:www-data /mnt/ncdata;
|
||||
|
||||
VOLUME /mnt/ncdata
|
||||
|
||||
RUN set -ex; \
|
||||
rm -r /usr/src/nextcloud/apps/updatenotification; \
|
||||
\
|
||||
mkdir -p /nc-updater; \
|
||||
chown -R www-data:www-data /nc-updater; \
|
||||
chmod -R 770 /nc-updater
|
||||
|
||||
chmod -R 770 /nc-updater; \
|
||||
\
|
||||
# Give root a random password
|
||||
RUN echo "root:$(openssl rand -base64 12)" | chpasswd
|
||||
echo "root:$(openssl rand -base64 12)" | chpasswd
|
||||
|
||||
USER root
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
|
||||
|
||||
HEALTHCHECK CMD sudo -E -u www-data bash /healthcheck.sh
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$COLLABORA_ENABLED" != yes ]; then
|
||||
# Basically sleep for forever if collabora is not enabled
|
||||
sleep inf
|
||||
fi
|
||||
while ! nc -z "$NC_DOMAIN" 443; do
|
||||
sleep 5
|
||||
done
|
||||
sleep 10
|
||||
echo "Activating collabora config..."
|
||||
php /var/www/html/occ richdocuments:activate-config
|
||||
sleep inf
|
||||
5
Containers/nextcloud/config/aio.config.php
Normal file
5
Containers/nextcloud/config/aio.config.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
$CONFIG = array (
|
||||
'one-click-instance' => true,
|
||||
'one-click-instance.user-limit' => 100,
|
||||
);
|
||||
@@ -10,6 +10,15 @@ directory_empty() {
|
||||
[ -z "$(ls -A "$1/")" ]
|
||||
}
|
||||
|
||||
run_upgrade_if_needed_due_to_app_update() {
|
||||
if php /var/www/html/occ status | grep needsDbUpgrade | grep -q true; then
|
||||
# Disable integrity check temporarily until next update
|
||||
php /var/www/html/occ config:system:set integrity.check.disabled --type bool --value true
|
||||
php /var/www/html/occ upgrade
|
||||
php /var/www/html/occ app:enable nextcloud-aio --force
|
||||
fi
|
||||
}
|
||||
|
||||
echo "Configuring Redis as session handler..."
|
||||
cat << REDIS_CONF > /usr/local/etc/php/conf.d/redis-session.ini
|
||||
session.save_handler = redis
|
||||
@@ -22,7 +31,7 @@ redis.session.lock_wait_time = 10000
|
||||
REDIS_CONF
|
||||
|
||||
echo "Setting php max children..."
|
||||
MEMORY=$(mawk '/MemTotal/ {printf "%d", $2/1024}' /proc/meminfo)
|
||||
MEMORY=$(awk '/MemTotal/ {printf "%d", $2/1024}' /proc/meminfo)
|
||||
PHP_MAX_CHILDREN=$((MEMORY/50))
|
||||
if [ -n "$PHP_MAX_CHILDREN" ]; then
|
||||
sed -i "s/^pm.max_children =.*/pm.max_children = $PHP_MAX_CHILDREN/" /usr/local/etc/php-fpm.d/www.conf
|
||||
@@ -147,6 +156,8 @@ if ! [ -f "$NEXTCLOUD_DATA_DIR/skip.update" ]; then
|
||||
fi
|
||||
done
|
||||
|
||||
run_upgrade_if_needed_due_to_app_update
|
||||
|
||||
php /var/www/html/occ maintenance:mode --off
|
||||
|
||||
echo "Getting and backing up the status of apps for later, this might take a while..."
|
||||
@@ -170,6 +181,8 @@ if ! [ -f "$NEXTCLOUD_DATA_DIR/skip.update" ]; then
|
||||
|
||||
php /var/www/html/occ app:update --all
|
||||
|
||||
run_upgrade_if_needed_due_to_app_update
|
||||
|
||||
# Fix removing the updatenotification for old instances
|
||||
UPDATENOTIFICATION_STATUS="$(php /var/www/html/occ config:app:get updatenotification enabled)"
|
||||
if [ -d "/var/www/html/apps/updatenotification" ]; then
|
||||
@@ -205,6 +218,14 @@ if ! [ -f "$NEXTCLOUD_DATA_DIR/skip.update" ]; then
|
||||
INSTALL_OPTIONS+=(--data-dir "$NEXTCLOUD_DATA_DIR")
|
||||
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
|
||||
|
||||
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")
|
||||
|
||||
@@ -215,15 +236,6 @@ if ! [ -f "$NEXTCLOUD_DATA_DIR/skip.update" ]; then
|
||||
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
|
||||
|
||||
@@ -254,7 +266,6 @@ DATADIR_PERMISSION_CONF
|
||||
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"
|
||||
@@ -265,8 +276,6 @@ DATADIR_PERMISSION_CONF
|
||||
INSTALLED_MAJOR="${installed_version%%.*}"
|
||||
IMAGE_MAJOR="${image_version%%.*}"
|
||||
if ! [ "$INSTALLED_MAJOR" -gt "$IMAGE_MAJOR" ]; 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
|
||||
if ! php /var/www/html/occ -V || php /var/www/html/occ status | grep maintenance | grep -q 'true'; then
|
||||
echo "Installation of Nextcloud failed!"
|
||||
@@ -274,7 +283,10 @@ DATADIR_PERMISSION_CONF
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
php /var/www/html/occ app:disable updatenotification
|
||||
rm -rf /var/www/html/apps/updatenotification
|
||||
php /var/www/html/occ config:system:set updater.release.channel --value=stable
|
||||
php /var/www/html/occ app:enable nextcloud-aio --force
|
||||
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
|
||||
@@ -344,6 +356,7 @@ DATADIR_PERMISSION_CONF
|
||||
else
|
||||
touch "$NEXTCLOUD_DATA_DIR/update.failed"
|
||||
echo "Upgrading nextcloud from $installed_version to $image_version..."
|
||||
php /var/www/html/occ config:system:delete integrity.check.disabled
|
||||
if ! php /var/www/html/occ upgrade || ! php /var/www/html/occ -V; then
|
||||
echo "Upgrade failed. Please restore from backup."
|
||||
bash /notify.sh "Nextcloud update to $image_version failed!" "Please restore from backup!"
|
||||
@@ -355,6 +368,8 @@ DATADIR_PERMISSION_CONF
|
||||
|
||||
php /var/www/html/occ app:update --all
|
||||
|
||||
run_upgrade_if_needed_due_to_app_update
|
||||
|
||||
# Restore app status
|
||||
if [ "${APPSTORAGE[0]}" != "no-export-done" ]; then
|
||||
echo "Restoring the status of apps. This can take a while..."
|
||||
@@ -363,6 +378,12 @@ DATADIR_PERMISSION_CONF
|
||||
if [ "${APPSTORAGE[$app]}" != "no" ]; then
|
||||
echo "Enabling $app..."
|
||||
if ! php /var/www/html/occ app:enable "$app" >/dev/null; then
|
||||
php /var/www/html/occ app:disable "$app" >/dev/null
|
||||
if ! php /var/www/html/occ -V &>/dev/null; then
|
||||
rm -r "/var/www/html/custom_apps/$app"
|
||||
php /var/www/html/occ maintenance:mode --off
|
||||
fi
|
||||
run_upgrade_if_needed_due_to_app_update
|
||||
echo "The $app app could not get enabled. Probably because it is not compatible with the new Nextcloud version."
|
||||
if [ "$app" = apporder ]; then
|
||||
CUSTOM_HINT="The apporder app was deprecated. A possible replacement is the side_menu app, aka 'Custom menu'."
|
||||
@@ -383,6 +404,8 @@ DATADIR_PERMISSION_CONF
|
||||
|
||||
php /var/www/html/occ app:update --all
|
||||
|
||||
run_upgrade_if_needed_due_to_app_update
|
||||
|
||||
# Apply optimization
|
||||
echo "Doing some optimizations..."
|
||||
php /var/www/html/occ maintenance:repair
|
||||
@@ -398,8 +421,7 @@ DATADIR_PERMISSION_CONF
|
||||
# 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
|
||||
run_upgrade_if_needed_due_to_app_update
|
||||
if [ -n "$UPDATED_APPS" ]; then
|
||||
bash /notify.sh "Your apps just got updated!" "$UPDATED_APPS"
|
||||
fi
|
||||
@@ -408,12 +430,15 @@ else
|
||||
SKIP_UPDATE=1
|
||||
fi
|
||||
|
||||
run_upgrade_if_needed_due_to_app_update
|
||||
|
||||
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 "Appdata is not present. Did you maybe change the datadir after the initial Nextcloud installation? This is not supported!"
|
||||
echo "See https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir"
|
||||
echo "If you adjusted the datadir to be located on an external drive, make sure that the drive is still mounted!"
|
||||
echo "In the datadir was found:"
|
||||
ls -la "$NEXTCLOUD_DATA_DIR/"
|
||||
exit 1
|
||||
@@ -442,6 +467,7 @@ php /var/www/html/occ app:enable support
|
||||
|
||||
# Adjusting log files to be stored on a volume
|
||||
echo "Adjusting log files..."
|
||||
php /var/www/html/occ config:system:set upgrade.cli-upgrade-link --value="https://github.com/nextcloud/all-in-one/discussions/2726"
|
||||
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"
|
||||
@@ -547,6 +573,7 @@ if [ "$ONLYOFFICE_ENABLED" = 'yes' ]; then
|
||||
php /var/www/html/occ app:update onlyoffice
|
||||
fi
|
||||
php /var/www/html/occ config:system:set onlyoffice jwt_secret --value="$ONLYOFFICE_SECRET"
|
||||
php /var/www/html/occ config:app:set onlyoffice jwt_secret --value="$ONLYOFFICE_SECRET"
|
||||
php /var/www/html/occ config:system:set onlyoffice jwt_header --value="AuthorizationJwt"
|
||||
php /var/www/html/occ config:app:set onlyoffice DocumentServerUrl --value="https://$NC_DOMAIN/onlyoffice"
|
||||
php /var/www/html/occ config:system:set allow_local_remote_servers --type=bool --value=true
|
||||
@@ -583,6 +610,21 @@ else
|
||||
fi
|
||||
fi
|
||||
|
||||
# Talk recording
|
||||
if [ -d "/var/www/html/custom_apps/spreed" ]; then
|
||||
if [ "$TALK_RECORDING_ENABLED" = 'yes' ]; then
|
||||
while ! nc -z "$TALK_RECORDING_HOST" 1234; do
|
||||
echo "waiting for Talk Recording to become available..."
|
||||
sleep 5
|
||||
done
|
||||
# TODO: migrate to occ command if that becomes available
|
||||
RECORDING_SERVERS_STRING="{\"servers\":[{\"server\":\"http://$TALK_RECORDING_HOST:1234/\",\"verify\":true}],\"secret\":\"$RECORDING_SECRET\"}"
|
||||
php /var/www/html/occ config:app:set spreed recording_servers --value="$RECORDING_SERVERS_STRING"
|
||||
else
|
||||
php /var/www/html/occ config:app:delete spreed recording_servers
|
||||
fi
|
||||
fi
|
||||
|
||||
# Clamav
|
||||
if [ "$CLAMAV_ENABLED" = 'yes' ]; then
|
||||
count=0
|
||||
@@ -616,18 +658,16 @@ else
|
||||
fi
|
||||
|
||||
# Imaginary
|
||||
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"
|
||||
else
|
||||
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
|
||||
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"
|
||||
else
|
||||
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
|
||||
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
|
||||
nc -z "$POSTGRES_HOST" 5432 || exit 0
|
||||
|
||||
if ! nc -z localhost 9000 || ! nc -z localhost 7867; then
|
||||
if ! nc -z localhost 9000; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
23
Containers/nextcloud/run-exec-commands.sh
Normal file
23
Containers/nextcloud/run-exec-commands.sh
Normal file
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
while ! nc -z "$NC_DOMAIN" 443; do
|
||||
sleep 5
|
||||
done
|
||||
sleep 10
|
||||
|
||||
if [ -n "$NEXTCLOUD_EXEC_COMMANDS" ]; then
|
||||
echo "#!/bin/bash" > /tmp/nextcloud-exec-commands
|
||||
echo "$NEXTCLOUD_EXEC_COMMANDS" >> /tmp/nextcloud-exec-commands
|
||||
if ! grep "one-click-instance" /tmp/nextcloud-exec-commands; then
|
||||
bash /tmp/nextcloud-exec-commands
|
||||
rm /tmp/nextcloud-exec-commands
|
||||
fi
|
||||
else
|
||||
# Collabora must work also if using manual-install
|
||||
if [ "$COLLABORA_ENABLED" = yes ]; then
|
||||
echo "Activating collabora config..."
|
||||
php /var/www/html/occ richdocuments:activate-config
|
||||
fi
|
||||
fi
|
||||
|
||||
sleep inf
|
||||
@@ -131,14 +131,4 @@ if ! sudo -E -u www-data bash /entrypoint.sh; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Correctly set CPU_ARCH for notify_push
|
||||
CPU_ARCH="$(uname -m)"
|
||||
export CPU_ARCH
|
||||
if [ -z "$CPU_ARCH" ]; then
|
||||
echo "Could not get processor architecture. Exiting."
|
||||
exit 1
|
||||
elif [ "$CPU_ARCH" != "x86_64" ]; then
|
||||
export CPU_ARCH="aarch64"
|
||||
fi
|
||||
|
||||
exec "$@"
|
||||
@@ -25,18 +25,10 @@ stderr_logfile_maxbytes=0
|
||||
command=/cron.sh
|
||||
user=www-data
|
||||
|
||||
[program:notify-push]
|
||||
[program:run-exec-commands]
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
command=/var/www/html/custom_apps/notify_push/bin/%(ENV_CPU_ARCH)s/notify_push /var/www/html/config/config.php --port 7867 --redis-url redis://:%(ENV_REDIS_HOST_PASSWORD)s@%(ENV_REDIS_HOST)s
|
||||
user=www-data
|
||||
|
||||
[program:activate-collabora]
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
command=/activate-collabora.sh
|
||||
command=/run-exec-commands.sh
|
||||
user=www-data
|
||||
|
||||
21
Containers/notify-push/Dockerfile
Normal file
21
Containers/notify-push/Dockerfile
Normal file
@@ -0,0 +1,21 @@
|
||||
FROM alpine:3.18.2
|
||||
|
||||
COPY --chmod=775 start.sh /start.sh
|
||||
|
||||
RUN set -ex; \
|
||||
apk add --no-cache \
|
||||
ca-certificates \
|
||||
netcat-openbsd \
|
||||
tzdata \
|
||||
bash \
|
||||
openssl; \
|
||||
# Give root a random password
|
||||
echo "root:$(openssl rand -base64 12)" | chpasswd; \
|
||||
apk del --no-cache \
|
||||
openssl;
|
||||
|
||||
USER 33
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
|
||||
HEALTHCHECK CMD nc -z localhost 7867 || exit 1
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
38
Containers/notify-push/start.sh
Normal file
38
Containers/notify-push/start.sh
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "$NEXTCLOUD_HOST" ]; then
|
||||
echo "NEXTCLOUD_HOST need to be provided. Exiting!"
|
||||
exit 1
|
||||
elif [ -z "$POSTGRES_HOST" ]; then
|
||||
echo "POSTGRES_HOST need to be provided. Exiting!"
|
||||
exit 1
|
||||
elif [ -z "$REDIS_HOST" ]; then
|
||||
echo "REDIS_HOST need to be provided. Exiting!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Only start container if nextcloud is accessible
|
||||
while ! nc -z "$NEXTCLOUD_HOST" 9000; do
|
||||
echo "Waiting for Nextcloud to start..."
|
||||
sleep 5
|
||||
done
|
||||
|
||||
# Correctly set CPU_ARCH for notify_push
|
||||
CPU_ARCH="$(uname -m)"
|
||||
export CPU_ARCH
|
||||
if [ -z "$CPU_ARCH" ]; then
|
||||
echo "Could not get processor architecture. Exiting."
|
||||
exit 1
|
||||
elif [ "$CPU_ARCH" != "x86_64" ]; then
|
||||
export CPU_ARCH="aarch64"
|
||||
fi
|
||||
|
||||
# Run it
|
||||
/nextcloud/custom_apps/notify_push/bin/"$CPU_ARCH"/notify_push \
|
||||
--database-prefix="oc_" \
|
||||
--nextcloud-url "https://$NC_DOMAIN" \
|
||||
--port 7867 \
|
||||
--redis-url "redis://:$REDIS_HOST_PASSWORD@$REDIS_HOST" \
|
||||
--database-url "postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST/$POSTGRES_DB"
|
||||
|
||||
exec "$@"
|
||||
@@ -1,5 +1,7 @@
|
||||
# From https://github.com/ONLYOFFICE/Docker-DocumentServer/blob/master/Dockerfile
|
||||
FROM onlyoffice/documentserver:7.3.3.50
|
||||
FROM onlyoffice/documentserver:7.4.0.1
|
||||
|
||||
# USER root is probably used
|
||||
|
||||
HEALTHCHECK CMD nc -z localhost 80 || exit 1
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
|
||||
@@ -6,7 +6,11 @@ COPY --chmod=775 healthcheck.sh /healthcheck.sh
|
||||
COPY --chmod=775 init-user-db.sh /docker-entrypoint-initdb.d/init-user-db.sh
|
||||
|
||||
RUN set -ex; \
|
||||
apk add --no-cache bash openssl shadow grep mawk; \
|
||||
apk add --no-cache \
|
||||
bash \
|
||||
openssl \
|
||||
shadow \
|
||||
grep; \
|
||||
\
|
||||
# We need to use the same gid and uid as on old installations
|
||||
deluser postgres; \
|
||||
@@ -24,7 +28,8 @@ RUN set -ex; \
|
||||
chown postgres:postgres /mnt/data; \
|
||||
\
|
||||
# Give root a random password
|
||||
echo "root:$(openssl rand -base64 12)" | chpasswd
|
||||
echo "root:$(openssl rand -base64 12)" | chpasswd; \
|
||||
apk --no-cache del openssl;
|
||||
|
||||
VOLUME /mnt/data
|
||||
|
||||
|
||||
@@ -146,11 +146,19 @@ if ! [ -f "$DATADIR/PG_VERSION" ] && ! [ -f "$DUMP_FILE" ]; then
|
||||
rm -rf "${DATADIR:?}/"*
|
||||
fi
|
||||
|
||||
echo "Setting max connections..."
|
||||
MEMORY=$(mawk '/MemTotal/ {printf "%d", $2/1024}' /proc/meminfo)
|
||||
MAX_CONNECTIONS=$((MEMORY/50+3))
|
||||
if [ -n "$MAX_CONNECTIONS" ]; then
|
||||
sed -i "s|^max_connections =.*|max_connections = $MAX_CONNECTIONS|" "/var/lib/postgresql/data/postgresql.conf"
|
||||
# Modify postgresql.conf
|
||||
if [ -f "/var/lib/postgresql/data/postgresql.conf" ]; then
|
||||
echo "Setting max connections..."
|
||||
MEMORY=$(awk '/MemTotal/ {printf "%d", $2/1024}' /proc/meminfo)
|
||||
MAX_CONNECTIONS=$((MEMORY/50+3))
|
||||
if [ -n "$MAX_CONNECTIONS" ]; then
|
||||
sed -i "s|^max_connections =.*|max_connections = $MAX_CONNECTIONS|" "/var/lib/postgresql/data/postgresql.conf"
|
||||
fi
|
||||
|
||||
# Modify conf
|
||||
if grep -q "#log_checkpoints" /var/lib/postgresql/data/postgresql.conf; then
|
||||
sed -i 's|#log_checkpoints.*|log_checkpoints = off|' /var/lib/postgresql/data/postgresql.conf
|
||||
fi
|
||||
fi
|
||||
|
||||
# Catch docker stop attempts
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# From https://github.com/docker-library/redis/blob/master/7.0/alpine/Dockerfile
|
||||
FROM redis:7.0.11-alpine
|
||||
|
||||
COPY --chmod=775 start.sh /usr/bin/start.sh
|
||||
COPY --chmod=775 start.sh /start.sh
|
||||
|
||||
RUN set -ex; \
|
||||
apk add --no-cache openssl bash; \
|
||||
@@ -10,7 +10,7 @@ RUN set -ex; \
|
||||
echo "root:$(openssl rand -base64 12)" | chpasswd
|
||||
|
||||
USER redis
|
||||
ENTRYPOINT ["start.sh"]
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
|
||||
HEALTHCHECK CMD redis-cli -a $REDIS_HOST_PASSWORD PING || exit 1
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
|
||||
@@ -8,9 +8,9 @@ fi
|
||||
|
||||
# Run redis with a password if provided
|
||||
if [ -n "$REDIS_HOST_PASSWORD" ]; then
|
||||
exec redis-server --requirepass "$REDIS_HOST_PASSWORD"
|
||||
exec redis-server --requirepass "$REDIS_HOST_PASSWORD" --loglevel warning
|
||||
else
|
||||
exec redis-server
|
||||
exec redis-server --loglevel warning
|
||||
fi
|
||||
|
||||
exec "$@"
|
||||
|
||||
46
Containers/talk-recording/Dockerfile
Normal file
46
Containers/talk-recording/Dockerfile
Normal file
@@ -0,0 +1,46 @@
|
||||
FROM python:3.11.4-alpine3.18
|
||||
|
||||
COPY --chmod=775 start.sh /start.sh
|
||||
|
||||
ENV RECORDING_VERSION v17.0.0
|
||||
|
||||
RUN set -ex; \
|
||||
apk add --no-cache \
|
||||
ca-certificates \
|
||||
tzdata \
|
||||
bash \
|
||||
xvfb \
|
||||
ffmpeg \
|
||||
firefox \
|
||||
bind-tools \
|
||||
netcat-openbsd \
|
||||
git \
|
||||
wget \
|
||||
shadow \
|
||||
pulseaudio \
|
||||
openssl; \
|
||||
# chromium chromium-chromedriver?
|
||||
apk add --no-cache geckodriver --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing; \
|
||||
useradd -d /tmp --system recording; \
|
||||
# Give root a random password
|
||||
echo "root:$(openssl rand -base64 12)" | chpasswd; \
|
||||
git clone --recursive https://github.com/nextcloud/spreed --depth=1 --single-branch --branch "$RECORDING_VERSION" /src; \
|
||||
mv -v /src/recording/pyproject.toml /src/recording/src/pyproject.toml; \
|
||||
python3 -m pip install /src/recording/src; \
|
||||
rm -rf /src; \
|
||||
touch /etc/recording.conf; \
|
||||
chown recording:recording -R \
|
||||
/tmp /etc/recording.conf; \
|
||||
apk del --no-cache \
|
||||
git \
|
||||
wget \
|
||||
shadow \
|
||||
openssl;
|
||||
|
||||
WORKDIR /tmp
|
||||
USER recording
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
CMD ["python", "-m", "nextcloud.talk.recording", "--config", "/etc/recording.conf"]
|
||||
|
||||
HEALTHCHECK CMD nc -z localhost 1234 || exit 1
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
111
Containers/talk-recording/recording.conf
Normal file
111
Containers/talk-recording/recording.conf
Normal file
@@ -0,0 +1,111 @@
|
||||
[logs]
|
||||
# Log level based on numeric values of Python logging levels:
|
||||
# - Critical: 50
|
||||
# - Error: 40
|
||||
# - Warning: 30
|
||||
# - Info: 20
|
||||
# - Debug: 10
|
||||
# - Not set: 0
|
||||
#level = 20
|
||||
|
||||
[http]
|
||||
# IP and port to listen on for HTTP requests.
|
||||
#listen = 127.0.0.1:8000
|
||||
|
||||
[backend]
|
||||
# Allow any hostname as backend endpoint. This is extremely insecure and should
|
||||
# only be used during development.
|
||||
#allowall = false
|
||||
|
||||
# Common shared secret for requests from and to the backend servers if
|
||||
# "allowall" is enabled. This must be the same value as configured in the
|
||||
# Nextcloud admin ui.
|
||||
#secret = the-shared-secret
|
||||
|
||||
# Comma-separated list of backend ids allowed to connect.
|
||||
#backends = backend-id, another-backend
|
||||
|
||||
# If set to "true", certificate validation of backend endpoints will be skipped.
|
||||
# This should only be enabled during development, e.g. to work with self-signed
|
||||
# certificates.
|
||||
# Overridable by backend.
|
||||
#skipverify = false
|
||||
|
||||
# Maximum allowed size in bytes for messages sent by the backend.
|
||||
# Overridable by backend.
|
||||
#maxmessagesize = 1024
|
||||
|
||||
# Width for recorded videos.
|
||||
# Overridable by backend.
|
||||
#videowidth = 1920
|
||||
|
||||
# Height for recorded videos.
|
||||
# Overridable by backend.
|
||||
#videoheight = 1080
|
||||
|
||||
# Temporary directory used to store recordings until uploaded. It must be
|
||||
# writable by the user running the recording server.
|
||||
# Overridable by backend.
|
||||
#directory = /tmp
|
||||
|
||||
# Backend configurations as defined in the "[backend]" section above. The
|
||||
# section names must match the ids used in "backends" above.
|
||||
#[backend-id]
|
||||
# URL of the Nextcloud instance
|
||||
#url = https://cloud.domain.invalid
|
||||
|
||||
# Shared secret for requests from and to the backend servers. This must be the
|
||||
# same value as configured in the Nextcloud admin ui.
|
||||
#secret = the-shared-secret
|
||||
|
||||
#[another-backend]
|
||||
# URL of the Nextcloud instance
|
||||
#url = https://cloud.otherdomain.invalid
|
||||
|
||||
# Shared secret for requests from and to the backend servers. This must be the
|
||||
# same value as configured in the Nextcloud admin ui.
|
||||
#secret = the-shared-secret
|
||||
|
||||
[signaling]
|
||||
# Common shared secret for authenticating as an internal client of signaling
|
||||
# servers if a specific secret is not set for a signaling server. This must be
|
||||
# the same value as configured in the signaling server configuration file.
|
||||
#internalsecret = the-shared-secret-for-internal-clients
|
||||
|
||||
# Comma-separated list of signaling servers with specific internal secrets.
|
||||
#signalings = signaling-id, another-signaling
|
||||
|
||||
# Signaling server configurations as defined in the "[signaling]" section above.
|
||||
# The section names must match the ids used in "signalings" above.
|
||||
#[signaling-id]
|
||||
# URL of the signaling server
|
||||
#url = https://signaling.domain.invalid
|
||||
|
||||
# Shared secret for authenticating as an internal client of signaling servers.
|
||||
# This must be the same value as configured in the signaling server
|
||||
# configuration file.
|
||||
#internalsecret = the-shared-secret-for-internal-clients
|
||||
|
||||
#[another-signaling]
|
||||
# URL of the signaling server
|
||||
#url = https://signaling.otherdomain.invalid
|
||||
|
||||
# Shared secret for authenticating as an internal client of signaling servers.
|
||||
# This must be the same value as configured in the signaling server
|
||||
# configuration file.
|
||||
#internalsecret = the-shared-secret-for-internal-clients
|
||||
|
||||
[ffmpeg]
|
||||
# The options given to FFmpeg to encode the audio output. The options given here
|
||||
# fully override the default options for the audio output.
|
||||
#outputaudio = -c:a libopus
|
||||
|
||||
# The options given to FFmpeg to encode the video output. The options given here
|
||||
# fully override the default options for the video output.
|
||||
#outputvideo = -c:v libvpx -deadline:v realtime -crf 10 -b:v 1M
|
||||
|
||||
# The extension of the file for audio only recordings.
|
||||
#extensionaudio = .ogg
|
||||
|
||||
# The extension of the file for audio and video recordings.
|
||||
#extensionvideo = .webm
|
||||
52
Containers/talk-recording/start.sh
Normal file
52
Containers/talk-recording/start.sh
Normal file
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Variables
|
||||
if [ -z "$NC_DOMAIN" ]; then
|
||||
echo "You need to provide the NC_DOMAIN."
|
||||
exit 1
|
||||
elif [ -z "$RECORDING_SECRET" ]; then
|
||||
echo "You need to provide the RECORDING_SECRET."
|
||||
exit 1
|
||||
elif [ -z "$INTERNAL_SECRET" ]; then
|
||||
echo "You need to provide the INTERNAL_SECRET."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cat << RECORDING_CONF > "/etc/recording.conf"
|
||||
[logs]
|
||||
level = 30
|
||||
|
||||
[http]
|
||||
listen = 0.0.0.0:1234
|
||||
|
||||
[backend]
|
||||
allowall = false
|
||||
# TODO: remove secret below when https://github.com/nextcloud/spreed/issues/9580 is fixed
|
||||
secret = ${RECORDING_SECRET}
|
||||
backends = backend-1
|
||||
skipverify = false
|
||||
maxmessagesize = 1024
|
||||
videowidth = 1920
|
||||
videoheight = 1080
|
||||
directory = /tmp
|
||||
|
||||
[backend-1]
|
||||
url = https://${NC_DOMAIN}
|
||||
secret = ${RECORDING_SECRET}
|
||||
skipverify = false
|
||||
|
||||
[signaling]
|
||||
signalings = signaling-1
|
||||
|
||||
[signaling-1]
|
||||
url = https://${NC_DOMAIN}/standalone-signaling/
|
||||
internalsecret = ${INTERNAL_SECRET}
|
||||
|
||||
[ffmpeg]
|
||||
# outputaudio = -c:a libopus
|
||||
# outputvideo = -c:v libvpx -deadline:v realtime -crf 10 -b:v 1M
|
||||
extensionaudio = .ogg
|
||||
extensionvideo = .webm
|
||||
RECORDING_CONF
|
||||
|
||||
exec "$@"
|
||||
@@ -1,19 +1,23 @@
|
||||
FROM nats:2.9.16-scratch as nats
|
||||
FROM nats:2.9.18-scratch as nats
|
||||
FROM strukturag/nextcloud-spreed-signaling:1.1.2 as signaling
|
||||
FROM coturn/coturn:4.6.2-r0-alpine
|
||||
FROM coturn/coturn:4.6.2-r3-alpine
|
||||
USER root
|
||||
# Pin alpine version manually as long as https://github.com/coturn/coturn/issues/1226 is not done
|
||||
ENV ALPINE_VERSION=3.18
|
||||
|
||||
COPY --from=nats /nats-server /usr/local/bin/nats-server
|
||||
COPY --from=signaling /usr/bin/nextcloud-spreed-signaling /usr/local/bin/nextcloud-spreed-signaling
|
||||
|
||||
COPY --chmod=775 start.sh /usr/bin/start.sh
|
||||
COPY --chmod=775 start.sh /start.sh
|
||||
COPY --chmod=664 supervisord.conf /supervisord.conf
|
||||
|
||||
RUN set -ex; \
|
||||
grep VERSION_ID /etc/os-release | grep -q "$ALPINE_VERSION.[0-9]\+$"; \
|
||||
apk add --no-cache \
|
||||
ca-certificates \
|
||||
tzdata \
|
||||
bash \
|
||||
janus-gateway \
|
||||
openssl \
|
||||
supervisor \
|
||||
bind-tools \
|
||||
@@ -21,9 +25,9 @@ RUN set -ex; \
|
||||
shadow \
|
||||
util-linux \
|
||||
build-base \
|
||||
wget \
|
||||
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; \
|
||||
@@ -32,6 +36,7 @@ RUN set -ex; \
|
||||
shadow \
|
||||
util-linux \
|
||||
build-base \
|
||||
wget \
|
||||
lua5.3-dev \
|
||||
luarocks5.3; \
|
||||
\
|
||||
@@ -62,8 +67,8 @@ RUN set -ex; \
|
||||
ENV TALK_PORT=3478
|
||||
|
||||
USER talk
|
||||
ENTRYPOINT ["start.sh"]
|
||||
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
CMD ["supervisord", "-c", "/supervisord.conf"]
|
||||
|
||||
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"
|
||||
|
||||
314
Containers/talk/server.conf.in
Normal file
314
Containers/talk/server.conf.in
Normal file
@@ -0,0 +1,314 @@
|
||||
[http]
|
||||
# IP and port to listen on for HTTP requests.
|
||||
# Comment line to disable the listener.
|
||||
#listen = 127.0.0.1:8080
|
||||
|
||||
# HTTP socket read timeout in seconds.
|
||||
#readtimeout = 15
|
||||
|
||||
# HTTP socket write timeout in seconds.
|
||||
#writetimeout = 15
|
||||
|
||||
[https]
|
||||
# IP and port to listen on for HTTPS requests.
|
||||
# Comment line to disable the listener.
|
||||
#listen = 127.0.0.1:8443
|
||||
|
||||
# HTTPS socket read timeout in seconds.
|
||||
#readtimeout = 15
|
||||
|
||||
# HTTPS socket write timeout in seconds.
|
||||
#writetimeout = 15
|
||||
|
||||
# Certificate / private key to use for the HTTPS server.
|
||||
certificate = /etc/nginx/ssl/server.crt
|
||||
key = /etc/nginx/ssl/server.key
|
||||
|
||||
[app]
|
||||
# Set to "true" to install pprof debug handlers.
|
||||
# See "https://golang.org/pkg/net/http/pprof/" for further information.
|
||||
debug = false
|
||||
|
||||
# Set to "true" to allow subscribing any streams. This is insecure and should
|
||||
# only be enabled for testing. By default only streams of users in the same
|
||||
# room and call can be subscribed.
|
||||
#allowsubscribeany = false
|
||||
|
||||
[sessions]
|
||||
# Secret value used to generate checksums of sessions. This should be a random
|
||||
# string of 32 or 64 bytes.
|
||||
hashkey = the-secret-for-session-checksums
|
||||
|
||||
# Optional key for encrypting data in the sessions. Must be either 16, 24 or
|
||||
# 32 bytes.
|
||||
# If no key is specified, data will not be encrypted (not recommended).
|
||||
blockkey = -encryption-key-
|
||||
|
||||
[clients]
|
||||
# Shared secret for connections from internal clients. This must be the same
|
||||
# value as configured in the respective internal services.
|
||||
internalsecret = the-shared-secret-for-internal-clients
|
||||
|
||||
[backend]
|
||||
# Type of backend configuration.
|
||||
# Defaults to "static".
|
||||
#
|
||||
# Possible values:
|
||||
# - static: A comma-separated list of backends is given in the "backends" option.
|
||||
# - etcd: Backends are retrieved from an etcd cluster.
|
||||
#backendtype = static
|
||||
|
||||
# For backend type "static":
|
||||
# Comma-separated list of backend ids from which clients are allowed to connect
|
||||
# from. Each backend will have isolated rooms, i.e. clients connecting to room
|
||||
# "abc12345" on backend 1 will be in a different room than clients connected to
|
||||
# a room with the same name on backend 2. Also sessions connected from different
|
||||
# backends will not be able to communicate with each other.
|
||||
#backends = backend-id, another-backend
|
||||
|
||||
# For backend type "etcd":
|
||||
# Key prefix of backend entries. All keys below will be watched and assumed to
|
||||
# contain a JSON document with the following entries:
|
||||
# - "url": Url of the Nextcloud instance.
|
||||
# - "secret": Shared secret for requests from and to the backend servers.
|
||||
#
|
||||
# Additional optional entries:
|
||||
# - "maxstreambitrate": Maximum bitrate per publishing stream (in bits per second).
|
||||
# - "maxscreenbitrate": Maximum bitrate per screensharing stream (in bits per second).
|
||||
# - "sessionlimit": Number of sessions that are allowed to connect.
|
||||
#
|
||||
# Example:
|
||||
# "/signaling/backend/one" -> {"url": "https://nextcloud.domain1.invalid", ...}
|
||||
# "/signaling/backend/two" -> {"url": "https://domain2.invalid/nextcloud", ...}
|
||||
#backendprefix = /signaling/backend
|
||||
|
||||
# Allow any hostname as backend endpoint. This is extremely insecure and should
|
||||
# only be used while running the benchmark client against the server.
|
||||
allowall = false
|
||||
|
||||
# Common shared secret for requests from and to the backend servers if
|
||||
# "allowall" is enabled. This must be the same value as configured in the
|
||||
# Nextcloud admin ui.
|
||||
#secret = the-shared-secret
|
||||
|
||||
# Timeout in seconds for requests to the backend.
|
||||
timeout = 10
|
||||
|
||||
# Maximum number of concurrent backend connections per host.
|
||||
connectionsperhost = 8
|
||||
|
||||
# If set to "true", certificate validation of backend endpoints will be skipped.
|
||||
# This should only be enabled during development, e.g. to work with self-signed
|
||||
# certificates.
|
||||
#skipverify = false
|
||||
|
||||
# For backendtype "static":
|
||||
# Backend configurations as defined in the "[backend]" section above. The
|
||||
# section names must match the ids used in "backends" above.
|
||||
#[backend-id]
|
||||
# URL of the Nextcloud instance
|
||||
#url = https://cloud.domain.invalid
|
||||
|
||||
# Shared secret for requests from and to the backend servers. This must be the
|
||||
# same value as configured in the Nextcloud admin ui.
|
||||
#secret = the-shared-secret
|
||||
|
||||
# Limit the number of sessions that are allowed to connect to this backend.
|
||||
# Omit or set to 0 to not limit the number of sessions.
|
||||
#sessionlimit = 10
|
||||
|
||||
# The maximum bitrate per publishing stream (in bits per second).
|
||||
# Defaults to the maximum bitrate configured for the proxy / MCU.
|
||||
#maxstreambitrate = 1048576
|
||||
|
||||
# The maximum bitrate per screensharing stream (in bits per second).
|
||||
# Defaults to the maximum bitrate configured for the proxy / MCU.
|
||||
#maxscreenbitrate = 2097152
|
||||
|
||||
#[another-backend]
|
||||
# URL of the Nextcloud instance
|
||||
#url = https://cloud.otherdomain.invalid
|
||||
|
||||
# Shared secret for requests from and to the backend servers. This must be the
|
||||
# same value as configured in the Nextcloud admin ui.
|
||||
#secret = the-shared-secret
|
||||
|
||||
[nats]
|
||||
# Url of NATS backend to use. This can also be a list of URLs to connect to
|
||||
# multiple backends. For local development, this can be set to "nats://loopback"
|
||||
# to process NATS messages internally instead of sending them through an
|
||||
# external NATS backend.
|
||||
#url = nats://localhost:4222
|
||||
|
||||
[mcu]
|
||||
# The type of the MCU to use. Currently only "janus" and "proxy" are supported.
|
||||
# Leave empty to disable MCU functionality.
|
||||
#type =
|
||||
|
||||
# For type "janus": the URL to the websocket endpoint of the MCU server.
|
||||
# For type "proxy": a space-separated list of proxy URLs to connect to.
|
||||
#url =
|
||||
|
||||
# The maximum bitrate per publishing stream (in bits per second).
|
||||
# Defaults to 1 mbit/sec.
|
||||
# For type "proxy": will be capped to the maximum bitrate configured at the
|
||||
# proxy server that is used.
|
||||
#maxstreambitrate = 1048576
|
||||
|
||||
# The maximum bitrate per screensharing stream (in bits per second).
|
||||
# Default is 2 mbit/sec.
|
||||
# For type "proxy": will be capped to the maximum bitrate configured at the
|
||||
# proxy server that is used.
|
||||
#maxscreenbitrate = 2097152
|
||||
|
||||
# For type "proxy": timeout in seconds for requests to the proxy server.
|
||||
#proxytimeout = 2
|
||||
|
||||
# For type "proxy": type of URL configuration for proxy servers.
|
||||
# Defaults to "static".
|
||||
#
|
||||
# Possible values:
|
||||
# - static: A space-separated list of proxy URLs is given in the "url" option.
|
||||
# - etcd: Proxy URLs are retrieved from an etcd cluster (see below).
|
||||
#urltype = static
|
||||
|
||||
# If set to "true", certificate validation of proxy servers will be skipped.
|
||||
# This should only be enabled during development, e.g. to work with self-signed
|
||||
# certificates.
|
||||
#skipverify = false
|
||||
|
||||
# For type "proxy": the id of the token to use when connecting to proxy servers.
|
||||
#token_id = server1
|
||||
|
||||
# For type "proxy": the private key for the configured token id to use when
|
||||
# connecting to proxy servers.
|
||||
#token_key = privkey.pem
|
||||
|
||||
# For url type "static": Enable DNS discovery on hostname of configured URL.
|
||||
# If the hostname resolves to multiple IP addresses, a connection is established
|
||||
# to each of them.
|
||||
# Changes to the DNS are monitored regularly and proxy connections are created
|
||||
# or deleted as necessary.
|
||||
#dnsdiscovery = true
|
||||
|
||||
# For url type "etcd": Key prefix of MCU proxy entries. All keys below will be
|
||||
# watched and assumed to contain a JSON document. The entry "address" from this
|
||||
# document will be used as proxy URL, other contents in the document will be
|
||||
# ignored.
|
||||
#
|
||||
# Example:
|
||||
# "/signaling/proxy/server/one" -> {"address": "https://proxy1.domain.invalid"}
|
||||
# "/signaling/proxy/server/two" -> {"address": "https://proxy2.domain.invalid"}
|
||||
#keyprefix = /signaling/proxy/server
|
||||
|
||||
[turn]
|
||||
# API key that the MCU will need to send when requesting TURN credentials.
|
||||
#apikey = the-api-key-for-the-rest-service
|
||||
|
||||
# The shared secret to use for generating TURN credentials. This must be the
|
||||
# same as on the TURN server.
|
||||
#secret = 6d1c17a7-c736-4e22-b02c-e2955b7ecc64
|
||||
|
||||
# A comma-separated list of TURN servers to use. Leave empty to disable the
|
||||
# TURN REST API.
|
||||
#servers = turn:1.2.3.4:9991?transport=udp,turn:1.2.3.4:9991?transport=tcp
|
||||
|
||||
[geoip]
|
||||
# License key to use when downloading the MaxMind GeoIP database. You can
|
||||
# register an account at "https://www.maxmind.com/en/geolite2/signup" for
|
||||
# free. See "https://dev.maxmind.com/geoip/geoip2/geolite2/" for further
|
||||
# information.
|
||||
# Leave empty to disable GeoIP lookups.
|
||||
#license =
|
||||
|
||||
# Optional URL to download a MaxMind GeoIP database from. Will be generated if
|
||||
# "license" is provided above. Can be a "file://" url if a local file should
|
||||
# be used. Please note that the database must provide a country field when
|
||||
# looking up IP addresses.
|
||||
#url =
|
||||
|
||||
[geoip-overrides]
|
||||
# Optional overrides for GeoIP lookups. The key is an IP address / range, the
|
||||
# value the associated country code.
|
||||
#127.0.0.1 = DE
|
||||
#192.168.0.0/24 = DE
|
||||
|
||||
[continent-overrides]
|
||||
# Optional overrides for continent mappings. The key is a continent code, the
|
||||
# value a comma-separated list of continent codes to map the continent to.
|
||||
# Use European servers for clients in Africa.
|
||||
#AF = EU
|
||||
# Use servers in North Africa for clients in South America.
|
||||
#SA = NA
|
||||
|
||||
[stats]
|
||||
# Comma-separated list of IP addresses that are allowed to access the stats
|
||||
# endpoint. Leave empty (or commented) to only allow access from "127.0.0.1".
|
||||
#allowed_ips =
|
||||
|
||||
[etcd]
|
||||
# Comma-separated list of static etcd endpoints to connect to.
|
||||
#endpoints = 127.0.0.1:2379,127.0.0.1:22379,127.0.0.1:32379
|
||||
|
||||
# Options to perform endpoint discovery through DNS SRV.
|
||||
# Only used if no endpoints are configured manually.
|
||||
#discoverysrv = example.com
|
||||
#discoveryservice = foo
|
||||
|
||||
# Path to private key, client certificate and CA certificate if TLS
|
||||
# authentication should be used.
|
||||
#clientkey = /path/to/etcd-client.key
|
||||
#clientcert = /path/to/etcd-client.crt
|
||||
#cacert = /path/to/etcd-ca.crt
|
||||
|
||||
[grpc]
|
||||
# IP and port to listen on for GRPC requests.
|
||||
# Comment line to disable the listener.
|
||||
#listen = 0.0.0.0:9090
|
||||
|
||||
# Certificate / private key to use for the GRPC server.
|
||||
# Omit to use unencrypted connections.
|
||||
#servercertificate = /path/to/grpc-server.crt
|
||||
#serverkey = /path/to/grpc-server.key
|
||||
|
||||
# CA certificate that is allowed to issue certificates of GRPC servers.
|
||||
# Omit to expect unencrypted connections.
|
||||
#serverca = /path/to/grpc-ca.crt
|
||||
|
||||
# Certificate / private key to use for the GRPC client.
|
||||
# Omit if clients don't need to authenticate on the server.
|
||||
#clientcertificate = /path/to/grpc-client.crt
|
||||
#clientkey = /path/to/grpc-client.key
|
||||
|
||||
# CA certificate that is allowed to issue certificates of GRPC clients.
|
||||
# Omit to allow any clients to connect.
|
||||
#clientca = /path/to/grpc-ca.crt
|
||||
|
||||
# Type of GRPC target configuration.
|
||||
# Defaults to "static".
|
||||
#
|
||||
# Possible values:
|
||||
# - static: A comma-separated list of targets is given in the "targets" option.
|
||||
# - etcd: Target URLs are retrieved from an etcd cluster.
|
||||
#targettype = static
|
||||
|
||||
# For target type "static": Comma-separated list of GRPC targets to connect to
|
||||
# for clustering mode.
|
||||
#targets = 192.168.0.1:9090, 192.168.0.2:9090
|
||||
|
||||
# For target type "static": Enable DNS discovery on hostnames of GRPC target.
|
||||
# If a hostname resolves to multiple IP addresses, a connection is established
|
||||
# to each of them.
|
||||
# Changes to the DNS are monitored regularly and GRPC clients are created or
|
||||
# deleted as necessary.
|
||||
#dnsdiscovery = true
|
||||
|
||||
# For target type "etcd": Key prefix of GRPC target entries. All keys below will
|
||||
# be watched and assumed to contain a JSON document. The entry "address" from
|
||||
# this document will be used as target URL, other contents in the document will
|
||||
# be ignored.
|
||||
#
|
||||
# Example:
|
||||
# "/signaling/cluster/grpc/one" -> {"address": "192.168.0.1:9090"}
|
||||
# "/signaling/cluster/grpc/two" -> {"address": "192.168.0.2:9090"}
|
||||
#targetprefix = /signaling/cluster/grpc
|
||||
@@ -10,6 +10,9 @@ elif [ -z "$TURN_SECRET" ]; then
|
||||
elif [ -z "$SIGNALING_SECRET" ]; then
|
||||
echo "You need to provide the SIGNALING_SECRET."
|
||||
exit 1
|
||||
elif [ -z "$INTERNAL_SECRET" ]; then
|
||||
echo "You need to provide the INTERNAL_SECRET."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -x
|
||||
@@ -63,7 +66,7 @@ hashkey = $(openssl rand -hex 16)
|
||||
blockkey = $(openssl rand -hex 16)
|
||||
|
||||
[clients]
|
||||
internalsecret = $(openssl rand -hex 16)
|
||||
internalsecret = ${INTERNAL_SECRET}
|
||||
|
||||
[backend]
|
||||
backends = backend-1
|
||||
|
||||
@@ -27,7 +27,7 @@ stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
command=janus --config=/etc/janus/janus.jcfg --disable-colors --log-stdout
|
||||
command=janus --config=/etc/janus/janus.jcfg --disable-colors --log-stdout --full-trickle --debug-level 3
|
||||
|
||||
[program:signaling]
|
||||
stdout_logfile=/dev/stdout
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
# From https://github.com/containrrr/watchtower/blob/main/dockerfiles/Dockerfile.self-contained
|
||||
FROM containrrr/watchtower:1.5.3 as watchtower
|
||||
|
||||
FROM alpine:3.17.3
|
||||
FROM alpine:3.18.2
|
||||
|
||||
RUN apk add --no-cache bash
|
||||
COPY --from=watchtower /watchtower /watchtower
|
||||
|
||||
COPY --chmod=775 start.sh /start.sh
|
||||
|
||||
USER root
|
||||
|
||||
ENTRYPOINT ["/start.sh"]
|
||||
LABEL com.centurylinklabs.watchtower.monitor-only="true"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<name>Nextcloud All-in-One</name>
|
||||
<summary>Provides a login link for admins.</summary>
|
||||
<description>Add a link to the admin settings that gives access to the Nextcloud All-in-One admin interface</description>
|
||||
<version>0.3.0</version>
|
||||
<version>0.4.0</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Azul</author>
|
||||
<namespace>AllInOne</namespace>
|
||||
@@ -13,7 +13,7 @@
|
||||
<category>monitoring</category>
|
||||
<bugs>https://github.com/nextcloud/all-in-one/issues</bugs>
|
||||
<dependencies>
|
||||
<nextcloud min-version="24" max-version="25"/>
|
||||
<nextcloud min-version="25" max-version="26"/>
|
||||
</dependencies>
|
||||
|
||||
<settings>
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
version: "3.8"
|
||||
|
||||
volumes:
|
||||
nextcloud_aio_mastercontainer:
|
||||
name: nextcloud_aio_mastercontainer # This line is not allowed to be changed as otherwise the built-in backup solution will not work
|
||||
|
||||
services:
|
||||
nextcloud:
|
||||
image: nextcloud/all-in-one:latest
|
||||
@@ -13,25 +7,26 @@ services:
|
||||
- nextcloud_aio_mastercontainer:/mnt/docker-aio-config # This line is not allowed to be changed as otherwise the built-in backup solution will not work
|
||||
- /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 'WATCHTOWER_DOCKER_SOCKET_PATH'!
|
||||
ports:
|
||||
- 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
|
||||
- 80:80 # Can be removed when running behind a web server or reverse proxy (like Apache, Nginx, Cloudflare Tunnel 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 web server or reverse proxy (like Apache, Nginx and else). 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, Cloudflare Tunnel 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
|
||||
# - AIO_DISABLE_BACKUP_SECTION=false # Setting this to true allows to hide the backup section in the AIO interface.
|
||||
# - 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
|
||||
# - AIO_DISABLE_BACKUP_SECTION=false # Setting this to true allows to hide the backup section in the AIO interface. See https://github.com/nextcloud/all-in-one#how-to-disable-the-backup-section
|
||||
# - APACHE_PORT=11000 # Is needed when running behind a web server or reverse proxy (like Apache, Nginx, Cloudflare Tunnel 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, Cloudflare Tunnel and else) that is running on the same host. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
||||
# - BORG_RETENTION_POLICY=--keep-within=7d --keep-weekly=4 --keep-monthly=6 # Allows to adjust borgs retention policy. See https://github.com/nextcloud/all-in-one#how-to-adjust-borgs-retention-policy
|
||||
# - 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
|
||||
# - NEXTCLOUD_DATADIR=/mnt/ncdata # Allows to set the host directory for Nextcloud's datadir. See https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir
|
||||
# - NEXTCLOUD_DATADIR=/mnt/ncdata # Allows to set the host directory for Nextcloud's datadir. ⚠️⚠️⚠️ Warning: do not set or adjust this value after the initial Nextcloud installation is done! See https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir
|
||||
# - NEXTCLOUD_MOUNT=/mnt/ # Allows the Nextcloud container to access the chosen directory on the host. See https://github.com/nextcloud/all-in-one#how-to-allow-the-nextcloud-container-to-access-directories-on-the-host
|
||||
# - NEXTCLOUD_UPLOAD_LIMIT=10G # Can be adjusted if you need more. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-upload-limit-for-nextcloud
|
||||
# - NEXTCLOUD_MAX_TIME=3600 # Can be adjusted if you need more. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-max-execution-time-for-nextcloud
|
||||
# - NEXTCLOUD_MEMORY_LIMIT=512M # Can be adjusted if you need more. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-php-memory-limit-for-nextcloud
|
||||
# - NEXTCLOUD_TRUSTED_CACERTS_DIR=/path/to/my/cacerts # CA certificates in this directory will be trusted by the OS of the nexcloud container (Useful e.g. for LDAPS) See See https://github.com/nextcloud/all-in-one#how-to-trust-user-defiend-certification-authorities-ca
|
||||
# - NEXTCLOUD_STARTUP_APPS=deck twofactor_totp tasks calendar contacts # Allows to modify the Nextcloud apps that are installed on starting AIO the first time. See https://github.com/nextcloud/all-in-one#how-to-change-the-nextcloud-apps-that-are-installed-on-the-first-startup
|
||||
# - NEXTCLOUD_TRUSTED_CACERTS_DIR=/path/to/my/cacerts # CA certificates in this directory will be trusted by the OS of the nexcloud container (Useful e.g. for LDAPS) See See https://github.com/nextcloud/all-in-one#how-to-trust-user-defined-certification-authorities-ca
|
||||
# - NEXTCLOUD_STARTUP_APPS=deck twofactor_totp tasks calendar contacts notes # Allows to modify the Nextcloud apps that are installed on starting AIO the first time. See https://github.com/nextcloud/all-in-one#how-to-change-the-nextcloud-apps-that-are-installed-on-the-first-startup
|
||||
# - 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. See https://github.com/nextcloud/all-in-one#how-to-add-os-packages-permanently-to-the-nextcloud-container
|
||||
# - 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. See https://github.com/nextcloud/all-in-one#how-to-add-php-extensions-permanently-to-the-nextcloud-container
|
||||
# - NEXTCLOUD_ENABLE_DRI_DEVICE=true # This allows to enable the /dev/dri device in the Nextcloud container which is needed for hardware-transcoding. See https://github.com/nextcloud/all-in-one#how-to-enable-hardware-transcoding-for-nextcloud
|
||||
# - TALK_PORT=3478 # This allows to adjust the port that the talk container is using.
|
||||
# - NEXTCLOUD_ENABLE_DRI_DEVICE=true # This allows to enable the /dev/dri device in the Nextcloud container. ⚠️⚠️⚠️ Warning: this only works if the '/dev/dri' device is present on the host! If it should not exist on your host, don't set this to true as otherwise the Nextcloud container will fail to start! See https://github.com/nextcloud/all-in-one#how-to-enable-hardware-transcoding-for-nextcloud
|
||||
# - TALK_PORT=3478 # This allows to adjust the port that the talk container is using. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-talk-port
|
||||
# - WATCHTOWER_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'
|
||||
# networks: # Is needed when you want to create the nextcloud-aio network with ipv6-support using this file, see the network config at the bottom of the file
|
||||
# - nextcloud-aio # Is needed when you want to create the nextcloud-aio network with ipv6-support using this file, see the network config at the bottom of the file
|
||||
@@ -50,9 +45,12 @@ services:
|
||||
# - ./sites:/srv
|
||||
# network_mode: "host"
|
||||
|
||||
volumes:
|
||||
nextcloud_aio_mastercontainer:
|
||||
name: nextcloud_aio_mastercontainer # This line is not allowed to be changed as otherwise the built-in backup solution will not work
|
||||
|
||||
# # Optional: If you need ipv6, follow step 1 and 2 of https://github.com/nextcloud/all-in-one/blob/main/docker-ipv6-support.md first and then uncomment the below config in order to activate ipv6 for the internal nextcloud-aio network.
|
||||
# # Please make sure to uncomment also the networking lines of the mastercontainer above in order to actually create the network with docker-compose
|
||||
# # Inspired by https://github.com/mailcow/mailcow-dockerized/blob/master/docker-compose.yml
|
||||
# networks:
|
||||
# nextcloud-aio:
|
||||
# name: nextcloud-aio # This line is not allowed to be changed as otherwise the created network will not be used by the other containers of AIO
|
||||
@@ -9,7 +9,7 @@ You can run AIO with docker rootless by following the steps below.
|
||||
1. Also do not forget to run `loginctl enable-linger USERNAME` (and substitute USERNAME with the correct one) in order to make sure that user services are automatically started after every reboot.
|
||||
1. Expose the privileged ports by following https://docs.docker.com/engine/security/rootless/#exposing-privileged-ports. (`sudo setcap cap_net_bind_service=ep $(which rootlesskit); systemctl --user restart docker`)
|
||||
1. Use the official AIO startup command but use `--volume $XDG_RUNTIME_DIR/docker.sock:/var/run/docker.sock:ro` instead of `--volume /var/run/docker.sock:/var/run/docker.sock:ro` and also add `--env WATCHTOWER_DOCKER_SOCKET_PATH=$XDG_RUNTIME_DIR/docker.sock` to the initial container startup (which is needed for mastercontainer updates to work correctly).
|
||||
1. Now everything should work like without docker rootless. You can consider using docker-compose for this or running it behind a reverse proxy. Basically the only thing that needs to be adjusted always in the startup command or docker-compose file (after installing docker rootles) are things that are mentioned in point 3.
|
||||
1. Now everything should work like without docker rootless. You can consider using docker-compose for this or running it behind a reverse proxy. Basically the only thing that needs to be adjusted always in the startup command or compose.yaml file (after installing docker rootles) are things that are mentioned in point 3.
|
||||
|
||||
**Please note:** All files outside the containers get created, written to and accessed as the user that is running the docker daemon or a subuid of it. So for the built-in backup to work you need to allow this user to write to the target directory. E.g. with `sudo chown -R USERNAME:GROUPNAME /mnt/backup`. The same applies when changing Nextcloud's datadir. E.g. `sudo chown -R USERNAME:GROUPNAME /mnt/ncdata`. When you want to use the NEXTCLOUD_MOUNT option for local external storage, you need to adjust the permissions of the chosen folders to be accessible/writeable by the userid `100032:100032` (if running `grep ^$(whoami): /etc/subuid` as the user that is running the docker daemon returns 100000 as first value).
|
||||
|
||||
|
||||
@@ -6,14 +6,14 @@ The recommended way is the following:
|
||||
1. Set up your domain correctly to point to your home network
|
||||
1. Set up a reverse proxy by following the [reverse proxy documentation](./reverse-proxy.md) but only open port 80 (which is needed for the ACME challenge to work - however no real traffic will use this port).
|
||||
1. Set up a local DNS-server like a pi-hole and configure it to be your local DNS-server for the whole network. Then in the Pi-hole interface, add a custom DNS-record for your domain and overwrite the A-record (and possibly the AAAA-record, too) to point to the private ip-address of your reverse proxy (see https://github.com/nextcloud/all-in-one#how-can-i-access-nextcloud-locally)
|
||||
1. Enter the ip-address of your local dns-server in the deamon.json file for docker so that you are sure that all docker containers use the correct local dns-server.
|
||||
1. Enter the ip-address of your local dns-server in the daemon.json file for docker so that you are sure that all docker containers use the correct local dns-server.
|
||||
1. Now, entering the domain in the AIO-interface should work as expected and should allow you to continue with the setup
|
||||
|
||||
## 2. Use the ACME DNS-challenge
|
||||
You can alternatively use the ACME DNS-challenge to get a valid certificate for Nextcloud. Here is described how to set it up: https://github.com/nextcloud/all-in-one#how-to-get-nextcloud-running-using-the-acme-dns-challenge
|
||||
|
||||
## 3. Use Cloudflare
|
||||
If you do not have any contol over the network, you may think about using Cloudflare Tunnel to get a valid certificate for your Nextcloud. However it will be opened to the public internet then. See https://github.com/nextcloud/all-in-one#how-to-run-nextcloud-behind-a-cloudflare-tunnel how to set this up.
|
||||
If you do not have any control over the network, you may think about using Cloudflare Tunnel to get a valid certificate for your Nextcloud. However it will be opened to the public internet then. See https://github.com/nextcloud/all-in-one#how-to-run-nextcloud-behind-a-cloudflare-tunnel how to set this up.
|
||||
|
||||
## 4. Buy a certificate and use that
|
||||
If none of the above ways work for you, you may simply buy a certificate from an issuer for your domain. You then download the certificate onto your server, configure AIO in [reverse proxy mode](./reverse-proxy.md) and use the certificate for your domain in your reverse proxy config.
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
nextcloud-aio-apache:
|
||||
depends_on:
|
||||
@@ -42,9 +40,9 @@ services:
|
||||
- PGTZ=${TIMEZONE}
|
||||
stop_grace_period: 1800s
|
||||
restart: unless-stopped
|
||||
shm_size: 268435456
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
shm_size: 268435456
|
||||
|
||||
nextcloud-aio-nextcloud:
|
||||
depends_on:
|
||||
@@ -52,6 +50,7 @@ services:
|
||||
- nextcloud-aio-redis
|
||||
- nextcloud-aio-clamav
|
||||
- nextcloud-aio-fulltextsearch
|
||||
- nextcloud-aio-talk-recording
|
||||
- nextcloud-aio-imaginary
|
||||
image: nextcloud/aio-nextcloud:latest
|
||||
expose:
|
||||
@@ -69,7 +68,6 @@ services:
|
||||
- POSTGRES_USER=nextcloud
|
||||
- REDIS_HOST=nextcloud-aio-redis
|
||||
- REDIS_HOST_PASSWORD=${REDIS_PASSWORD}
|
||||
- AIO_TOKEN=${AIO_TOKEN}
|
||||
- NC_DOMAIN=${NC_DOMAIN}
|
||||
- ADMIN_USER=admin
|
||||
- ADMIN_PASSWORD=${NEXTCLOUD_PASSWORD}
|
||||
@@ -79,7 +77,6 @@ services:
|
||||
- TURN_SECRET=${TURN_SECRET}
|
||||
- SIGNALING_SECRET=${SIGNALING_SECRET}
|
||||
- ONLYOFFICE_SECRET=${ONLYOFFICE_SECRET}
|
||||
- AIO_URL=${AIO_URL}
|
||||
- NEXTCLOUD_MOUNT=${NEXTCLOUD_MOUNT}
|
||||
- CLAMAV_ENABLED=${CLAMAV_ENABLED}
|
||||
- CLAMAV_HOST=nextcloud-aio-clamav
|
||||
@@ -103,6 +100,9 @@ services:
|
||||
- ADDITIONAL_APKS=${NEXTCLOUD_ADDITIONAL_APKS}
|
||||
- ADDITIONAL_PHP_EXTENSIONS=${NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS}
|
||||
- INSTALL_LATEST_MAJOR=${INSTALL_LATEST_MAJOR}
|
||||
- TALK_RECORDING_ENABLED=${TALK_RECORDING_ENABLED}
|
||||
- RECORDING_SECRET=${RECORDING_SECRET}
|
||||
- TALK_RECORDING_HOST=nextcloud-aio-talk-recording
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
@@ -119,9 +119,9 @@ services:
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
read_only: true
|
||||
|
||||
nextcloud-aio-collabora:
|
||||
profiles: ["collabora"]
|
||||
image: nextcloud/aio-collabora:latest
|
||||
expose:
|
||||
- "9980"
|
||||
@@ -132,14 +132,13 @@ services:
|
||||
- TZ=${TIMEZONE}
|
||||
- server_name=${NC_DOMAIN}
|
||||
- DONT_GEN_SSL_CERT=1
|
||||
volumes:
|
||||
- nextcloud_aio_collabora_fonts:/opt/cool/systemplate/tmpfonts:rw
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- collabora
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
|
||||
nextcloud-aio-talk:
|
||||
profiles: ["talk"]
|
||||
image: nextcloud/aio-talk:latest
|
||||
ports:
|
||||
- ${TALK_PORT}:${TALK_PORT}/tcp
|
||||
@@ -152,12 +151,31 @@ services:
|
||||
- SIGNALING_SECRET=${SIGNALING_SECRET}
|
||||
- TZ=${TIMEZONE}
|
||||
- TALK_PORT=${TALK_PORT}
|
||||
- INTERNAL_SECRET=${TALK_INTERNAL_SECRET}
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- talk
|
||||
- talk-recording
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
|
||||
nextcloud-aio-talk-recording:
|
||||
image: nextcloud/aio-talk-recording:latest
|
||||
expose:
|
||||
- "1234"
|
||||
environment:
|
||||
- NC_DOMAIN=${NC_DOMAIN}
|
||||
- TZ=${TIMEZONE}
|
||||
- RECORDING_SECRET=${RECORDING_SECRET}
|
||||
- INTERNAL_SECRET=${TALK_INTERNAL_SECRET}
|
||||
shm_size: 2147483648
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- talk-recording
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
|
||||
nextcloud-aio-clamav:
|
||||
profiles: ["clamav"]
|
||||
image: nextcloud/aio-clamav:latest
|
||||
expose:
|
||||
- "3310"
|
||||
@@ -167,11 +185,12 @@ services:
|
||||
volumes:
|
||||
- nextcloud_aio_clamav:/var/lib/clamav:rw
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- clamav
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
|
||||
nextcloud-aio-onlyoffice:
|
||||
profiles: ["onlyoffice"]
|
||||
image: nextcloud/aio-onlyoffice:latest
|
||||
expose:
|
||||
- "80"
|
||||
@@ -183,24 +202,26 @@ services:
|
||||
volumes:
|
||||
- nextcloud_aio_onlyoffice:/var/lib/onlyoffice:rw
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- onlyoffice
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
|
||||
nextcloud-aio-imaginary:
|
||||
profiles: ["imaginary"]
|
||||
image: nextcloud/aio-imaginary:latest
|
||||
expose:
|
||||
- "9000"
|
||||
environment:
|
||||
- TZ=${TIMEZONE}
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
cap_add:
|
||||
- SYS_NICE
|
||||
profiles:
|
||||
- imaginary
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
|
||||
nextcloud-aio-fulltextsearch:
|
||||
profiles: ["fulltextsearch"]
|
||||
image: nextcloud/aio-fulltextsearch:latest
|
||||
expose:
|
||||
- "9200"
|
||||
@@ -212,6 +233,8 @@ services:
|
||||
volumes:
|
||||
- nextcloud_aio_elasticsearch:/usr/share/elasticsearch/data:rw
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- fulltextsearch
|
||||
networks:
|
||||
- nextcloud-aio
|
||||
|
||||
@@ -220,8 +243,6 @@ volumes:
|
||||
name: nextcloud_aio_apache
|
||||
nextcloud_aio_clamav:
|
||||
name: nextcloud_aio_clamav
|
||||
nextcloud_aio_collabora_fonts:
|
||||
name: nextcloud_aio_collabora_fonts
|
||||
nextcloud_aio_database:
|
||||
name: nextcloud_aio_database
|
||||
nextcloud_aio_database_dump:
|
||||
|
||||
@@ -11,33 +11,34 @@ You can run the containers that are build for AIO with docker-compose. This come
|
||||
- You lose the AIO interface
|
||||
- You lose update notifications and automatic updates
|
||||
- You lose all AIO backup and restore features
|
||||
- **You need to know what you are doing, especially when modifying the docker-compose file**
|
||||
- **You need to know what you are doing, especially when modifying the compose.yaml file**
|
||||
- For updating, you need to strictly follow the at the bottom described update routine
|
||||
- Probably more
|
||||
|
||||
## How to use this?
|
||||
First, install docker and docker-compose if not already done. Then simply run the following:
|
||||
First, install docker and docker-compose (v2) if not already done. Then simply run the following:
|
||||
```bash
|
||||
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. (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 copy the provided yaml file to a compose.yaml file by running `cp latest.yml compose.yaml`.
|
||||
|
||||
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`. (Note: there is no clamav image for arm64).
|
||||
The default profile of `latest.yml` only provide the minimum necessary services: nextcloud, database, redis and apache. To get optional services collabora, talk, talk-recording, 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`. (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 talk-recording --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. If your previous copy of `sample.conf` is named `my.conf`, run `mv my.conf .env` in order to rename the file to `.env`.
|
||||
1. If your previous copy of `sample.conf` is named `my.conf`, run `mv -vn my.conf .env` in order to rename the file to `.env`.
|
||||
1. Run `sudo docker-compose down` to stop all running containers
|
||||
1. Back up all important files and folders
|
||||
1. Run `git pull` in order to get the updated yaml files from the repository. Now bring your `docker-compose.yml` file up-to-date with the updated one from the repository. You can use `diff docker-compose.yml latest.yml` for comparing. ⚠️ **Please note**: Starting with AIO v5.1.0, ipv6 networking will be enabled by default, so make sure to either enable it first by following steps 1 and 2 of https://github.com/nextcloud/all-in-one/blob/main/docker-ipv6-support.md and then proceed with the steps below or disable ipv6 networking by editing the docker-compose file and removing ipv6 from the network.
|
||||
1. If your compose file is still named `docker-compose.yml` rename it to `compose.yaml` by running `mv -vn docker-compose.yml compose.yaml`
|
||||
1. Run `git pull` in order to get the updated yaml files from the repository. Now bring your `compose.yaml` file up-to-date with the updated one from the repository. You can use `diff compose.yaml latest.yml` for comparing. ⚠️ **Please note**: Starting with AIO v5.1.0, ipv6 networking will be enabled by default, so make sure to either enable it first by following steps 1 and 2 of https://github.com/nextcloud/all-in-one/blob/main/docker-ipv6-support.md and then proceed with the steps below or disable ipv6 networking by editing the compose.yaml file and removing ipv6 from the network.
|
||||
1. Also have a look at the `sample.conf` if any variable was added or renamed and add that to your conf file as well. Here may help the diff command as well.
|
||||
1. After the file update was successful, simply run `sudo docker-compose pull` to pull the new images.
|
||||
1. At the end run `sudo docker-compose up` in order to start and update the containers with the new configuration.
|
||||
|
||||
@@ -1,34 +1,37 @@
|
||||
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 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 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="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!
|
||||
NC_DOMAIN=yourdomain.com # TODO! Needs to be changed to the domain that you want to use for Nextcloud.
|
||||
NEXTCLOUD_PASSWORD= # TODO! This is the password of the initially created Nextcloud admin with username "admin".
|
||||
ONLYOFFICE_SECRET= # TODO! This needs to be a unique and good password!
|
||||
RECORDING_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_INTERNAL_SECRET= # TODO! This needs to be a unique and good password!
|
||||
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!
|
||||
|
||||
CLAMAV_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
COLLABORA_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
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.
|
||||
ONLYOFFICE_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
TALK_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
TALK_RECORDING_ENABLED="no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
|
||||
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, Cloudflare Tunnel 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 web server or reverse proxy (like Apache, Nginx, Cloudflare Tunnel and else).
|
||||
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_SECCOMP_POLICY=--o:security.seccomp=true # Changing the value to false allows to disable the seccomp feature of the Collabora container.
|
||||
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.
|
||||
NEXTCLOUD_DATADIR=nextcloud_aio_nextcloud_data # You can change this to e.g. "/mnt/ncdata" to map it to a location on your host. It needs to be adjusted before the first startup and never afterwards!
|
||||
NEXTCLOUD_MAX_TIME=3600 # This allows to change the upload time limit of the Nextcloud container
|
||||
NEXTCLOUD_MEMORY_LIMIT=512M # This allows to change the PHP memory limit of the Nextcloud container
|
||||
NEXTCLOUD_MOUNT=/mnt/ # This allows the Nextcloud container to access directories on the host. It must never be equal to the value of NEXTCLOUD_DATADIR!
|
||||
NEXTCLOUD_PASSWORD= # TODO! This is the password of the initially created Nextcloud admin with username "admin".
|
||||
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_STARTUP_APPS="deck twofactor_totp tasks calendar contacts notes" # 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" (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="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" (with quotes), it will automatically update all installed Nextcloud apps upon container startup on saturdays.
|
||||
IPV6_NETWORK=fd12:3456:789a:2::/64 # IPv6 subnet to use
|
||||
|
||||
@@ -16,6 +16,7 @@ OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].internal_port)')"
|
||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].secrets)')"
|
||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].devices)')"
|
||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].backup_volumes)')"
|
||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[].nextcloud_exec_commands)')"
|
||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[] | select(.container_name == "nextcloud-aio-watchtower"))')"
|
||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[] | select(.container_name == "nextcloud-aio-domaincheck"))')"
|
||||
OUTPUT="$(echo "$OUTPUT" | jq 'del(.services[] | select(.container_name == "nextcloud-aio-borgbackup"))')"
|
||||
@@ -31,6 +32,11 @@ sed -i '/stop_grace_period:/s/$/s/' containers.yml
|
||||
sed -i '/: \[\]/d' containers.yml
|
||||
sed -i 's|- source: |- |' containers.yml
|
||||
sed -i 's|- ip_binding: |- |' containers.yml
|
||||
sed -i '/AIO_TOKEN/d' containers.yml
|
||||
sed -i '/AIO_URL/d' containers.yml
|
||||
|
||||
sed -i '/AIO_TOKEN/d' sample.conf
|
||||
sed -i '/AIO_URL/d' sample.conf
|
||||
|
||||
TCP="$(grep -oP '[%A-Z0-9_]+/tcp' containers.yml | sort -u)"
|
||||
mapfile -t TCP <<< "$TCP"
|
||||
@@ -72,22 +78,30 @@ sed -i 's|APACHE_MAX_SIZE=|APACHE_MAX_SIZE=10737418240 # This needs to
|
||||
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 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|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, Cloudflare Tunnel 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, Cloudflare Tunnel 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
|
||||
sed -i 's|NC_DOMAIN=|NC_DOMAIN=yourdomain.com # TODO! Needs to be changed to the domain that you want to use for Nextcloud.|' sample.conf
|
||||
sed -i 's|NEXTCLOUD_PASSWORD=|NEXTCLOUD_PASSWORD= # TODO! This is the password of the initially created Nextcloud admin with username "admin".|' sample.conf
|
||||
sed -i 's|TIMEZONE=|TIMEZONE=Europe/Berlin # TODO! This is the timezone that your containers will use.|' sample.conf
|
||||
sed -i 's|COLLABORA_SECCOMP_POLICY=|COLLABORA_SECCOMP_POLICY=--o:security.seccomp=true # Changing the value to false allows to disable the seccomp feature of the Collabora container.|' sample.conf
|
||||
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_STARTUP_APPS=|NEXTCLOUD_STARTUP_APPS="deck twofactor_totp tasks calendar contacts notes" # 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
|
||||
echo 'IPV6_NETWORK=fd12:3456:789a:2::/64 # IPv6 subnet to use' >> sample.conf
|
||||
|
||||
grep '# TODO!' sample.conf > todo.conf
|
||||
grep -v '# TODO!\|_ENABLED' sample.conf > temp.conf
|
||||
grep '_ENABLED' sample.conf > enabled.conf
|
||||
cat todo.conf > sample.conf
|
||||
# shellcheck disable=SC2129
|
||||
echo '' >> sample.conf
|
||||
cat enabled.conf >> sample.conf
|
||||
echo '' >> sample.conf
|
||||
cat temp.conf >> sample.conf
|
||||
rm todo.conf temp.conf enabled.conf
|
||||
cat sample.conf
|
||||
|
||||
OUTPUT="$(cat containers.yml)"
|
||||
@@ -95,23 +109,13 @@ NAMES="$(grep -oP "container_name:.*" containers.yml | grep -oP 'nextcloud-aio.*
|
||||
mapfile -t NAMES <<< "$NAMES"
|
||||
for name in "${NAMES[@]}"
|
||||
do
|
||||
OUTPUT="$(echo "$OUTPUT" | sed "/container_name.*$name/i\ \ $name:")"
|
||||
OUTPUT="$(echo "$OUTPUT" | sed "/container_name.*$name$/i\ \ $name:")"
|
||||
if [ "$name" != "nextcloud-aio-apache" ]; then
|
||||
OUTPUT="$(echo "$OUTPUT" | sed "/ $name:/i\ ")"
|
||||
fi
|
||||
if ! echo "$name" | grep "apache$" && ! echo "$name" | grep "database$" && ! echo "$name" | grep "nextcloud$" && ! echo "$name" | grep "redis$"; then
|
||||
sed -i '/container_name/d' containers.yml
|
||||
SLIM_NAME="${name##nextcloud-aio-}"
|
||||
OUTPUT="$(echo "$OUTPUT" | sed "/container_name: $name$/a\ \ \ \ profiles:\ \[\"$SLIM_NAME\"\]")"
|
||||
fi
|
||||
done
|
||||
|
||||
OUTPUT="$(echo "$OUTPUT" | sed "/restart: /a\ \ \ \ networks:\n\ \ \ \ \ \ - nextcloud-aio")"
|
||||
|
||||
echo 'version: "3.8"' > containers.yml
|
||||
echo "" >> containers.yml
|
||||
|
||||
echo "$OUTPUT" >> containers.yml
|
||||
echo "$OUTPUT" > containers.yml
|
||||
|
||||
sed -i '/container_name/d' containers.yml
|
||||
sed -i 's|^ $||' containers.yml
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: nextcloud-aio-helm-chart
|
||||
description: A generated Helm Chart for Nextcloud AIO from Skippbox Kompose
|
||||
version: 5.1.0
|
||||
version: 6.1.1
|
||||
apiVersion: v2
|
||||
keywords:
|
||||
- latest
|
||||
|
||||
@@ -54,7 +54,7 @@ spec:
|
||||
value: nextcloud-aio-talk
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-apache:20230511_075831-latest
|
||||
image: nextcloud/aio-apache:20230613_120442-latest
|
||||
name: nextcloud-aio-apache
|
||||
ports:
|
||||
- containerPort: {{ .Values.APACHE_PORT }}
|
||||
|
||||
@@ -38,7 +38,7 @@ spec:
|
||||
value: "90"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-clamav:20230511_075831-latest
|
||||
image: nextcloud/aio-clamav:20230613_120442-latest
|
||||
name: nextcloud-aio-clamav
|
||||
ports:
|
||||
- containerPort: 3310
|
||||
|
||||
@@ -22,16 +22,6 @@ spec:
|
||||
io.kompose.network/nextcloud-aio: "true"
|
||||
io.kompose.service: nextcloud-aio-collabora
|
||||
spec:
|
||||
initContainers:
|
||||
- name: init-volumes
|
||||
image: alpine
|
||||
command:
|
||||
- chmod
|
||||
- "777"
|
||||
- /nextcloud-aio-collabora-fonts
|
||||
volumeMounts:
|
||||
- name: nextcloud-aio-collabora-fonts
|
||||
mountPath: /nextcloud-aio-collabora-fonts
|
||||
containers:
|
||||
- env:
|
||||
- name: DONT_GEN_SSL_CERT
|
||||
@@ -46,15 +36,8 @@ spec:
|
||||
value: --o:ssl.enable=false --o:ssl.termination=true --o:mount_jail_tree=false --o:logging.level=warning --o:home_mode.enable=true {{ .Values.COLLABORA_SECCOMP_POLICY }} --o:remote_font_config.url=https://{{ .Values.NC_DOMAIN }}/apps/richdocuments/settings/fonts.json
|
||||
- name: server_name
|
||||
value: "{{ .Values.NC_DOMAIN }}"
|
||||
image: nextcloud/aio-collabora:20230511_075831-latest
|
||||
image: nextcloud/aio-collabora:20230613_120442-latest
|
||||
name: nextcloud-aio-collabora
|
||||
ports:
|
||||
- containerPort: 9980
|
||||
volumeMounts:
|
||||
- mountPath: /opt/cool/systemplate/tmpfonts
|
||||
name: nextcloud-aio-collabora-fonts
|
||||
volumes:
|
||||
- name: nextcloud-aio-collabora-fonts
|
||||
persistentVolumeClaim:
|
||||
claimName: nextcloud-aio-collabora-fonts
|
||||
{{- end }}
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-collabora-fonts
|
||||
name: nextcloud-aio-collabora-fonts
|
||||
spec:
|
||||
{{- if .Values.STORAGE_CLASS }}
|
||||
storageClassName: {{ .Values.STORAGE_CLASS }}
|
||||
{{- end }}
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.COLLABORA_FONTS_STORAGE_SIZE }}
|
||||
@@ -60,7 +60,7 @@ spec:
|
||||
value: nextcloud
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-postgresql:20230511_075831-latest
|
||||
image: nextcloud/aio-postgresql:20230613_120442-latest
|
||||
name: nextcloud-aio-database
|
||||
ports:
|
||||
- containerPort: 5432
|
||||
|
||||
@@ -42,7 +42,7 @@ spec:
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
- name: discovery.type
|
||||
value: single-node
|
||||
image: nextcloud/aio-fulltextsearch:20230511_075831-latest
|
||||
image: nextcloud/aio-fulltextsearch:20230613_120442-latest
|
||||
name: nextcloud-aio-fulltextsearch
|
||||
ports:
|
||||
- containerPort: 9200
|
||||
|
||||
@@ -26,7 +26,7 @@ spec:
|
||||
- env:
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-imaginary:20230511_075831-latest
|
||||
image: nextcloud/aio-imaginary:20230613_120442-latest
|
||||
name: nextcloud-aio-imaginary
|
||||
ports:
|
||||
- containerPort: 9000
|
||||
|
||||
@@ -44,10 +44,6 @@ spec:
|
||||
value: "{{ .Values.NEXTCLOUD_PASSWORD }}"
|
||||
- name: ADMIN_USER
|
||||
value: admin
|
||||
- name: AIO_TOKEN
|
||||
value: "{{ .Values.AIO_TOKEN }}"
|
||||
- name: AIO_URL
|
||||
value: "{{ .Values.AIO_URL }}"
|
||||
- name: CLAMAV_ENABLED
|
||||
value: "{{ .Values.CLAMAV_ENABLED }}"
|
||||
- name: CLAMAV_HOST
|
||||
@@ -94,6 +90,8 @@ spec:
|
||||
value: "{{ .Values.DATABASE_PASSWORD }}"
|
||||
- name: POSTGRES_USER
|
||||
value: nextcloud
|
||||
- name: RECORDING_SECRET
|
||||
value: "{{ .Values.RECORDING_SECRET }}"
|
||||
- name: REDIS_HOST
|
||||
value: nextcloud-aio-redis
|
||||
- name: REDIS_HOST_PASSWORD
|
||||
@@ -106,6 +104,10 @@ spec:
|
||||
value: "{{ .Values.TALK_ENABLED }}"
|
||||
- name: TALK_PORT
|
||||
value: "{{ .Values.TALK_PORT }}"
|
||||
- name: TALK_RECORDING_ENABLED
|
||||
value: "{{ .Values.TALK_RECORDING_ENABLED }}"
|
||||
- name: TALK_RECORDING_HOST
|
||||
value: nextcloud-aio-talk-recording
|
||||
- name: TRUSTED_CACERTS_DIR
|
||||
value: "{{ .Values.NEXTCLOUD_TRUSTED_CACERTS_DIR }}"
|
||||
- name: TURN_SECRET
|
||||
@@ -114,7 +116,7 @@ spec:
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
- name: UPDATE_NEXTCLOUD_APPS
|
||||
value: "{{ .Values.UPDATE_NEXTCLOUD_APPS }}"
|
||||
image: nextcloud/aio-nextcloud:20230511_075831-latest
|
||||
image: nextcloud/aio-nextcloud:20230613_120442-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:20230511_075831-latest
|
||||
image: nextcloud/aio-onlyoffice:20230613_120442-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:20230511_075831-latest
|
||||
image: nextcloud/aio-redis:20230613_120442-latest
|
||||
name: nextcloud-aio-redis
|
||||
ports:
|
||||
- containerPort: 6379
|
||||
|
||||
@@ -24,6 +24,8 @@ spec:
|
||||
spec:
|
||||
containers:
|
||||
- env:
|
||||
- name: INTERNAL_SECRET
|
||||
value: "{{ .Values.TALK_INTERNAL_SECRET }}"
|
||||
- name: NC_DOMAIN
|
||||
value: "{{ .Values.NC_DOMAIN }}"
|
||||
- name: SIGNALING_SECRET
|
||||
@@ -34,7 +36,7 @@ spec:
|
||||
value: "{{ .Values.TURN_SECRET }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-talk:20230511_075831-latest
|
||||
image: nextcloud/aio-talk:20230613_120442-latest
|
||||
name: nextcloud-aio-talk
|
||||
ports:
|
||||
- containerPort: {{ .Values.TALK_PORT }}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
{{- if eq .Values.TALK_RECORDING_ENABLED "yes" }}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.cmd: kompose convert -c -f latest.yml
|
||||
kompose.version: 1.28.0 (c4137012e)
|
||||
labels:
|
||||
io.kompose.service: nextcloud-aio-talk-recording
|
||||
name: nextcloud-aio-talk-recording
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
io.kompose.service: nextcloud-aio-talk-recording
|
||||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
kompose.cmd: kompose convert -c -f latest.yml
|
||||
kompose.version: 1.28.0 (c4137012e)
|
||||
labels:
|
||||
io.kompose.network/nextcloud-aio: "true"
|
||||
io.kompose.service: nextcloud-aio-talk-recording
|
||||
spec:
|
||||
containers:
|
||||
- env:
|
||||
- name: INTERNAL_SECRET
|
||||
value: "{{ .Values.TALK_INTERNAL_SECRET }}"
|
||||
- name: NC_DOMAIN
|
||||
value: "{{ .Values.NC_DOMAIN }}"
|
||||
- name: RECORDING_SECRET
|
||||
value: "{{ .Values.RECORDING_SECRET }}"
|
||||
- name: TZ
|
||||
value: "{{ .Values.TIMEZONE }}"
|
||||
image: nextcloud/aio-talk-recording:20230613_120442-latest
|
||||
name: nextcloud-aio-talk-recording
|
||||
ports:
|
||||
- containerPort: 1234
|
||||
{{- end }}
|
||||
18
nextcloud-aio-helm-chart/templates/nextcloud-aio-talk-recording-service.yaml
Executable file
18
nextcloud-aio-helm-chart/templates/nextcloud-aio-talk-recording-service.yaml
Executable file
@@ -0,0 +1,18 @@
|
||||
{{- if eq .Values.TALK_RECORDING_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-recording
|
||||
name: nextcloud-aio-talk-recording
|
||||
spec:
|
||||
ports:
|
||||
- name: "1234"
|
||||
port: 1234
|
||||
targetPort: 1234
|
||||
selector:
|
||||
io.kompose.service: nextcloud-aio-talk-recording
|
||||
{{- end }}
|
||||
@@ -113,6 +113,10 @@ find ./ -name '*service.yaml' -exec sed -i "/^status:/,$ d" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*deployment.yaml' -exec sed -i "s|manual-install-nextcloud-aio|nextcloud-aio|" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*deployment.yaml' -exec sed -i "/medium: Memory/d" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*deployment.yaml' -exec sed -i "s|emptyDir:|emptyDir: \{\}|" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*persistentvolumeclaim.yaml' -exec sed -i "s|ReadOnlyMany|ReadWriteOnce|" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name '*persistentvolumeclaim.yaml' -exec sed -i "/accessModes:/i\ \ {{- if .Values.STORAGE_CLASS }}" \{} \;
|
||||
@@ -193,6 +197,7 @@ 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
|
||||
sed -i 's|10737418240|"10737418240"|' /tmp/sample.conf
|
||||
echo "" >> /tmp/sample.conf
|
||||
# shellcheck disable=SC2129
|
||||
echo 'STORAGE_CLASS: # By setting this, you can adjust the storage class for your volumes' >> /tmp/sample.conf
|
||||
for variable in "${VOLUME_VARIABLE[@]}"; do
|
||||
@@ -200,12 +205,12 @@ for variable in "${VOLUME_VARIABLE[@]}"; do
|
||||
done
|
||||
mv /tmp/sample.conf ../helm-chart/values.yaml
|
||||
|
||||
ENABLED_VARIABLES="$(grep -oP '^[A-Z]+_ENABLED' ../helm-chart/values.yaml)"
|
||||
ENABLED_VARIABLES="$(grep -oP '^[A-Z_]+_ENABLED' ../helm-chart/values.yaml)"
|
||||
mapfile -t ENABLED_VARIABLES <<< "$ENABLED_VARIABLES"
|
||||
|
||||
cd ../helm-chart/
|
||||
for variable in "${ENABLED_VARIABLES[@]}"; do
|
||||
name="$(echo "$variable" | sed 's|_ENABLED||g' | tr '[:upper:]' '[:lower:]')"
|
||||
name="$(echo "$variable" | sed 's|_ENABLED||g;s|_|-|g' | tr '[:upper:]' '[:lower:]')"
|
||||
# shellcheck disable=SC1083
|
||||
find ./ -name "*nextcloud-aio-$name-deployment.yaml" -exec sed -i "1i\\{{- if eq .Values.$variable \"yes\" }}" \{} \;
|
||||
# shellcheck disable=SC1083
|
||||
|
||||
@@ -1,37 +1,39 @@
|
||||
AIO_TOKEN: 123456 # Has no function but needs to be set!
|
||||
AIO_URL: localhost # Has no function but needs to be set!
|
||||
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 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: "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!
|
||||
NC_DOMAIN: yourdomain.com # TODO! Needs to be changed to the domain that you want to use for Nextcloud.
|
||||
NEXTCLOUD_PASSWORD: # TODO! This is the password of the initially created Nextcloud admin with username admin.
|
||||
ONLYOFFICE_SECRET: # TODO! This needs to be a unique and good password!
|
||||
RECORDING_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_INTERNAL_SECRET: # TODO! This needs to be a unique and good password!
|
||||
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!
|
||||
|
||||
CLAMAV_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
COLLABORA_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
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.
|
||||
ONLYOFFICE_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
TALK_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
TALK_RECORDING_ENABLED: "no" # Setting this to "yes" (with quotes) enables the option in Nextcloud automatically.
|
||||
|
||||
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 web server or reverse proxy (like Apache, Nginx, Cloudflare Tunnel and else).
|
||||
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_SECCOMP_POLICY: --o:security.seccomp=true # Changing the value to false allows to disable the seccomp feature of the Collabora container.
|
||||
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.
|
||||
NEXTCLOUD_MAX_TIME: 3600 # This allows to change the upload time limit of the Nextcloud container
|
||||
NEXTCLOUD_MEMORY_LIMIT: 512M # This allows to change the PHP memory limit of the Nextcloud container
|
||||
NEXTCLOUD_PASSWORD: # TODO! This is the password of the initially created Nextcloud admin with username admin.
|
||||
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_STARTUP_APPS: deck twofactor_totp tasks calendar contacts notes # 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" (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: "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 (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
|
||||
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
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
"http-interop/http-factory-guzzle": "^1.2",
|
||||
"slim/twig-view": "^3.3",
|
||||
"slim/csrf": "^1.3",
|
||||
"ext-apcu": "*"
|
||||
"ext-apcu": "*",
|
||||
"justinrainbow/json-schema": "^5.2"
|
||||
},
|
||||
"scripts": {
|
||||
"psalm": "psalm --threads=1",
|
||||
|
||||
156
php/composer.lock
generated
156
php/composer.lock
generated
@@ -4,25 +4,25 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "b0074cfbf6b5cde6d6d2207286ad2e85",
|
||||
"content-hash": "3cbf9ef41575f504b9bdbc8dbe8562e3",
|
||||
"packages": [
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
"version": "7.6.1",
|
||||
"version": "7.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/guzzle.git",
|
||||
"reference": "8444a2bacf1960bc6a2b62ed86b8e72e11eebe51"
|
||||
"reference": "fb7566caccf22d74d1ab270de3551f72a58399f5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/8444a2bacf1960bc6a2b62ed86b8e72e11eebe51",
|
||||
"reference": "8444a2bacf1960bc6a2b62ed86b8e72e11eebe51",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5",
|
||||
"reference": "fb7566caccf22d74d1ab270de3551f72a58399f5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"guzzlehttp/promises": "^1.5",
|
||||
"guzzlehttp/promises": "^1.5.3 || ^2.0",
|
||||
"guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
|
||||
"php": "^7.2.5 || ^8.0",
|
||||
"psr/http-client": "^1.0",
|
||||
@@ -34,7 +34,8 @@
|
||||
"require-dev": {
|
||||
"bamarni/composer-bin-plugin": "^1.8.1",
|
||||
"ext-curl": "*",
|
||||
"php-http/client-integration-tests": "^3.0",
|
||||
"php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
|
||||
"php-http/message-factory": "^1.1",
|
||||
"phpunit/phpunit": "^8.5.29 || ^9.5.23",
|
||||
"psr/log": "^1.1 || ^2.0 || ^3.0"
|
||||
},
|
||||
@@ -113,7 +114,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/guzzle/issues",
|
||||
"source": "https://github.com/guzzle/guzzle/tree/7.6.1"
|
||||
"source": "https://github.com/guzzle/guzzle/tree/7.7.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -129,38 +130,37 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-05-15T20:43:01+00:00"
|
||||
"time": "2023-05-21T14:04:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/promises",
|
||||
"version": "1.5.2",
|
||||
"version": "2.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/promises.git",
|
||||
"reference": "b94b2807d85443f9719887892882d0329d1e2598"
|
||||
"reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598",
|
||||
"reference": "b94b2807d85443f9719887892882d0329d1e2598",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/3a494dc7dc1d7d12e511890177ae2d0e6c107da6",
|
||||
"reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.5"
|
||||
"php": "^7.2.5 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/phpunit-bridge": "^4.4 || ^5.1"
|
||||
"bamarni/composer-bin-plugin": "^1.8.1",
|
||||
"phpunit/phpunit": "^8.5.29 || ^9.5.23"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.5-dev"
|
||||
"bamarni-bin": {
|
||||
"bin-links": true,
|
||||
"forward-command": false
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/functions_include.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"GuzzleHttp\\Promise\\": "src/"
|
||||
}
|
||||
@@ -197,7 +197,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/promises/issues",
|
||||
"source": "https://github.com/guzzle/promises/tree/1.5.2"
|
||||
"source": "https://github.com/guzzle/promises/tree/2.0.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -213,7 +213,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-08-28T14:55:35+00:00"
|
||||
"time": "2023-05-21T13:50:22+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/psr7",
|
||||
@@ -389,6 +389,76 @@
|
||||
},
|
||||
"time": "2021-07-21T13:50:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "justinrainbow/json-schema",
|
||||
"version": "5.2.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/justinrainbow/json-schema.git",
|
||||
"reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60",
|
||||
"reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
|
||||
"json-schema/json-schema-test-suite": "1.2.0",
|
||||
"phpunit/phpunit": "^4.8.35"
|
||||
},
|
||||
"bin": [
|
||||
"bin/validate-json"
|
||||
],
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "5.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"JsonSchema\\": "src/JsonSchema/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Bruno Prieto Reis",
|
||||
"email": "bruno.p.reis@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Justin Rainbow",
|
||||
"email": "justin.rainbow@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Igor Wiedler",
|
||||
"email": "igor@wiedler.ch"
|
||||
},
|
||||
{
|
||||
"name": "Robert Schönthal",
|
||||
"email": "seroscho@googlemail.com"
|
||||
}
|
||||
],
|
||||
"description": "A library to validate a json schema.",
|
||||
"homepage": "https://github.com/justinrainbow/json-schema",
|
||||
"keywords": [
|
||||
"json",
|
||||
"schema"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/justinrainbow/json-schema/issues",
|
||||
"source": "https://github.com/justinrainbow/json-schema/tree/5.2.12"
|
||||
},
|
||||
"time": "2022-04-13T08:02:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/serializable-closure",
|
||||
"version": "v1.3.0",
|
||||
@@ -556,16 +626,16 @@
|
||||
},
|
||||
{
|
||||
"name": "php-di/php-di",
|
||||
"version": "7.0.2",
|
||||
"version": "7.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHP-DI/PHP-DI.git",
|
||||
"reference": "5d1a8664e24f23b25e0426bbcb1288287fb49181"
|
||||
"reference": "d5dad2500f409d8b78371823c8b382fe9b5d0917"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/5d1a8664e24f23b25e0426bbcb1288287fb49181",
|
||||
"reference": "5d1a8664e24f23b25e0426bbcb1288287fb49181",
|
||||
"url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/d5dad2500f409d8b78371823c8b382fe9b5d0917",
|
||||
"reference": "d5dad2500f409d8b78371823c8b382fe9b5d0917",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -579,13 +649,13 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "^3",
|
||||
"friendsofphp/proxy-manager-lts": "^1",
|
||||
"mnapoli/phpunit-easymock": "^1.3",
|
||||
"ocramius/proxy-manager": "^2.11.2",
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"vimeo/psalm": "^4.6"
|
||||
},
|
||||
"suggest": {
|
||||
"ocramius/proxy-manager": "Install it if you want to use lazy injection (version ^2.3)"
|
||||
"friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@@ -613,7 +683,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/PHP-DI/PHP-DI/issues",
|
||||
"source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.2"
|
||||
"source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.3"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -625,7 +695,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-02-07T17:34:03+00:00"
|
||||
"time": "2023-06-17T10:21:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "php-di/slim-bridge",
|
||||
@@ -1328,16 +1398,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/deprecation-contracts",
|
||||
"version": "v3.2.1",
|
||||
"version": "v3.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||
"reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e"
|
||||
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e",
|
||||
"reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
|
||||
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1346,7 +1416,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "3.3-dev"
|
||||
"dev-main": "3.4-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/contracts",
|
||||
@@ -1375,7 +1445,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.1"
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1391,7 +1461,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-03-01T10:25:55+00:00"
|
||||
"time": "2023-05-23T14:45:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
@@ -1639,16 +1709,16 @@
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "v3.6.0",
|
||||
"version": "v3.6.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "106c170d08e8415d78be2d16c3d057d0d108262b"
|
||||
"reference": "7e7d5839d4bec168dfeef0ac66d5c5a2edbabffd"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/106c170d08e8415d78be2d16c3d057d0d108262b",
|
||||
"reference": "106c170d08e8415d78be2d16c3d057d0d108262b",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/7e7d5839d4bec168dfeef0ac66d5c5a2edbabffd",
|
||||
"reference": "7e7d5839d4bec168dfeef0ac66d5c5a2edbabffd",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1694,7 +1764,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/twigphp/Twig/issues",
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.6.0"
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.6.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1706,7 +1776,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-05-03T19:06:57+00:00"
|
||||
"time": "2023-06-08T12:52:13+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
|
||||
@@ -113,6 +113,37 @@
|
||||
"pattern": "^nextcloud_aio_[a-z_]+$"
|
||||
}
|
||||
},
|
||||
"nextcloud_exec_commands": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"pattern": "^(php /var/www/html/occ .*|echo .*)$"
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"pattern": "^[a-z-]+$"
|
||||
}
|
||||
},
|
||||
"networks": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"pattern": "^nextcloud-aio$"
|
||||
}
|
||||
},
|
||||
"read_only": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"tmpfs": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"pattern": "^/[a-z/_]+$"
|
||||
}
|
||||
},
|
||||
"volumes": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
"nextcloud-aio-onlyoffice",
|
||||
"nextcloud-aio-collabora",
|
||||
"nextcloud-aio-talk",
|
||||
"nextcloud-aio-nextcloud"
|
||||
"nextcloud-aio-nextcloud",
|
||||
"nextcloud-aio-notify-push"
|
||||
],
|
||||
"display_name": "Apache",
|
||||
"image": "nextcloud/aio-apache",
|
||||
@@ -27,7 +28,8 @@
|
||||
"ONLYOFFICE_HOST=nextcloud-aio-onlyoffice",
|
||||
"TZ=%TIMEZONE%",
|
||||
"APACHE_MAX_SIZE=%APACHE_MAX_SIZE%",
|
||||
"APACHE_MAX_TIME=%NEXTCLOUD_MAX_TIME%"
|
||||
"APACHE_MAX_TIME=%NEXTCLOUD_MAX_TIME%",
|
||||
"NOTIFY_PUSH_HOST=nextcloud-aio-notify-push"
|
||||
],
|
||||
"volumes": [
|
||||
{
|
||||
@@ -45,6 +47,9 @@
|
||||
"backup_volumes": [
|
||||
"nextcloud_aio_nextcloud",
|
||||
"nextcloud_aio_apache"
|
||||
],
|
||||
"networks": [
|
||||
"nextcloud-aio"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -83,6 +88,9 @@
|
||||
"backup_volumes": [
|
||||
"nextcloud_aio_database",
|
||||
"nextcloud_aio_database_dump"
|
||||
],
|
||||
"networks": [
|
||||
"nextcloud-aio"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -92,13 +100,13 @@
|
||||
"nextcloud-aio-redis",
|
||||
"nextcloud-aio-clamav",
|
||||
"nextcloud-aio-fulltextsearch",
|
||||
"nextcloud-aio-talk-recording",
|
||||
"nextcloud-aio-imaginary"
|
||||
],
|
||||
"display_name": "Nextcloud",
|
||||
"image": "nextcloud/aio-nextcloud",
|
||||
"expose": [
|
||||
"9000",
|
||||
"7867"
|
||||
"9000"
|
||||
],
|
||||
"internal_port": "9000",
|
||||
"secrets": [
|
||||
@@ -170,7 +178,10 @@
|
||||
"STARTUP_APPS=%NEXTCLOUD_STARTUP_APPS%",
|
||||
"ADDITIONAL_APKS=%NEXTCLOUD_ADDITIONAL_APKS%",
|
||||
"ADDITIONAL_PHP_EXTENSIONS=%NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS%",
|
||||
"INSTALL_LATEST_MAJOR=%INSTALL_LATEST_MAJOR%"
|
||||
"INSTALL_LATEST_MAJOR=%INSTALL_LATEST_MAJOR%",
|
||||
"TALK_RECORDING_ENABLED=%TALK_RECORDING_ENABLED%",
|
||||
"RECORDING_SECRET=%RECORDING_SECRET%",
|
||||
"TALK_RECORDING_HOST=nextcloud-aio-talk-recording"
|
||||
],
|
||||
"restart": "unless-stopped",
|
||||
"devices": [
|
||||
@@ -178,8 +189,46 @@
|
||||
],
|
||||
"backup_volumes": [
|
||||
"nextcloud_aio_nextcloud"
|
||||
],
|
||||
"networks": [
|
||||
"nextcloud-aio"
|
||||
]
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-notify-push",
|
||||
"display_name": "Notify Push",
|
||||
"image": "nextcloud/aio-notify-push",
|
||||
"expose": [
|
||||
"7867"
|
||||
],
|
||||
"internal_port": "7867",
|
||||
"secrets": [
|
||||
"REDIS_PASSWORD",
|
||||
"DATABASE_PASSWORD"
|
||||
],
|
||||
"volumes": [
|
||||
{
|
||||
"source": "nextcloud_aio_nextcloud",
|
||||
"destination": "/nextcloud",
|
||||
"writeable": false
|
||||
}
|
||||
],
|
||||
"environment": [
|
||||
"NC_DOMAIN=%NC_DOMAIN%",
|
||||
"NEXTCLOUD_HOST=nextcloud-aio-nextcloud",
|
||||
"REDIS_HOST=nextcloud-aio-redis",
|
||||
"REDIS_HOST_PASSWORD=%REDIS_PASSWORD%",
|
||||
"POSTGRES_HOST=nextcloud-aio-database",
|
||||
"POSTGRES_PASSWORD=%DATABASE_PASSWORD%",
|
||||
"POSTGRES_DB=nextcloud_database",
|
||||
"POSTGRES_USER=nextcloud"
|
||||
],
|
||||
"restart": "unless-stopped",
|
||||
"networks": [
|
||||
"nextcloud-aio"
|
||||
],
|
||||
"read_only": true
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-redis",
|
||||
"display_name": "Redis",
|
||||
@@ -201,9 +250,14 @@
|
||||
],
|
||||
"secrets": [
|
||||
"REDIS_PASSWORD",
|
||||
"ONLYOFFICE_SECRET"
|
||||
"ONLYOFFICE_SECRET",
|
||||
"RECORDING_SECRET"
|
||||
],
|
||||
"restart": "unless-stopped"
|
||||
"restart": "unless-stopped",
|
||||
"networks": [
|
||||
"nextcloud-aio"
|
||||
],
|
||||
"read_only": true
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-collabora",
|
||||
@@ -221,14 +275,17 @@
|
||||
"server_name=%NC_DOMAIN%",
|
||||
"DONT_GEN_SSL_CERT=1"
|
||||
],
|
||||
"volumes": [
|
||||
{
|
||||
"source": "nextcloud_aio_collabora_fonts",
|
||||
"destination": "/opt/cool/systemplate/tmpfonts",
|
||||
"writeable": true
|
||||
}
|
||||
"restart": "unless-stopped",
|
||||
"nextcloud_exec_commands": [
|
||||
"echo 'Activating collabora config...'",
|
||||
"php /var/www/html/occ richdocuments:activate-config"
|
||||
],
|
||||
"restart": "unless-stopped"
|
||||
"profiles": [
|
||||
"collabora"
|
||||
],
|
||||
"networks": [
|
||||
"nextcloud-aio"
|
||||
]
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-talk",
|
||||
@@ -255,13 +312,49 @@
|
||||
"TURN_SECRET=%TURN_SECRET%",
|
||||
"SIGNALING_SECRET=%SIGNALING_SECRET%",
|
||||
"TZ=%TIMEZONE%",
|
||||
"TALK_PORT=%TALK_PORT%"
|
||||
"TALK_PORT=%TALK_PORT%",
|
||||
"INTERNAL_SECRET=%TALK_INTERNAL_SECRET%"
|
||||
],
|
||||
"secrets": [
|
||||
"TURN_SECRET",
|
||||
"SIGNALING_SECRET"
|
||||
"SIGNALING_SECRET",
|
||||
"TALK_INTERNAL_SECRET"
|
||||
],
|
||||
"restart": "unless-stopped"
|
||||
"restart": "unless-stopped",
|
||||
"profiles": [
|
||||
"talk",
|
||||
"talk-recording"
|
||||
],
|
||||
"networks": [
|
||||
"nextcloud-aio"
|
||||
]
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-talk-recording",
|
||||
"display_name": "Talk Recording",
|
||||
"image": "nextcloud/aio-talk-recording",
|
||||
"expose": [
|
||||
"1234"
|
||||
],
|
||||
"internal_port": "1234",
|
||||
"environment": [
|
||||
"NC_DOMAIN=%NC_DOMAIN%",
|
||||
"TZ=%TIMEZONE%",
|
||||
"RECORDING_SECRET=%RECORDING_SECRET%",
|
||||
"INTERNAL_SECRET=%TALK_INTERNAL_SECRET%"
|
||||
],
|
||||
"shm_size": 2147483648,
|
||||
"secrets": [
|
||||
"RECORDING_SECRET",
|
||||
"TALK_INTERNAL_SECRET"
|
||||
],
|
||||
"restart": "unless-stopped",
|
||||
"profiles": [
|
||||
"talk-recording"
|
||||
],
|
||||
"networks": [
|
||||
"nextcloud-aio"
|
||||
]
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-borgbackup",
|
||||
@@ -273,7 +366,8 @@
|
||||
"BACKUP_RESTORE_PASSWORD=%BACKUP_RESTORE_PASSWORD%",
|
||||
"ADDITIONAL_DIRECTORIES_BACKUP=%ADDITIONAL_DIRECTORIES_BACKUP%",
|
||||
"BORGBACKUP_HOST_LOCATION=%BORGBACKUP_HOST_LOCATION%",
|
||||
"BORG_HOST_ID=nextcloud-aio-borgbackup"
|
||||
"BORG_HOST_ID=nextcloud-aio-borgbackup",
|
||||
"BORG_RETENTION_POLICY=%BORG_RETENTION_POLICY%"
|
||||
],
|
||||
"volumes": [
|
||||
{
|
||||
@@ -316,7 +410,12 @@
|
||||
"cap_add": [
|
||||
"SYS_ADMIN"
|
||||
],
|
||||
"apparmor_unconfined": true
|
||||
"apparmor_unconfined": true,
|
||||
"read_only": true,
|
||||
"tmpfs": [
|
||||
"/tmp",
|
||||
"/nextcloud_aio_volumes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-watchtower",
|
||||
@@ -330,7 +429,8 @@
|
||||
"destination": "/var/run/docker.sock",
|
||||
"writeable": false
|
||||
}
|
||||
]
|
||||
],
|
||||
"read_only": true
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-domaincheck",
|
||||
@@ -370,7 +470,19 @@
|
||||
"writeable": true
|
||||
}
|
||||
],
|
||||
"restart": "unless-stopped"
|
||||
"restart": "unless-stopped",
|
||||
"profiles": [
|
||||
"clamav"
|
||||
],
|
||||
"networks": [
|
||||
"nextcloud-aio"
|
||||
],
|
||||
"read_only": true,
|
||||
"tmpfs": [
|
||||
"/var/lock",
|
||||
"/var/log/clamav",
|
||||
"/tmp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-onlyoffice",
|
||||
@@ -396,7 +508,13 @@
|
||||
"secrets": [
|
||||
"ONLYOFFICE_SECRET"
|
||||
],
|
||||
"restart": "unless-stopped"
|
||||
"restart": "unless-stopped",
|
||||
"profiles": [
|
||||
"onlyoffice"
|
||||
],
|
||||
"networks": [
|
||||
"nextcloud-aio"
|
||||
]
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-imaginary",
|
||||
@@ -412,7 +530,14 @@
|
||||
"restart": "unless-stopped",
|
||||
"cap_add": [
|
||||
"SYS_NICE"
|
||||
]
|
||||
],
|
||||
"profiles": [
|
||||
"imaginary"
|
||||
],
|
||||
"networks": [
|
||||
"nextcloud-aio"
|
||||
],
|
||||
"read_only": true
|
||||
},
|
||||
{
|
||||
"container_name": "nextcloud-aio-fulltextsearch",
|
||||
@@ -435,7 +560,13 @@
|
||||
"writeable": true
|
||||
}
|
||||
],
|
||||
"restart": "unless-stopped"
|
||||
"restart": "unless-stopped",
|
||||
"profiles": [
|
||||
"fulltextsearch"
|
||||
],
|
||||
"networks": [
|
||||
"nextcloud-aio"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
if (document.hasFocus()) {
|
||||
// hide reload button if the site reloads automatically
|
||||
var list = document.getElementsByClassName("reload button");
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
let list = document.getElementsByClassName("reload button");
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
// list[i] is a node with the desired class name
|
||||
list[i].style.display = 'none';
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
document.addEventListener("DOMContentLoaded", function(event) {
|
||||
// Clamav
|
||||
var clamav = document.getElementById("clamav");
|
||||
let clamav = document.getElementById("clamav");
|
||||
clamav.disabled = true;
|
||||
});
|
||||
@@ -1,5 +1,5 @@
|
||||
document.addEventListener("DOMContentLoaded", function(event) {
|
||||
// Collabora
|
||||
var collabora = document.getElementById("collabora");
|
||||
let collabora = document.getElementById("collabora");
|
||||
collabora.disabled = true;
|
||||
});
|
||||
@@ -1,5 +1,5 @@
|
||||
document.addEventListener("DOMContentLoaded", function(event) {
|
||||
// Fulltextsearch
|
||||
var fulltextsearch = document.getElementById("fulltextsearch");
|
||||
let fulltextsearch = document.getElementById("fulltextsearch");
|
||||
fulltextsearch.disabled = true;
|
||||
});
|
||||
@@ -1,5 +1,5 @@
|
||||
document.addEventListener("DOMContentLoaded", function(event) {
|
||||
// Imaginary
|
||||
var imaginary = document.getElementById("imaginary");
|
||||
let imaginary = document.getElementById("imaginary");
|
||||
imaginary.disabled = true;
|
||||
});
|
||||
@@ -1,6 +1,6 @@
|
||||
document.addEventListener("DOMContentLoaded", function(event) {
|
||||
// OnlyOffice
|
||||
var onlyoffice = document.getElementById("onlyoffice");
|
||||
let onlyoffice = document.getElementById("onlyoffice");
|
||||
if (onlyoffice) {
|
||||
onlyoffice.disabled = true;
|
||||
}
|
||||
|
||||
4
php/public/disable-talk-recording.js
Normal file
4
php/public/disable-talk-recording.js
Normal file
@@ -0,0 +1,4 @@
|
||||
document.addEventListener("DOMContentLoaded", function(event) {
|
||||
// Talk-recording
|
||||
document.getElementById("talk-recording").disabled = true;
|
||||
});
|
||||
@@ -1,5 +1,5 @@
|
||||
document.addEventListener("DOMContentLoaded", function(event) {
|
||||
// Talk
|
||||
var talk = document.getElementById("talk");
|
||||
let talk = document.getElementById("talk");
|
||||
talk.disabled = true;
|
||||
});
|
||||
@@ -1,6 +1,6 @@
|
||||
"use strict";
|
||||
(function (){
|
||||
var lastError;
|
||||
let lastError;
|
||||
|
||||
function showError(message) {
|
||||
const body = document.getElementsByTagName('body')[0]
|
||||
@@ -45,7 +45,7 @@
|
||||
if (lastError) {
|
||||
lastError.remove()
|
||||
}
|
||||
var xhr = new XMLHttpRequest();
|
||||
let xhr = new XMLHttpRequest();
|
||||
xhr.addEventListener('load', handleEvent);
|
||||
xhr.addEventListener('error', () => showError("Failed to talk to server."));
|
||||
xhr.addEventListener('error', () => disableSpinner());
|
||||
|
||||
@@ -120,6 +120,7 @@ $app->get('/containers', function (Request $request, Response $response, array $
|
||||
'nextcloud_max_time' => $configurationManager->GetNextcloudMaxTime(),
|
||||
'nextcloud_memory_limit' => $configurationManager->GetNextcloudMemoryLimit(),
|
||||
'is_dri_device_enabled' => $configurationManager->isDriDeviceEnabled(),
|
||||
'is_talk_recording_enabled' => $configurationManager->isTalkRecordingEnabled(),
|
||||
]);
|
||||
})->setName('profile');
|
||||
$app->get('/login', function (Request $request, Response $response, array $args) use ($container) {
|
||||
|
||||
@@ -1,36 +1,55 @@
|
||||
function makeOptionsFormSubmitVisible() {
|
||||
var optionsFormSubmit = document.getElementById("options-form-submit");
|
||||
let optionsFormSubmit = document.getElementById("options-form-submit");
|
||||
optionsFormSubmit.style.display = 'block';
|
||||
}
|
||||
|
||||
function handleTalkVisibility() {
|
||||
let talk = document.getElementById("talk");
|
||||
let talkRecording = document.getElementById("talk-recording")
|
||||
if (talk.checked) {
|
||||
talkRecording.disabled = false
|
||||
} else {
|
||||
talkRecording.checked = false
|
||||
talkRecording.disabled = true
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function(event) {
|
||||
// handle submit button for options form
|
||||
var optionsFormSubmit = document.getElementById("options-form-submit");
|
||||
let optionsFormSubmit = document.getElementById("options-form-submit");
|
||||
optionsFormSubmit.style.display = 'none';
|
||||
|
||||
// Clamav
|
||||
var clamav = document.getElementById("clamav");
|
||||
let clamav = document.getElementById("clamav");
|
||||
clamav.addEventListener('change', makeOptionsFormSubmitVisible);
|
||||
|
||||
// OnlyOffice
|
||||
var onlyoffice = document.getElementById("onlyoffice");
|
||||
let onlyoffice = document.getElementById("onlyoffice");
|
||||
if (onlyoffice) {
|
||||
onlyoffice.addEventListener('change', makeOptionsFormSubmitVisible);
|
||||
}
|
||||
|
||||
// Collabora
|
||||
var collabora = document.getElementById("collabora");
|
||||
let collabora = document.getElementById("collabora");
|
||||
collabora.addEventListener('change', makeOptionsFormSubmitVisible);
|
||||
|
||||
// Talk
|
||||
var talk = document.getElementById("talk");
|
||||
let talk = document.getElementById("talk");
|
||||
talk.addEventListener('change', makeOptionsFormSubmitVisible);
|
||||
talk.addEventListener('change', handleTalkVisibility);
|
||||
|
||||
// Talk-recording
|
||||
let talkRecording = document.getElementById("talk-recording");
|
||||
talkRecording.addEventListener('change', makeOptionsFormSubmitVisible);
|
||||
if (!talk.checked) {
|
||||
talkRecording.disabled = true
|
||||
}
|
||||
|
||||
// Imaginary
|
||||
var imaginary = document.getElementById("imaginary");
|
||||
let imaginary = document.getElementById("imaginary");
|
||||
imaginary.addEventListener('change', makeOptionsFormSubmitVisible);
|
||||
|
||||
// Fulltextsearch
|
||||
var fulltextsearch = document.getElementById("fulltextsearch");
|
||||
let fulltextsearch = document.getElementById("fulltextsearch");
|
||||
fulltextsearch.addEventListener('change', makeOptionsFormSubmitVisible);
|
||||
});
|
||||
|
||||
@@ -29,6 +29,9 @@ class Container {
|
||||
private bool $apparmorUnconfined;
|
||||
/** @var string[] */
|
||||
private array $backupVolumes;
|
||||
private array $nextcloudExecCommands;
|
||||
private bool $readOnlyRootFs;
|
||||
private array $tmpfs;
|
||||
private DockerActionManager $dockerActionManager;
|
||||
|
||||
public function __construct(
|
||||
@@ -48,6 +51,9 @@ class Container {
|
||||
int $shmSize,
|
||||
bool $apparmorUnconfined,
|
||||
array $backupVolumes,
|
||||
array $nextcloudExecCommands,
|
||||
bool $readOnlyRootFs,
|
||||
array $tmpfs,
|
||||
DockerActionManager $dockerActionManager
|
||||
) {
|
||||
$this->identifier = $identifier;
|
||||
@@ -66,6 +72,9 @@ class Container {
|
||||
$this->shmSize = $shmSize;
|
||||
$this->apparmorUnconfined = $apparmorUnconfined;
|
||||
$this->backupVolumes = $backupVolumes;
|
||||
$this->nextcloudExecCommands = $nextcloudExecCommands;
|
||||
$this->readOnlyRootFs = $readOnlyRootFs;
|
||||
$this->tmpfs = $tmpfs;
|
||||
$this->dockerActionManager = $dockerActionManager;
|
||||
}
|
||||
|
||||
@@ -85,6 +94,10 @@ class Container {
|
||||
return $this->restartPolicy;
|
||||
}
|
||||
|
||||
public function GetReadOnlySetting() : bool {
|
||||
return $this->readOnlyRootFs;
|
||||
}
|
||||
|
||||
public function GetShmSize() : int {
|
||||
return $this->shmSize;
|
||||
}
|
||||
@@ -101,6 +114,10 @@ class Container {
|
||||
return $this->secrets;
|
||||
}
|
||||
|
||||
public function GetTmpfs() : array {
|
||||
return $this->tmpfs;
|
||||
}
|
||||
|
||||
public function GetDevices() : array {
|
||||
return $this->devices;
|
||||
}
|
||||
@@ -148,6 +165,10 @@ class Container {
|
||||
return $this->dependsOn;
|
||||
}
|
||||
|
||||
public function GetNextcloudExecCommands() : array {
|
||||
return $this->nextcloudExecCommands;
|
||||
}
|
||||
|
||||
public function GetEnvironmentVariables() : ContainerEnvironmentVariables {
|
||||
return $this->containerEnvironmentVariables;
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ use AIO\Container\State\RunningState;
|
||||
use AIO\Data\ConfigurationManager;
|
||||
use AIO\Data\DataConst;
|
||||
use AIO\Docker\DockerActionManager;
|
||||
use JsonSchema\Validator;
|
||||
|
||||
class ContainerDefinitionFetcher
|
||||
{
|
||||
@@ -40,12 +41,27 @@ class ContainerDefinitionFetcher
|
||||
throw new \Exception("The provided id " . $id . " was not found in the container definition.");
|
||||
}
|
||||
|
||||
private function validateJson(object $data): void {
|
||||
// Validate against json schema
|
||||
$validator = new Validator;
|
||||
$validator->validate($data, (object)[file_get_contents(__DIR__ . '/../containers-schema.json')]);
|
||||
if (!$validator->isValid()) {
|
||||
error_log("JSON does not validate. Violations:");
|
||||
foreach ($validator->getErrors() as $error) {
|
||||
error_log(printf("[%s] %s\n", $error['property'], $error['message']));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
private function GetDefinition(bool $latest): array
|
||||
{
|
||||
$data = json_decode(file_get_contents(__DIR__ . '/../containers.json'), true);
|
||||
$rawData = file_get_contents(__DIR__ . '/../containers.json');
|
||||
$objectData = json_decode($rawData, false);
|
||||
$this->validateJson($objectData);
|
||||
$data = json_decode($rawData, true);
|
||||
|
||||
$containers = [];
|
||||
foreach ($data['aio_services_v1'] as $entry) {
|
||||
@@ -65,6 +81,10 @@ class ContainerDefinitionFetcher
|
||||
if (!$this->configurationManager->isTalkEnabled()) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-talk-recording') {
|
||||
if (!$this->configurationManager->isTalkRecordingEnabled()) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-imaginary') {
|
||||
if (!$this->configurationManager->isImaginaryEnabled()) {
|
||||
continue;
|
||||
@@ -163,6 +183,10 @@ class ContainerDefinitionFetcher
|
||||
if (!$this->configurationManager->isTalkEnabled()) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-talk-recording') {
|
||||
if (!$this->configurationManager->isTalkRecordingEnabled()) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-imaginary') {
|
||||
if (!$this->configurationManager->isImaginaryEnabled()) {
|
||||
continue;
|
||||
@@ -233,6 +257,21 @@ class ContainerDefinitionFetcher
|
||||
$backupVolumes = $entry['backup_volumes'];
|
||||
}
|
||||
|
||||
$nextcloudExecCommands = [];
|
||||
if (isset($entry['nextcloud_exec_commands'])) {
|
||||
$nextcloudExecCommands = $entry['nextcloud_exec_commands'];
|
||||
}
|
||||
|
||||
$readOnlyRootFs = false;
|
||||
if (isset($entry['read_only'])) {
|
||||
$readOnlyRootFs = $entry['read_only'];
|
||||
}
|
||||
|
||||
$tmpfs = [];
|
||||
if (isset($entry['tmpfs'])) {
|
||||
$tmpfs = $entry['tmpfs'];
|
||||
}
|
||||
|
||||
$containers[] = new Container(
|
||||
$entry['container_name'],
|
||||
$displayName,
|
||||
@@ -250,6 +289,9 @@ class ContainerDefinitionFetcher
|
||||
$shmSize,
|
||||
$apparmorUnconfined,
|
||||
$backupVolumes,
|
||||
$nextcloudExecCommands,
|
||||
$readOnlyRootFs,
|
||||
$tmpfs,
|
||||
$this->container->get(DockerActionManager::class)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -95,6 +95,11 @@ class ConfigurationController
|
||||
} else {
|
||||
$this->configurationManager->SetTalkEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['talk-recording'])) {
|
||||
$this->configurationManager->SetTalkRecordingEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetTalkRecordingEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['imaginary'])) {
|
||||
$this->configurationManager->SetImaginaryEnabledState(1);
|
||||
} else {
|
||||
@@ -116,6 +121,10 @@ class ConfigurationController
|
||||
$this->configurationManager->SetCollaboraDictionaries($collaboraDictionaries);
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['delete_borg_backup_host_location'])) {
|
||||
$this->configurationManager->DeleteBorgBackupHostLocation();
|
||||
}
|
||||
|
||||
return $response->withStatus(201)->withHeader('Location', '/');
|
||||
} catch (InvalidSettingConfigurationException $ex) {
|
||||
$response->getBody()->write($ex->getMessage());
|
||||
|
||||
@@ -155,7 +155,7 @@ class DockerController
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['install_latest_major'])) {
|
||||
$installLatestMajor = 26;
|
||||
$installLatestMajor = 27;
|
||||
} else {
|
||||
$installLatestMajor = "";
|
||||
}
|
||||
@@ -172,6 +172,9 @@ class DockerController
|
||||
// Start container
|
||||
$this->startTopContainer(true);
|
||||
|
||||
// Clear apcu cache in order to check if container updates are available
|
||||
apcu_clear_cache();
|
||||
|
||||
return $response->withStatus(201)->withHeader('Location', '/');
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user