Compare commits

...

144 Commits

Author SHA1 Message Date
Simon L
5dcdb6268a increase to 7.4.1
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-09 15:58:11 +02:00
Simon L
9a83ac422a Merge pull request #3513 from nextcloud/fix/3491/fix-listen.allowed_clients 2023-10-09 15:55:02 +02:00
Simon L
c9dac9b84a Merge pull request #3490 from nextcloud/dependabot/docker/Containers/imaginary/golang-1.21.2-alpine3.18 2023-10-09 15:54:49 +02:00
Simon L
05e778624d Merge pull request #3512 from nextcloud/dependabot/docker/Containers/notify-push/alpine-3.18.4 2023-10-09 15:54:32 +02:00
Simon L
965cc87323 Merge pull request #3511 from nextcloud/dependabot/docker/Containers/clamav/clamav/clamav-1.2.0-8 2023-10-09 15:54:21 +02:00
Simon L
ed7cced146 fix listen.allowed_clients in nextcloud container
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-09 15:51:01 +02:00
dependabot[bot]
f36fae6550 Bump alpine from 3.18.2 to 3.18.4 in /Containers/notify-push
Bumps alpine from 3.18.2 to 3.18.4.

---
updated-dependencies:
- dependency-name: alpine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 12:49:46 +00:00
Simon L
5188f8026d add dependabot to notify-push
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-09 14:49:12 +02:00
dependabot[bot]
dae56914ff Bump clamav/clamav from 1.2.0-7 to 1.2.0-8 in /Containers/clamav
Bumps clamav/clamav from 1.2.0-7 to 1.2.0-8.

---
updated-dependencies:
- dependency-name: clamav/clamav
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 12:22:20 +00:00
Simon L
7336337c2e add another requirement
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-07 01:20:48 +02:00
Simon L
770ebba8e2 add additional requirement
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-06 21:37:02 +02:00
Simon L
6cb26872fb add additional requirement to new containers
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-06 21:13:15 +02:00
dependabot[bot]
2d7014a143 Bump golang in /Containers/imaginary
Bumps golang from 1.21.1-alpine3.18 to 1.21.2-alpine3.18.

---
updated-dependencies:
- dependency-name: golang
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-06 12:56:11 +00:00
Simon L
7fd65f2117 get installed_version another time in order to bring it up-to-date after update
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-05 15:59:36 +02:00
Simon L
47852d4543 Merge pull request #3420 from nextcloud/nextcloud-container-update 2023-10-05 15:29:43 +02:00
szaimen
4378251cea nextcloud-update automated change
Signed-off-by: GitHub <noreply@github.com>
2023-10-05 12:08:44 +00:00
Simon L
fd707d023b Merge pull request #3488 from nextcloud/allow-ping-app-api 2023-10-05 12:33:51 +02:00
Simon L
b1ed9aaf13 fix privileged regex?
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-05 12:21:30 +02:00
Andrey Borysenko
1dca919af8 allow _ping docker api to verify service accessible
Signed-off-by: Andrey Borysenko <andrey18106x@gmail.com>
2023-10-05 13:16:37 +03:00
Simon L
e15b184c0f Update advice regarding podman
Signed-off-by: Simon L. <szaimen@e.mail.de>
2023-10-05 10:02:18 +02:00
Simon L
71cfdb2ff2 improve docs for caddy on when the subdomain is required
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-04 23:12:19 +02:00
Simon L
6f80f6d70a Merge pull request #3469 from nextcloud/enh/noid/show-dsp
make docker-socket-proxy visible in AIO interface
2023-10-04 22:27:01 +02:00
Simon L
c4190e4560 add hint to create backup before adding any container
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-04 15:08:16 +02:00
Simon L
dd9c828095 Merge pull request #3482 from nextcloud/enh/noid/overwrite-values-during-dockeractionmanager 2023-10-04 14:07:16 +02:00
Simon L
f3411f0823 overwrite APACHE_PORT, TALK_PORT and APACHE_IP_BINDING only during dockeractionmanager
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-04 14:05:05 +02:00
Simon L
f2fee01201 Merge pull request #3481 from nextcloud/enh/noid/add-documentation-links 2023-10-04 13:42:47 +02:00
Simon L
bc7a25fa42 add documentation links correctly
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-04 13:40:19 +02:00
Simon L
083f0669e4 Merge pull request #3480 from nextcloud/revert-3416-enh/noid/use-caddy-for-self-signed-cert 2023-10-04 13:23:32 +02:00
Simon L
f8ab551ce6 Revert "mastercontainer - use Caddy for generating self-singed cert"
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-04 13:22:04 +02:00
Simon L
b9407dbc2d whe need shadow later
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-04 13:15:27 +02:00
Simon L
a1e5a0691b Merge pull request #3479 from nextcloud/enh/noid/revert-dbpersistent 2023-10-03 23:22:45 +02:00
Simon L
e1168f9c48 Revert dbpersistent setting to check if it fixes too many db connections
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-03 23:21:00 +02:00
Simon L
7f1adc36ae Merge pull request #3478 from nextcloud/enh/3432/add-documentation 2023-10-03 20:45:41 +02:00
Simon L
c1c96ee08a allow to add documentation on containers
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-03 20:33:44 +02:00
Simon L
ec6448fe5f Merge pull request #3475 from nextcloud/dependabot/docker/Containers/talk-recording/python-3.12.0-alpine3.18
Bump python from 3.11.5-alpine3.18 to 3.12.0-alpine3.18 in /Containers/talk-recording
2023-10-03 15:33:21 +02:00
Simon L
faecee2bfe Merge pull request #3474 from nextcloud/dependabot/docker/Containers/watchtower/containrrr/watchtower-1.6.0
Bump containrrr/watchtower from 1.5.3 to 1.6.0 in /Containers/watchtower
2023-10-03 15:32:48 +02:00
dependabot[bot]
55001d9961 Bump python in /Containers/talk-recording
Bumps python from 3.11.5-alpine3.18 to 3.12.0-alpine3.18.

---
updated-dependencies:
- dependency-name: python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-03 12:37:20 +00:00
dependabot[bot]
4ba5407c01 Bump containrrr/watchtower from 1.5.3 to 1.6.0 in /Containers/watchtower
Bumps containrrr/watchtower from 1.5.3 to 1.6.0.

---
updated-dependencies:
- dependency-name: containrrr/watchtower
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-03 12:33:20 +00:00
Simon L
89e8aa3cc5 increase to 7.4.0
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-02 15:17:16 +02:00
Simon L
f8dc68aa0b Merge pull request #3467 from nextcloud/dependabot/docker/Containers/clamav/clamav/clamav-1.2.0-7 2023-10-02 15:16:16 +02:00
Simon L
06f7f9341c Merge pull request #3470 from nextcloud/dependabot/docker/Containers/nextcloud/php-8.1.24-fpm-alpine3.18 2023-10-02 15:15:42 +02:00
Simon L
dd31b13c31 Merge pull request #3471 from nextcloud/dependabot/docker/Containers/mastercontainer/php-8.2.11-fpm-alpine3.18 2023-10-02 15:15:31 +02:00
dependabot[bot]
49e14e4288 Bump php in /Containers/nextcloud
Bumps php from 8.1.23-fpm-alpine3.18 to 8.1.24-fpm-alpine3.18.

---
updated-dependencies:
- dependency-name: php
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 13:14:49 +00:00
dependabot[bot]
b883d123e6 Bump php in /Containers/mastercontainer
Bumps php from 8.2.10-fpm-alpine3.18 to 8.2.11-fpm-alpine3.18.

---
updated-dependencies:
- dependency-name: php
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 13:13:51 +00:00
Simon L
14266469c2 Merge pull request #3427 from nextcloud/enh/noid/adjust-limiting 2023-10-02 15:12:51 +02:00
Simon L
f32df189f7 Merge pull request #3460 from nextcloud/enh/3432/add-caddy 2023-10-02 15:11:57 +02:00
Simon L
3d1611f8ba community-containers - add caddy
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-02 15:10:08 +02:00
Simon L
c99f442c0c make docker-socket-proxy visible in AIO interface
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-02 15:05:56 +02:00
Simon L
88cae17035 Merge pull request #3459 from nextcloud/enh/noid/allow-to-set-aio-variables 2023-10-02 15:03:14 +02:00
Simon L
395380ea2b allow to set aio_variables from containers.json
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-02 15:01:51 +02:00
Simon L
49aca0d955 Merge pull request #3463 from nextcloud/enh/noid/fix-display-of-containers 2023-10-02 15:01:01 +02:00
dependabot[bot]
a176b74a61 Bump clamav/clamav from 1.2.0-6 to 1.2.0-7 in /Containers/clamav
Bumps clamav/clamav from 1.2.0-6 to 1.2.0-7.

---
updated-dependencies:
- dependency-name: clamav/clamav
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 12:54:17 +00:00
Simon L
5158081cfc only add container to apache container list if display_name is set
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-10-01 12:25:11 +02:00
Simon L
b651c013d4 fix failing schema validation
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-30 00:31:48 +02:00
Simon L
f82affdac6 adjust limiting the php-fpm port to specific containers again
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-29 19:15:51 +02:00
Simon L
949fd79bdf vaultwarden - add note which port is used
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-29 19:11:54 +02:00
Simon L
3075b393e4 add community-container links to other container docs
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-29 19:05:56 +02:00
Simon L
b0c859a080 Merge pull request #3416 from nextcloud/enh/noid/use-caddy-for-self-signed-cert
mastercontainer - use Caddy for generating self-singed cert
2023-09-29 18:16:34 +02:00
Simon L
211ef36cd7 add pi-hole and vaultwarden to the example list
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-29 17:29:24 +02:00
Simon L
1d9da52442 Merge pull request #3457 from nextcloud/apache-ipv6 2023-09-29 17:11:33 +02:00
Zoey
4705d947da apache ip binding - allow ipv6
Signed-off-by: Zoey <zoey@z0ey.de>
2023-09-29 17:08:41 +02:00
Simon L
6ffa0411ad Merge pull request #3454 from nextcloud/dependabot/docker/Containers/watchtower/alpine-3.18.4 2023-09-29 17:07:50 +02:00
Simon L
0f54507727 Merge pull request #3456 from nextcloud/enh/noid/add-pi-hole 2023-09-29 17:05:11 +02:00
Simon L
bbebaae89b community-containers - add pi-hole
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-29 16:52:51 +02:00
Simon L
369704564d Merge pull request #3455 from nextcloud/enh/noid/add-vaultwarden 2023-09-29 16:27:36 +02:00
Simon L
1fda79c9e7 community-containers - add vaultwarden
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-29 16:17:12 +02:00
dependabot[bot]
3202e20dd9 Bump alpine from 3.18.3 to 3.18.4 in /Containers/watchtower
Bumps alpine from 3.18.3 to 3.18.4.

---
updated-dependencies:
- dependency-name: alpine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-29 13:03:53 +00:00
Simon L
9d640fa9d6 add additional notes to plex
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-29 15:03:04 +02:00
Simon L
2dba82f3a2 Merge pull request #3453 from nextcloud/dependabot/docker/Containers/domaincheck/alpine-3.18.4
Bump alpine from 3.18.3 to 3.18.4 in /Containers/domaincheck
2023-09-29 14:56:02 +02:00
dependabot[bot]
af292a1cff Bump alpine from 3.18.3 to 3.18.4 in /Containers/domaincheck
Bumps alpine from 3.18.3 to 3.18.4.

---
updated-dependencies:
- dependency-name: alpine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-29 12:51:18 +00:00
Simon L
60607d8982 Merge pull request #3452 from nextcloud/dependabot/docker/Containers/borgbackup/alpine-3.18.4
Bump alpine from 3.18.3 to 3.18.4 in /Containers/borgbackup
2023-09-29 14:43:15 +02:00
dependabot[bot]
e82ad51c9f Bump alpine from 3.18.3 to 3.18.4 in /Containers/borgbackup
Bumps alpine from 3.18.3 to 3.18.4.

---
updated-dependencies:
- dependency-name: alpine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-29 12:38:30 +00:00
Simon L
9c9f55eb49 Merge pull request #3451 from nextcloud/dependabot/docker/Containers/talk/alpine-3.18.4
Bump alpine from 3.18.2 to 3.18.4 in /Containers/talk
2023-09-29 14:22:28 +02:00
Simon L
72b69b6e25 Merge pull request #3450 from nextcloud/dependabot/docker/Containers/imaginary/alpine-3.18.4
Bump alpine from 3.18.3 to 3.18.4 in /Containers/imaginary
2023-09-29 14:21:59 +02:00
dependabot[bot]
e3d0841841 Bump alpine from 3.18.2 to 3.18.4 in /Containers/talk
Bumps alpine from 3.18.2 to 3.18.4.

---
updated-dependencies:
- dependency-name: alpine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-29 12:11:20 +00:00
dependabot[bot]
bdc5181ae5 Bump alpine from 3.18.3 to 3.18.4 in /Containers/imaginary
Bumps alpine from 3.18.3 to 3.18.4.

---
updated-dependencies:
- dependency-name: alpine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-29 12:11:09 +00:00
Simon L
726c7589b2 use and instead of or
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-29 12:11:47 +02:00
Simon L
5a4f027478 create a release.yml
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-29 11:53:11 +02:00
Simon L
bbb124ea6e Merge pull request #3445 from nextcloud/enh/3433/fix-hostport 2023-09-29 11:39:08 +02:00
Simon L
c1a7c085cf helm-chart - remove hostport from deployment
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-29 11:36:47 +02:00
Simon L
b9872f9c4a add community-containers also to included features
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-28 14:03:02 +02:00
Simon L
39e12a7af1 print red if community container was not found
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-28 14:01:28 +02:00
Simon L
c447a4defc some small improvements to docker-rootles and multiple-instances docs
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-28 12:24:07 +02:00
Simon L
25c41a1304 add nextcloud_aio_plex to backup volumes
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-28 11:51:53 +02:00
Simon L
a53f7b403b Merge pull request #3426 from nextcloud/enh/3395/eturnal 2023-09-28 11:38:57 +02:00
Simon L
22d85db738 Merge pull request #3439 from nextcloud/enh/noid/add-plex 2023-09-28 11:36:06 +02:00
Simon L
49ba11f559 community-containers - add plex
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-28 11:24:15 +02:00
Simon L
218d3d4280 Merge pull request #3436 from nextcloud/fix/3422/fix-chart 2023-09-28 10:59:37 +02:00
Simon L
b50a334cd0 fix helm chart
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-28 10:55:36 +02:00
Simon L
60ae0a4fd3 Merge pull request #3435 from nextcloud/enh/noid/improve-pattern 2023-09-28 01:07:59 +02:00
Simon L
d9ec367976 improve json-schema with pattern for image
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-28 01:05:44 +02:00
Simon L
810bfa1450 make text more verbose
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-28 00:52:29 +02:00
Simon L
5448662fdd add link also to requirements for new containers
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-28 00:37:44 +02:00
Simon L
f8a855f491 Merge pull request #3431 from nextcloud/enh/1581/add-docs 2023-09-27 23:04:47 +02:00
Simon L
dc50106ac9 add docs on the community-containers feature
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 23:03:41 +02:00
Simon L
36baadc559 fix detail in $path for additional containers
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 23:02:29 +02:00
Simon L
131dc62508 trust private ranges for port 8080
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 21:44:17 +02:00
Simon L
f5f8c836d2 mastercontainer - use Caddy for generating self-singed cert
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 21:44:17 +02:00
Simon L
eef371ec9a Merge pull request #3429 from nextcloud/enh/noid/limit-nextcloud 2023-09-27 21:34:59 +02:00
Simon L
2e928e43b3 Revert "nextcloud - limit access to php-fpm"
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 21:33:35 +02:00
Simon L
ebe4a9b44f add whitelist_peers
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 21:28:44 +02:00
Simon L
4b134a5289 fix detail with listen.allowed_clients
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 21:10:56 +02:00
Simon L
10326e1911 add additional disadvantage to manual-install and helm-chart
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 20:58:12 +02:00
Simon L
71484bf631 clamav - fix detail
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 20:53:14 +02:00
Simon L
3104d6e2cc fix detail
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 20:52:21 +02:00
Simon L
9eeeee4e06 Merge pull request #3425 from nextcloud/enh/1581/final-steps 2023-09-27 20:36:41 +02:00
Simon L
ac890f046b merge containers.json and make sure they depend on the apache container
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 20:32:48 +02:00
Simon L
b276532f58 eturnal - set blacklist_peers
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 20:26:51 +02:00
Simon L
538ee321a9 fail2ban - change to v1
Signed-off-by: Simon L. <szaimen@e.mail.de>
2023-09-27 18:46:25 +02:00
Simon L
6fb27e904f Merge pull request #3424 from nextcloud/enh/1581/AIO_COMMUNITY_CONTAINERS 2023-09-27 18:12:20 +02:00
Simon L
ea32a33fc6 fail2ban - change image_tag to 1.0.0
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 18:09:03 +02:00
Simon L
2a746863b9 allow to specify AIO_COMMUNITY_CONTAINERS
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 17:45:28 +02:00
Simon L
a823e1d3ce Merge pull request #3318 from nextcloud/enh/noid/limit-nextcloud-to-few 2023-09-27 17:35:32 +02:00
Simon L
dbb0833717 address review
Signed-off-by: Simon L <szaimen@e.mail.de>

Co-authored-by: Zoey <zoey@z0ey.de>
Signed-off-by: Simon L. <szaimen@e.mail.de>
2023-09-27 17:03:04 +02:00
Simon L
598faf7eef Merge pull request #2637 from nextcloud/enh/1581/add-example-containers 2023-09-27 16:45:56 +02:00
Simon L
7661b9fb3a address review
Signed-off-by: Simon L <szaimen@e.mail.de>

Co-authored-by: Zoey <zoey@z0ey.de>
Signed-off-by: Simon L. <szaimen@e.mail.de>
2023-09-27 16:40:18 +02:00
Simon L
ca3466759f add community-container validator
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 16:35:01 +02:00
Simon L
bae5acf47b Merge pull request #3421 from nextcloud/dependabot/docker/Containers/clamav/clamav/clamav-1.2.0-6
Bump clamav/clamav from 1.2.0-1 to 1.2.0-6 in /Containers/clamav
2023-09-27 16:09:24 +02:00
dependabot[bot]
bbda78001d Bump clamav/clamav from 1.2.0-1 to 1.2.0-6 in /Containers/clamav
Bumps clamav/clamav from 1.2.0-1 to 1.2.0-6.

---
updated-dependencies:
- dependency-name: clamav/clamav
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-27 12:50:48 +00:00
Simon L
f221ab7655 add fail2ban as example container for testing purposes
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 14:37:03 +02:00
Simon L
c320da2b0e Merge pull request #3314 from nextcloud/enh/1581/require-image-tag 2023-09-27 13:58:22 +02:00
Simon L
6e17dec951 require image_tag and add %AIO_CHANNEL% variable
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-27 13:57:00 +02:00
Simon L
8e4678fe82 Merge pull request #3377 from nextcloud/enh/noid/drop-net-raw 2023-09-27 13:06:38 +02:00
Simon L
3e25acce24 Merge pull request #3231 from nextcloud/enh/3225/hadolint
adjust docker-lint to use hadolint
2023-09-27 12:10:33 +02:00
Simon L
ad81f52991 Merge pull request #3414 from nextcloud/enh/noid/adjust-kompose
adjust kompose script to automatically get latest version
2023-09-27 11:06:32 +02:00
Simon L
1ff0328039 Merge pull request #3417 from nextcloud/enh/noid/remove-json-validator
remove justinrainbow/json-schema again
2023-09-27 11:05:42 +02:00
Simon L
a1abd8e540 Merge pull request #3401 from nextcloud/dependabot/docker/Containers/fulltextsearch/elasticsearch-8.10.2
Bump elasticsearch from 8.10.1 to 8.10.2 in /Containers/fulltextsearch
2023-09-27 11:05:01 +02:00
Simon L
142c605401 Merge pull request #3398 from nextcloud/enh/3389/improve-notify-push
add warning to notify-push if binary was not found
2023-09-27 11:04:40 +02:00
Simon L
4bc426d3df Merge pull request #3400 from nextcloud/talk-container-update
talk update
2023-09-27 11:04:08 +02:00
Simon L
57ac3ff788 Merge pull request #3393 from nextcloud/dependabot/docker/Containers/talk/nats-2.10.1-scratch
Bump nats from 2.10.0-scratch to 2.10.1-scratch in /Containers/talk
2023-09-27 11:03:29 +02:00
Simon L
f84589778b Merge pull request #3392 from nextcloud/dependabot/docker/Containers/collabora/collabora/code-23.05.4.2.1
Bump collabora/code from 23.05.4.1.1 to 23.05.4.2.1 in /Containers/collabora
2023-09-27 11:03:04 +02:00
Simon L
8687476799 Merge pull request #3404 from nextcloud/nextcloud-container-update
Nextcloud dependency update
2023-09-27 11:02:41 +02:00
Simon L
f59707b065 Downgrade to 27.1.0
Signed-off-by: Simon L. <szaimen@e.mail.de>
2023-09-27 11:00:50 +02:00
Simon L
dbdefe273f remove justinrainbow/json-schema again
Signed-off-by: Simon L <szaimen@e.mail.de>
Co-Authored-By: szaimen <szaimen@users.noreply.github.com>
2023-09-26 16:00:18 +02:00
Simon L
0b1ac3422f adjust docker-lint to use hadolint
Signed-off-by: Simon L <szaimen@e.mail.de>
Co-Authored-By: Zoey <zoey@z0ey.de>
2023-09-26 15:06:39 +02:00
Simon L
f97644e029 adjust kompose script to automatically get latest version
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-26 15:03:09 +02:00
Simon L
6790114955 add warning to notify-push if binary was not found
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-25 10:44:16 +02:00
szaimen
896565c63c nextcloud-update automated change
Signed-off-by: GitHub <noreply@github.com>
2023-09-23 12:06:47 +00:00
dependabot[bot]
915647db1f Bump elasticsearch from 8.10.1 to 8.10.2 in /Containers/fulltextsearch
Bumps elasticsearch from 8.10.1 to 8.10.2.

---
updated-dependencies:
- dependency-name: elasticsearch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-22 12:22:58 +00:00
szaimen
63659491e9 talk-update automated change
Signed-off-by: GitHub <noreply@github.com>
2023-09-22 12:03:16 +00:00
dependabot[bot]
bef5945cd7 Bump nats from 2.10.0-scratch to 2.10.1-scratch in /Containers/talk
Bumps nats from 2.10.0-scratch to 2.10.1-scratch.

---
updated-dependencies:
- dependency-name: nats
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-21 12:52:36 +00:00
dependabot[bot]
cc82cd2921 Bump collabora/code in /Containers/collabora
Bumps collabora/code from 23.05.4.1.1 to 23.05.4.2.1.

---
updated-dependencies:
- dependency-name: collabora/code
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-21 12:35:32 +00:00
Simon L
bcced0b176 drop NET_RAW from all containers
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-20 15:14:15 +02:00
Simon L
be55bbe7c1 nextcloud - limit access to php-fpm
Signed-off-by: Simon L <szaimen@e.mail.de>
2023-09-19 18:50:51 +02:00
58 changed files with 715 additions and 227 deletions

View File

@@ -165,6 +165,15 @@ updates:
labels:
- 3. to review
- dependencies
- package-ecosystem: "docker"
directory: "/Containers/notify-push"
schedule:
interval: "daily"
time: "12:00"
open-pull-requests-limit: 10
labels:
- 3. to review
- dependencies
- package-ecosystem: "docker"
directory: "/Containers/docker-socket-proxy"
schedule:

14
.github/release.yml vendored Normal file
View File

@@ -0,0 +1,14 @@
changelog:
categories:
- title: 🏕 New features and other improvements
labels:
- enhancement
- title: 🐞 Fixed bugs
labels:
- bug
- title: 👒 Updated dependencies
labels:
- dependencies
- title: 📄 Improved documentation
labels:
- documentation

View File

@@ -0,0 +1,37 @@
name: Validate community containers
on:
pull_request:
paths:
- 'community-containers/**'
push:
branches:
- main
paths:
- 'community-containers/**'
jobs:
validator-community-containers:
name: Validate community containers
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Validate structure
run: |
CONTAINERS="$(find ./community-containers -mindepth 1 -maxdepth 1 -type d)"
mapfile -t CONTAINERS <<< "$CONTAINERS"
for container in "${CONTAINERS[@]}"; do
container="$(echo "$container" | sed 's|./community-containers/||')"
if ! [ -f ./community-containers/"$container"/"$container.json" ]; then
echo ".json file must be named like its parent folder $container"
FAIL=1
fi
if ! [ -f ./community-containers/"$container"/readme.md ]; then
echo "There must be a readme.md file in the folder!"
FAIL=1
fi
if [ -n "$FAIL" ]; then
exit 1
fi
done

View File

@@ -27,28 +27,20 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Install npm and dockerfilelint
- name: Install hadolint
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/201.patch -O /usr/local/lib/node_modules/dockerfilelint/201.patch
CURRENT_DIR=$PWD
cd /usr/local/lib/node_modules/dockerfilelint/
git apply 201.patch
cd $CURRENT_DIR
cat << RULES > ./.dockerfilelintrc
rules:
sudo_usage: off
RULES
sudo wget https://github.com/hadolint/hadolint/releases/latest/download/hadolint-Linux-x86_64 -O /usr/bin/hadolint
sudo chmod +x /usr/bin/hadolint
- 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
# DL3018 warning: Pin versions in apk add. Instead of `apk add <package>` use `apk add <package>=<version>`
# DL4006 warning: Set the SHELL option -o pipefail before RUN with a pipe in it. If you are using /bin/sh in an alpine image or if your shell is symlinked to busybox then consider explicitly setting your SHELL to /bin/ash, or disable this check
hadolint "$file" --ignore DL3018 --ignore DL4006 | tee -a ./hadolint.log
done
if grep "^Issues: [0-9]" ./dockerfilelint.log; then
if grep -q "DL[0-9]\+\|SC[0-9]\+" ./hadolint.log; then
exit 1
fi

View File

@@ -22,4 +22,14 @@ jobs:
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
if ! json validate --schema-file=php/containers-schema.json --document-file=php/containers.json; then
exit 1
fi
JSON_FILES="$(find ./community-containers -name '*.json')"
mapfile -t JSON_FILES <<< "$JSON_FILES"
for file in "${JSON_FILES[@]}"; do
json validate --schema-file=php/containers-schema.json --document-file="$file" 2>&1 | tee -a ./json-validator.log
done
if grep -q "document does not validate with schema." ./json-validator.log; then
exit 1
fi

View File

@@ -1,4 +1,4 @@
FROM alpine:3.18.3
FROM alpine:3.18.4
RUN set -ex; \
\
@@ -16,6 +16,7 @@ VOLUME /root
COPY --chmod=770 *.sh /
ENTRYPOINT ["/start.sh"]
# hadolint ignore=DL3002
USER root
LABEL com.centurylinklabs.watchtower.enable="false"

View File

@@ -1,11 +1,11 @@
# Probably from this file: https://github.com/Cisco-Talos/clamav-docker/blob/main/clamav/1.1/alpine/Dockerfile
FROM clamav/clamav:1.2.0-1
FROM clamav/clamav:1.2.0-8
COPY clamav.conf /tmp/clamav.conf
RUN set -ex; \
apk add --no-cache tzdata; \
cat /tmp/clamav.conf | tee -a /etc/clamav/clamd.conf; \
cat /tmp/clamav.conf >> /etc/clamav/clamd.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; \

View File

@@ -1,8 +1,9 @@
# From a file located probably somewhere here: https://github.com/CollaboraOnline/online/tree/master/docker
FROM collabora/code:23.05.4.1.1
FROM collabora/code:23.05.4.2.1
USER root
# hadolint ignore=DL3008
RUN set -ex; \
\
apt-get update; \

View File

@@ -1,5 +1,6 @@
FROM haproxy:2.8.3-alpine3.18
# hadolint ignore=DL3002
USER root
ENV NEXTCLOUD_HOST nextcloud-aio-nextcloud
RUN set -ex; \

View File

@@ -9,6 +9,8 @@ frontend http
mode http
bind :::2375 v4v6
http-request deny unless { src 127.0.0.1 } || { src ::1 } || { src NC_IPV4_PLACEHOLDER } || { src NC_IPV6_PLACEHOLDER }
# docker system _ping
http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/_ping } METH_GET
# container inspect: GET containers/%s/json
http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/containers/nc_app_[a-zA-Z0-9_.-]+/json } METH_GET
# container start/stop: POST containers/%s/start containers/%s/stop
@@ -30,7 +32,7 @@ frontend http
http-request deny if { path,url_dec -m reg -i ^(/v[\d\.]+)?/containers/create } nc_app_container_name !one_mount_volume binds_present type_not_volume METH_POST
# ACL to restrict container creation, that it has HostConfig.Privileged not set
acl no_privileged_flag req.body -m reg -i "\"HostConfig\":\s?{[^}]*\"Privileged\"\s*:"
acl no_privileged_flag req.body -m reg -i "\"HostConfig\":\s?{[^}]*\"Privileged\""
# ACL to allow mount volume with strict pattern for name: nc_app_[a-zA-Z0-9_.-]+_data
acl nc_app_volume_data_only req.body -m reg -i "\"Mounts\":\s?\[\s?{[^}]*\"Source\":\s?\"nc_app_[a-zA-Z0-9_.-]+_data\""
http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/containers/create } nc_app_container_name !no_privileged_flag nc_app_volume_data_only METH_POST

View File

@@ -1,4 +1,4 @@
#!/bin/bash
nc -z "$NEXTCLOUD_HOST" 9000 || exit 0
nc -z "$NEXTCLOUD_HOST" 9001 || exit 0
nc -z localhost 2375 || exit 1

View File

@@ -1,7 +1,7 @@
#!/bin/sh
# Only start container if nextcloud is accessible
while ! nc -z "$NEXTCLOUD_HOST" 9000; do
while ! nc -z "$NEXTCLOUD_HOST" 9001; do
echo "Waiting for Nextcloud to start..."
sleep 5
done

View File

@@ -1,4 +1,4 @@
FROM alpine:3.18.3
FROM alpine:3.18.4
RUN set -ex; \
apk add --no-cache bash lighttpd netcat-openbsd; \
adduser -S www-data -G www-data; \

View File

@@ -1,8 +1,9 @@
# Probably from here https://github.com/elastic/elasticsearch/blob/main/distribution/docker/src/docker/Dockerfile
FROM elasticsearch:8.10.1
FROM elasticsearch:8.10.2
USER root
# hadolint ignore=DL3008
RUN set -ex; \
\
export DEBIAN_FRONTEND=noninteractive; \

View File

@@ -1,4 +1,4 @@
FROM golang:1.21.1-alpine3.18 as go
FROM golang:1.21.2-alpine3.18 as go
ENV IMAGINARY_HASH b632dae8cc321452c3f85bcae79c580b1ae1ed84
@@ -12,7 +12,7 @@ RUN set -ex; \
build-base; \
go install github.com/h2non/imaginary@"$IMAGINARY_HASH";
FROM alpine:3.18.3
FROM alpine:3.18.4
RUN set -ex; \
apk add --no-cache \
tzdata \

View File

@@ -5,7 +5,7 @@ FROM docker:24.0.6-cli as docker
FROM caddy:2.7.4-alpine as caddy
# From https://github.com/docker-library/php/blob/master/8.2/alpine3.18/fpm/Dockerfile
FROM php:8.2.10-fpm-alpine3.18
FROM php:8.2.11-fpm-alpine3.18
EXPOSE 80
EXPOSE 8080
@@ -16,6 +16,7 @@ COPY --from=docker /usr/local/bin/docker /usr/local/bin/docker
WORKDIR /var/www/docker-aio
# hadolint ignore=SC2086,DL3047,DL3003,DL3004
RUN set -ex; \
apk add --no-cache shadow; \
groupmod -g 333 xfs; \
@@ -50,7 +51,7 @@ RUN set -ex; \
| sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)"; \
apk add --virtual .nextcloud-aio-rundeps $runDeps; \
apk add --no-cache --virtual .nextcloud-aio-rundeps $runDeps; \
apk del .build-deps; \
grep -q '^pm = dynamic' /usr/local/etc/php-fpm.d/www.conf; \
sed -i 's/^pm = dynamic/pm = ondemand/' /usr/local/etc/php-fpm.d/www.conf; \
@@ -64,7 +65,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 ./ -maxdepth 1 -mindepth 1 -not -path ./php -exec rm -r {} \; ; \
find ./ -maxdepth 1 -mindepth 1 -not -path ./php -not -path ./community-containers -exec rm -r {} \; ; \
chown www-data:www-data -R /var/www/docker-aio; \
cd php; \
sudo -u www-data composer install --no-dev; \
@@ -120,6 +121,7 @@ COPY --chmod=664 Caddyfile /Caddyfile
COPY --chmod=664 supervisord.conf /supervisord.conf
COPY mastercontainer.conf /etc/apache2/sites-available/mastercontainer.conf
# hadolint ignore=DL3002
USER root
ENTRYPOINT ["/start.sh"]

View File

@@ -179,7 +179,7 @@ It is set to '$APACHE_PORT'."
fi
fi
if [ -n "$APACHE_IP_BINDING" ]; then
if ! echo "$APACHE_IP_BINDING" | grep -q '^[0-9.]\+$'; then
if ! echo "$APACHE_IP_BINDING" | grep -q '^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+$\|^[0-9a-f:]\+$'; then
print_red "You provided an ip-address for the apache container's ip-binding but it was not a valid ip-address.
It is set to '$APACHE_IP_BINDING'."
exit 1
@@ -241,6 +241,20 @@ It is set to '$NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS'."
exit 1
fi
fi
if [ -n "$AIO_COMMUNITY_CONTAINERS" ]; then
read -ra AIO_CCONTAINERS <<< "$AIO_COMMUNITY_CONTAINERS"
for container in "${AIO_CCONTAINERS[@]}"; do
if ! [ -d "/var/www/docker-aio/community-containers/$container" ]; then
print_red "The community container $container was not found!"
FAIL_CCONTAINERS=1
fi
done
if [ -n "$FAIL_CCONTAINERS" ]; then
print_red "You've set AIO_COMMUNITY_CONTAINERS but at least one container was not found.
It is set to '$AIO_COMMUNITY_CONTAINERS'."
exit 1
fi
fi
# Check DNS resolution
# Prevents issues like https://github.com/nextcloud/all-in-one/discussions/565

View File

@@ -1,9 +1,9 @@
FROM php:8.1.23-fpm-alpine3.18
FROM php:8.1.24-fpm-alpine3.18
ENV PHP_MEMORY_LIMIT 512M
ENV PHP_UPLOAD_LIMIT 10G
ENV PHP_MAX_TIME 3600
ENV NEXTCLOUD_VERSION 27.1.1
ENV NEXTCLOUD_VERSION 27.1.2
ENV AIO_TOKEN 123456
ENV AIO_URL localhost
@@ -16,6 +16,7 @@ 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
# hadolint ignore=SC2086,DL3003
RUN set -ex; \
apk add --no-cache shadow; \
deluser www-data; \
@@ -69,7 +70,7 @@ RUN set -ex; \
# pecl will claim success even if one install fails, so we need to perform each install separately
pecl install APCu-5.1.22; \
pecl install memcached-3.2.0; \
pecl install redis-6.0.0; \
pecl install redis-6.0.1; \
pecl install imagick-3.7.0; \
\
docker-php-ext-enable \
@@ -85,7 +86,7 @@ RUN set -ex; \
| sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)"; \
apk add --virtual .nextcloud-phpext-rundeps $runDeps; \
apk add --no-cache --virtual .nextcloud-phpext-rundeps $runDeps; \
apk del .build-deps; \
\
# set recommended PHP.ini settings
@@ -170,7 +171,7 @@ RUN set -ex; \
| sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)"; \
apk add --virtual .nextcloud-phpext-rundeps $runDeps; \
apk add --no-cache --virtual .nextcloud-phpext-rundeps $runDeps; \
apk del .build-deps; \
\
mkdir -p \
@@ -189,6 +190,7 @@ RUN set -ex; \
sudo \
grep \
nodejs \
bind-tools \
coreutils; \
\
grep -q '^pm = dynamic' /usr/local/etc/php-fpm.d/www.conf; \
@@ -219,6 +221,7 @@ RUN set -ex; \
# Give root a random password
echo "root:$(openssl rand -base64 12)" | chpasswd
# hadolint ignore=DL3002
USER root
ENTRYPOINT ["/start.sh"]
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]

View File

@@ -365,6 +365,9 @@ DATADIR_PERMISSION_CONF
exit 1
fi
# shellcheck disable=SC2016
installed_version="$(php -r 'require "/var/www/html/version.php"; echo implode(".", $OC_Version);')"
rm "$NEXTCLOUD_DATA_DIR/update.failed"
bash /notify.sh "Nextcloud update to $image_version successful!" "Feel free to inspect the Nextcloud container logs for more info."
@@ -484,8 +487,8 @@ php /var/www/html/occ config:system:set overwrite.cli.url --value="https://$NC_D
php /var/www/html/occ config:system:set htaccess.RewriteBase --value="/"
php /var/www/html/occ maintenance:update:htaccess
# Apply dbpersistent setting in order to fix too many db connections
php /var/www/html/occ config:system:set dbpersistent --value=true --type=bool
# Revert dbpersistent setting to check if it fixes too many db connections
php /var/www/html/occ config:system:set dbpersistent --value=false --type=bool
# Disallow creating local external storages when nothing was mounted
if [ -z "$NEXTCLOUD_MOUNT" ]; then
@@ -524,11 +527,8 @@ if [ "$COLLABORA_ENABLED" = 'yes' ]; then
# Fix https://github.com/nextcloud/all-in-one/issues/188:
php /var/www/html/occ config:system:set allow_local_remote_servers --type=bool --value=true
# Make collabora more save
COLLABORA_IPv4_ADDRESS="$(echo "<?php echo gethostbyname('$NC_DOMAIN');" | php | head -1)"
COLLABORA_IPv6_ADDRESS="<?php \$record = dns_get_record('$NC_DOMAIN', DNS_AAAA);"
# shellcheck disable=SC2016
COLLABORA_IPv6_ADDRESS+='if (!empty($record)) {echo $record[0]["ipv6"];}'
COLLABORA_IPv6_ADDRESS="$(echo "$COLLABORA_IPv6_ADDRESS" | php | head -1)"
COLLABORA_IPv4_ADDRESS="$(dig "$NC_DOMAIN" A +short | grep '^[0-9.]\+$' | sort | head -n1)"
COLLABORA_IPv6_ADDRESS="$(dig "$NC_DOMAIN" AAAA +short | grep '^[0-9a-f:]\+$' | sort | head -n1)"
COLLABORA_ALLOW_LIST="$(php /var/www/html/occ config:app:get richdocuments wopi_allowlist)"
if [ -n "$COLLABORA_IPv4_ADDRESS" ]; then
if ! echo "$COLLABORA_ALLOW_LIST" | grep -q "$COLLABORA_IPv4_ADDRESS"; then
@@ -737,7 +737,7 @@ else
fi
# Docker socket proxy
if version_greater "$installed_version" "27.1.0.0"; then
if version_greater "$installed_version" "27.1.2.0"; then
if [ "$DOCKER_SOCKET_PROXY_ENABLED" = 'yes' ]; then
if ! [ -d "/var/www/html/custom_apps/app_api" ]; then
php /var/www/html/occ app:install app_api

View File

@@ -119,7 +119,7 @@ if [ -n "$ADDITIONAL_PHP_EXTENSIONS" ]; then
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)";
# shellcheck disable=SC2086
apk add --virtual .nextcloud-phpext-rundeps $runDeps >/dev/null
apk add --no-cache --virtual .nextcloud-phpext-rundeps $runDeps >/dev/null
apk del .build-deps >/dev/null
fi
fi
@@ -131,4 +131,19 @@ if ! sudo -E -u www-data bash /entrypoint.sh; then
exit 1
fi
exec "$@"
while [ -z "$(dig nextcloud-aio-apache A +short)" ]; do
echo "Waiting for nextcloud-aio-apache to start..."
sleep 5
done
IPv4_ADDRESS_APACHE="$(dig nextcloud-aio-apache A +short | grep '^[0-9.]\+$' | sort | head -n1)"
IPv6_ADDRESS_APACHE="$(dig nextcloud-aio-apache AAAA +short | grep '^[0-9a-f:]\+$' | sort | head -n1)"
IPv4_ADDRESS_MASTERCONTAINER="$(dig nextcloud-aio-mastercontainer A +short | grep '^[0-9.]\+$' | sort | head -n1)"
IPv6_ADDRESS_MASTERCONTAINER="$(dig nextcloud-aio-mastercontainer AAAA +short | grep '^[0-9a-f:]\+$' | sort | head -n1)"
sed -i "s|^;listen.allowed_clients|listen.allowed_clients|" /usr/local/etc/php-fpm.d/www.conf
sed -i "s|listen.allowed_clients.*|listen.allowed_clients = 127.0.0.1,::1,$IPv4_ADDRESS_APACHE,$IPv6_ADDRESS_APACHE,$IPv4_ADDRESS_MASTERCONTAINER,$IPv6_ADDRESS_MASTERCONTAINER|" /usr/local/etc/php-fpm.d/www.conf
sed -i "/^listen.allowed_clients/s/,,/,/g" /usr/local/etc/php-fpm.d/www.conf
sed -i "/^listen.allowed_clients/s/,$//" /usr/local/etc/php-fpm.d/www.conf
grep listen.allowed_clients /usr/local/etc/php-fpm.d/www.conf
exec "$@"

View File

@@ -32,3 +32,12 @@ stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=/run-exec-commands.sh
user=www-data
# This is a hack but no better solution is there
[program:is-nextcloud-online]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=nc -lk 9001
user=www-data

View File

@@ -1,4 +1,4 @@
FROM alpine:3.18.2
FROM alpine:3.18.4
COPY --chmod=775 start.sh /start.sh
COPY --chmod=775 healthcheck.sh /healthcheck.sh

View File

@@ -1,6 +1,6 @@
#!/bin/bash
if ! nc -z "$NEXTCLOUD_HOST" 9000; then
if ! nc -z "$NEXTCLOUD_HOST" 9001; then
exit 0
fi

View File

@@ -12,7 +12,7 @@ elif [ -z "$REDIS_HOST" ]; then
fi
# Only start container if nextcloud is accessible
while ! nc -z "$NEXTCLOUD_HOST" 9000; do
while ! nc -z "$NEXTCLOUD_HOST" 9001; do
echo "Waiting for Nextcloud to start..."
sleep 5
done
@@ -27,6 +27,21 @@ elif [ "$CPU_ARCH" != "x86_64" ]; then
export CPU_ARCH="aarch64"
fi
# Add warning
if ! [ -f /nextcloud/custom_apps/notify_push/bin/"$CPU_ARCH"/notify_push ]; then
echo "The notify_push binary was not found."
echo "Most likely is DNS resolution not working correctly."
echo "You can try to fix this by configuring a DNS server globally in dockers daemon.json."
echo "See https://dockerlabs.collabnix.com/intermediate/networking/Configuring_DNS.html"
echo "Afterwards a restart of docker should automatically resolve this."
echo "Additionally, make sure to disable VPN software that might be running on your server"
echo "Also check your firewall if it blocks connections to github"
echo "If it should still not work afterwards, feel free to create a new thread at https://github.com/nextcloud/all-in-one/discussions/new?category=questions and post the Nextcloud container logs there."
echo ""
echo ""
exit 1
fi
# Set sensitive values as env
export DATABASE_URL="postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST/$POSTGRES_DB"
export REDIS_URL="redis://:$REDIS_HOST_PASSWORD@$REDIS_HOST"

View File

@@ -1,8 +1,8 @@
FROM python:3.11.5-alpine3.18
FROM python:3.12.0-alpine3.18
COPY --chmod=775 start.sh /start.sh
ENV RECORDING_VERSION v17.1.0
ENV RECORDING_VERSION v17.1.1
ENV ALLOW_ALL false
ENV HPB_PROTOCOL https
ENV SKIP_VERIFY false
@@ -30,7 +30,7 @@ RUN set -ex; \
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; \
python3 -m pip install --no-cache-dir /src/recording/src; \
rm -rf /src; \
touch /etc/recording.conf; \
chown recording:recording -R \

View File

@@ -1,7 +1,7 @@
FROM nats:2.10.0-scratch as nats
FROM eturnal/eturnal:1.11.1 AS eturnal
FROM nats:2.10.1-scratch as nats
FROM eturnal/eturnal:1.12.0 AS eturnal
FROM strukturag/nextcloud-spreed-signaling:1.1.3 as signaling
FROM alpine:3.18.3 as janus
FROM alpine:3.18.4 as janus
ARG JANUS_VERSION=v0.14.0
WORKDIR /src
@@ -33,7 +33,7 @@ RUN set -ex; \
make configs; \
rename -v ".jcfg.sample" ".jcfg" /usr/local/etc/janus/*.jcfg.sample
FROM alpine:3.18.2
FROM alpine:3.18.4
ENV ETURNAL_ETC_DIR="/conf"
COPY --from=janus /usr/local /usr/local
COPY --from=eturnal /opt/eturnal /opt/eturnal

View File

@@ -38,9 +38,9 @@ eturnal:
secret: "$TURN_SECRET"
relay_ipv4_addr: "$IPv4_ADDRESS_TALK"
relay_ipv6_addr: "$IPv6_ADDRESS_TALK"
blacklist:
blacklist_peers:
- recommended
whitelist:
whitelist_peers:
- 127.0.0.1
- ::1
- "$IPv4_ADDRESS_TALK"

View File

@@ -1,13 +1,14 @@
# From https://github.com/containrrr/watchtower/blob/main/dockerfiles/Dockerfile.self-contained
FROM containrrr/watchtower:1.5.3 as watchtower
FROM containrrr/watchtower:1.6.0 as watchtower
FROM alpine:3.18.3
FROM alpine:3.18.4
RUN apk add --no-cache bash
COPY --from=watchtower /watchtower /watchtower
COPY --chmod=775 start.sh /start.sh
# hadolint ignore=DL3002
USER root
ENTRYPOINT ["/start.sh"]

View File

@@ -0,0 +1,52 @@
{
"aio_services_v1": [
{
"container_name": "nextcloud-aio-caddy",
"display_name": "Caddy with geoblocking",
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/caddy",
"image": "szaimen/aio-caddy",
"image_tag": "v1",
"internal_port": "443",
"restart": "unless-stopped",
"ports": [
{
"ip_binding": "",
"port_number": "443",
"protocol": "tcp"
},
{
"ip_binding": "",
"port_number": "443",
"protocol": "udp"
}
],
"environment": [
"TZ=%TIMEZONE%",
"NC_DOMAIN=%NC_DOMAIN%",
"APACHE_PORT=%APACHE_PORT%"
],
"volumes": [
{
"source": "nextcloud_aio_caddy",
"destination": "/data",
"writeable": true
},
{
"source": "%NEXTCLOUD_DATADIR%",
"destination": "/nextcloud",
"writeable": false
}
],
"aio_variables": [
"apache_ip_binding=127.0.0.1",
"apache_port=11000"
],
"nextcloud_exec_commands": [
"mkdir '/mnt/ncdata/admin/files/nextcloud-aio-caddy'",
"touch '/mnt/ncdata/admin/files/nextcloud-aio-caddy/allowed-countries.txt'",
"echo 'Scanning nextcloud-aio-caddy folder for admin user...'",
"php /var/www/html/occ files:scan --path='/admin/files/nextcloud-aio-caddy'"
]
}
]
}

View File

@@ -0,0 +1,14 @@
## Caddy with geoblocking
This container bundles caddy and auto-configures it for you. It also covers https://github.com/nextcloud/all-in-one/tree/main/community-containers/vaultwarden by listening on `bw.$NC_DOMAIN`, if installed.
### Notes
- Make sure that no other service is using port 443 on your host as otherwise the containers will fail to start. You can check this with `sudo netstat -tulpn | grep 443` before installing AIO.
- If you want to use this with https://github.com/nextcloud/all-in-one/tree/main/community-containers/vaultwarden, make sure that you point `bw.your-nc-domain.com` to your server using a cname record so that caddy can get a certificate automatically for vaultwarden.
- After the container was started the first time, you should see a new `nextcloud-aio-caddy` folder and inside there an `allowed-countries.txt` file when you open the files app with the default `admin` user. In there you can adjust the allowed country codes for caddy by adding them to the first line, e.g. `IT FR` would allow access from italy and france. Private ip-ranges are always allowed. Additionally, in order to activate this config, you need to get an account at https://dev.maxmind.com/geoip/geolite2-free-geolocation-data and download the `GeoLite2-Country.mmdb` and upload it with this exact name into the `nextcloud-aio-caddy` folder. Afterwards restart all containers from the AIO interface and your new config should be active!
- See https://github.com/nextcloud/all-in-one/tree/main/community-containers how to add it to the AIO stack
### Repository
https://github.com/szaimen/aio-caddy
### Maintainer
https://github.com/szaimen

View File

@@ -0,0 +1,32 @@
{
"aio_services_v1": [
{
"container_name": "nextcloud-aio-fail2ban",
"display_name": "Fail2ban",
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/fail2ban",
"image": "szaimen/aio-fail2ban",
"image_tag": "v1",
"internal_port": "host",
"restart": "unless-stopped",
"cap_add": [
"NET_ADMIN",
"NET_RAW"
],
"environment": [
"TZ=%TIMEZONE%"
],
"volumes": [
{
"source": "nextcloud_aio_nextcloud",
"destination": "/nextcloud",
"writeable": false
},
{
"source": "nextcloud_aio_vaultwarden_logs",
"destination": "/vaultwarden",
"writeable": false
}
]
}
]
}

View File

@@ -0,0 +1,13 @@
## Fail2ban
This container bundles fail2ban and auto-configures it for you in order to block ip-addresses automatically. It also covers https://github.com/nextcloud/all-in-one/tree/main/community-containers/vaultwarden, if installed.
### Notes
- This is not working on Docker Desktop since it needs `network_mode: host` in order to work correctly.
- If you get an error like `"ip6tables v1.8.9 (legacy): can't initialize ip6tables table filter': Table does not exist (do you need to insmod?)"`, you need to enable ip6tables on your host via `sudo modprobe ip6table_filter`.
- See https://github.com/nextcloud/all-in-one/tree/main/community-containers how to add it to the AIO stack
### Repository
https://github.com/szaimen/aio-fail2ban
### Maintainer
https://github.com/szaimen

View File

@@ -0,0 +1,55 @@
{
"aio_services_v1": [
{
"container_name": "nextcloud-aio-pihole",
"display_name": "Pi-hole",
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/pi-hole",
"image": "pihole/pihole",
"image_tag": "latest",
"internal_port": "8573",
"restart": "unless-stopped",
"ports": [
{
"ip_binding": "",
"port_number": "53",
"protocol": "tcp"
},
{
"ip_binding": "",
"port_number": "53",
"protocol": "udp"
},
{
"ip_binding": "",
"port_number": "8573",
"protocol": "tcp"
}
],
"environment": [
"TZ=%TIMEZONE%",
"WEBPASSWORD=%PIHOLE_WEBPASSWORD%",
"DNSMASQ_LISTENING=all",
"WEB_PORT=8573"
],
"volumes": [
{
"source": "nextcloud_aio_pihole",
"destination": "/etc/pihole",
"writeable": true
},
{
"source": "nextcloud_aio_pihole_dnsmasq",
"destination": "/etc/dnsmasq.d",
"writeable": true
}
],
"backup_volumes": [
"nextcloud_aio_pihole",
"nextcloud_aio_pihole_dnsmasq"
],
"secrets": [
"PIHOLE_WEBPASSWORD"
]
}
]
}

View File

@@ -0,0 +1,18 @@
## Pi-hole
This container bundles pi-hole and auto-configures it for you.
### Notes
- You should not run this container on a public VPS! It is only intended to run in home networks!
- Make sure that no dns server is already running by checking with `sudo netstat -tulpn | grep 53`. Otherwise the container will not be able to start!
- The DHCP functionality of Pi-hole has been disabled!
- The data of pi-hole will be automatically included in AIOs backup solution!
- After adding and starting the container, you can visit `http://ip.address.of.this.server:8573` in order to log in with the admin key that you can retrieve when running `sudo docker inspect nextcloud-aio-pihole | grep WEBPASSWORD`. There you can configure the pi-hole setup. Also you can add local dns records.
- You can configure your home network now to use pi-hole as its dns server by configuring your router.
- Additionally, you can configure the docker daemon to use that by editing `/etc/docker/daemon.json` and adding ` { "dns" : [ "ip.address.of.this.server" , "8.8.8.8" ] } `.
- See https://github.com/nextcloud/all-in-one/tree/main/community-containers how to add it to the AIO stack
### Repository
https://github.com/pi-hole/docker-pi-hole
### Maintainer
https://github.com/szaimen

View File

@@ -0,0 +1,41 @@
{
"aio_services_v1": [
{
"container_name": "nextcloud-aio-plex",
"display_name": "Plex",
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/plex",
"image": "plexinc/pms-docker",
"image_tag": "latest",
"internal_port": "host",
"restart": "unless-stopped",
"environment": [
"TZ=%TIMEZONE%",
"PLEX_UID=33",
"PLEX_GID=33"
],
"volumes": [
{
"source": "nextcloud_aio_plex",
"destination": "/config",
"writeable": true
},
{
"source": "%NEXTCLOUD_DATADIR%",
"destination": "/data",
"writeable": false
},
{
"source": "%NEXTCLOUD_MOUNT%",
"destination": "%NEXTCLOUD_MOUNT%",
"writeable": false
}
],
"devices": [
"/dev/dri"
],
"backup_volumes": [
"nextcloud_aio_plex"
]
}
]
}

View File

@@ -0,0 +1,16 @@
## Plex
This container bundles Plex and auto-configures it for you.
### Notes
- This is not working on arm64 since Plex does only provide x64 docker images.
- This is not working on Docker Desktop since it needs `network_mode: host` in order to work correctly.
- If you have a firewall like ufw configured, you might need to open all Plex ports in there first in order to make it work. Especially port 32400 is important!
- After adding and starting the container, you need to visit http://ip.address.of.server:32400 in order to claim your server with a plex account
- The data of Plex will be automatically included in AIOs backup solution!
- See https://github.com/nextcloud/all-in-one/tree/main/community-containers how to add it to the AIO stack
### Repository
https://github.com/plexinc/pms-docker
### Maintainer
https://github.com/szaimen

View File

@@ -0,0 +1,15 @@
# Community containers
This directory features containers that are built for AIO which allows to add additional functionality very easily.
## Disclaimers
⚠️ This is currently beta and not stable yet!
All containers that are in this directory are community maintained so the responsibility is on the community to keep them updated and secure. There is no guarantee that this will be the case in the future.
## How to use this?
Before adding any additional container, make sure to create a backup via the AIO interface!
Afterwards, you might want to add additional community containers to the default AIO stack. You can do so by adding `--env AIO_COMMUNITY_CONTAINERS="container1 container2"` to the docker run command of the mastercontainer (but before the last line `nextcloud/all-in-one:latest`! If it was started already, you will need to stop the mastercontainer, remove it (no data will be lost) and recreate it using the docker run command that you initially used) and customize the value to your fitting. It must match the folder names in this directory! ⚠️⚠️⚠️ Please review the folder for documentation on each of the containers before adding them! Not reviewing the documentation for each of them first might break starting the AIO containers because e.g. fail2ban only works on Linux and not on Docker Desktop!
## How to add containers?
Simply submit a PR by creating a new folder in this directory: https://github.com/nextcloud/all-in-one/tree/main/community-containers with the name of your container. It must include a json file with the same name and with correct syntax and a readme.md with additional information. You might get inspired by caddy, fail2ban, plex, pi-hole or vaultwarden (subfolders in this directory). For a full-blown example of the json file, see https://github.com/nextcloud/all-in-one/blob/main/php/containers.json. The json-schema that it validates against can be found here: https://github.com/nextcloud/all-in-one/blob/main/php/containers-schema.json.

View File

@@ -0,0 +1,16 @@
## Vaultwarden
This container bundles vaultwarden and auto-configures it for you.
### Notes
- You need to configure a reverse proxy in order to run this container since vaultwarden needs a dedicated (sub)domain! For that, you might have a look at https://github.com/nextcloud/all-in-one/tree/main/community-containers/caddy or follow https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md and https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples. You need to point the reverse proxy at port 8812 of this server.
- Currently, only `bw.$NC_DOMAIN` is supported as subdomain! So if Nextcloud is using `your-domain.com`, vaultwarden will use `bw.your-domain.com`. The reverse proxy and domain must be configured accordingly!
- If you want to secure the installation with fail2ban, you might want to check out https://github.com/nextcloud/all-in-one/tree/main/community-containers/fail2ban
- The data of Vaultwarden will be automatically included in AIOs backup solution!
- After adding and starting the container, you need to visit `https://bw.your-domain.com/admin` in order to log in with the admin key that you can retrieve when running `sudo docker inspect nextcloud-aio-vaultwarden | grep ADMIN_TOKEN`. There you can configure smtp first and then invite users via mail. After this is done, you might disable the admin panel via the reverse proxy by blocking connections to the subdirectory.
- See https://github.com/nextcloud/all-in-one/tree/main/community-containers how to add it to the AIO stack
### Repository
https://github.com/dani-garcia/vaultwarden
### Maintainer
https://github.com/szaimen

View File

@@ -0,0 +1,48 @@
{
"aio_services_v1": [
{
"container_name": "nextcloud-aio-vaultwarden",
"display_name": "Vaultwarden",
"documentation": "https://github.com/nextcloud/all-in-one/tree/main/community-containers/vaultwarden",
"image": "vaultwarden/server",
"image_tag": "alpine",
"internal_port": "8812",
"restart": "unless-stopped",
"ports": [
{
"ip_binding": "%APACHE_IP_BINDING%",
"port_number": "8812",
"protocol": "tcp"
}
],
"environment": [
"TZ=%TIMEZONE%",
"ROCKET_PORT=8812",
"ADMIN_TOKEN=%VAULTWARDEN_ADMIN_TOKEN%",
"DOMAIN=https://bw.%NC_DOMAIN%",
"LOG_FILE=/logs/vaultwarden.log",
"LOG_LEVEL=warn",
"SIGNUPS_VERIFY=true",
"SIGNUPS_ALLOWED=false"
],
"volumes": [
{
"source": "nextcloud_aio_vaultwarden",
"destination": "/data",
"writeable": true
},
{
"source": "nextcloud_aio_vaultwarden_logs",
"destination": "/logs",
"writeable": true
}
],
"backup_volumes": [
"nextcloud_aio_vaultwarden"
],
"secrets": [
"VAULTWARDEN_ADMIN_TOKEN"
]
}
]
}

View File

@@ -5,7 +5,7 @@ You can run AIO with docker rootless by following the steps below.
0. If docker is already installed, you should consider disabling it first: (`sudo systemctl disable --now docker.service docker.socket`)
1. Install docker rootless by following the official documentation: https://docs.docker.com/engine/security/rootless/#install. The easiest way is installing it **Without packages** (`curl -fsSL https://get.docker.com/rootless | sh`). Further limitations, distribution specific hints, etc. are discussed on the same site. Also do not forget to enable the systemd service, which may not be enabled always by default. See https://docs.docker.com/engine/security/rootless/#usage. (`systemctl --user enable docker`)
1. If you need ipv6 support, you should enable it by following https://github.com/nextcloud/all-in-one/blob/main/docker-ipv6-support.md.
1. Do not forget to set the mentioned environmental variables and in best case add them to your `~/.bashrc` file as shown!
1. Do not forget to set the mentioned environmental variables `PATH` and `DOCKER_HOST` and in best case add them to your `~/.bashrc` file as shown!
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).

View File

@@ -11,6 +11,7 @@ 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 lose all community containers: https://github.com/nextcloud/all-in-one/tree/main/community-containers
- **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

View File

@@ -17,6 +17,7 @@ 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[].image_tag)')"
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"))')"

View File

@@ -7,7 +7,7 @@ Below is described more in detail how the the second way works.
## Run multiple AIO instances on the same server with docker rootless
1. Create as many linux users as you need first. The easiest way is to use `sudo adduser` and follow the setup for that. Make sure to create a strong unique password for each of them and write it down!
1. Log in as each of the users by opening a new SSH connection as the user and install docker rootless for each of them by following step 0-4 of the [docker rootless documentation](./docker-rootless.md).
1. Log in as each of the users by opening a new SSH connection as the user and install docker rootless for each of them by following step 0-1 and 3-4 of the [docker rootless documentation](./docker-rootless.md) (you can skip step 2 in this case).
1. Then install AIO in reverse proxy mode by using the command that is descriebed in step 2 and 3 of the [reverse proxy documentation](./reverse-proxy.md) but use a different `APACHE_PORT` and [`TALK_PORT`](https://github.com/nextcloud/all-in-one#how-to-adjust-the-talk-port) for each instance as otherwise it will bug out. Also make sure to adjust the docker socket and `WATCHTOWER_DOCKER_SOCKET_PATH` correctly for each of them by following step 6 of the [docker rootless documentation](./docker-rootless.md). Additionally, modify `--publish 8080:8080` to a different port for each container, e.g. `8081:8080` as otherwise it will not work.<br>
**⚠️ Please note:** If you want to adjust the `NEXTCLOUD_DATADIR`, make sure to apply the correct permissions to the chosen path as documented at the bottom of the [docker rootless documentation](./docker-rootless.md). Also for the built-in backup to work, the target path needs to have the correct permissions as documented there, too.
1. Now install your webserver of choice on the host system. It is recommended to use caddy for this as it is by far the easiest solution. You can do so by following https://caddyserver.com/docs/install#debian-ubuntu-raspbian or below. (It needs to be installed directly on the host or on a different server in the same network).

View File

@@ -10,6 +10,7 @@ You can run the containers that are build for AIO with Kubernetes using this Hel
- You lose the AIO interface
- You lose update notifications and automatic updates
- You lose all AIO backup and restore features
- You lose all community containers: https://github.com/nextcloud/all-in-one/tree/main/community-containers
- **You need to know what you are doing**
- For updating, you need to strictly follow the at the bottom described update routine
- You need to monitor yourself if the volumes have enough free space and increase them if they don't by adjusting their size in values.yaml

View File

@@ -10,8 +10,7 @@ rm -f ./helm-chart/values.yaml
rm -rf ./helm-chart/templates
# Install kompose
LATEST_KOMPOSE="$(git ls-remote --tags https://github.com/kubernetes/kompose.git | cut -d/ -f3 | grep -viE -- 'rc|b' | sort -V | tail -1)"
curl -L https://github.com/kubernetes/kompose/releases/download/"$LATEST_KOMPOSE"/kompose-linux-amd64 -o kompose
curl -L https://github.com/kubernetes/kompose/releases/latest/download/kompose-linux-amd64 -o kompose
chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose
@@ -43,6 +42,9 @@ sed -i "s|\${NEXTCLOUD_TRUSTED_CACERTS_DIR}:|nextcloud_aio_nextcloud_trusted_cac
sed -i 's|\${|{{ .Values.|g' latest.yml
sed -i 's|}| }}|g' latest.yml
yq -i 'del(.services.[].profiles)' latest.yml
# Delete read_only and tmpfs setting while https://github.com/kubernetes/kubernetes/issues/48912 is not fixed
yq -i 'del(.services.[].read_only)' latest.yml
yq -i 'del(.services.[].tmpfs)' latest.yml
cat latest.yml
kompose convert -c -f latest.yml --namespace nextcloud-aio-namespace
cd latest
@@ -125,6 +127,8 @@ 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 '*deployment.yaml' -exec sed -i "/hostPort:/d" \{} \;
# 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 }}" \{} \;

View File

@@ -16,8 +16,7 @@
"http-interop/http-factory-guzzle": "^1.2",
"slim/twig-view": "^3.3",
"slim/csrf": "^1.3",
"ext-apcu": "*",
"justinrainbow/json-schema": "^5.2"
"ext-apcu": "*"
},
"scripts": {
"psalm": "psalm --threads=1",

84
php/composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "3cbf9ef41575f504b9bdbc8dbe8562e3",
"content-hash": "b0074cfbf6b5cde6d6d2207286ad2e85",
"packages": [
{
"name": "guzzlehttp/guzzle",
@@ -389,76 +389,6 @@
},
"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.1",
@@ -793,16 +723,16 @@
},
{
"name": "psr/http-client",
"version": "1.0.2",
"version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-client.git",
"reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31"
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31",
"reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
"shasum": ""
},
"require": {
@@ -839,9 +769,9 @@
"psr-18"
],
"support": {
"source": "https://github.com/php-fig/http-client/tree/1.0.2"
"source": "https://github.com/php-fig/http-client"
},
"time": "2023-04-10T20:12:12+00:00"
"time": "2023-09-23T14:17:50+00:00"
},
{
"name": "psr/http-factory",

View File

@@ -10,11 +10,12 @@
"type": "object",
"additionalProperties": false,
"minProperties": 2,
"required": ["image", "container_name"],
"required": ["image", "container_name", "image_tag"],
"properties": {
"image": {
"type": "string",
"minLength": 1
"minLength": 1,
"pattern": "^[a-z0-9/-]+$"
},
"expose": {
"type": "array",
@@ -39,7 +40,7 @@
},
"display_name": {
"type": "string",
"pattern": "^[A-Za-z ]+$"
"pattern": "^[A-Za-z 0-9-]+$"
},
"environment": {
"type": "array",
@@ -51,7 +52,7 @@
},
"container_name": {
"type": "string",
"pattern": "^nextcloud-aio-[a-z-]+$"
"pattern": "^nextcloud-aio-[a-z0-9-]+$"
},
"internal_port": {
"type": "string",
@@ -73,7 +74,7 @@
},
"port_number": {
"type": "string",
"pattern": "^(%[A-Z_]+%)$"
"pattern": "^(%[A-Z_]+%|[0-9]{1,5})$"
},
"protocol": {
"type": "string",
@@ -82,6 +83,13 @@
}
}
},
"aio_variables": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z_a-z-]+=.*$"
}
},
"restart": {
"type": "string",
"pattern": "^unless-stopped$"
@@ -98,7 +106,11 @@
},
"image_tag": {
"type": "string",
"pattern": "^[a-z0-9.-]+$"
"pattern": "^([a-z0-9.-]+|%AIO_CHANNEL%)$"
},
"documentation": {
"type": "string",
"pattern": "^https://.*$"
},
"devices": {
"type": "array",
@@ -121,7 +133,7 @@
"type": "array",
"items": {
"type": "string",
"pattern": "^(php /var/www/html/occ .*|echo .*)$"
"pattern": "^(php /var/www/html/occ .*|echo .*|touch .*|mkdir .*)$"
}
},
"profiles": {

View File

@@ -2,6 +2,7 @@
"aio_services_v1": [
{
"container_name": "nextcloud-aio-apache",
"image_tag": "%AIO_CHANNEL%",
"depends_on": [
"nextcloud-aio-onlyoffice",
"nextcloud-aio-collabora",
@@ -68,6 +69,7 @@
},
{
"container_name": "nextcloud-aio-database",
"image_tag": "%AIO_CHANNEL%",
"display_name": "Database",
"image": "nextcloud/aio-postgresql",
"init": true,
@@ -114,6 +116,7 @@
},
{
"container_name": "nextcloud-aio-nextcloud",
"image_tag": "%AIO_CHANNEL%",
"depends_on": [
"nextcloud-aio-database",
"nextcloud-aio-redis",
@@ -127,7 +130,8 @@
"image": "nextcloud/aio-nextcloud",
"init": true,
"expose": [
"9000"
"9000",
"9001"
],
"internal_port": "9000",
"secrets": [
@@ -221,6 +225,7 @@
},
{
"container_name": "nextcloud-aio-notify-push",
"image_tag": "%AIO_CHANNEL%",
"display_name": "Notify Push",
"image": "nextcloud/aio-notify-push",
"init": true,
@@ -257,6 +262,7 @@
},
{
"container_name": "nextcloud-aio-redis",
"image_tag": "%AIO_CHANNEL%",
"display_name": "Redis",
"image": "nextcloud/aio-redis",
"init": true,
@@ -288,6 +294,7 @@
},
{
"container_name": "nextcloud-aio-collabora",
"image_tag": "%AIO_CHANNEL%",
"display_name": "Collabora",
"image": "nextcloud/aio-collabora",
"init": true,
@@ -317,6 +324,7 @@
},
{
"container_name": "nextcloud-aio-talk",
"image_tag": "%AIO_CHANNEL%",
"display_name": "Talk",
"image": "nextcloud/aio-talk",
"init": true,
@@ -368,6 +376,7 @@
},
{
"container_name": "nextcloud-aio-talk-recording",
"image_tag": "%AIO_CHANNEL%",
"display_name": "Talk Recording",
"image": "nextcloud/aio-talk-recording",
"init": true,
@@ -401,6 +410,7 @@
},
{
"container_name": "nextcloud-aio-borgbackup",
"image_tag": "%AIO_CHANNEL%",
"image": "nextcloud/aio-borgbackup",
"init": true,
"environment": [
@@ -463,6 +473,7 @@
},
{
"container_name": "nextcloud-aio-watchtower",
"image_tag": "%AIO_CHANNEL%",
"image": "nextcloud/aio-watchtower",
"init": true,
"environment": [
@@ -479,6 +490,7 @@
},
{
"container_name": "nextcloud-aio-domaincheck",
"image_tag": "%AIO_CHANNEL%",
"image": "nextcloud/aio-domaincheck",
"init": true,
"ports": [
@@ -505,6 +517,7 @@
},
{
"container_name": "nextcloud-aio-clamav",
"image_tag": "%AIO_CHANNEL%",
"display_name": "ClamAV",
"image": "nextcloud/aio-clamav",
"init": false,
@@ -539,6 +552,7 @@
},
{
"container_name": "nextcloud-aio-onlyoffice",
"image_tag": "%AIO_CHANNEL%",
"display_name": "OnlyOffice",
"image": "nextcloud/aio-onlyoffice",
"init": true,
@@ -576,6 +590,7 @@
},
{
"container_name": "nextcloud-aio-imaginary",
"image_tag": "%AIO_CHANNEL%",
"display_name": "Imaginary",
"image": "nextcloud/aio-imaginary",
"init": true,
@@ -603,6 +618,7 @@
},
{
"container_name": "nextcloud-aio-fulltextsearch",
"image_tag": "%AIO_CHANNEL%",
"display_name": "Fulltextsearch",
"image": "nextcloud/aio-fulltextsearch",
"init": false,
@@ -642,6 +658,7 @@
},
{
"container_name": "nextcloud-aio-docker-socket-proxy",
"image_tag": "%AIO_CHANNEL%",
"display_name": "Docker Socket Proxy",
"image": "nextcloud/aio-docker-socket-proxy",
"init": true,

View File

@@ -0,0 +1,19 @@
<?php
namespace AIO\Container;
class AioVariables {
/** @var string[] */
private array $variables = [];
public function AddVariable(string $variable) : void {
$this->variables[] = $variable;
}
/**
* @return string[]
*/
public function GetVariables() : array {
return $this->variables;
}
}

View File

@@ -34,6 +34,8 @@ class Container {
private array $tmpfs;
private bool $init;
private string $imageTag;
private AioVariables $aioVariables;
private string $documentation;
private DockerActionManager $dockerActionManager;
public function __construct(
@@ -58,6 +60,8 @@ class Container {
array $tmpfs,
bool $init,
string $imageTag,
AioVariables $aioVariables,
string $documentation,
DockerActionManager $dockerActionManager
) {
$this->identifier = $identifier;
@@ -81,6 +85,8 @@ class Container {
$this->tmpfs = $tmpfs;
$this->init = $init;
$this->imageTag = $imageTag;
$this->aioVariables = $aioVariables;
$this->documentation = $documentation;
$this->dockerActionManager = $dockerActionManager;
}
@@ -186,4 +192,12 @@ class Container {
public function GetEnvironmentVariables() : ContainerEnvironmentVariables {
return $this->containerEnvironmentVariables;
}
public function GetAioVariables() : AioVariables {
return $this->aioVariables;
}
public function GetDocumentation() : string {
return $this->documentation;
}
}

View File

@@ -2,6 +2,7 @@
namespace AIO;
use AIO\Container\AioVariables;
use AIO\Container\Container;
use AIO\Container\ContainerEnvironmentVariables;
use AIO\Container\ContainerPort;
@@ -12,7 +13,6 @@ use AIO\Container\State\RunningState;
use AIO\Data\ConfigurationManager;
use AIO\Data\DataConst;
use AIO\Docker\DockerActionManager;
use JsonSchema\Validator;
class ContainerDefinitionFetcher
{
@@ -41,27 +41,25 @@ 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((string)printf("[%s] %s\n", $error['property'], $error['message']));
}
}
}
/**
* @return array
*/
private function GetDefinition(bool $latest): array
private function GetDefinition(): array
{
$rawData = file_get_contents(__DIR__ . '/../containers.json');
$objectData = json_decode($rawData, false);
$this->validateJson($objectData);
$data = json_decode($rawData, true);
$data = json_decode(file_get_contents(__DIR__ . '/../containers.json'), true);
$additionalContainerNames = [];
foreach ($this->configurationManager->GetEnabledCommunityContainers() as $communityContainer) {
if ($communityContainer !== '') {
$path = DataConst::GetCommunityContainersDirectory() . '/' . $communityContainer . '/' . $communityContainer . '.json';
$additionalData = json_decode(file_get_contents($path), true);
$data = array_merge_recursive($data, $additionalData);
if (isset($additionalData['aio_services_v1'][0]['display_name']) && $additionalData['aio_services_v1'][0]['display_name'] !== '') {
// Store container_name of community containers in variable for later
$additionalContainerNames[] = $additionalData['aio_services_v1'][0]['container_name'];
}
}
}
$containers = [];
foreach ($data['aio_services_v1'] as $entry) {
@@ -101,17 +99,7 @@ class ContainerDefinitionFetcher
$ports = new ContainerPorts();
if (isset($entry['ports'])) {
foreach ($entry['ports'] as $value) {
if ($value['port_number'] === '%APACHE_PORT%') {
$value['port_number'] = $this->configurationManager->GetApachePort();
} elseif ($value['port_number'] === '%TALK_PORT%') {
$value['port_number'] = $this->configurationManager->GetTalkPort();
}
if ($value['ip_binding'] === '%APACHE_IP_BINDING%') {
$value['ip_binding'] = $this->configurationManager->GetApacheIPBinding();
}
foreach ($entry['ports'] as $value) {
$ports->AddPort(
new ContainerPort(
$value['port_number'],
@@ -170,7 +158,16 @@ class ContainerDefinitionFetcher
$dependsOn = [];
if (isset($entry['depends_on'])) {
foreach ($entry['depends_on'] as $value) {
$valueDependsOn = $entry['depends_on'];
if ($entry['container_name'] === 'nextcloud-aio-apache') {
// Add community containers first and default ones last so that aio_variables works correctly
$valueDependsOnTemp = [];
foreach ($additionalContainerNames as $containerName) {
$valueDependsOnTemp[] = $containerName;
}
$valueDependsOn = array_merge_recursive($valueDependsOnTemp, $valueDependsOn);
}
foreach ($valueDependsOn as $value) {
if ($value === 'nextcloud-aio-clamav') {
if (!$this->configurationManager->isClamavEnabled()) {
continue;
@@ -215,6 +212,13 @@ class ContainerDefinitionFetcher
}
}
$aioVariables = new AioVariables();
if (isset($entry['aio_variables'])) {
foreach ($entry['aio_variables'] as $value) {
$aioVariables->AddVariable($value);
}
}
$displayName = '';
if (isset($entry['display_name'])) {
$displayName = $entry['display_name'];
@@ -285,11 +289,16 @@ class ContainerDefinitionFetcher
$init = $entry['init'];
}
$imageTag = '';
$imageTag = '%AIO_CHANNEL%';
if (isset($entry['image_tag'])) {
$imageTag = $entry['image_tag'];
}
$documentation = '';
if (isset($entry['documentation'])) {
$documentation = $entry['documentation'];
}
$containers[] = new Container(
$entry['container_name'],
$displayName,
@@ -312,6 +321,8 @@ class ContainerDefinitionFetcher
$tmpfs,
$init,
$imageTag,
$aioVariables,
$documentation,
$this->container->get(DockerActionManager::class)
);
}
@@ -321,35 +332,6 @@ class ContainerDefinitionFetcher
public function FetchDefinition(): array
{
if (!file_exists(DataConst::GetDataDirectory() . '/containers.json')) {
$containers = $this->GetDefinition(true);
} else {
$containers = $this->GetDefinition(false);
}
$borgBackupMode = $this->configurationManager->GetBorgBackupMode();
$fetchLatest = false;
foreach ($containers as $container) {
if ($container->GetIdentifier() === 'nextcloud-aio-borgbackup') {
if ($container->GetRunningState() === RunningState::class) {
if ($borgBackupMode !== 'backup' && $borgBackupMode !== 'restore') {
$fetchLatest = true;
}
} else {
$fetchLatest = true;
}
} elseif ($container->GetIdentifier() === 'nextcloud-aio-watchtower' && $container->GetRunningState() === RunningState::class) {
return $containers;
}
}
if ($fetchLatest === true) {
$containers = $this->GetDefinition(true);
}
return $containers;
return $this->GetDefinition();
}
}

View File

@@ -874,6 +874,17 @@ class ConfigurationManager
}
}
private function GetCommunityContainers() : string {
$envVariableName = 'AIO_COMMUNITY_CONTAINERS';
$configName = 'aio_community_containers';
$defaultValue = '';
return $this->GetEnvironmentalVariableOrConfig($envVariableName, $configName, $defaultValue);
}
public function GetEnabledCommunityContainers() : array {
return explode(' ', $this->GetCommunityContainers());
}
private function GetEnabledDriDevice() : string {
$envVariableName = 'NEXTCLOUD_ENABLE_DRI_DEVICE';
$configName = 'nextcloud_enable_dri_device';

View File

@@ -50,4 +50,8 @@ class DataConst {
public static function GetSessionDateFile() : string {
return self::GetDataDirectory() . '/session_date_file';
}
public static function GetCommunityContainersDirectory() : string {
return realpath(__DIR__ . '/../../../community-containers/');
}
}

View File

@@ -49,7 +49,7 @@ class DockerActionManager
private function BuildImageName(Container $container) : string {
$tag = $container->GetImageTag();
if ($tag === '') {
if ($tag === '%AIO_CHANNEL%') {
$tag = $this->GetCurrentChannel();
}
return $container->GetContainerName() . ':' . $tag;
@@ -100,7 +100,7 @@ class DockerActionManager
public function GetContainerUpdateState(Container $container) : IContainerState
{
$tag = $container->GetImageTag();
if ($tag === '') {
if ($tag === '%AIO_CHANNEL%') {
$tag = $this->GetCurrentChannel();
}
@@ -248,6 +248,15 @@ class DockerActionManager
$this->configurationManager->GetAndGenerateSecret($secret);
}
$aioVariables = $container->GetAioVariables()->GetVariables();
foreach($aioVariables as $variable) {
$config = $this->configurationManager->GetConfig();
$variableArray = explode('=', $variable);
$config[$variableArray[0]] = $variableArray[1];
$this->configurationManager->WriteConfig($config);
sleep(1);
}
$envs = $container->GetEnvironmentVariables()->GetVariables();
// Special thing for the nextcloud container
if ($container->GetIdentifier() === 'nextcloud-aio-nextcloud') {
@@ -415,7 +424,13 @@ class DockerActionManager
$exposedPorts = [];
if ($container->GetInternalPort() !== 'host') {
foreach($container->GetPorts()->GetPorts() as $value) {
$portWithProtocol = $value->port . '/' . $value->protocol;
$port = $value->port;
if ($port === '%APACHE_PORT%') {
$port = $this->configurationManager->GetApachePort();
} else if ($port === '%TALK_PORT%') {
$port = $this->configurationManager->GetTalkPort();
}
$portWithProtocol = $port . '/' . $value->protocol;
$exposedPorts[$portWithProtocol] = null;
}
$requestBody['HostConfig']['NetworkMode'] = 'nextcloud-aio';
@@ -427,7 +442,15 @@ class DockerActionManager
$requestBody['ExposedPorts'] = $exposedPorts;
foreach ($container->GetPorts()->GetPorts() as $value) {
$port = $value->port;
if ($port === '%APACHE_PORT%') {
$port = $this->configurationManager->GetApachePort();
} else if ($port === '%TALK_PORT%') {
$port = $this->configurationManager->GetTalkPort();
}
$ipBinding = $value->ipBinding;
if ($ipBinding === '%APACHE_IP_BINDING%') {
$ipBinding = $this->configurationManager->GetApacheIPBinding();
}
$protocol = $value->protocol;
$portWithProtocol = $port . '/' . $protocol;
$requestBody['HostConfig']['PortBindings'][$portWithProtocol] = [
@@ -476,6 +499,11 @@ class DockerActionManager
$requestBody['HostConfig']['CapAdd'] = $capAdds;
}
// Disable arp spoofing
if (!in_array('NET_RAW', $capAdds, true)) {
$requestBody['HostConfig']['CapDrop'] = ['NET_RAW'];
}
if ($container->isApparmorUnconfined()) {
$requestBody['HostConfig']['SecurityOpt'] = ["apparmor:unconfined"];
}

View File

@@ -16,7 +16,7 @@
</header>
<div class="content">
<h1>Nextcloud AIO v7.3.0</h1>
<h1>Nextcloud AIO v7.4.1</h1>
{# Add 2nd tab warning #}
<script type="text/javascript" src="second-tab-warning.js"></script>
@@ -257,13 +257,25 @@
<li>
{% if class(container.GetStartingState()) == 'AIO\\Container\\State\\StartingState' %}
<span class="status running"></span>
<span>{{container.GetDisplayName()}} (<a href="/api/docker/logs?id={{ container.GetIdentifier() }}">Starting</a>)</span>
<span>{{ container.GetDisplayName() }} (<a href="/api/docker/logs?id={{ container.GetIdentifier() }}">Starting</a>)
{% if container.GetDocumentation() != '' %}
(<a href="{{ container.GetDocumentation() }}">docs</a>)
{% endif %}
</span>
{% elseif class(container.GetRunningState()) == 'AIO\\Container\\State\\RunningState' %}
<span class="status success"></span>
<span>{{container.GetDisplayName()}} (<a href="/api/docker/logs?id={{ container.GetIdentifier() }}">Running</a>)</span>
<span>{{ container.GetDisplayName() }} (<a href="/api/docker/logs?id={{ container.GetIdentifier() }}">Running</a>)
{% if container.GetDocumentation() != '' %}
(<a href="{{ container.GetDocumentation() }}">docs</a>)
{% endif %}
</span>
{% else %}
<span class="status error"></span>
<span>{{container.GetDisplayName()}} (<a href="/api/docker/logs?id={{ container.GetIdentifier() }}">Stopped</a>)</span>
<span>{{ container.GetDisplayName() }} (<a href="/api/docker/logs?id={{ container.GetIdentifier() }}">Stopped</a>)
{% if container.GetDocumentation() != '' %}
(<a href="{{ container.GetDocumentation() }}">docs</a>)
{% endif %}
</span>
{% endif %}
</li>
{% endif %}
@@ -577,7 +589,7 @@
{% if is_docker_socket_proxy_enabled == true %}
<input type="checkbox" id="docker-socket-proxy" name="docker-socket-proxy" checked="checked"><label for="docker-socket-proxy">Docker Socket Proxy (needed for <a href="https://github.com/cloud-py-api/app_api#nextcloud-appapi">Nextcloud App API</a>)</label><br><br>
{% else %}
{# <input type="checkbox" id="docker-socket-proxy" name="docker-socket-proxy"><label for="docker-socket-proxy">Docker Socket Proxy (needed for <a href="https://github.com/cloud-py-api/app_api#nextcloud-appapi">Nextcloud App API</a>)</label><br><br> #}
<input type="checkbox" id="docker-socket-proxy" name="docker-socket-proxy"><label for="docker-socket-proxy">Docker Socket Proxy (needed for <a href="https://github.com/cloud-py-api/app_api#nextcloud-appapi">Nextcloud App API</a>)</label><br><br>
{% endif %}
<input id="options-form-submit" class="button" type="submit" value="Save changes" />
<script type="text/javascript" src="options-form-submit.js"></script>

View File

@@ -43,6 +43,7 @@ Included are:
- Possibility included to [permanently add additional PHP extensions into the Nextcloud container](https://github.com/nextcloud/all-in-one#how-to-add-php-extensions-permanently-to-the-nextcloud-container) without having to build your own Docker image
- Possibility included to [pass the needed device for hardware transcoding](https://github.com/nextcloud/all-in-one#how-to-enable-hardware-transcoding-for-nextcloud) to the Nextcloud container
- Possibility included to [store all docker related files on a separate drive](https://github.com/nextcloud/all-in-one#how-to-store-the-filesinstallation-on-a-separate-drive)
- [Additional features can be added very easily](https://github.com/nextcloud/all-in-one/tree/main/community-containers)
- [LDAP can be used as user backend for Nextcloud](https://github.com/nextcloud/all-in-one/tree/main#ldap)
- Migration from any former Nextcloud installation to AIO is possible. See [this documentation](https://github.com/nextcloud/all-in-one/blob/main/migration.md)
- [Fail2Ban can be added](https://github.com/nextcloud/all-in-one#fail2ban)
@@ -266,6 +267,7 @@ Now that this is out of the way, the recommended way how to access Nextcloud loc
- https://help.nextcloud.com/t/need-help-to-configure-internal-access/156075/6
- https://howchoo.com/pi/pi-hole-setup together with https://web.archive.org/web/20221203223505/https://docs.callitkarma.me/posts/PiHole-Local-DNS/
- https://dockerlabs.collabnix.com/intermediate/networking/Configuring_DNS.html
Apart from that there is now a community container that can be added to the AIO stack: https://github.com/nextcloud/all-in-one/tree/main/community-containers/pi-hole
### How to skip the domain validation?
If you are completely sure that you've configured everything correctly and are not able to pass the domain validation, you may skip the domain validation by adding `--env SKIP_DOMAIN_VALIDATION=true` to the docker run command of the mastercontainer (but before the last line `nextcloud/all-in-one:latest`! If it was started already, you will need to stop the mastercontainer, remove it (no data will be lost) and recreate it using the docker run command that you initially used).
@@ -640,7 +642,7 @@ Yes. For that to work, you need to use and follow the [helm-chart documentation]
You can run AIO also with docker rootless. How to do this is documented here: [docker-rootless.md](https://github.com/nextcloud/all-in-one/blob/main/docker-rootless.md)
### Can I run this with Podman instead of Docker?
No. Since Podman is not 100% compatible with the Docker API, you cannot use Podman instead of Docker (since that would add yet another platform where the maintainer would need to test on). However you can use and follow the [manual-install documentation](./manual-install/) to get AIO's containers running with Podman or use Docker rootless, as described in the above section.
Since Podman is not 100% compatible with the Docker API, Podman is not supported (since that would add yet another platform where the maintainer would need to test on). However you can use and follow the [manual-install documentation](./manual-install/) to get AIO's containers running with Podman or use Docker rootless, as described in the above section. Also there is this now: https://github.com/nextcloud/all-in-one/discussions/3487
### How to change the Nextcloud apps that are installed on the first startup?
You might want to adjust the Nextcloud apps that are installed upon the first startup of the Nextcloud container. You can do so by adding `--env NEXTCLOUD_STARTUP_APPS="deck twofactor_totp tasks calendar contacts notes"` to the docker run command of the mastercontainer (but before the last line `nextcloud/all-in-one:latest`! If it was started already, you will need to stop the mastercontainer, remove it (no data will be lost) and recreate it using the docker run command that you initially used) and customize the value to your fitting. It must be a string with small letters a-z, 0-9, spaces and hyphens or '_'. You can disable shipped and by default enabled apps by adding a hyphen in front of the appid. E.g. `-contactsinteraction`.
@@ -685,28 +687,28 @@ You can edit Nextclouds config.php file directly from the host with your favorit
If you want to define a custom skeleton directory, you can do so by copying your skeleton files `sudo docker cp --follow-link /path/to/nextcloud/skeleton/ nextcloud-aio-nextcloud:/mnt/ncdata/skeleton/`, applying the correct permissions with `sudo docker exec nextcloud-aio-nextcloud chown -R 33:0 /mnt/ncdata/skeleton/` and `sudo docker exec nextcloud-aio-nextcloud chmod -R 750 /mnt/ncdata/skeleton/` and setting the skeleton directory option with `sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ config:system:set skeletondirectory --value="/mnt/ncdata/skeleton"`. You can read further on this option here: [click here](https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/config_sample_php_parameters.html?highlight=skeletondir#:~:text=adding%20%3Fdirect%3D1-,'skeletondirectory',-%3D%3E%20'%2Fpath%2Fto%2Fnextcloud)
### Fail2ban
You can configure your server to block certain ip-addresses using fail2ban as bruteforce protection. Here is how to set it up: https://docs.nextcloud.com/server/stable/admin_manual/installation/harden_server.html#setup-fail2ban. The logpath of AIO is by default `/var/lib/docker/volumes/nextcloud_aio_nextcloud/_data/data/nextcloud.log`. Do not forget to add `chain=DOCKER-USER` to your nextcloud jail config (`nextcloud.local`) otherwise the nextcloud service running on docker will still be accessible even if the IP is banned. Also, you may change the blocked ports to cover all AIO ports: by default `80,443,8080,8443,3478` (see [this](https://github.com/nextcloud/all-in-one#explanation-of-used-ports))
You can configure your server to block certain ip-addresses using fail2ban as bruteforce protection. Here is how to set it up: https://docs.nextcloud.com/server/stable/admin_manual/installation/harden_server.html#setup-fail2ban. The logpath of AIO is by default `/var/lib/docker/volumes/nextcloud_aio_nextcloud/_data/data/nextcloud.log`. Do not forget to add `chain=DOCKER-USER` to your nextcloud jail config (`nextcloud.local`) otherwise the nextcloud service running on docker will still be accessible even if the IP is banned. Also, you may change the blocked ports to cover all AIO ports: by default `80,443,8080,8443,3478` (see [this](https://github.com/nextcloud/all-in-one#explanation-of-used-ports)). Apart from that there is now a community container that can be added to the AIO stack: https://github.com/nextcloud/all-in-one/tree/main/community-containers/fail2ban
### LDAP
It is possible to connect to an existing LDAP server. You need to make sure that the LDAP server is reachable from the Nextcloud container. Then you can enable the LDAP app and configure LDAP in Nextcloud manually. If you don't have a LDAP server yet, recommended is to use this docker container: https://hub.docker.com/r/nitnelave/lldap. Make sure here as well that Nextcloud can talk to the LDAP server. The easiest way is by adding the LDAP docker container to the docker network `nextcloud-aio`. Then you can connect to the LDAP container by its name from the Nextcloud container.
It is possible to connect to an existing LDAP server. You need to make sure that the LDAP server is reachable from the Nextcloud container. Then you can enable the LDAP app and configure LDAP in Nextcloud manually. If you don't have a LDAP server yet, recommended is to use this docker container: https://hub.docker.com/r/nitnelave/lldap. Make sure here as well that Nextcloud can talk to the LDAP server. The easiest way is by adding the LDAP docker container to the docker network `nextcloud-aio`. Then you can connect to the LDAP container by its name from the Nextcloud container. Apart from that there is now a way for the community to add containers: https://github.com/nextcloud/all-in-one/tree/main/community-containers#how-to-add-containers
### Netdata
Netdata allows you to monitor your server using a GUI. You can install it by following https://learn.netdata.cloud/docs/agent/packaging/docker#create-a-new-netdata-agent-container.
Netdata allows you to monitor your server using a GUI. You can install it by following https://learn.netdata.cloud/docs/agent/packaging/docker#create-a-new-netdata-agent-container. Apart from that there is now a way for the community to add containers: https://github.com/nextcloud/all-in-one/tree/main/community-containers#how-to-add-containers
### USER_SQL
If you want to use the user_sql app, the easiest way is to create an additional database container and add it to the docker network `nextcloud-aio`. Then the Nextcloud container should be able to talk to the database container using its name.
### phpMyAdmin, Adminer or pgAdmin
It is possible to install any of these to get a GUI for your AIO database. The pgAdmin container is recommended. You can get some docs on it here: https://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html. For the container to connect to the aio-database, you need to connect the container to the docker network `nextcloud-aio` and use `nextcloud-aio-database` as database host, `oc_nextcloud` as database username and the password that you get when running `sudo docker exec nextcloud-aio-nextcloud grep dbpassword config/config.php` as the password.
It is possible to install any of these to get a GUI for your AIO database. The pgAdmin container is recommended. You can get some docs on it here: https://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html. For the container to connect to the aio-database, you need to connect the container to the docker network `nextcloud-aio` and use `nextcloud-aio-database` as database host, `oc_nextcloud` as database username and the password that you get when running `sudo docker exec nextcloud-aio-nextcloud grep dbpassword config/config.php` as the password. Apart from that there is now a way for the community to add containers: https://github.com/nextcloud/all-in-one/tree/main/community-containers#how-to-add-containers
### Mail server
You can configure one yourself by using either of these three recommended projects: [Docker Mailserver](https://github.com/docker-mailserver/docker-mailserver/#docker-mailserver), [Maddy Mail Server](https://github.com/foxcpp/maddy#maddy-mail-server) or [Mailcow](https://github.com/mailcow/mailcow-dockerized#mailcow-dockerized-------). Docker Mailserver and Maddy Mail Server are probably a bit easier to set up as it is possible to run them using only one container but Mailcow has much more features.
You can configure one yourself by using either of these three recommended projects: [Docker Mailserver](https://github.com/docker-mailserver/docker-mailserver/#docker-mailserver), [Maddy Mail Server](https://github.com/foxcpp/maddy#maddy-mail-server) or [Mailcow](https://github.com/mailcow/mailcow-dockerized#mailcow-dockerized-------). Docker Mailserver and Maddy Mail Server are probably a bit easier to set up as it is possible to run them using only one container but Mailcow has much more features. Apart from that there is now a way for the community to add containers: https://github.com/nextcloud/all-in-one/tree/main/community-containers#how-to-add-containers
### How to migrate from an already existing Nextcloud installation to Nextcloud AIO?
Please see the following documentation on this: [migration.md](https://github.com/nextcloud/all-in-one/blob/main/migration.md)
### Requirements for integrating new containers
For integrating new containers, they must pass specific requirements for being considered to get integrated in AIO itself. Even if not considered, we may add some documentation on it.
For integrating new containers, they must pass specific requirements for being considered to get integrated in AIO itself. Even if not considered, we may add some documentation on it. Also there is this now: https://github.com/nextcloud/all-in-one/tree/main/community-containers
What are the requirements?
1. New containers must be related to Nextcloud. Related means that there must be a feature in Nextcloud that gets added by adding this container.
@@ -714,6 +716,9 @@ What are the requirements?
3. The feature that gets added into Nextcloud by adding the container must be maintained by the Nextcloud GmbH.
4. It must be possible to run the container without big quirks inside docker containers. Big quirks means e.g. needing to change the capabilities or security options.
5. The container should not mount directories from the host into the container: only docker volumes should be used.
6. The container must be usable by more than 90% of the users (e.g. not too high system requirements and such)
7. No additional setup should be needed after adding the container - it should work completely out of the box.
8. If the container requires being exposed, only subfolders are supported. So the container should not require its own (sub-)domain and must be able to run in a subfolder.
### How to trust user-defined Certification Authorities (CA)?
For some applications it might be necessary to establish a secure connection to another host/server which is using a certificate issued by a Certification Authority that is not trusted out of the box. An example could be configuring LDAPS against a domain controller (Active Directory or Samba-based) of an organization.

View File

@@ -21,5 +21,6 @@ See https://github.com/nextcloud/all-in-one#how-to-trust-user-defined-certificat
- [ ] When starting the mastercontainer with `--env NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS=inotify`, the resulting Nextcloud container should have the inotify extension installed and not the imagick extension.
- [ ] When starting the mastercontainer with `--env NEXTCLOUD_ENABLE_DRI_DEVICE=true`, the resulting Nextcloud container should have the /dev/dri device mounted into the container. (Only works if a `/dev/dri` device is present on the host)
- [ ] When starting the mastercontainer with `--env NEXTCLOUD_KEEP_DISABLED_APPS=true` it should keep apps in Nextcloud that are disabled in the AIO interface. For example if Collabora is disabled in the AIO interface and you install the richdocuments app in Nextcloud, a restart should not uninstall the richdocuments app in Nextcloud anymore.
- [ ] When starting the mastercontainer with `--env AIO_COMMUNITY_CONTAINERS="fail2ban"`, it should add the fail2ban container to the container stack and show it in the AIO interface as well as start it, etc.
You can now continue with [070-timezone-change.md](./070-timezone-change.md)