Compare commits

...

97 Commits

Author SHA1 Message Date
szaimen
5ece00e496 fix shouldDomainValidationBeSkipped
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-07-04 15:32:39 +02:00
szaimen
db620e035a increase to 1.5.0
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-07-04 14:36:54 +02:00
Simon L
f99d4f19c6 Merge pull request #865 from nextcloud/enh/761/collabora-dictionaries
allow to set collabora dictionaries
2022-07-04 14:35:21 +02:00
szaimen
97f053228c allow to set collabora dictionaries
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-07-04 14:32:48 +02:00
Simon L
a26d36c084 Merge pull request #793 from nextcloud/enh/734/talk-port
allow to adjust the talk port
2022-07-04 14:21:35 +02:00
szaimen
7ae718300f allow to adjust the talk port
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-07-04 14:17:33 +02:00
Simon L
8b7aa71d15 Merge pull request #869 from nextcloud/dependabot/docker/Containers/collabora/collabora/code-22.05.3.1.1
Bump collabora/code from 21.11.5.3.1 to 22.05.3.1.1 in /Containers/collabora
2022-07-04 14:15:45 +02:00
Simon L
8f5966dae9 Merge pull request #873 from nextcloud/enh/858/skip-domain-verification
allow to skip the domain validation and add documentation for cloud…
2022-07-04 14:15:28 +02:00
szaimen
263b5605e1 onlyoffice now needs allow_local_remote_servers, too
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-07-04 13:35:23 +02:00
szaimen
7f245bd048 allow to skip the domain verification and add documentation for cloudflare argo tunnel
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-30 17:00:00 +02:00
Simon L
758a721d84 Merge pull request #867 from nextcloud/aio-dependency-update
Dependency updates
2022-06-30 16:56:47 +02:00
szaimen
49d94b388e remove the onlyoffice secret from latest-arm64.yml
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-30 16:55:35 +02:00
Simon L
973ea5ff4f Merge pull request #875 from nextcloud/enh/noid/internal-ip-address-documentation
add documentation on how to fix the internal or reserved ip-address e…
2022-06-30 16:51:17 +02:00
szaimen
0bd376743f add documentation on how to fix the internal or reserved ip-address error
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-30 16:41:12 +02:00
Simon L
86f15d0911 Merge pull request #874 from nextcloud/fix/872/ipv6-domain-validatioin
domain validation should be compatible with ipv6 only as well
2022-06-30 16:11:02 +02:00
szaimen
00c6eeda44 domain validation should be compatible with ipv6 only
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-30 14:47:37 +02:00
dependabot[bot]
9d8990348b Bump collabora/code in /Containers/collabora
Bumps collabora/code from 21.11.5.3.1 to 22.05.3.1.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-29 12:33:52 +00:00
szaimen
036bba94c0 dependency updates
Signed-off-by: GitHub <noreply@github.com>
2022-06-28 12:19:27 +00:00
Simon L
dfb672811f Merge pull request #866 from nextcloud/automated/noid/psalm-baseline-update-1656391562
[Automated] Update psalm-baseline.xml
2022-06-28 07:58:02 +02:00
nextcloud-command
db89be5e9c Update psalm baseline
Signed-off-by: GitHub <noreply@github.com>
2022-06-28 04:46:02 +00:00
szaimen
847e5a887c fix onlyoffice secret
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-27 17:29:37 +02:00
Simon L
dc87c7d3f4 Merge pull request #794 from nextcloud/enh/748/onlyoffice-collabora-secret
add a secret to onlyoffice
2022-06-27 16:47:57 +02:00
Simon L
bea77e4642 Merge pull request #859 from nextcloud/enh/noid/setdomain-logging
improve logging of setdomain and allow private ip-addresses again when running behind a reverse proxy
2022-06-27 16:47:30 +02:00
Simon L
e6211d93fe Merge pull request #864 from nextcloud/enh/862/change-backup-path
allow to change the backup path again if the initial backup was not s…
2022-06-27 16:46:45 +02:00
szaimen
2cf98773cc add a secret to onlyoffice and collabora
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-27 14:11:29 +02:00
Simon L
85caab7507 Merge pull request #853 from nextcloud/enh/noid/requirements
add a list of requirements for integrating new containers
2022-06-27 12:56:37 +02:00
Simon L
13beca4072 Merge pull request #852 from nextcloud/enh/noid/netdata
document how to install Netdata
2022-06-27 12:55:57 +02:00
Simon L
988c37f60b Merge pull request #851 from nextcloud/enh/noid/fail2ban
add docs on how to set up fail2ban
2022-06-27 12:54:57 +02:00
Simon L
d462813e4f Merge pull request #835 from nextcloud/enh/834/push-proxy
apache documentation - make the push proxy work
2022-06-27 12:54:17 +02:00
Simon L
4a651fc44e Merge pull request #850 from nextcloud/enh/noid/add-bruteforce-and-database-docs
add some bruteforce documentation and some documentation on phpmyadmi…
2022-06-27 12:53:39 +02:00
Simon L
9d971902d7 Merge pull request #856 from nextcloud/dependabot/docker/Containers/borgbackup/debian-bullseye-20220622-slim
Bump debian from bullseye-20220527-slim to bullseye-20220622-slim in /Containers/borgbackup
2022-06-27 12:52:26 +02:00
Simon L
fb8c2a524d Merge pull request #857 from nextcloud/dependabot/docker/Containers/apache/debian-bullseye-20220622-slim
Bump debian from bullseye-20220527-slim to bullseye-20220622-slim in /Containers/apache
2022-06-27 12:52:13 +02:00
szaimen
95a3323993 allow to change the backup path again if the initial backup was not successful
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-27 12:49:19 +02:00
szaimen
b454660599 allow to continue with local ip-address when behind reverse proxy
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-27 12:21:20 +02:00
szaimen
21422f2e1c the timezone needs to be UTC for the mastercontainer
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-27 12:12:07 +02:00
szaimen
3beee36872 apache documentation - make the push proxy work
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-25 19:38:56 +02:00
szaimen
fc58ec2ac2 make visible that automatic updates is already implemented
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-24 21:22:09 +02:00
szaimen
036c1707d6 add a list of requirements for integratingnew containers
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-24 20:27:13 +02:00
szaimen
9b68d3c157 improve logging of setdomain
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-24 01:00:05 +02:00
dependabot[bot]
fc49283a5e Bump debian in /Containers/borgbackup
Bumps debian from bullseye-20220527-slim to bullseye-20220622-slim.

---
updated-dependencies:
- dependency-name: debian
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-23 14:49:59 +00:00
dependabot[bot]
cf0b8bdb2a Bump debian in /Containers/apache
Bumps debian from bullseye-20220527-slim to bullseye-20220622-slim.

---
updated-dependencies:
- dependency-name: debian
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-23 14:49:59 +00:00
Simon L
62e4ea3238 Merge pull request #855 from pmocek/patch-1
docs(manual-install): Fix typo in env var
2022-06-23 14:17:18 +02:00
Phil Mocek
8ff0536705 docs: Fix typo
In manual-install/readme.md, environmental variable NEXTCLOUD_DATADIR was misspelled NEXTLOUD_DATADIR.
2022-06-22 20:00:24 -07:00
szaimen
c88696809a port 80 should not be exposed since it can be changed
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-23 03:12:28 +02:00
szaimen
96888c2ffa document how to install Netdata
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-22 16:48:38 +02:00
szaimen
693df4d4e2 add docs on how to set up fail2ban
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-22 16:21:55 +02:00
szaimen
ffcace3688 add some bruteforce documentation and some documentation on phpmyadmin, adminer and pgadmin
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-22 15:56:10 +02:00
szaimen
4ae556422a enable psalm-security workflow again
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-22 15:05:07 +02:00
szaimen
3de963c238 increase to v1.4.2
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-22 15:03:23 +02:00
Simon L
effeb44690 Merge pull request #795 from nextcloud/enh/723/external-backup-locking
allow to lock the backup archive for external scripts
2022-06-22 15:02:32 +02:00
szaimen
4dc2400a87 disable psalm-security analysis as it fails currently
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-22 14:43:53 +02:00
szaimen
b5d5b1f4bc allow to lock the backup archive for external scripts
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-22 14:33:35 +02:00
Simon L
14dbc49863 Merge pull request #824 from nextcloud/dependabot/docker/Containers/mastercontainer/docker-20.10.17-dind-alpine3.16
Bump docker from 20.10.16-dind-alpine3.16 to 20.10.17-dind-alpine3.16 in /Containers/mastercontainer
2022-06-22 14:28:15 +02:00
Simon L
dc4e251b05 Merge pull request #830 from nextcloud/enh/828/trusted-proxies
fix trusted_proxies for caddy in case of a reverse proxy situation
2022-06-22 14:27:57 +02:00
dependabot[bot]
06779d09ba Bump docker in /Containers/mastercontainer
Bumps docker from 20.10.16-dind-alpine3.16 to 20.10.17-dind-alpine3.16.

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-22 12:26:25 +00:00
Simon L
686128c9d4 Merge pull request #832 from nextcloud/enh/791/interned-strings-buffer
set the interned strings buffer to 32
2022-06-22 14:25:58 +02:00
Simon L
ae056c8c06 Merge pull request #831 from nextcloud/dependabot/docker/Containers/collabora/collabora/code-21.11.5.3.1
Bump collabora/code from 21.11.5.1.1 to 21.11.5.3.1 in /Containers/collabora
2022-06-22 14:25:30 +02:00
Simon L
538f5e5bd3 Merge pull request #843 from nextcloud/aio-dependency-update
Dependency updates
2022-06-22 14:22:30 +02:00
Simon L
ad751595a8 Merge pull request #846 from nextcloud/nextcloud-container-update
Nextcloud update
2022-06-22 14:21:30 +02:00
szaimen
9b1e734efc nextcloud-update automated change
Signed-off-by: GitHub <noreply@github.com>
2022-06-21 12:51:43 +00:00
szaimen
44f6cc0d16 dependency updates
Signed-off-by: GitHub <noreply@github.com>
2022-06-21 12:18:55 +00:00
szaimen
aed1cd9700 set the interned strings buffer to 32
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-17 13:17:43 +02:00
Simon L
56948a8140 Merge pull request #829 from nextcloud/enh/823/docker-rootless-docs
add a note on docker-rootless regarding permissions outside the conta…
2022-06-16 09:23:04 +02:00
szaimen
66484803c3 add a note on docker-rootless regarding permissions outside the containers
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-15 22:33:36 +02:00
szaimen
f0ddf95a3e fix trusted_proxies for caddy in case of a reverse proxy situation
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-15 19:17:57 +02:00
dependabot[bot]
6fe4b99306 Bump collabora/code in /Containers/collabora
Bumps collabora/code from 21.11.5.1.1 to 21.11.5.3.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-15 12:36:30 +00:00
szaimen
145d83c000 the dind tag was not found
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-13 12:11:47 +02:00
Simon L
9f6f638d1b Merge pull request #821 from nextcloud/dependabot/docker/Containers/redis/redis-6.2.7-alpine
Bump redis from 6.2.6-alpine to 6.2.7-alpine in /Containers/redis
2022-06-13 12:03:06 +02:00
dependabot[bot]
5d0f344839 Bump redis from 6.2.6-alpine to 6.2.7-alpine in /Containers/redis
Bumps redis from 6.2.6-alpine to 6.2.7-alpine.

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-13 10:02:36 +00:00
szaimen
334c879a5e update redis dependabot settings
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-13 12:02:01 +02:00
szaimen
61e1939de4 increase to 1.4.1
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-13 11:59:30 +02:00
Simon L
c2c4698119 Merge pull request #792 from nextcloud/enh/745/improve-ip-check
improve the ip-address check for setdomain
2022-06-13 11:57:03 +02:00
Simon L
69382b638a Merge pull request #814 from nextcloud/enh/813/support-no-give-channel
allow to use it even if no channel was provided
2022-06-13 11:47:24 +02:00
szaimen
d5afe84c78 fix false psalm report
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-13 11:45:06 +02:00
Simon L
bfab40f0d8 Merge pull request #791 from nextcloud/enh/772/opcache-buffer
increase opcache buffer to 64
2022-06-13 11:41:48 +02:00
szaimen
565f77759f increase opcache buffer to 64
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-13 11:41:14 +02:00
Simon L
bdc07b940f Merge pull request #806 from nextcloud/aio-dependency-update
Dependency updates
2022-06-13 11:39:02 +02:00
Simon L
9f6821c703 Merge pull request #811 from nextcloud/dependabot/docker/Containers/mastercontainer/php-8.0.20-apache-bullseye
Bump php from 8.0.19-apache-bullseye to 8.0.20-apache-bullseye in /Containers/mastercontainer
2022-06-13 11:36:59 +02:00
Simon L
ca0371f1f1 Merge pull request #812 from nextcloud/dependabot/docker/Containers/nextcloud/php-8.0.20-fpm-alpine3.15
Bump php from 8.0.19-fpm-alpine3.15 to 8.0.20-fpm-alpine3.15 in /Containers/nextcloud
2022-06-13 11:36:43 +02:00
Simon L
ad9eadb7f9 Merge pull request #648 from nextcloud/enh/558/docker-rootless
add documentation for docker rootless
2022-06-13 11:31:58 +02:00
szaimen
80d3d71ae9 remove alpine3.15 tag from certain containers
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-12 22:59:04 +02:00
szaimen
45bb084ae5 allow to use it even if no channel was provided
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-11 14:48:05 +02:00
dependabot[bot]
620ef5ad7f Bump php in /Containers/nextcloud
Bumps php from 8.0.19-fpm-alpine3.15 to 8.0.20-fpm-alpine3.15.

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-10 12:29:37 +00:00
dependabot[bot]
a1a9db3404 Bump php in /Containers/mastercontainer
Bumps php from 8.0.19-apache-bullseye to 8.0.20-apache-bullseye.

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-10 12:29:35 +00:00
szaimen
6590f1d12e dependency updates
Signed-off-by: GitHub <noreply@github.com>
2022-06-10 12:17:48 +00:00
szaimen
bad431984e improve wording
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-10 01:08:11 +02:00
Simon L
f5d942f4c9 Merge pull request #679 from nextcloud/enh/676/apache
add apache to reverse proxy documentation
2022-06-08 10:46:33 +02:00
szaimen
a80f56bb17 make clear that this is for cmd
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-08 01:13:33 +02:00
szaimen
e5fa3e683b remove HSTS
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-08 00:40:57 +02:00
szaimen
8a43baf837 address review
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-08 00:40:06 +02:00
Simon L
b575bf4028 Merge pull request #799 from nextcloud/dependabot/docker/Containers/talk/ubuntu-focal-20220531
Bump ubuntu from focal-20220426 to focal-20220531 in /Containers/talk
2022-06-07 19:22:57 +02:00
dependabot[bot]
ace4410e78 Bump ubuntu from focal-20220426 to focal-20220531 in /Containers/talk
Bumps ubuntu from focal-20220426 to focal-20220531.

---
updated-dependencies:
- dependency-name: ubuntu
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-07 12:38:34 +00:00
szaimen
f3bd9eba66 improve the ip-address check for setdomain
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-07 00:15:02 +02:00
szaimen
a1a85dde8d address review
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-06 22:54:07 +02:00
szaimen
f73d1e39b4 add documentation for docker rootless
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-06 22:54:05 +02:00
szaimen
3f079bd0f3 fix localhost
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-06 22:39:45 +02:00
szaimen
cf0a5c9cbc add apache to reverse proxy documentation
Signed-off-by: szaimen <szaimen@e.mail.de>
2022-06-06 22:39:44 +02:00
32 changed files with 445 additions and 110 deletions

View File

@@ -92,6 +92,9 @@ updates:
schedule:
interval: "daily"
time: "12:00"
ignore:
- dependency-name: "redis"
update-types: ["version-update:semver-major"]
open-pull-requests-limit: 10
labels:
- 3. to review

View File

@@ -11,24 +11,34 @@
# Notify Push
route /push/* {
uri strip_prefix /push
reverse_proxy {$NEXTCLOUD_HOST}:7867
reverse_proxy {$NEXTCLOUD_HOST}:7867 {
# trusted_proxies placeholder
}
}
# Talk
route /standalone-signaling/* {
uri strip_prefix /standalone-signaling
reverse_proxy {$TALK_HOST}:8081
reverse_proxy {$TALK_HOST}:8081 {
# trusted_proxies placeholder
}
}
# Collabora
route /browser/* {
reverse_proxy {$COLLABORA_HOST}:9980
reverse_proxy {$COLLABORA_HOST}:9980 {
# trusted_proxies placeholder
}
}
route /hosting/* {
reverse_proxy {$COLLABORA_HOST}:9980
reverse_proxy {$COLLABORA_HOST}:9980 {
# trusted_proxies placeholder
}
}
route /cool/* {
reverse_proxy {$COLLABORA_HOST}:9980
reverse_proxy {$COLLABORA_HOST}:9980 {
# trusted_proxies placeholder
}
}
# Onlyoffice
@@ -37,6 +47,7 @@
reverse_proxy {$ONLYOFFICE_HOST}:80 {
header_up X-Forwarded-Host {http.request.host}/onlyoffice
header_up X-Forwarded-Proto https
# trusted_proxies placeholder
}
}
@@ -45,7 +56,10 @@
rewrite /.well-known/carddav /remote.php/dav
rewrite /.well-known/caldav /remote.php/dav
header Strict-Transport-Security max-age=31536000;
reverse_proxy localhost:8000
reverse_proxy localhost:8000 {
# See https://github.com/nextcloud/all-in-one/issues/828
# trusted_proxies placeholder
}
}
# TLS options

View File

@@ -1,9 +1,7 @@
# Caddy is a requirement
FROM caddy:2.5.1-alpine as caddy
FROM debian:bullseye-20220527-slim
EXPOSE 80
FROM debian:bullseye-20220622-slim
RUN mkdir -p /mnt/data; \
chown www-data:www-data /mnt/data;

View File

@@ -21,17 +21,30 @@ if [ -z "$APACHE_PORT" ]; then
export APACHE_PORT="443"
fi
# Change the Caddyfile
# Change variables in case of reverse proxies
if [ "$APACHE_PORT" != '443' ]; then
export PROTOCOL="http"
export NC_DOMAIN=""
CADDYFILE="$(sed 's|auto_https.*|auto_https off|' /Caddyfile)"
else
export PROTOCOL="https"
fi
# Change the auto_https in case of reverse proxies
if [ "$APACHE_PORT" != '443' ]; then
CADDYFILE="$(sed 's|auto_https.*|auto_https off|' /Caddyfile)"
else
CADDYFILE="$(sed 's|auto_https.*|auto_https disable_redirects|' /Caddyfile)"
fi
echo "$CADDYFILE" > /Caddyfile
# Change the trusted_proxies in case of reverse proxies
if [ "$APACHE_PORT" != '443' ]; then
CADDYFILE="$(sed 's|# trusted_proxies placeholder|trusted_proxies private_ranges|' /Caddyfile)"
else
CADDYFILE="$(sed 's|trusted_proxies private_ranges|# trusted_proxies placeholder|' /Caddyfile)"
fi
echo "$CADDYFILE" > /Caddyfile
# Add caddy path
mkdir -p /mnt/data/caddy/

View File

@@ -1,4 +1,4 @@
FROM debian:bullseye-20220527-slim
FROM debian:bullseye-20220622-slim
RUN set -ex; \
\

View File

@@ -37,6 +37,13 @@ if [ "$BORG_MODE" != backup ] && [ "$BORG_MODE" != test ] && ! [ -f "$BORG_BACKU
exit 1
fi
# Do not continue if this file exists (needed for simple external blocking)
if [ -f "$BORG_BACKUP_DIRECTORY/aio-lockfile" ]; then
echo "Not continuing because aio-lockfile exists - it seems like a script is externally running which is locking the backup archive."
echo "If this should not be the case, you can fix this by deleting the 'aio-lockfile' file from the backup archive directory."
exit 1
fi
# Create lockfile
if [ "$BORG_MODE" = backup ] || [ "$BORG_MODE" = restore ]; then
touch "/nextcloud_aio_volumes/nextcloud_aio_database_dump/backup-is-running"

View File

@@ -1,5 +1,5 @@
# From a file located probably somewhere here: https://github.com/CollaboraOnline/online/tree/master/docker
FROM collabora/code:21.11.5.1.1
FROM collabora/code:22.05.3.1.1
USER root

View File

@@ -1,11 +1,11 @@
# Docker CLI is a requirement
FROM docker:20.10.16-dind-alpine3.15 as dind
FROM docker:20.10.17-dind-alpine3.16 as dind
# Caddy is a requirement
FROM caddy:2.5.1-alpine as caddy
# From https://github.com/docker-library/php/blob/master/8.0/bullseye/apache/Dockerfile
FROM php:8.0.19-apache-bullseye
FROM php:8.0.20-apache-bullseye
EXPOSE 80
EXPOSE 8080

View File

@@ -114,6 +114,22 @@ It is set to '$APACHE_PORT'."
exit 1
fi
fi
if [ -n "$TALK_PORT" ]; then
if ! check_if_number "$TALK_PORT"; then
echo "You provided an Talk port but did not only use numbers.
It is set to '$TALK_PORT'."
exit 1
elif ! [ "$TALK_PORT" -le 65535 ] || ! [ "$TALK_PORT" -ge 1 ]; then
echo "The provided Talk port is invalid. It must be between 1 and 65535"
exit 1
fi
fi
if [ -n "$APACHE_PORT" ] && [ -n "$TALK_PORT" ]; then
if [ "$APACHE_PORT" = "$TALK_PORT" ]; then
echo "APACHE_PORT and TALK_PORT are not allowed to be equal."
exit 1
fi
fi
if [ -n "$DOCKER_SOCKET_PATH" ]; then
if ! echo "$DOCKER_SOCKET_PATH" | grep -q "^/" || echo "$DOCKER_SOCKET_PATH" | grep -q "/$"; then
echo "You've set DOCKER_SOCKET_PATH but not to an allowed value.
@@ -184,4 +200,7 @@ E.g. https://internal.ip.of.this.server:8080
If your server has port 80 and 8443 open and you point a domain to your server, you can get a valid certificate automatially by opening the Nextcloud AIO Interface via:
https://your-domain-that-points-to-this-server.tld:8443"
# Set the timezone to UTC
export TZ=UTC
exec "$@"

View File

@@ -1,5 +1,5 @@
# From https://github.com/nextcloud/docker/blob/master/23/fpm-alpine/Dockerfile
FROM php:8.0.19-fpm-alpine3.15
FROM php:8.0.20-fpm-alpine3.15
# Custom: change id of www-data user as it needs to be the same like on old installations
RUN set -ex; \
@@ -85,7 +85,7 @@ RUN set -ex; \
# set recommended PHP.ini settings
# see https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/server_tuning.html#enable-php-opcache
RUN { \
echo 'opcache.interned_strings_buffer=16'; \
echo 'opcache.interned_strings_buffer=32'; \
echo 'opcache.save_comments=1'; \
echo 'opcache.revalidate_freq=60'; \
} > /usr/local/etc/php/conf.d/opcache-recommended.ini; \
@@ -105,7 +105,7 @@ RUN { \
VOLUME /var/www/html
ENV NEXTCLOUD_VERSION 23.0.5
ENV NEXTCLOUD_VERSION 23.0.6
RUN set -ex; \
apk add --no-cache --virtual .fetch-deps \

View File

@@ -307,6 +307,7 @@ else
php /var/www/html/occ app:update notify_push
fi
php /var/www/html/occ config:system:set trusted_proxies 0 --value="127.0.0.1"
php /var/www/html/occ config:system:set trusted_proxies 1 --value="::1"
php /var/www/html/occ config:app:set notify_push base_endpoint --value="https://$NC_DOMAIN/push"
# Collabora
@@ -323,7 +324,6 @@ if [ "$COLLABORA_ENABLED" = 'yes' ]; then
php /var/www/html/occ config:system:set allow_local_remote_servers --type=bool --value=true
else
if [ -d "/var/www/html/custom_apps/richdocuments" ]; then
php /var/www/html/occ config:system:delete allow_local_remote_servers
php /var/www/html/occ app:remove richdocuments
fi
fi
@@ -341,7 +341,10 @@ if [ "$ONLYOFFICE_ENABLED" = 'yes' ]; then
else
php /var/www/html/occ app:update onlyoffice
fi
php /var/www/html/occ config:system:set onlyoffice jwt_secret --value="$ONLYOFFICE_SECRET"
php /var/www/html/occ config:system:set onlyoffice jwt_header --value="AuthorizationJwt"
php /var/www/html/occ config:app:set onlyoffice DocumentServerUrl --value="https://$NC_DOMAIN/onlyoffice"
php /var/www/html/occ config:system:set allow_local_remote_servers --type=bool --value=true
else
if [ -d "/var/www/html/custom_apps/onlyoffice" ]; then
php /var/www/html/occ app:remove onlyoffice
@@ -357,8 +360,8 @@ if [ "$TALK_ENABLED" = 'yes' ]; then
else
php /var/www/html/occ app:update spreed
fi
STUN_SERVERS="[\"$NC_DOMAIN:3478\"]"
TURN_SERVERS="[{\"server\":\"$NC_DOMAIN:3478\",\"secret\":\"$TURN_SECRET\",\"protocols\":\"udp,tcp\"}]"
STUN_SERVERS="[\"$NC_DOMAIN:$TALK_PORT\"]"
TURN_SERVERS="[{\"server\":\"$NC_DOMAIN:$TALK_PORT\",\"secret\":\"$TURN_SECRET\",\"protocols\":\"udp,tcp\"}]"
SIGNALING_SERVERS="{\"servers\":[{\"server\":\"https://$NC_DOMAIN/standalone-signaling/\",\"verify\":true}],\"secret\":\"$SIGNALING_SECRET\"}"
php /var/www/html/occ config:app:set spreed stun_servers --value="$STUN_SERVERS" --output json
php /var/www/html/occ config:app:set spreed turn_servers --value="$TURN_SERVERS" --output json

View File

@@ -1,5 +1,5 @@
# From https://github.com/docker-library/redis/blob/master/6.2/alpine/Dockerfile
FROM redis:6.2.6-alpine3.15
FROM redis:6.2.7-alpine
RUN apk add --update --no-cache openssl bash

View File

@@ -1,6 +1,4 @@
FROM ubuntu:focal-20220426
EXPOSE 3478
FROM ubuntu:focal-20220531
RUN set -ex; \
\

View File

@@ -17,7 +17,7 @@ fi
# Turn
cat << TURN_CONF > "/etc/turnserver.conf"
listening-port=3478
listening-port=$TALK_PORT
fingerprint
lt-cred-mech
use-auth-secret
@@ -36,8 +36,8 @@ set -x
sed -i "s|#turn_rest_api_key.*|turn_rest_api_key = \"$JANUS_API_KEY\"|" /etc/janus/janus.jcfg
sed -i "s|#full_trickle.*|full_trickle = true|g" /etc/janus/janus.jcfg
sed -i 's|#stun_server.*|stun_server = "127.0.0.1"|g' /etc/janus/janus.jcfg
sed -i "s|#stun_port.*|stun_port = 3478|g" /etc/janus/janus.jcfg
sed -i "s|#turn_port.*|turn_port = 3478|g" /etc/janus/janus.jcfg
sed -i "s|#stun_port.*|stun_port = $TALK_PORT|g" /etc/janus/janus.jcfg
sed -i "s|#turn_port.*|turn_port = $TALK_PORT|g" /etc/janus/janus.jcfg
sed -i 's|#turn_server.*|turn_server = "127.0.0.1"|g'/etc/janus/janus.jcfg
sed -i 's|#turn_type .*|turn_type = "udp"|g' /etc/janus/janus.jcfg
sed -i 's|#ice_ignore_list .*|ice_ignore_list = "udp"|g' /etc/janus/janus.jcfg
@@ -80,7 +80,7 @@ url = ws://127.0.0.1:8188
[turn]
apikey = ${JANUS_API_KEY}
secret = ${TURN_SECRET}
servers = turn:$NC_DOMAIN:3478?transport=tcp,turn:$NC_DOMAIN:3478?transport=udp
servers = turn:$NC_DOMAIN:$TALK_PORT?transport=tcp,turn:$NC_DOMAIN:$TALK_PORT?transport=udp
SIGNALING_CONF
exec "$@"

View File

@@ -31,5 +31,5 @@ Go to https://github.com/nextcloud-releases/all-in-one/actions/workflows/repo-sy
1. Verify that no job is running here: https://github.com/nextcloud-releases/all-in-one/actions/workflows/promote-to-beta.yml
2. Go to https://github.com/nextcloud-releases/all-in-one/actions/workflows/promote-to-latest.yml, click on `Run workflow`.
## Where to find the VPS builds?
## Where to find the VPS and other builds?
This is documented here: https://github.com/nextcloud-releases/all-in-one/tree/main/.build

View File

@@ -11,13 +11,14 @@ services:
container_name: nextcloud-aio-mastercontainer # This line is not allowed to be changed
volumes:
- nextcloud_aio_mastercontainer:/mnt/docker-aio-config # This line is not allowed to be changed
- /var/run/docker.sock:/var/run/docker.sock:ro
- /var/run/docker.sock:/var/run/docker.sock:ro # May be changed on macOS, Windows or docker rootless. See the applicable documentation
ports:
- 80:80 # Can be removed when running behind a reverse proxy. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
- 8080:8080
- 8443:8443 # Can be removed when running behind a reverse proxy. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
# environment: # Is needed when using any of the options below
# - APACHE_PORT=11000 # Is needed when running behind a reverse proxy. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
# - TALK_PORT=3478 # This allows to adjust the port that the talk container is using.
# - NEXTCLOUD_DATADIR=/mnt/ncdata # Allows to set the host directory for Nextcloud's datadir. See https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir
# - NEXTCLOUD_MOUNT=/mnt/ # Allows the Nextcloud container to access the chosen directory on the host. See https://github.com/nextcloud/all-in-one#how-to-allow-the-nextcloud-container-to-access-directories-on-the-host
# - DOCKER_SOCKET_PATH=/var/run/docker.sock # Needs to be specified if the docker socket on the host is not located in the default '/var/run/docker.sock'. Otherwise mastercontainer updates will fail.

12
docker-rootless.md Normal file
View File

@@ -0,0 +1,12 @@
# Docker rootless
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**. 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. Do not forget to set the mentioned environmental variables and in best case add them to your `~/.bashrc` file as shown!
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 `-e DOCKER_SOCKET_PATH=$XDG_RUNTIME_DIR/docker.sock` to the initial container startup (which is needed for mastercontainer updates to work correctly).
1. Now everything should work like without docker rootless. You can consider using docker-compose for this or running it behind a reverse proxy. Basically the only thing that needs to be adjusted always in the startup command or docker-compose file (after installing docker rootles) are things that are mentioned in point 3.
**Please note:** All files outside the containers get created, written to and accessed as the user that is running the docker daemon or a subuid of it. So for the built-in backup to work you need to allow this user to write to the target directory. For changing Nextcloud's datadir, you need to adjust the permissions of the chosen folders to be accessible/writeable by the userid `100032:100032` (if running `grep ^$(whoami): /etc/subuid` as the user that is running the docker daemon returns 100000 as first value). This logically also applies to the NEXTCLOUD_MOUNT option.

View File

@@ -36,6 +36,6 @@ Since the AIO containers may change in the future, it is highly recommended to s
## FAQ
### Backup and restore?
If you leave `NEXTLOUD_DATADIR` in your conf file at the default value of `nextcloud_aio_nextcloud_data` and don't modify the yaml file, all data will be stored inside docker volumes which are on Linux by default located here: `/var/lib/docker/volumes`. Simply backing up this location should be a valid backup solution. Then you can also easily restore in case something bad happens. However if you change `NEXTLOUD_DATADIR` to a path like `/mnt/ncdata`, you obviously need to back up this location, too because the Nextcloud data will be stored there. The same applies to any change to the yaml file.
If you leave `NEXTCLOUD_DATADIR` in your conf file at the default value of `nextcloud_aio_nextcloud_data` and don't modify the yaml file, all data will be stored inside docker volumes which are on Linux by default located here: `/var/lib/docker/volumes`. Simply backing up this location should be a valid backup solution. Then you can also easily restore in case something bad happens. However if you change `NEXTCLOUD_DATADIR` to a path like `/mnt/ncdata`, you obviously need to back up this location, too because the Nextcloud data will be stored there. The same applies to any change to the yaml file.
Obviously you also need to back up the conf file and the yaml file if you modified it.

View File

@@ -59,10 +59,12 @@ done
sed -i 's|_ENABLED=|_ENABLED=no # Setting this to "yes" enables the option in Nextcloud automatically.|' sample.conf
sed -i 's|TALK_ENABLED=no|TALK_ENABLED=yes|' sample.conf
sed -i 's|COLLABORA_ENABLED=no|COLLABORA_ENABLED=yes|' sample.conf
sed -i 's|COLLABORA_DICTIONARIES=|COLLABORA_DICTIONARIES=de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru # You can change this in order to enable other dictionaries for collabora|' sample.conf
sed -i 's|NEXTCLOUD_DATADIR=|NEXTCLOUD_DATADIR=nextcloud_aio_nextcloud_data # You can change this to e.g. "/mnt/ncdata" to map it to a location on your host. It needs to be adjusted before the first startup and never afterwards!|' sample.conf
sed -i 's|NEXTCLOUD_MOUNT=|NEXTCLOUD_MOUNT=/mnt/ # This allows the Nextcloud container to access directories on the host. It must never be equal to the value of NEXTCLOUD_DATADIR!|' sample.conf
sed -i 's|DAILY_BACKUP_RUNNING=|DAILY_BACKUP_RUNNING=no # When setting to yes, it will automatically update all installed Nextcloud apps upon container startup.|' sample.conf
sed -i 's|APACHE_PORT=|APACHE_PORT=443 # Changing this to a different value than 443 will allow you to run it behind a reverse proxy.|' sample.conf
sed -i 's|TALK_PORT=|TALK_PORT=3478 # This allows to adjust the port that the talk container is using.|' sample.conf
sed -i 's|AIO_TOKEN=|AIO_TOKEN=123456 # Has no function but needs to be set!|' sample.conf
sed -i 's|AIO_URL=|AIO_URL=localhost # Has no function but needs to be set!|' sample.conf
sed -i 's|NC_DOMAIN=|NC_DOMAIN=yourdomain.com # TODO! Needs to be changed to the domain that you want to use for Nextcloud.|' sample.conf
@@ -119,5 +121,6 @@ sed -i '/CLAMAV_ENABLED/d' latest-arm64.yml
sed -i '/ nextcloud-aio-onlyoffice:/,/^$/d' latest-arm64.yml
sed -i '/nextcloud[-_]aio[-_]onlyoffice/d' latest-arm64.yml
sed -i '/ONLYOFFICE_ENABLED/d' latest-arm64.yml
sed -i '/ONLYOFFICE_SECRET/d' latest-arm64.yml
rm containers.yml

32
php/composer.lock generated
View File

@@ -8,22 +8,22 @@
"packages": [
{
"name": "guzzlehttp/guzzle",
"version": "7.4.3",
"version": "7.4.5",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "74a8602c6faec9ef74b7a9391ac82c5e65b1cdab"
"reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/74a8602c6faec9ef74b7a9391ac82c5e65b1cdab",
"reference": "74a8602c6faec9ef74b7a9391ac82c5e65b1cdab",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82",
"reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^1.5",
"guzzlehttp/psr7": "^1.8.3 || ^2.1",
"guzzlehttp/psr7": "^1.9 || ^2.4",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
@@ -112,7 +112,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
"source": "https://github.com/guzzle/guzzle/tree/7.4.3"
"source": "https://github.com/guzzle/guzzle/tree/7.4.5"
},
"funding": [
{
@@ -128,7 +128,7 @@
"type": "tidelift"
}
],
"time": "2022-05-25T13:24:33+00:00"
"time": "2022-06-20T22:16:13+00:00"
},
{
"name": "guzzlehttp/promises",
@@ -216,16 +216,16 @@
},
{
"name": "guzzlehttp/psr7",
"version": "2.2.1",
"version": "2.4.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "c94a94f120803a18554c1805ef2e539f8285f9a2"
"reference": "13388f00956b1503577598873fffb5ae994b5737"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/c94a94f120803a18554c1805ef2e539f8285f9a2",
"reference": "c94a94f120803a18554c1805ef2e539f8285f9a2",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737",
"reference": "13388f00956b1503577598873fffb5ae994b5737",
"shasum": ""
},
"require": {
@@ -249,7 +249,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
"dev-master": "2.4-dev"
}
},
"autoload": {
@@ -311,7 +311,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.2.1"
"source": "https://github.com/guzzle/psr7/tree/2.4.0"
},
"funding": [
{
@@ -327,7 +327,7 @@
"type": "tidelift"
}
],
"time": "2022-03-20T21:55:58+00:00"
"time": "2022-06-20T21:43:11+00:00"
},
{
"name": "http-interop/http-factory-guzzle",
@@ -1366,7 +1366,7 @@
},
{
"name": "symfony/deprecation-contracts",
"version": "v3.0.1",
"version": "v3.0.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
@@ -1413,7 +1413,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.1"
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2"
},
"funding": [
{

View File

@@ -128,6 +128,7 @@
"OVERWRITEPROTOCOL=https",
"TURN_SECRET=%TURN_SECRET%",
"SIGNALING_SECRET=%SIGNALING_SECRET%",
"ONLYOFFICE_SECRET=%ONLYOFFICE_SECRET%",
"AIO_URL=%AIO_URL%",
"NEXTCLOUD_MOUNT=%NEXTCLOUD_MOUNT%",
"CLAMAV_ENABLED=%CLAMAV_ENABLED%",
@@ -138,7 +139,8 @@
"TALK_ENABLED=%TALK_ENABLED%",
"ONLYOFFICE_HOST=nextcloud-aio-onlyoffice",
"DAILY_BACKUP_RUNNING=%DAILY_BACKUP_RUNNING%",
"TZ=%TIMEZONE%"
"TZ=%TIMEZONE%",
"TALK_PORT=%TALK_PORT%"
],
"maxShutdownTime": 10,
"restartPolicy": "unless-stopped"
@@ -158,7 +160,8 @@
],
"volumes": [],
"secrets": [
"REDIS_PASSWORD"
"REDIS_PASSWORD",
"ONLYOFFICE_SECRET"
],
"maxShutdownTime": 10,
"restartPolicy": "unless-stopped"
@@ -175,6 +178,7 @@
"environmentVariables": [
"aliasgroup1=https://%NC_DOMAIN%:443",
"extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:logging.level=warning",
"dictionaries=%COLLABORA_DICTIONARIES%",
"TZ=%TIMEZONE%"
],
"volumes": [],
@@ -188,18 +192,19 @@
"displayName": "Talk",
"containerName": "nextcloud/aio-talk",
"ports": [
"3478/tcp",
"3478/udp"
"%TALK_PORT%/tcp",
"%TALK_PORT%/udp"
],
"internalPorts": [
"3478"
"%TALK_PORT%"
],
"environmentVariables": [
"NC_DOMAIN=%NC_DOMAIN%",
"TURN_SECRET=%TURN_SECRET%",
"SIGNALING_SECRET=%SIGNALING_SECRET%",
"JANUS_API_KEY=%JANUS_API_KEY%",
"TZ=%TIMEZONE%"
"TZ=%TIMEZONE%",
"TALK_PORT=%TALK_PORT%"
],
"volumes": [],
"secrets": [
@@ -345,7 +350,10 @@
"80"
],
"environmentVariables": [
"TZ=%TIMEZONE%"
"TZ=%TIMEZONE%",
"JWT_ENABLED=true",
"JWT_HEADER=AuthorizationJwt",
"JWT_SECRET=%ONLYOFFICE_SECRET%"
],
"volumes": [
{
@@ -354,7 +362,9 @@
"writeable": true
}
],
"secrets": [],
"secrets": [
"ONLYOFFICE_SECRET"
],
"maxShutdownTime": 10,
"restartPolicy": "unless-stopped"
}

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<files psalm-version="4.23.0@f1fe6ff483bf325c803df9f510d09a03fd796f88">
<files psalm-version="4.24.0@06dd975cb55d36af80f242561738f16c5f58264f">
<file src="public/index.php">
<MissingClosureParamType occurrences="10">
<code>$args</code>

View File

@@ -97,6 +97,9 @@ $app->get('/containers', function ($request, $response, $args) use ($container)
'daily_backup_time' => $configurationManager->GetDailyBackupTime(),
'is_daily_backup_running' => $configurationManager->isDailyBackupRunning(),
'timezone' => $configurationManager->GetTimezone(),
'skip_domain_validation' => $configurationManager->shouldDomainValidationBeSkipped(),
'talk_port' => $configurationManager->GetTalkPort(),
'collabora_dictionaries' => $configurationManager->GetCollaboraDictionaries(),
]);
})->setName('profile');
$app->get('/login', function ($request, $response, $args) use ($container) {

View File

@@ -71,6 +71,10 @@ class ContainerDefinitionFetcher
foreach ($entry['ports'] as $port) {
if($port === '%APACHE_PORT%/tcp') {
$port = $this->configurationManager->GetApachePort() . '/tcp';
} elseif($port === '%TALK_PORT%/tcp') {
$port = $this->configurationManager->GetTalkPort() . '/tcp';
} elseif($port === '%TALK_PORT%/udp') {
$port = $this->configurationManager->GetTalkPort() . '/udp';
}
$ports->AddPort($port);
}
@@ -79,6 +83,8 @@ class ContainerDefinitionFetcher
foreach ($entry['internalPorts'] as $internalPort) {
if($internalPort === '%APACHE_PORT%') {
$internalPort = $this->configurationManager->GetApachePort();
} elseif($internalPort === '%TALK_PORT%') {
$internalPort = $this->configurationManager->GetTalkPort();
}
$internalPorts->AddInternalPort($internalPort);
}

View File

@@ -87,6 +87,15 @@ class ConfigurationController
}
}
if (isset($request->getParsedBody()['delete_collabora_dictionaries'])) {
$this->configurationManager->DeleteCollaboraDictionaries();
}
if (isset($request->getParsedBody()['collabora_dictionaries'])) {
$collaboraDictionaries = $request->getParsedBody()['collabora_dictionaries'] ?? '';
$this->configurationManager->SetCollaboraDictionaries($collaboraDictionaries);
}
return $response->withStatus(201)->withHeader('Location', '/');
} catch (InvalidSettingConfigurationException $ex) {
$response->getBody()->write($ex->getMessage());

View File

@@ -198,44 +198,71 @@ class ConfigurationManager
throw new InvalidSettingConfigurationException("Please enter a domain and not an IP-address!");
}
$dnsRecordIP = gethostbyname($domain);
// Skip domain validation if opted in to do so
if (!$this->shouldDomainValidationBeSkipped()) {
// Validate IP
if(!filter_var($dnsRecordIP, FILTER_VALIDATE_IP)) {
throw new InvalidSettingConfigurationException("DNS config is not set for this domain or the domain is not a valid domain! (It was found to be set to '" . $dnsRecordIP . "')");
}
$dnsRecordIP = gethostbyname($domain);
if ($dnsRecordIP === $domain) {
$dnsRecordIP = '';
}
// Check if port 443 is open
$connection = @fsockopen($domain, 443, $errno, $errstr, 10);
if ($connection) {
fclose($connection);
} else {
throw new InvalidSettingConfigurationException("The server is not reachable on Port 443. You can verify this e.g. with 'https://portchecker.co/' by entering your domain there as ip-address and port 443 as port.");
}
if (empty($dnsRecordIP)) {
$record = dns_get_record($domain, DNS_AAAA);
if (!empty($record)) {
$dnsRecordIP = $record[0]['ipv6'];
}
}
// Get Instance ID
$instanceID = $this->GetSecret('INSTANCE_ID');
// Validate IP
if (!filter_var($dnsRecordIP, FILTER_VALIDATE_IP)) {
throw new InvalidSettingConfigurationException("DNS config is not set for this domain or the domain is not a valid domain! (It was found to be set to '" . $dnsRecordIP . "')");
}
// set protocol
$port = $this->GetApachePort();
if ($port !== '443') {
$protocol = 'https://';
} else {
$protocol = 'http://';
}
// Get the apache port
$port = $this->GetApachePort();
// Check if response is correct
$ch = curl_init();
$testUrl = $protocol . $domain . ':443';
curl_setopt($ch, CURLOPT_URL, $testUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = (string)curl_exec($ch);
# Get rid of trailing \n
$response = str_replace("\n", "", $response);
if (!filter_var($dnsRecordIP, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
$errorMessage = "It seems like the ip-address is set to an internal or reserved ip-address. This is not supported. (It was found to be set to '" . $dnsRecordIP . "')";
if ($port === '443') {
throw new InvalidSettingConfigurationException($errorMessage);
} else {
error_log($errorMessage);
}
}
if ($response !== $instanceID) {
error_log('The response of the connection attempt to "' . $testUrl . '" was: ' . $response);
throw new InvalidSettingConfigurationException("Domain does not point to this server or the reverse proxy is not configured correctly. See the mastercontainer logs for more details. ('sudo docker logs -f nextcloud-aio-mastercontainer')");
// Check if port 443 is open
$connection = @fsockopen($domain, 443, $errno, $errstr, 10);
if ($connection) {
fclose($connection);
} else {
throw new InvalidSettingConfigurationException("The server is not reachable on Port 443. You can verify this e.g. with 'https://portchecker.co/' by entering your domain there as ip-address and port 443 as port.");
}
// Get Instance ID
$instanceID = $this->GetSecret('INSTANCE_ID');
// set protocol
if ($port !== '443') {
$protocol = 'https://';
} else {
$protocol = 'http://';
}
// Check if response is correct
$ch = curl_init();
$testUrl = $protocol . $domain . ':443';
curl_setopt($ch, CURLOPT_URL, $testUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = (string)curl_exec($ch);
# Get rid of trailing \n
$response = str_replace("\n", "", $response);
if ($response !== $instanceID) {
error_log('The response of the connection attempt to "' . $testUrl . '" was: ' . $response);
error_log('Expected was: ' . $instanceID);
error_log('The error message was: ' . curl_error($ch));
throw new InvalidSettingConfigurationException("Domain does not point to this server or the reverse proxy is not configured correctly. See the mastercontainer logs for more details. ('sudo docker logs -f nextcloud-aio-mastercontainer')");
}
}
// Write domain
@@ -368,6 +395,13 @@ class ConfigurationManager
return $this->GetEnvironmentalVariableOrConfig($envVariableName, $configName, $defaultValue);
}
public function GetTalkPort() : string {
$envVariableName = 'TALK_PORT';
$configName = 'talk_port';
$defaultValue = '3478';
return $this->GetEnvironmentalVariableOrConfig($envVariableName, $configName, $defaultValue);
}
/**
* @throws InvalidSettingConfigurationException
*/
@@ -526,4 +560,43 @@ class ConfigurationManager
$config['timezone'] = '';
$this->WriteConfig($config);
}
public function shouldDomainValidationBeSkipped() : bool {
if (getenv('SKIP_DOMAIN_VALIDATION') !== false) {
return true;
}
return false;
}
public function GetCollaboraDictionaries() : string {
$config = $this->GetConfig();
if(!isset($config['collabora_dictionaries'])) {
$config['collabora_dictionaries'] = '';
}
return $config['collabora_dictionaries'];
}
/**
* @throws InvalidSettingConfigurationException
*/
public function SetCollaboraDictionaries(string $CollaboraDictionaries) : void {
if ($CollaboraDictionaries === "") {
throw new InvalidSettingConfigurationException("The dictionaries must not be empty!");
}
if (!preg_match("#^[a-zA-Z_ ]+$#", $CollaboraDictionaries)) {
throw new InvalidSettingConfigurationException("The entered dictionaries do not seem to be a valid!");
}
$config = $this->GetConfig();
$config['collabora_dictionaries'] = $CollaboraDictionaries;
$this->WriteConfig($config);
}
public function DeleteCollaboraDictionaries() : void {
$config = $this->GetConfig();
$config['collabora_dictionaries'] = '';
$this->WriteConfig($config);
}
}

View File

@@ -250,6 +250,8 @@ class DockerActionManager
$replacements[1] = $this->configurationManager->GetSelectedRestoreTime();
} elseif ($out[1] === 'APACHE_PORT') {
$replacements[1] = $this->configurationManager->GetApachePort();
} elseif ($out[1] === 'TALK_PORT') {
$replacements[1] = $this->configurationManager->GetTalkPort();
} elseif ($out[1] === 'NEXTCLOUD_MOUNT') {
$replacements[1] = $this->configurationManager->GetNextcloudMount();
} elseif ($out[1] === 'BACKUP_RESTORE_PASSWORD') {
@@ -290,6 +292,12 @@ class DockerActionManager
} else {
$replacements[1] = $this->configurationManager->GetTimezone();
}
} elseif ($out[1] === 'COLLABORA_DICTIONARIES') {
if ($this->configurationManager->GetCollaboraDictionaries() === '') {
$replacements[1] = 'de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru';
} else {
$replacements[1] = $this->configurationManager->GetCollaboraDictionaries();
}
} else {
$replacements[1] = $this->configurationManager->GetSecret($out[1]);
}
@@ -431,6 +439,13 @@ class DockerActionManager
$tagArray = explode(':', $output['Config']['Image']);
$tag = $tagArray[1];
apcu_add($cacheKey, $tag);
/**
* @psalm-suppress TypeDoesNotContainNull
*/
if ($tag === null) {
error_log("No tag was found when getting the current channel. You probably did not follow the documentation correctly. Changing the channel to the default 'latest'.");
$tag = 'latest';
}
return $tag;
} catch (\Exception $e) {
error_log('Could not get current channel ' . $e->getMessage());

View File

@@ -16,7 +16,7 @@
</header>
<div class="content">
<h1>Nextcloud AIO v1.4.0</h1>
<h1>Nextcloud AIO v1.5.0</h1>
{% set isAnyRunning = false %}
{% set isAnyRestarting = false %}
@@ -79,14 +79,19 @@
Nextcloud AIO stands for Nextcloud All In One and provides easy deployment and maintenance with most features included in this one Nextcloud instance.<br><br>
<h2>New AIO instance</h2>
Please type in the domain that will be used for Nextcloud if you want to create a new instance:<br><br />
{% if skip_domain_validation == true %}
<b>Please Note:</b> The domain validation is disabled so any domain will be accepted here! So make sure that you do not make a typo here as you will not be able to change it afterwards!<br><br>
{% endif %}
<form method="POST" action="/api/configuration" class="xhr">
<input type="text" name="domain" value="{{ domain }}" placeholder="nextcloud.yourdomain.com"/>
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input class="button" type="submit" value="Submit" />
</form>
Make sure that this server is reachable on Port 443 and you've correctly set up the DNS config for the domain that you enter. <br><br>
If you have a dynamic IP-address, you can use e.g. <a href="https://ddclient.net/">DDclient</a> with a compatible domain provider for DNS updates. <br /><br/>
{% if skip_domain_validation == false %}
Make sure that this server is reachable on Port 443 and you've correctly set up the DNS config for the domain that you enter. <br><br>
If you have a dynamic IP-address, you can use e.g. <a href="https://ddclient.net/">DDclient</a> with a compatible domain provider for DNS updates. <br /><br/>
{% endif %}
<h2>Restore former AIO instance from backup</h2>
You can alternatively restore a former AIO instance from backup.<br><br>
@@ -306,6 +311,15 @@
<h2>Backup and restore</h2>
{% if backup_exit_code > 0 %}
<span class="status error"></span> Last {{ borg_backup_mode }} failed! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup">Logs</a>)<br /><br />
{% if has_backup_run_once == false %}
You may change the backup path again since the initial backup was not successful. After submitting the new value, you need to click on 'Create Backup' for testing the new value.<br /><br />
<form method="POST" action="/api/configuration" class="xhr">
<input type="text" value="{{borg_backup_host_location}}" name="borg_backup_host_location" placeholder="/mnt/backup"/>
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input class="button" type="submit" value="Submit" />
</form>
{% endif %}
{% elseif backup_exit_code == 0 %}
{% if borg_backup_mode == "backup" %}
<span class="status success"></span> Last {{ borg_backup_mode }} successful on {{ last_backup_time }} UTC! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup">Logs</a>)<br /><br />
@@ -318,7 +332,7 @@
{% if is_backup_container_running == false and isApacheStarting == false %}
{% if has_backup_run_once == true %}
<details>
<summary>Click here to reveal all backup options</summary><br />
<summary>Click here to reveal all backup options (it also includes an option for automatic updates)</summary><br />
{% endif %}
<h3>Backup information</h3>
This is your encryption password for backups: <b>{{ borgbackup_password }}</b><br /><br/>
@@ -424,9 +438,9 @@
<input type="checkbox" id="collabora" name="collabora"><label for="collabora">Collabora (Nextcloud Office)</label><br>
{% endif %}
{% if is_talk_enabled == true %}
<input type="checkbox" id="talk" name="talk" checked="checked"><label for="talk">Nextcloud Talk (needs ports 3478/TCP and 3478/UDP open in your firewall/router)</label><br><br>
<input type="checkbox" id="talk" name="talk" checked="checked"><label for="talk">Nextcloud Talk (needs ports {{ talk_port }}/TCP and {{ talk_port }}/UDP open in your firewall/router)</label><br><br>
{% else %}
<input type="checkbox" id="talk" name="talk"><label for="talk">Nextcloud Talk (needs ports 3478/TCP and 3478/UDP open in your firewall/router)</label><br><br>
<input type="checkbox" id="talk" name="talk"><label for="talk">Nextcloud Talk (needs ports {{ talk_port }}/TCP and {{ talk_port }}/UDP open in your firewall/router)</label><br><br>
{% endif %}
{% if is_onlyoffice_enabled == true %}
<input type="checkbox" id="onlyoffice" name="onlyoffice" checked="checked"><label for="onlyoffice">OnlyOffice (only supported on x64)</label><br>
@@ -445,6 +459,29 @@
<script type="text/javascript" src="disable-collabora.js"></script>
{% endif %}
{% if is_collabora_enabled == true and isAnyRunning == false and was_start_button_clicked == true %}
<h3>Collabora dictionaries</h3>
{% if collabora_dictionaries == "" %}
In order to get the correct dictionaries in Collabora, you may configure the dictionaries below:<br><br>
<form method="POST" action="/api/configuration" class="xhr">
<input type="text" name="collabora_dictionaries" placeholder="de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru" />
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input class="button" type="submit" value="Submit" />
</form>
You need to make sure that the dictionaries that you enter are valid. An example is <b>de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru</b>.<br><br>
{% else %}
The dictionaries for Collabora are currently set to <b>{{ collabora_dictionaries }}</b>. You can reset them again by clicking on the button below.<br><br/>
<form method="POST" action="/api/configuration" class="xhr">
<input type="hidden" name="delete_collabora_dictionaries" value="yes"/>
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
<input class="button" type="submit" value="Reset collabora dictionaries" />
</form>
{% endif %}
{% endif %}
<h2>Timezone change</h2>
{% if isAnyRunning == true %}
{% if timezone != "" %}

View File

@@ -78,7 +78,7 @@ Only those (if you access the Mastercontainer Interface internally via port 8080
On macOS, there are two things different in comparison to Linux: instead of using `--volume /var/run/docker.sock:/var/run/docker.sock:ro`, you need to use `--volume /var/run/docker.sock.raw:/var/run/docker.sock:ro` to run it after you installed [Docker Desktop](https://www.docker.com/products/docker-desktop/). You also need to add `-e DOCKER_SOCKET_PATH="/var/run/docker.sock.raw"`to the startup command. Apart from that it should work and behave the same like on Linux.
### How to run it on Windows?
On Windows, the following command should work after you installed [Docker Desktop](https://www.docker.com/products/docker-desktop/):
On Windows, the following command should work in the command prompt after you installed [Docker Desktop](https://www.docker.com/products/docker-desktop/):
```
docker run -it ^
@@ -103,6 +103,9 @@ docker volume create ^
```
(The value `/host_mnt/c/your/backup/path` in this example would be equivalent to `C:\your\backup\path` on the Windows host. So you need to translate the path that you want to use into the correct format.) ⚠️️ **Attention**: Make sure that the path exists on the host before you create the volume! Otherwise everything will bug out!
### How to run it behind a Cloudflare Argo Tunnel?
Although it does not seems like it is the case but from AIO perspective a Cloudflare Argo Tunnel works like a reverse proxy. So please follow the [reverse proxy documentation](./reverse-proxy.md) where is documented how to make it run behind a Cloudflare Argo Tunnel.
### How to resolve firewall problems with Fedora Linux, RHEL OS, CentOS, SUSE Linux and others?
It is known that Linux distros that use [firewalld](https://firewalld.org) as their firewall daemon have problems with docker networks. In case the containers are not able to communicate with each other, you may change your firewalld to use the iptables backend by running:
```
@@ -119,6 +122,9 @@ Simply run the following: `sudo docker exec -it nextcloud-aio-nextcloud php occ
### How to resolve `Security & setup warnings displays the "missing default phone region" after initial install`?
Simply run the following command: `sudo docker exec -it nextcloud-aio-nextcloud php occ config:system:set default_phone_region --value="yourvalue"`. Of course you need to modify `yourvalue` based on your location. Examples are `DE`, `EN` and `GB`. See this list for more codes: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements
### Bruteforce protection FAQ
Nextcloud features a built-in bruteforce protection which may get triggered and will block an ip-address or disable a user. You can unblock an ip-address by running `sudo docker exec -it nextcloud-aio-nextcloud php occ security:bruteforce:reset <ip-address>` and enable a disabled user by running `sudo docker exec -it nextcloud-aio-nextcloud php occ user:enable <name of user>`. See https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.html#security for further information.
### Update policy
This project values stability over new features. That means that when a new major Nextcloud update gets introduced, we will wait at least until the first patch release, e.g. `24.0.1` is out before upgrading to it. Also we will wait with the upgrade until all important apps are compatible with the new major version. Minor or patch releases for Nextcloud and all dependencies as well as all containers will be updated to new versions as soon as possible but we try to give all updates first a good test round before pushing them. That means that it can take around 2 weeks before new updates reach the `latest` channel. If you want to help testing, you can switch to the `beta` channel by following [this documentation](#how-to-switch-the-channel) which will also give you the updates earlier.
@@ -293,11 +299,21 @@ if ! [ -d "$TARGET_DIRECTORY" ]; then
exit 1
fi
if [ -f "$SOURCE_DIRECTORY/aio-lockfile" ]; then
echo "Not continuing because aio-lockfile already exists."
exit 1
fi
touch "$SOURCE_DIRECTORY/aio-lockfile"
if ! rsync --stats --archive --human-readable --delete "$SOURCE_DIRECTORY/" "$TARGET_DIRECTORY"; then
echo "Failed to sync the backup repository to the target directory."
exit 1
fi
rm "$SOURCE_DIRECTORY/aio-lockfile"
rm "$TARGET_DIRECTORY/aio-lockfile"
umount "$DRIVE_MOUNTPOINT"
if docker ps --format "{{.Names}}" | grep "^nextcloud-aio-nextcloud$"; then
@@ -317,8 +333,6 @@ Afterwards apply the correct permissions with `sudo chown root:root /root/backup
1. Add the following new line to the crontab if not already present: `0 20 * * 7 /root/backup-script.sh` which will run the script at 20:00 on Sundays each week.
1. save and close the crontab (when using nano are the shortcuts for this `Ctrl + o` -> `Enter` and close the editor with `Ctrl + x`).
⚠️ **Attention:** Make sure that the execution of the script does not collide with the daily backups from AIO (if configured) since the target backup repository might get into an inconsistent state. (There is no check in place that checks this.)
### How to change the default location of Nextcloud's Datadir?
You can configure the Nextcloud container to use a specific directory on your host as data directory. You can do so by adding the environmental variable `NEXTCLOUD_DATADIR` to the initial startup of the mastercontainer. Allowed values for that variable are strings that start with `/` and are not equal to `/`.
@@ -358,6 +372,12 @@ You can then navigate to the apps management page, activate the external storage
Be aware though that these locations will not be covered by the built-in backup solution!
### What can I do to fix the internal or reserved ip-address error?
If you get an error during the domain validation which states that your ip-address is an internal or reserved ip-address, you can fix this by first making sure that your domain indeed has the correct public ip-address that points to the server and then adding `--add-host yourdomain.com:<public-ip-address>` to the initial docker run command which will allow the domain validation to work correctly. And so that you know: even if the `A` record of your domain should change over time, this is no problem since the mastercontainer will not make any attempt to access the chosen domain after the initial domain validation.
### How to run this with docker rootless?
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)
### Huge docker logs
When your containers run for a few days without a restart, the container logs that you can view from the AIO interface can get really huge. You can limit the loge sizes by enabling logrotate for docker container logs. Feel free to enable this by following those instructions: https://sandro-keil.de/blog/logrotate-for-docker-container/
@@ -376,11 +396,30 @@ You can edit Nextclouds config.php file directly from the host with your favorit
### Custom skeleton directory
If you want to define a custom skeleton directory, you can do so by putting your skeleton files into `/var/lib/docker/volumes/nextcloud_aio_nextcloud_data/_data/skeleton/`, applying the correct permissions with `sudo chown -R 33:0 /var/lib/docker/volumes/nextcloud_aio_nextcloud_data/_data/skeleton` and and `sudo chmod -R 750 /var/lib/docker/volumes/nextcloud_aio_nextcloud_data/_data/*` and setting the skeleton directory option with `sudo docker exec -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`.
### 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/osixia/openldap/. 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. **Pro-tip**: You will probably find this app useful: https://apps.nextcloud.com/apps/ldap_write_support
### 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.
### 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 grep dbpassword /var/lib/docker/volumes/nextcloud_aio_nextcloud/_data/config/config.php` as the password.
### 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.
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.
2. It must be optionally installable. Disabling and enabling the container from the AIO interface must work and must not produce any unexpected side-effects.
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.

View File

@@ -14,7 +14,66 @@ In order to run Nextcloud behind a reverse proxy, you need to specify the port t
**Please note:** Since the Apache container gets spawned by the mastercontainer, there is **NO** way to provide custom docker labels or custom environmental variables for the Apache container. So please do not attempt to do this because you will fail! Only the documented way will work!
### Caddy
### Apache
<details>
<summary>click here to expand</summary>
**Disclaimer:** It might be possible that the config below is not working 100% correctly, yet. See e.g. https://github.com/nextcloud/all-in-one/issues/834. Improvements to it are very welcome!
Add this as a new Apache site config:
(The config below assumse that you are using certbot to get your certificates. You need to create them first in order to make it work.)
```
<VirtualHost *:80>
ServerName <your-nc-domain>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{SERVER_NAME} =<your-nc-domain>
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:443>
ServerName <your-nc-domain>
# Reverse proxy
RewriteEngine On
ProxyPreserveHost On
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/(.*) "ws://localhost:11000/$1" [P,L]
ProxyPass / http://localhost:11000/
ProxyPassReverse / http://localhost:11000/
# Enable h2, h2c and http1.1
Protocols h2 h2c http/1.1
# SSL
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/<your-nc-domain>/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<your-nc-domain>/privkey.pem
# Disable HTTP TRACE method.
TraceEnable off
<Files ".ht*">
Require all denied
</Files>
</VirtualHost>
```
Of course you need to modify `<your-nc-domain>` to the domain on which you want to run Nextcloud. **Please note:** The above configuration will only work if your reverse proxy is running directly on the host that is running the docker daemon. If the reverse proxy is running in a docker container, you can use the `--network host` option (or `network_mode: host` for docker-compose) when starting the reverse proxy container in order to connect the reverse proxy container to the host network. If that is not an option for you, you can alternatively instead of `localhost` use the ip-address that is displayed after running the following command on the host OS: `ip a | grep "scope global" | head -1 | awk '{print $2}' | sed 's|/.*||'` (the command only works on Linux)
To make the config work you can run the following command:
`sudo a2enmod rewrite proxy proxy_http proxy_wstunnel ssl headers http2`
</details>
### Caddy (Recommended)
<details>
@@ -24,12 +83,24 @@ Add this to your Caddyfile:
```
https://<your-nc-domain>:443 {
header Strict-Transport-Security max-age=31536000;
reverse_proxy localhost:11000
}
```
Of course you need to modify `<your-nc-domain>` to the domain on which you want to run Nextcloud. **Please note:** The above configuration will only work if your reverse proxy is running directly on the host that is running the docker daemon. If the reverse proxy is running in a docker container, you can use the `--network host` option (or `network_mode: host` for docker-compose) when starting the reverse proxy container in order to connect the reverse proxy container to the host network. If that is not an option for you, you can alternatively instead of `locahost` use the ip-address that is displayed after running the following command on the host OS: `ip a | grep "scope global" | head -1 | awk '{print $2}' | sed 's|/.*||'` (the command only works on Linux)
Of course you need to modify `<your-nc-domain>` to the domain on which you want to run Nextcloud. **Please note:** The above configuration will only work if your reverse proxy is running directly on the host that is running the docker daemon. If the reverse proxy is running in a docker container, you can use the `--network host` option (or `network_mode: host` for docker-compose) when starting the reverse proxy container in order to connect the reverse proxy container to the host network. If that is not an option for you, you can alternatively instead of `localhost` use the ip-address that is displayed after running the following command on the host OS: `ip a | grep "scope global" | head -1 | awk '{print $2}' | sed 's|/.*||'` (the command only works on Linux)
</details>
### Cloudflare Argo Tunnel
<details>
<summary>click here to expand</summary>
Although it does not seems like it is the case but from AIO perspective a Cloudflare Argo Tunnel works like a reverse proxy. Here is how to make it work:
1. Install the Cloudflare Argo Tunnel on the same machine where AIO will be running on and point the Argo Tunnel with the domain that you want to use for AIO to `localhost:11000`. If the Argo Tunnel is running on a different machine, you can alternatively instead of `localhost` use the ip-address that is displayed after running the following command on the host OS: `ip a | grep "scope global" | head -1 | awk '{print $2}' | sed 's|/.*||'` (the command only works on Linux)
2. Now continue with [point 2](#2-use-this-startup-command) but additionally, add `-e SKIP_DOMAIN_VALIDATION=true` to the docker run command which will disable the dommain validation (because it is known that the domain validation will not work behind a Cloudflare Argo Tunnel). So you need to ensure yourself that you've configured everything correctly.
</details>
@@ -58,7 +129,7 @@ location / {
}
```
Of course you need to modify `<your-nc-domain>` to the domain on which you want to run Nextcloud. **Please note:** The above configuration will only work if your reverse proxy is running directly on the host that is running the docker daemon. If the reverse proxy is running in a docker container, you can use the `--network host` option (or `network_mode: host` for docker-compose) when starting the reverse proxy container in order to connect the reverse proxy container to the host network. If that is not an option for you, you can alternatively instead of `locahost` use the ip-address that is displayed after running the following command on the host OS: `ip a | grep "scope global" | head -1 | awk '{print $2}' | sed 's|/.*||'` (the command only works on Linux)
Of course you need to modify `<your-nc-domain>` to the domain on which you want to run Nextcloud. **Please note:** The above configuration will only work if your reverse proxy is running directly on the host that is running the docker daemon. If the reverse proxy is running in a docker container, you can use the `--network host` option (or `network_mode: host` for docker-compose) when starting the reverse proxy container in order to connect the reverse proxy container to the host network. If that is not an option for you, you can alternatively instead of `localhost` use the ip-address that is displayed after running the following command on the host OS: `ip a | grep "scope global" | head -1 | awk '{print $2}' | sed 's|/.*||'` (the command only works on Linux)
</details>
@@ -122,7 +193,7 @@ Of course you need to modify `<your-nc-domain>` to the domain on which you want
[http.services.nc-svc.loadBalancer]
passHostHeader = true
[[http.services.nc-svc.loadBalancer.servers]]
url = "http://locahost:11000"
url = "http://localhost:11000"
```
2. Add to the bottom of the `middlewares.toml` file in the Treafik rules folder the following content:
@@ -132,10 +203,6 @@ Of course you need to modify `<your-nc-domain>` to the domain on which you want
[http.middlewares.nc-middlewares-secure-headers.headers]
hostsProxyHeaders = ["X-Forwarded-Host"]
sslRedirect = true
stsSeconds = 63072000
stsIncludeSubdomains = true
stsPreload = true
forceSTSHeader = true
referrerPolicy = "same-origin"
X-Robots-Tag = "none"
```
@@ -150,7 +217,7 @@ Of course you need to modify `<your-nc-domain>` to the domain on which you want
---
Of course you need to modify `<your-nc-domain>` in the nextcloud.toml to the domain on which you want to run Nextcloud. **Please note:** The above configuration will only work if your reverse proxy is running directly on the host that is running the docker daemon. If the reverse proxy is running in a docker container, you can use the `--network host` option (or `network_mode: host` for docker-compose) when starting the reverse proxy container in order to connect the reverse proxy container to the host network. If that is not an option for you, you can alternatively instead of `locahost` use the ip-address that is displayed after running the following command on the host OS: `ip a | grep "scope global" | head -1 | awk '{print $2}' | sed 's|/.*||'` (the command only works on Linux)
Of course you need to modify `<your-nc-domain>` in the nextcloud.toml to the domain on which you want to run Nextcloud. **Please note:** The above configuration will only work if your reverse proxy is running directly on the host that is running the docker daemon. If the reverse proxy is running in a docker container, you can use the `--network host` option (or `network_mode: host` for docker-compose) when starting the reverse proxy container in order to connect the reverse proxy container to the host network. If that is not an option for you, you can alternatively instead of `localhost` use the ip-address that is displayed after running the following command on the host OS: `ip a | grep "scope global" | head -1 | awk '{print $2}' | sed 's|/.*||'` (the command only works on Linux)
</details>
@@ -242,7 +309,7 @@ https://<your-nc-domain>:8443 {
}
```
Of course you need to modify `<your-nc-domain>` in the nextcloud.toml to the domain on which you want to run Nextcloud. **Please note:** The above configuration will only work if your reverse proxy is running directly on the host that is running the docker daemon. If the reverse proxy is running in a docker container, you can use the `--network host` when starting the reverse proxy container in order to connect the reverse proxy container to the host network. If that is not an option for you, you can alternatively instead of `locahost` use the ip-address that is displayed after running the following command on the host OS: `ip a | grep "scope global" | head -1 | awk '{print $2}' | sed 's|/.*||'` (the command only works on Linux)
Of course you need to modify `<your-nc-domain>` in the nextcloud.toml to the domain on which you want to run Nextcloud. **Please note:** The above configuration will only work if your reverse proxy is running directly on the host that is running the docker daemon. If the reverse proxy is running in a docker container, you can use the `--network host` when starting the reverse proxy container in order to connect the reverse proxy container to the host network. If that is not an option for you, you can alternatively instead of `localhost` use the ip-address that is displayed after running the following command on the host OS: `ip a | grep "scope global" | head -1 | awk '{print $2}' | sed 's|/.*||'` (the command only works on Linux)
Afterwards should the AIO interface be accessible via `https://ip.address.of.the.host:8443`. You can alternatively change the domain to a different subdomain by using `https://<your-alternative-domain>:443` instead of `https://<your-nc-domain>:8443` in the Caddyfile and use that to access the AIO interface.
@@ -251,5 +318,7 @@ If something does not work, follow the steps below:
1. Make sure to exactly follow the whole reverse proxy documentation step-for-step from top to bottom!
1. Make sure that the reverse proxy is running on the host OS or if running in a container, connected to the host network. If that is not possible, substitute `localhost` in the default configurations by the ip-address that you can easily get when running the following command on the host OS: `ip a | grep "scope global" | head -1 | awk '{print $2}' | sed 's|/.*||'` (The command only works on Linux)
1. Make sure that the mastercontainer is able to spawn other containers. You can do so by checking that the mastercontainer indeed has access to the Docker socket which might not be positioned in one of the suggested directories like `/var/run/docker.sock` but in a different directory, based on your OS and the way how you installed Docker. The mastercontainer logs should help figuring this out. You can have a look at them by running `sudo docker logs nextcloud-aio-mastercontainer` after the container is started the first time.
1. Check if after the mastercontainer was started, the reverse proxy if running inside a container, can reach the provided apache port. You can test this by running `nc -z locahost 11000; echo $?` from inside the reverse proxy container. If the output is `0`, everything works. Alternatively you can of course use instead of `locahost` the ip-address of the host here for the test.
1. Check if after the mastercontainer was started, the reverse proxy if running inside a container, can reach the provided apache port. You can test this by running `nc -z localhost 11000; echo $?` from inside the reverse proxy container. If the output is `0`, everything works. Alternatively you can of course use instead of `localhost` the ip-address of the host here for the test.
1. Try to configure everything from scratch if it still does not work!
1. As last resort, you may disable the domain validation by adding `-e SKIP_DOMAIN_VALIDATION=true` to the docker run command. But only use this if you are completely sure that you've correctly configured everything!

View File

@@ -8,5 +8,6 @@
- [ ] Collabora by trying to open a .docx or .odt file in Nextcloud
- [ ] Nextcloud Talk by opening the Talk app in Nextcloud, creating a new chat and trying to join a call in this chat. Also verifying in the settings that the HPB and turn server work.
- [ ] Onlyoffice by trying to open a .docx file in Nextcloud
- [ ] When Collabora is enabled, it should show below the Optional Addons section a section where you can change the dictionaries for collabora. `de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru` should be a valid setting. E.g. `de.De` not. If already set, it should show a button that allows to remove the setting again.
You can now continue with [060-environmental-variables.md](./060-environmental-variables.md)

View File

@@ -1,7 +1,9 @@
# Environmental variables
- [ ] When starting the mastercontainer with `-e APACHE_PORT=11000` on a clean instance, the domaincheck container should be started with that same port published. That makes sure that also the Apache container will use that port later on. Using a value here that is not a port will not allow the mastercontainer to start correctly.
- [ ] When starting the mastercontainer with `-e TALK_PORT=3479` on a clean instance, the talk container should use this port later on. Using a value here that is not a port will not allow the mastercontainer to start correctly. Also it should stop if apache_port and talk_port are set to the same value.
- [ ] Make also sure that reverse proxies work by following https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md#reverse-proxy-documentation and following [001-initial-setup.md](./001-initial-setup.md) and [002-new-instance.md](./002-new-instance.md)
- [ ] When starting the mastercontainer with `-e SKIP_DOMAIN_VALIDATION=true` on a clean instance, it should skip the domain verification. So it should accept any domain that you type in then.
- [ ] When starting the mastercontainer with `-e NEXTCLOUD_DATADIR="/mnt/testdata"` it should map that location from `/mnt/testdata` to `/mnt/ncdata` inside the Nextcloud container. Not having adjusted the permissions correctly before starting the Nextcloud container the first time will not allow the Nextcloud container to start correctly. See https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir for allowed values.
- [ ] When starting the mastercontainer with `-e NEXTCLOUD_MOUNT="/mnt/"` it should map `/mnt/` to `/mnt/` inside the Nextcloud container. See https://github.com/nextcloud/all-in-one#how-to-allow-the-nextcloud-container-to-access-directories-on-the-host for allowed values.
- [ ] When starting the mastercontainer with `-e DOCKER_SOCKET_PATH="/var/run/docker.sock.raw"` it should map `/var/run/docker.sock.raw` to `/var/run/docker.sock` inside the watchtower container which allow to update the mastercontainer on macos and with docker rootless.