Compare commits

..
3 Commits
Author SHA1 Message Date
moritz 119842bb1a set version to 11.1.0+23.0.6-fpm 2025-05-15 15:36:44 +02:00
moritz 802f759880 mariadb version 10.3.39 2025-05-15 15:35:38 +02:00
moritz 0f15315dd4 version 23.0.6-fpm 2025-05-15 10:18:36 +02:00
10 changed files with 39 additions and 132 deletions
+3 -17
View File
@@ -23,7 +23,6 @@ SECRET_ADMIN_PASSWORD_VERSION=v1
EXTRA_VOLUME=/dev/null:/tmp/.dummy
PHP_MEMORY_LIMIT=1G
PHP_UPLOAD_LIMIT=512M
# fpm-tune, see: https://spot13.com/pmcalculator/
FPM_MAX_CHILDREN=16
FPM_START_SERVERS=4
@@ -56,12 +55,6 @@ DEFAULT_QUOTA="10 GB"
# APPS="calendar"
# COLLABORA_URL=https://collabora.example.com
## IMPORTANT FOR SECURITY REASONS WHEN RUNNING COLLABORA
## list of IP addresses that are allowed to make WOPI requests. Use the default
## when running the collabora server on the same machine as nextcloud.
## Otherwise set this to the IP address range of your collabora server(s) i.e. 1.2.3.4/32
## https://docs.nextcloud.com/server/latest/admin_manual/office/configuration.html#wopi-settings
# COLLABORA_ALLOWLIST="172.16.0.0/12"
# COMPOSE_FILE="$COMPOSE_FILE:compose.onlyoffice.yml"
# ONLYOFFICE_URL=https://onlyoffice.example.com
@@ -72,22 +65,15 @@ DEFAULT_QUOTA="10 GB"
# BBB_URL=https://talk.example.org/bigbluebutton/ # trailing slash!
# SECRET_BBB_SECRET_VERSION=v1
# COMPOSE_FILE="$COMPOSE_FILE:compose.whiteboard.yml"
# APPS="$APPS whiteboard"
# SECRET_WHITEBOARD_JWT_VERSION=v1
# COMPOSE_FILE="$COMPOSE_FILE:compose.authentik.yml"
# APPS="$APPS sociallogin"
# AUTHENTIK_USER_PREFIX=authentik
# AUTHENTIK_DOMAIN=authentik.example.com
# SECRET_AUTHENTIK_SECRET_VERSION=v1
# SECRET_AUTHENTIK_ID_VERSION=v1
# OCC_CMDS="app:disable dashboard"
# OCC_CMDS="$OCC_CMDS|config:app:set sociallogin auto_create_groups --value 1"
# OCC_CMDS="$OCC_CMDS|config:app:set sociallogin hide_default_login --value 1"
#COMPOSE_FILE="$COMPOSE_FILE:compose.fulltextsearch.yml"
#SECRET_ELASTICSEARCH_PASSWORD_VERSION=v1
# HSTS Options
# Uncomment this line to enable HSTS: https://docs.nextcloud.com/server/30/admin_manual/installation/harden_server.html
#HSTS_ENABLED=1
# Uncomment this line to add the `preload` part
#HSTS_PRELOAD=1
+11 -16
View File
@@ -64,18 +64,21 @@ AUTHENTIK_ID_NAME=authentik_example_com_nextcloud_id_v1 # the same as in authen
`abra app cmd <app-name> app set_authentik`
### Disable Dashboard
Disable dashboard app since it is so corporate:
`abra app config <app-name>`
Configure the following envs:
```
OCC_CMDS="app:disable dashboard"
```
`abra app cmd <app-name> app post_install_occ`
## Running `occ`
`abra app cmd <app-name> app run_occ '"user:list --help"'`
Read more about [occ command here](https://docs.nextcloud.com/server/stable/admin_manual/occ_command.html).
### Disable Dashboard
To disable dashboard app (since it is so corporate):
`abra app cmd <app-name> app run_occ '"app:disable dashboard"'`
## Default user files
- Follow [these docs](https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/default_files_configuration.html) to set the default files list for each user in the Files app
@@ -283,11 +286,3 @@ And you can populate the index manually and check if any errors occur:
```
abra app cmd <domain> app run_occ '"fulltextsearch:index"'
```
### Troubleshooting fulltextsearch
The fulltextsearch plugin might be stuck with this error: "Index is already running". In that case the following command can get things runing again:
```
abra app run <domain> db /bin/sh -- -c 'echo "delete from oc_fulltextsearch_ticks;" | mariadb -u root -p$(cat /run/secrets/db_root_password) nextcloud'
```
+10 -14
View File
@@ -1,10 +1,9 @@
#!/bin/bash
export FPM_TUNE_VERSION=v5
export NGINX_CONF_VERSION=v8
export MY_CNF_VERSION=v6
export NGINX_CONF_VERSION=v7
export MY_CNF_VERSION=v5
export ENTRYPOINT_VERSION=v3
export ENTRYPOINT_WHITEBOARD_VERSION=v1
export CRONTAB_VERSION=v1
export PG_BACKUP_VERSION=v2
@@ -12,6 +11,13 @@ run_occ() {
su -p www-data -s /bin/sh -c "/var/www/html/occ $@"
}
post_install_occ() {
IFS='|' read -ra CMD <<<"$OCC_CMDS"
for cmd in "${CMD[@]}"; do
run_occ "$cmd"
done
}
install_apps() {
install_apps="$@"
if [ -z "$install_apps" ]; then
@@ -85,18 +91,8 @@ install_onlyoffice() {
install_collabora() {
install_apps richdocuments
set_app_config richdocuments wopi_url "$COLLABORA_URL"
# important for security reaosns
# https://docs.nextcloud.com/server/latest/admin_manual/office/configuration.html#wopi-settings
set_app_config richdocuments wopi_allowlist "$COLLABORA_ALLOWLIST"
}
install_whiteboard() {
install_apps whiteboard
set_app_config whiteboard collabBackendUrl "https://${DOMAIN}/whiteboard"
set_app_config whiteboard jwt_secret_key "$(cat /run/secrets/whiteboard_jwt)"
}
install_fulltextsearch() {
install_apps fulltextsearch
install_apps fulltextsearch_elasticsearch
@@ -165,4 +161,4 @@ set_windowsfriendly_filenames() {
upgrade_mariadb() {
mariadb-upgrade -p`cat /run/secrets/db_root_password`
}
}
+2 -2
View File
@@ -2,7 +2,7 @@ version: "3.8"
services:
elasticsearch:
image: "docker.elastic.co/elasticsearch/elasticsearch:8.19.6"
image: "docker.elastic.co/elasticsearch/elasticsearch:8.17.2"
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
@@ -29,7 +29,7 @@ services:
mode: 0600
searchindexer:
image: nextcloud:32.0.1-fpm
image: nextcloud:30.0.6-fpm
volumes:
- nextcloud:/var/www/html/
- nextapps:/var/www/html/custom_apps:cached
+1 -2
View File
@@ -9,14 +9,13 @@ services:
- MYSQL_PASSWORD_FILE=/run/secrets/db_password
db:
image: "mariadb:11.4"
image: "mariadb:10.3.39"
environment:
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD_FILE=/run/secrets/db_password
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_root_password
- MAX_DB_CONNECTIONS=${MAX_DB_CONNECTIONS:-100}
- INNODB_BUFFER_POOL_SIZE=${INNODB_BUFFER_POOL_SIZE:-1G}"
configs:
- source: my_tune
target: /etc/mysql/conf.d/my-tune.cnf
-44
View File
@@ -1,44 +0,0 @@
version: "3.8"
services:
app:
secrets:
- whiteboard_jwt
whiteboard:
image: ghcr.io/nextcloud-releases/whiteboard:v1.4.1
deploy:
labels:
- traefik.enable=true
- traefik.docker.network=proxy
- traefik.http.services.${STACK_NAME}_whiteboard.loadbalancer.server.port=3002
- traefik.http.routers.${STACK_NAME}_whiteboard.rule=Host(`${DOMAIN}`${EXTRA_DOMAINS}) && PathPrefix(`/whiteboard`)
- traefik.http.routers.${STACK_NAME}_whiteboard.entrypoints=web-secure
- traefik.http.routers.${STACK_NAME}_whiteboard.tls.certresolver=${LETS_ENCRYPT_ENV}
- traefik.http.middlewares.${STACK_NAME}_whiteboard-stripprefix.stripprefix.prefixes=/whiteboard
- traefik.http.routers.${STACK_NAME}_whiteboard.middlewares=${STACK_NAME}_whiteboard-stripprefix
configs:
- source: entrypoint_whiteboard
target: /custom-entrypoint.sh
entrypoint: ["sh", "/custom-entrypoint.sh"]
user: root
networks:
- proxy
ports:
- 3002:3002
secrets:
- whiteboard_jwt
environment:
- NEXTCLOUD_URL=https://$DOMAIN
- JWT_SECRET_KEY_FILE=/run/secrets/whiteboard_jwt
secrets:
whiteboard_jwt:
external: true
name: ${STACK_NAME}_whiteboard_jwt_${SECRET_WHITEBOARD_JWT_VERSION}
configs:
entrypoint_whiteboard:
name: ${STACK_NAME}_entrypoint_whiteboard_${ENTRYPOINT_WHITEBOARD_VERSION}
file: entrypoint.whiteboard.sh.tmpl
template_driver: golang
+11 -23
View File
@@ -1,7 +1,7 @@
version: "3.8"
services:
web:
image: nginx:1.29.3
image: nginx:1.27.4
depends_on:
- app
configs:
@@ -12,12 +12,10 @@ services:
- X_FRAME_OPTIONS_ENABLED
- DOMAIN
- STACK_NAME
- HSTS_ENABLED
- HSTS_PRELOAD
volumes:
- nextcloud:/var/www/html/
- nextapps:/var/www/html/custom_apps:cached
- /mnt/data-3t/nextdata:/var/www/html/data:cached
- nextdata:/var/www/html/data:cached
- nextconfig:/var/www/html/config:cached
- ${EXTRA_VOLUME}
networks:
@@ -30,22 +28,13 @@ services:
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
# shared service & middleware
- "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=80"
- "traefik.http.middlewares.${STACK_NAME}-redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares.${STACK_NAME}-redirect.redirectscheme.permanent=true"
# public domain (lets-encrypt cert)
- "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`${EXTRA_DOMAINS})"
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}.middlewares=${STACK_NAME}-redirect"
# local domain (self-signed cert)
- "traefik.http.routers.${STACK_NAME}-local.rule=Host(`${LOCAL_DOMAIN}`)"
- "traefik.http.routers.${STACK_NAME}-local.tls=true"
- "traefik.http.routers.${STACK_NAME}-local.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}-local.middlewares=${STACK_NAME}-redirect"
- "traefik.http.routers.${STACK_NAME}-local.service=${STACK_NAME}"
- "traefik.http.middlewares.${STACK_NAME}-redirect.headers.SSLForceHost=true"
- "traefik.http.middlewares.${STACK_NAME}-redirect.headers.SSLHost=${DOMAIN}"
- "caddy=${DOMAIN}"
- "caddy.reverse_proxy={{upstreams 80}}"
- "caddy.tls.on_demand="
@@ -57,7 +46,7 @@ services:
start_period: 5m
app:
image: nextcloud:32.0.1-fpm
image: nextcloud:23.0.6-fpm
depends_on:
- db
configs:
@@ -83,9 +72,7 @@ services:
- TRUSTED_PROXIES=10.0.0.0/8
- REDIS_HOST=cache
- OVERWRITEPROTOCOL=https
- OVERWRITECLIURL=https://${DOMAIN}
- PHP_MEMORY_LIMIT=${PHP_MEMORY_LIMIT:-1G}
- PHP_UPLOAD_LIMIT=${PHP_UPLOAD_LIMIT:-512M}
- FPM_MAX_CHILDREN=${FPM_MAX_CHILDREN:-131}
- FPM_START_SERVERS=${FPM_START_SERVERS:-32}
- FPM_MIN_SPARE_SERVERS=${FPM_MIN_SPARE_SERVERS:-32}
@@ -94,7 +81,7 @@ services:
volumes:
- nextcloud:/var/www/html/
- nextapps:/var/www/html/custom_apps:cached
- /mnt/data-3t/nextdata:/var/www/html/data:cached
- nextdata:/var/www/html/data:cached
- nextconfig:/var/www/html/config:cached
- ${EXTRA_VOLUME}
networks:
@@ -104,7 +91,7 @@ services:
failure_action: rollback
order: start-first
labels:
- "coop-cloud.${STACK_NAME}.version=12.0.1+31.0.6-fpm"
- "coop-cloud.${STACK_NAME}.version=11.1.0+23.0.6-fpm"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}"
- "backupbot.backup=${ENABLE_BACKUPS:-true}"
- "backupbot.backup.volumes.redis=false"
@@ -118,11 +105,11 @@ services:
start_period: 15m
cron:
image: nextcloud:32.0.1-fpm
image: nextcloud:30.0.6-fpm
volumes:
- nextcloud:/var/www/html/
- nextapps:/var/www/html/custom_apps:cached
- /mnt/data-3t/nextdata:/var/www/html/data:cached
- nextdata:/var/www/html/data:cached
- nextconfig:/var/www/html/config:cached
- ${EXTRA_VOLUME}
networks:
@@ -134,7 +121,7 @@ services:
cache:
image: redis:8.2.3-alpine
image: redis:7.4.2-alpine
networks:
- internal
volumes:
@@ -156,6 +143,7 @@ secrets:
volumes:
nextcloud:
nextapps:
nextdata:
nextconfig:
redis:
-6
View File
@@ -1,6 +0,0 @@
#!/bin/sh
set -e
export JWT_SECRET_KEY=$(cat /run/secrets/whiteboard_jwt)
exec npm run server:start
+1 -1
View File
@@ -4,7 +4,7 @@
# https://mariadb.com/kb/en/library/performance-schema-overview/
[server]
innodb_buffer_pool_size = {{ env "INNODB_BUFFER_POOL_SIZE" }}
innodb_buffer_pool_size = 1G
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
-7
View File
@@ -45,13 +45,6 @@ http {
# could take several months.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
{{ if eq (env "HSTS_ENABLED") "1" }}
{{ if eq (env "HSTS_PRELOAD") "1" }}
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
{{ else }}
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains;" always;
{{ end }}
{{ end }}
# set max upload size
client_max_body_size 512M;