Compare commits

..

155 Commits

Author SHA1 Message Date
d4371b4afb Implement NC Talk High Performance Backend 2025-12-06 03:45:55 +01:00
aa3ab83a38 Merge pull request 'remove post_install_occ' (#55) from improve_readme into main
Reviewed-on: coop-cloud/nextcloud#55
2025-10-30 17:38:15 +00:00
dbdf6227e1 remove post_install_occ 2025-10-17 19:05:03 -07:00
e83ae638eb Merge pull request 'make maximum upload size configurable' (#53) from uploadLimit into main
Reviewed-on: coop-cloud/nextcloud#53
Reviewed-by: 3wordchant <3wordchant@noreply.git.coopcloud.tech>
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2025-09-09 20:43:13 +00:00
96e9a224f3 Merge branch 'main' into uploadLimit 2025-09-09 20:42:54 +00:00
afee08ae4d Merge pull request 'Make INNODB_BUFFER_POOL_SIZE configurable' (#51) from feature/innodb-buffer-tune into main
Reviewed-on: coop-cloud/nextcloud#51
Reviewed-by: ammaratef45 <ammaratef45@proton.me>
2025-09-09 20:17:59 +00:00
5f05ab8f42 make maximum upload size configurable 2025-09-09 12:53:37 -07:00
65d5af91bc Merge branch 'main' into feature/innodb-buffer-tune 2025-09-09 19:46:26 +00:00
93037e1a35 Merge pull request 'fix supporting multiple domains' (#52) from sslhost into main
Reviewed-on: coop-cloud/nextcloud#52
Reviewed-by: 3wordchant <3wordchant@noreply.git.coopcloud.tech>
2025-09-08 13:38:09 +00:00
9986e87db5 fix supporting multiple domains 2025-09-07 14:41:53 -07:00
3wc
42c90cce21 Add configurable INNODB_BUFFER_POOL_SIZE 2025-09-01 00:15:52 -04:00
8c5d843ba4 chore: publish 12.0.1+31.0.6-fpm release 2025-07-24 17:28:53 +02:00
7074744ba8 chore: publish 12.0.1+31.0.6-fpm release 2025-07-09 10:51:04 -07:00
cb0a103e04 Merge pull request 'add OVERWRITECLIURL' (#49) from clioverwrite into main
Reviewed-on: coop-cloud/nextcloud#49
2025-07-09 17:24:09 +00:00
ff6873a52c add OVERWRITECLIURL 2025-07-06 15:44:19 -07:00
9408a6ab81 chore: publish 12.0.0+31.0.6-fpm release 2025-07-03 14:58:09 +02:00
c4bb6d0932 chore: publish 11.4.0+30.0.6-fpm release 2025-06-18 17:34:48 -07:00
7a6256f78d Merge pull request 'Add HSTS headers' (#48) from hsts into main
Reviewed-on: coop-cloud/nextcloud#48
Reviewed-by: moritz <moritz@noreply.git.coopcloud.tech>
2025-06-19 00:32:01 +00:00
8be413fe71 pump up the config version 2025-06-18 16:07:22 -07:00
af36d22633 Add HSTS headers 2025-06-18 12:13:44 -07:00
85e5070b8d docs: Adds troubleshooting section for fulltextsearch 2025-05-23 15:32:02 +02:00
36615bc097 chore: publish 11.3.0+30.0.6-fpm release 2025-05-20 18:20:05 +02:00
a3cd6741eb improve secret handling for whiteboard 2025-05-20 18:17:46 +02:00
cb453e884d chore: publish 11.2.0+30.0.6-fpm release 2025-05-13 23:59:33 +02:00
267f3cbb78 chore: publish 11.1.0+30.0.6-fpm release 2025-02-15 14:43:25 +01:00
b0c4f06af1 chore: publish 11.0.1+30.0.4-fpm release 2025-02-03 13:37:05 +01:00
750477a409 fix mariadb backup label 2025-02-03 13:19:08 +01:00
7a7da21544 Update .drone.yml 2025-01-08 10:09:13 -08:00
d72a8fdcdb Merge pull request 'upgrade to mariadb 11.4' (#45) from MIR/nextcloud:main into main
Reviewed-on: coop-cloud/nextcloud#45
2024-12-22 21:32:37 +00:00
7aa4e15034 upgrade to mariadb 11.4 2024-12-21 16:56:09 -05:00
0c5b05957c chore: publish 10.0.0+30.0.4-fpm release 2024-12-20 16:50:42 +01:00
d8cb3719e2 fix authentik logout url 2024-12-03 22:34:12 +01:00
bbc834a62d chore: publish 9.2.0+29.0.8-fpm release 2024-11-08 15:23:34 +01:00
da8f7fb447 fix drone runner 2024-10-24 12:48:45 +02:00
ee2c5a2b42 update pg_backup.sh 2024-10-22 21:31:41 +02:00
182a42ff1f update backupbot labels 2024-10-22 15:18:37 +02:00
5a397ce63e Merge branch 'main' of ssh://git.coopcloud.tech:2222/coop-cloud/nextcloud 2024-10-08 10:14:57 +02:00
ccb54f34d4 Added note about our experiances upgrading Nextcloud 2024-10-07 16:25:26 +01:00
3143e99572 add function to set windows forbidden filename characters 2024-10-02 14:30:41 +02:00
9859907d4b chore: publish 9.1.2+29.0.5-fpm release 2024-10-01 11:37:15 +02:00
6c0fa9c12d chore: publish 9.1.2+29.0.5-fpm release 2024-09-30 17:21:04 +02:00
a3c99a72bf add-theming (#44)
Reviewed-on: coop-cloud/nextcloud#44
Co-authored-by: Simon <simonthiessen@posteo.de>
Co-committed-by: Simon <simonthiessen@posteo.de>
2024-09-30 14:24:07 +00:00
c94ffed09d chore: publish 9.0.0+29.0.5-fpm release 2024-08-26 18:11:43 +01:00
7a863573c9 Merge pull request 'add abra command for disabling the skeleton directory' (#42) from Apfelwurm/nextcloud:main into main
Reviewed-on: coop-cloud/nextcloud#42
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2024-07-21 15:56:43 +00:00
c930bbcf56 chore: publish 8.0.1+29.0.3-fpm release 2024-07-19 18:51:54 +02:00
a13e7a509c add abra command for disabling the skeleton directory 2024-07-19 17:58:06 +02:00
0f9aba3e9e alaconnect: replace 'execute' with 'initial-hooks' 2024-07-15 13:57:58 +02:00
eb3e2486ce chore: publish 8.0.0+29.0.1-fpm release 2024-06-19 18:53:22 +02:00
2b4e63ef31 Reapply "split bbb and onlyoffice compose.yml"
This reverts commit 180c269337.
2024-06-19 18:36:05 +02:00
c056687849 chore: publish 7.0.3+29.0.1-fpm release 2024-06-19 18:35:19 +02:00
180c269337 Revert "split bbb and onlyoffice compose.yml"
This reverts commit 9be859db25.
Accidentally introduced a breaking change into a patch release
2024-06-19 18:34:02 +02:00
7eea2e0785 chore: publish 7.0.2+29.0.1-fpm release 2024-06-19 16:42:46 +02:00
be915272b4 fix multi-file downloads, see https://github.com/nextcloud/server/issues/42617#issuecomment-1881958718 2024-06-19 16:41:55 +02:00
9be859db25 split bbb and onlyoffice compose.yml 2024-06-19 15:40:27 +02:00
97e1d72604 Revert "wip split config"
This reverts commit 8a1fae2bac.
2024-06-14 16:00:14 +02:00
8a1fae2bac wip split config 2024-06-06 17:14:50 +02:00
3wc
ce817e3928 chore: publish 7.0.1+29.0.1-fpm release 2024-06-01 15:05:05 -05:00
7a64d3c6a7 add alakazam integration file alaconnect.yml 2024-05-13 17:30:26 +02:00
3wc
bb781e654b chore: publish 7.0.0+29.0.0-fpm release 2024-05-12 14:08:32 -03:00
cb5cd5f7b2 fix release note 5.0.1+27.0.1-fpm 2024-05-08 11:05:05 +02:00
3wc
0a3e943b26 chore: publish 6.0.4+28.0.5-fpm release 2024-05-07 19:31:54 -03:00
3wc
4f1aaf5d1d Increase memory limit for cron
Re coop-cloud/nextcloud#41
2024-05-07 19:30:49 -03:00
3wc
019b71fde1 chore: publish 6.0.3+28.0.5-fpm release 2024-05-07 15:18:19 -03:00
3wc
7527399da0 Add mjs as a mimetype for javascript 2024-05-07 15:18:19 -03:00
3wc
94e84122ed chore: publish 6.0.2+28.0.5-fpm release 2024-05-07 15:18:19 -03:00
0d9ab936a0 fulltextsearch: rename and update image 2024-05-07 15:18:19 -03:00
09ec6f842c update to 28.0.5 2024-04-30 15:50:17 +02:00
3wc
b5d40aa428 Update metadata 2024-03-30 15:48:50 -03:00
eead80b60a add env MAX_DB_CONNECTIONS to set the database connection limit 2024-02-27 09:47:26 +01:00
3wc
24670cdb6b chore: publish 6.0.1+28.0.2-fpm release 2024-02-08 14:51:39 -03:00
3wc
7e4ab9288c chore: publish 6.0.0+28.0.1-fpm release 2024-01-20 21:51:02 -03:00
199bf61300 chore: publish 5.2.0+27.1.5-fpm release 2023-12-22 13:19:26 +01:00
99514b5991 feat: add fulltextsearch using elasticsearch (#36)
Reviewed-on: coop-cloud/nextcloud#36
Co-authored-by: p4u1 <p4u1_f4u1@riseup.net>
Co-committed-by: p4u1 <p4u1_f4u1@riseup.net>
2023-12-22 12:09:58 +00:00
eefb14e150 refactor: move db_root_password to mariadb (#38)
It is only used by mariadb and not by postgres

Closes coop-cloud/nextcloud#34

Reviewed-on: coop-cloud/nextcloud#38
Co-authored-by: p4u1 <p4u1_f4u1@riseup.net>
Co-committed-by: p4u1 <p4u1_f4u1@riseup.net>
2023-12-22 12:09:07 +00:00
a34e100bd7 chore: publish 5.1.1+27.1.5-fpm release 2023-12-21 23:23:20 +01:00
24ca6b22bc fix: noindex, nofollow instead of none robots header (#37)
This fixes a warning shown on the administration page.
More info on: https://help.nextcloud.com/t/x-robots-tag-http-header-not-configured-with-noindex-nofollow-since-nc-26-0-0/158300/1

Reviewed-on: coop-cloud/nextcloud#37
Co-authored-by: p4u1 <p4u1_f4u1@riseup.net>
Co-committed-by: p4u1 <p4u1_f4u1@riseup.net>
2023-12-19 14:50:46 +00:00
c4ea5e053e increase default timeout 2023-12-07 16:33:15 +01:00
9d2e5cc05b increase healthcheck start_period for long updates 2023-11-28 14:39:50 +01:00
72bb75a49f add container depedency to avoid restart of web container 2023-11-28 11:29:55 +01:00
3wc
5014bcb276 chore: publish 5.1.0+27.1.3-fpm release 2023-11-06 13:44:44 +00:00
88fc62bcd0 automating collabora installation 2023-08-24 11:01:50 +02:00
3wc
c54b975654 chore: publish 5.0.2+27.0.1-fpm release 2023-08-22 21:14:50 +02:00
3wc
e9a602cc78 Add Caddy labels 2023-08-22 19:08:56 +02:00
3wc
90c7b87655 Trigger catalogue rebuild on tag push 2023-08-04 15:00:09 +02:00
3wc
3a8c203b51 chore: publish 5.0.1+27.0.1-fpm release 2023-08-04 14:57:31 +02:00
634a3553b9 fix: use saner fpm defaults 2023-07-31 13:42:52 +02:00
24e9571ba1 fix install_apps cmd 2023-07-19 13:34:50 +02:00
6546a05cf9 use standalone authentik secrets 2023-07-18 16:51:37 +02:00
ad3059d518 chore: publish 5.0.0+27.0.0-fpm release 2023-07-11 11:33:11 +02:00
92af4b9c01 chore: publish 4.0.7+26.0.2-fpm release 2023-06-26 17:54:13 +02:00
92dca3fab7 chore: point backup to a volume directory 2023-06-26 16:44:06 +02:00
201585bea8 feat: add set logfile to stdout cmd 2023-06-26 11:56:10 +02:00
a0e8fdad40 chore: publish 4.0.6+26.0.2-fpm release 2023-06-14 14:59:20 +02:00
6427ce181f fix postgres healtcheck 2023-06-14 14:59:03 +02:00
37f575038b chore: publish 4.0.5+26.0.2-fpm release 2023-06-13 13:46:45 +02:00
7e4c87346a fix: release the fpm handbrake
it seems like php-fpm applys configs in aphabetical order, so that our
fpm-tune was overwritten by the www.conf with default values.

so let's go on highspeed now! :)
2023-06-13 13:20:26 +02:00
944230afe0 chore: publish 4.0.4+26.0.2-fpm release 2023-06-09 15:42:40 +02:00
63a1787ad6 fix env fpm default values overwriteable 2023-06-09 15:38:52 +02:00
3wc
1deee41205 chore: publish 4.0.3+26.0.2-fpm release 2023-06-09 10:31:49 +01:00
b8d209e531 chore: publish 4.0.2+26.0.2-fpm release 2023-06-08 17:52:27 +01:00
f48d314699 chore: publish 4.0.1+26.0.1-fpm release 2023-05-08 11:45:20 +02:00
a6ea635fd4 chore: autoformatting abra.sh 2023-05-08 11:43:45 +02:00
c9b8aec108 fix: set trusted proxies to 10.0.0.0/8 2023-05-08 11:43:24 +02:00
3wc
db39e8dee6 chore: publish 4.0.0+26.0.1-fpm release 2023-04-27 16:59:58 -04:00
3wc
ed68b3e57c chore: publish 3.3.2+25.0.6-fpm release 2023-04-27 16:40:59 -04:00
78ea500d5e add auto update and timeout env 2023-04-18 18:21:48 +02:00
6f219781e5 default authentik admin mapping 2023-04-18 15:24:25 +02:00
162c056f07 add default timeout 2023-04-13 19:52:12 +02:00
3wc
5d537d5173 Drop /auth/ from Keycloak example URL
[ci skip]
2023-04-07 16:42:02 -04:00
7a25bd4835 chore: publish 3.3.0+25.0.5-fpm release 2023-04-05 17:22:32 +02:00
eac7431b13 chore: publish 3.2.0+25.0.4-fpm release 2023-03-22 18:06:06 +01:00
fce0b9f7cb feat: authentik autoconfiguration 2023-03-22 17:47:06 +01:00
7b0a0741b6 chore: update readme 2023-03-13 19:07:49 +01:00
e1bc039b09 fix release note path 2023-03-07 17:10:35 +01:00
3wc
a52515e63e chore: publish 3.1.2+25.0.4-fpm release 2023-03-06 16:04:10 -05:00
3wc
cff544c554 Fix occ commands in README
[ci skip]
2023-01-24 14:13:14 -08:00
3wc
f086d1bc77 Switch to self-hosted stack-ssh-deploy image [mass update] 2023-01-21 11:49:56 -08:00
897d787d86 chore: publish 3.1.1+25.0.1-fpm release 2023-01-20 15:04:23 +01:00
35b36d8c30 increase healthcheck start_period for long updates 2023-01-20 15:03:11 +01:00
738f71e6de chore: publish 3.1.0+25.0.1-fpm release 2023-01-20 11:16:56 +01:00
5c80e759e5 update release file for next release 2023-01-20 11:14:10 +01:00
3wc
782593c07c Update abra syntax in examples (finally) [mass update] 2023-01-19 16:02:28 -08:00
19c260b8da healthchecks (#32)
Adding healthchecks for nginx, mariadb, redis and php-fpm

Co-authored-by: Moritz <moritz.m@local-it.org>
Reviewed-on: coop-cloud/nextcloud#32
2023-01-12 21:16:31 +00:00
3156757fee feat: run occ commands from env variables as post deploy command 2023-01-10 18:09:11 +01:00
012e9c2310 feat: set default quota via abra app cmd 2022-12-14 12:12:41 +01:00
805b29d918 feat: template fpm settings
this closes #25
2022-12-13 15:31:38 +01:00
9148747de6 chore: clean up .env.sample 2022-12-07 16:18:37 +01:00
c646f95706 refactor: move nc-app secrets to seperate overwrite yml 2022-12-07 16:15:26 +01:00
f0bbb28626 feat: make smtp settings configurable in .env 2022-12-07 15:51:57 +01:00
0e8c5ecd17 fix CI deployment: set bbb and onlyoffice secret version 2022-12-06 15:11:01 +01:00
f87f9fc4da use docker secrets for bbb 2022-12-06 14:47:29 +01:00
1b76b6211f add install_onlyoffice command 2022-12-06 13:27:45 +01:00
17bedc79e5 chore: publish 3.0.1+25.0.1-fpm release 2022-12-02 11:26:02 +01:00
3wc
26bd2225d4 Fix typo in db_password versioning 2022-11-22 18:43:52 -08:00
832655e360 chore: publish 3.0.0+25.0.1-fpm release 2022-11-18 17:33:04 +01:00
3wc
b86b044e5e Return to <recipe>.example.com templating 2022-11-18 07:25:03 -08:00
8a3e9f1317 Add install_bbb app command 2022-11-16 15:48:21 +01:00
0278daa5b6 refactor: clean abra.sh file from old unused functions 2022-11-15 11:04:35 +01:00
3wc
0f6b38557c Set config versions for CI deployment 2022-11-12 19:38:10 -08:00
3wc
d3d1aee6a3 Auto-create proxy network during CI test 2022-11-12 19:29:06 -08:00
63ce9a6fb9 Merge pull request 'Automatically install apps specified via env variable.' (#29) from auto_app_install into main
Reviewed-on: coop-cloud/nextcloud#29
2022-11-09 09:48:22 +00:00
827cb16964 abra.sh post-deployment command to install apps 2022-11-08 16:39:32 +01:00
992992d678 Revert "Automatically install apps specified via env variable." for entrypoint.sh.tmpl
This reverts commit 20f0a45baf for entrypoint.sh.tmpl
2022-11-08 15:41:37 +01:00
20f0a45baf Automatically install apps specified via env variable. 2022-11-08 12:31:24 +01:00
e996b5c057 chore: publish 2.1.4+24.0.6-fpm release 2022-10-13 17:12:29 +02:00
0aabef8f7b let app container wait for db init 2022-10-13 16:58:10 +02:00
2be42d0a84 fix frame ancestors 2022-10-11 16:12:04 +02:00
e76454c4fd .env.sample template domain 2022-09-13 16:37:55 +02:00
ec39fd5fed chore: publish 2.1.3+24.0.5-fpm release 2022-09-13 15:44:24 +02:00
16ad6c22ea add headers to embed nextcloud in frame on external site (#28)
This introduces new env variables to configure nextloud to be embedded via
iframe on an external site.
Setting X_FRAME_OPTIONS_ENABLED=1 will configure nginx and nextcloud to
set X-Frame-Options and CSP headers to allow the domain configured in
X_FRAME_OPTIONS_ALLOW_FROM.

I created a PR because I'm not sure if this is helpful for other people or just a custom hack that bloats the recipe :D

Co-authored-by: Philipp Rothmann <philipprothmann@posteo.de>
Reviewed-on: coop-cloud/nextcloud#28
2022-09-02 14:32:04 +00:00
daa57eece9 chore: publish 2.1.2+24.0.3-fpm release 2022-08-04 18:39:44 +02:00
2ddf11728f add note about broken-ness 2022-08-03 13:39:31 +03:00
71d15ef4df fix typo 2022-08-03 11:51:35 +03:00
0d4f060e94 add note on previewgenerator 2022-08-03 11:50:15 +03:00
1e1977a2b4 chore: publish 2.1.1+24.0.2-fpm release 2022-07-14 10:51:54 +02:00
32 changed files with 1020 additions and 201 deletions

View File

@ -3,7 +3,7 @@ kind: pipeline
name: deploy to swarm-test.autonomic.zone
steps:
- name: deployment
image: decentral1se/stack-ssh-deploy:latest
image: git.coopcloud.tech/coop-cloud/stack-ssh-deploy:latest
settings:
host: swarm-test.autonomic.zone
stack: nextcloud
@ -11,15 +11,41 @@ steps:
purge: true
deploy_key:
from_secret: drone_ssh_swarm_test
networks:
- proxy
environment:
DOMAIN: nextcloud.swarm-test.autonomic.zone
STACK_NAME: nextcloud
LETS_ENCRYPT_ENV: production
ADMIN_USER: foobar
FPM_TUNE_VERSION: v1
NGINX_CONF_VERSION: v1
MY_CNF_VERSION: v1
ENTRYPOINT_VERSION: v1
CRONTAB_VERSION: v1
PG_BACKUP_VERSION: v2
SECRET_DB_PASSWORD_VERSION: v1
SECRET_DB_ROOT_PASSWORD_VERSION: v1
SECRET_ADMIN_PASSWORD_VERSION: v1
SECRET_ONLYOFFICE_JWT_VERSION: v1
SECRET_BBB_SECRET_VERSION: v1
EXTRA_VOLUME: "/dev/null:/tmp/.dummy"
trigger:
branch:
- main
---
kind: pipeline
name: generate recipe catalogue
steps:
- name: release a new version
image: plugins/downstream
settings:
server: https://build.coopcloud.tech
token:
from_secret: drone_abra-bot_token
fork: true
repositories:
- toolshed/auto-recipes-catalogue-json
trigger:
event: tag

View File

@ -1,4 +1,7 @@
TYPE=nextcloud
TIMEOUT=900
ENABLE_AUTO_UPDATE=true
ENABLE_BACKUPS=true
DOMAIN=nextcloud.example.com
## Domain aliases
@ -9,10 +12,90 @@ COMPOSE_FILE="compose.yml"
COMPOSE_FILE="$COMPOSE_FILE:compose.mariadb.yml"
#COMPOSE_FILE="$COMPOSE_FILE:compose.postgres.yml"
#MAX_DB_CONNECTIONS=500
ADMIN_USER=admin
TZ=Etc/UTC
SECRET_DB_ROOT_PASSWORD_VERSION=v1
SECRET_DB_PASSWORD_VERSION=v1
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
FPM_MIN_SPARE_SERVERS=4
FPM_MAX_SPARE_SERVERS=12
DEFAULT_QUOTA="10 GB"
# X_FRAME_OPTIONS_ENABLED=1
# X_FRAME_OPTIONS_ALLOW_FROM=embedding-site.example.org
# COMPOSE_FILE="$COMPOSE_FILE:compose.smtp.yml"
# See https://github.com/nextcloud/docker#auto-configuration-via-environment-variables for default values
# SMTP_AUTHTYPE=
# SMTP_HOST=
# SMTP_SECURE=
# SMTP_NAME=
# SMTP_PORT=
# MAIL_FROM_ADDRESS=
# MAIL_DOMAIN=
# SECRET_SMTP_PASSWORD_VERSION=v1
## Customization
# THEMING_COLOR=
# THEMING_SLOGAN=
# COPY_ASSETS="flow_background.jpg|app:/var/www/html/themes/"
# COPY_ASSETS="$COPY_ASSETS icon_left_brand.svg|app:/var/www/html/themes/"
# COPY_ASSETS="$COPY_ASSETS icon.png|app:/var/www/html/themes/"
# 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
# APPS="$APPS onlyoffice"
# SECRET_ONLYOFFICE_JWT_VERSION=v1
# COMPOSE_FILE="$COMPOSE_FILE:compose.bbb.yml"
# 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
#COMPOSE_FILE="$COMPOSE_FILE:compose.fulltextsearch.yml"
#SECRET_ELASTICSEARCH_PASSWORD_VERSION=v1
#COMPOSE_FILE="$COMPOSE_FILE:compose.talk.yml"
#TALK_DOMAIN=talk.example.com
#SECRET_TALK_INTERNAL_SECRET_VERSION=v1 # length=64 charset=default
#SECRET_TALK_TURN_SECRET_VERSION=v1 # length=64 charset=default
#SECRET_TALK_SIGNALING_SECRET_VERSION=v1 # length=64 charset=default
# 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

199
README.md
View File

@ -6,38 +6,131 @@ Fully automated luxury Nextcloud via docker-swarm.
<!-- metadata -->
* **Category**: Apps
* **Status**: 2, beta
* **Status**: 5
* **Image**: [`nextcloud`](https://hub.docker.com/_/nextcloud), 4, upstream
* **Healthcheck**: Yes
* **Backups**: No
* **Backups**: Yes
* **Email**: 3
* **Tests**: 2
* **SSO**: 1 (OAuth)
<!-- endmetadata -->
## Basic usage
## Quick start
1. Set up Docker Swarm and [`abra`]
2. Deploy [`coop-cloud/traefik`]
3. `abra app new nextcloud --secrets` (optionally with `--pass` if you'd like
to save secrets in `pass`)
4. `abra app YOURAPPDOMAIN config` - be sure to change `$DOMAIN` to something that resolves to
your Docker swarm box
5. `abra app YOURAPPDOMAIN deploy`
* `abra app new nextcloud`
* `abra app config <app-name>`
* `abra app secret insert <app-name> smtp_password v1 <SMTP_PASSWORD>`
* `abra app secret generate -a <app-name>`
* `abra app deploy <app-name>`
## How do I customise the default home page when logging in?
### Onlyoffice Integration
- Delete the dashboard app since it is so corporate
- 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
- Configure a `defaultapp` in your `config.php` or use [apporder](https://apps.nextcloud.com/apps/apporder)
`abra app config <app-name>`
Configure the following envs:
```
COMPOSE_FILE="$COMPOSE_FILE:compose.apps.yml"
ONLYOFFICE_URL=https://onlyoffice.example.com
SECRET_ONLYOFFICE_JWT_VERSION=v1
```
* `abra app secret insert <app-name> onlyoffice_jwt v1 <jwt_secret>`
* `abra app cmd <app-name> app install_onlyoffice`
### BBB Integration
`abra app config <app-name>`
Configure the following envs:
```
COMPOSE_FILE="$COMPOSE_FILE:compose.apps.yml"
BBB_URL=https://talk.example.org/bigbluebutton/ # trailing slash!
SECRET_BBB_SECRET_VERSION=v1
```
* `abra app secret insert <app-name> bbb_secret v1 <bbb_secret>`
* `abra app cmd <app-name> app install_bbb`
### Nextcloud Talk High performance Backend
Note: at the moment you are limited to run one Nextcloud high performance backend per docker host with this setup.
`abra app config <app-name>`
Configure the following envs:
```
#COMPOSE_FILE="$COMPOSE_FILE:compose.talk.yml"
#TALK_DOMAIN=talk.example.com
#SECRET_TALK_INTERNAL_SECRET_VERSION=v1 # length=64 charset=default
#SECRET_TALK_TURN_SECRET_VERSION=v1 # length=64 charset=default
#SECRET_TALK_SIGNALING_SECRET_VERSION=v1 # length=64 charset=default
```
* `abra app secret insert <app-name> talk_internal_secret v1 <talk_internal_secret>`
* `abra app secret insert <app-name> talk_turn_secret v1 <talk_turn_secret>`
* `abra app secret insert <app-name> talk_signaling_secret v1 <talk_signaling_secret>`
* `abra app cmd <app-name> app install_talk`
Don't forget to enable the additional env's in your hosts traefik instance:
```
COMPOSE_FILE="$COMPOSE_FILE:compose.nextcloud-talk-hpb.yml"
NEXTCLOUD_TALK_HPB_ENABLED=1
```
Due to a bug in compose that deletes duplacted ports without checking for the protocol, traefik need to get the additional udp binding added after the deployment via ssh (this might take longer than expected!):
```
docker service update --publish-add published=3478,target=3478,protocol=udp traefik_XXX_XXX_app
```
To check if tcp and udp was binded, you can use:
```
docker service inspect traefik_XXX_XXX_app | grep 3478 -a2
```
### Authentik Integration
`abra app config <app-name>`
Configure the following envs:
```
COMPOSE_FILE="$COMPOSE_FILE:compose.authentik.yml"
AUTHENTIK_USER_PREFIX=authentik
AUTHENTIK_DOMAIN=authentik.example.com
AUTHENTIK_SECRET_NAME=authentik_example_com_nextcloud_secret_v1 # the same as in authentik
AUTHENTIK_ID_NAME=authentik_example_com_nextcloud_id_v1 # the same as in authentik
```
`abra app cmd <app-name> app set_authentik`
## Running `occ`
`abra app run --user www-data YOURAPPDOMAIN app occ user:list --help`
`abra app cmd <app-name> app run_occ '"user:list --help"'`
## Upgrading Nextcloud apps
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
## Default App
- Configure a `defaultapp` in your `config.php` or use [apporder](https://apps.nextcloud.com/apps/apporder)
## Upgrading Nextcloud
Upgrading Nextcloud can be a hair raising experiance. They [don't support downgrading](https://docs.nextcloud.com/server/latest/admin_manual/maintenance/upgrade.html) even for minor versions.
Many of us have found that jumping major versions when upgrading is also a bad idea. We have however found that it's ok to skip minor version upgrades and go to the last minor version before a major version (e.g. 24.0.0 to 24.9.9 before going to 25.0.0). To extra cautious just upgrade one release at a time. Read the release notes and check your logs.
## Upgrading Nextcloud apps (plug-ins)
`abra app cmd <app-name> app run_occ '"app:update --all"'`
`abra app run --user www-data YOURAPPDOMAIN app occ app:update --all`
## How do I fix a Nextcloud version snafu?
@ -66,7 +159,7 @@ Use [this plugin](https://github.com/pulsejet/nextcloud-oidc-login). Unlike the
```
'oidc_login_client_id' => 'nextcloud',
'oidc_login_client_secret' => 'mysecret',
'oidc_login_provider_url' => 'https://example.com/auth/realms/myrealm',
'oidc_login_provider_url' => 'https://example.com/realms/myrealm',
'oidc_login_disable_registration' => false,
'oidc_login_hide_password_form' => true,
'oidc_login_button_text' => 'Log in with your myssodomain',
@ -166,3 +259,73 @@ Here is an example CSS config which hides the local login and makes space for a
[nextcloud-docker]: https://hub.docker.com/_/nextcloud/
[`abra`]: https://git.autonomic.zone/autonomic-cooperative/abra
[`coop-cloud/traefik`]: https://git.autonomic.zone/coop-cloud/traefik
## Using [`previewgenerator`](https://github.com/nextcloud/previewgenerator) app
> Beware, this appp has been known to not work...
After you install, enable etc. then you need to run the generation (**warning**: it can take a long time!):
```
abra app run <domain> app bash -u www-data
./occ preview:generate-all
```
To set up the cron to run again, there is [no clear solution in the context of
containers](https://github.com/nextcloud/previewgenerator/issues/1). So, a
pretty dodgy hack is to run it from the system directly:
```
root@foo.com /etc/cron.hourly $ cat foo-com-preview-generate
#!/bin/bash
docker exec -u www-data $(docker ps -f name=foo_com_app -q) ./occ preview:pre-generate
```
This app will improve performance of image browsing at the cost of storage space.
## Fulltextsearch using elasticsearch
1. Uncomment the following lines in your env file:
```
#COMPOSE_FILE="$COMPOSE_FILE:compose.fulltextsearch.yml"
#SECRET_ELASTICSEARCH_PASSWORD_VERSION=v1
```
2. Generate the secret for elasticsearch:
```bash
abra app secret generate <domain> elasticsearch_password v1
```
3. Deploy your app:
```bash
abra app deploy <domain>
```
4. Install the apps and configure them:
```
abra app cmd <domain> app install_fulltextsearch
```
5. You might need to configure the files_fulltextsearch app. run this command to check its settings:
```
abra app cmd <domain> app run_occ '"config:list files_fulltextsearch"
```
6. You can check if the nextcloud can connect to elasticsearch:
```
abra app cmd <domain> app run_occ '"fulltextsearch:test"'
```
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'
```

235
abra.sh
View File

@ -1,105 +1,178 @@
export FPM_TUNE_VERSION=v4
export NGINX_CONF_VERSION=v2
export MY_CNF_VERSION=v4
#!/bin/bash
NC_APP_DIR="app:/var/www/html"
export FPM_TUNE_VERSION=v5
export NGINX_CONF_VERSION=v8
export MY_CNF_VERSION=v6
export ENTRYPOINT_VERSION=v3
export ENTRYPOINT_WHITEBOARD_VERSION=v1
export ENTRYPOINT_TALK_VERSION=v1
export CRONTAB_VERSION=v1
export PG_BACKUP_VERSION=v2
sub_occ(){
# shellcheck disable=SC2034
abra__service_="app"
# shellcheck disable=SC2034
abra___user="www-data"
sub_app_run php /var/www/html/occ "$@"
run_occ() {
su -p www-data -s /bin/sh -c "/var/www/html/occ $@"
}
_backup_app() {
# Copied _abra_backup_dir to make UX better on restore and backup
{
abra__src_="$1"
abra__dst_="-"
}
# shellcheck disable=SC2154
FILENAME="$(basename "$1").tar"
debug "Copying '$1' to '$FILENAME'"
silence
mkdir -p /tmp/abra
sub_app_cp > /tmp/abra/$FILENAME
unsilence
install_apps() {
install_apps="$@"
if [ -z "$install_apps" ]; then
install_apps=$APPS
fi
for app in $install_apps; do
run_occ "app:install $app"
done
}
next_maintenance_on() {
silence
sub_occ maintenance:mode --on > /dev/null
unsilence
debug "Nextcloud maintenance mode enabled"
set_app_config() {
APP=$1
KEY=$2
VALUE=$3
run_occ "config:app:set $APP $KEY --value '$VALUE'"
}
next_maintenance_off() {
silence
sub_occ maintenance:mode --off > /dev/null
unsilence
debug "Nextcloud maintenance mode disabled"
set_system_config() {
KEY=$1
VALUE=$2
run_occ "config:system:set $KEY --value '$VALUE'"
}
abra_backup_app() {
# shellcheck disable=SC2154
ARK_FILENAME="$ABRA_BACKUP_DIR/${abra__app_}_app_$(date +%F).tar.gz"
# Cant be FILENAME as that gets changed by something
next_maintenance_on
_backup_app $NC_APP_DIR/config
_backup_app $NC_APP_DIR/data
_backup_app $NC_APP_DIR/themes
# Combine archives
tar -Af /tmp/abra/config.tar /tmp/abra/data.tar
tar -Af /tmp/abra/config.tar /tmp/abra/themes.tar
gzip /tmp/abra/config.tar -c > "$ARK_FILENAME"
rm /tmp/abra/*.tar
success "Backed up 'app' to $ARK_FILENAME"
next_maintenance_off
set_trusted_proxies() {
trusted_proxies="$@"
if [ -z "$1" ]; then
trusted_proxies="$TRUSTED_PROXIES"
fi
set_system_config trusted_proxies "$trusted_proxies"
}
abra_backup_db() {
next_maintenance_on
_abra_backup_mysql "db" "nextcloud"
next_maintenance_off
set_logfile_stdout() {
set_system_config logfile '/dev/stdout'
}
abra_backup() {
abra_backup_app && abra_backup_db
customize() {
if [ -z "$1" ]
then
echo "Usage: ... customize <assets_path>"
exit 1
fi
asset_dir=$1
for asset in $COPY_ASSETS; do
source=$(echo $asset | cut -d "|" -f1)
target=$(echo $asset | cut -d "|" -f2)
echo copy $source to $target
abra app cp $APP_NAME $asset_dir/$source $target
done
abra app cmd -T $APP_NAME app set_app_config theming color \"$THEMING_COLOR\"
abra app cmd -T $APP_NAME app set_app_config theming slogan \"$THEMING_SLOGAN\"
abra app cmd -T $APP_NAME app run_occ '"theming:config background \"/var/www/html/themes/flow_background.jpg\""'
abra app cmd -T $APP_NAME app run_occ '"theming:config logo \"/var/www/html/themes/icon_left_brand.svg\""'
abra app cmd -T $APP_NAME app run_occ '"theming:config logoheader \"/var/www/html/themes/icon.png\""'
}
install_bbb() {
install_apps bbb
set_app_config bbb app.navigation true
set_app_config bbb api.url "$BBB_URL"
set_app_config bbb api.secret "$(cat /run/secrets/bbb_secret)"
}
install_onlyoffice() {
install_apps onlyoffice
set_app_config onlyoffice DocumentServerUrl "$ONLYOFFICE_URL"
set_app_config onlyoffice jwt_secret "$(cat /run/secrets/onlyoffice_jwt)"
set_app_config onlyoffice customizationForcesave true
}
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)"
}
abra_restore_app() {
next_maintenance_on
# shellcheck disable=SC2034
{
abra__src_="-"
abra__dst_=$NC_APP_DIR
}
install_talk() {
install_apps spreed
run_occ "talk:signaling:add --verify 'wss://${TALK_DOMAIN}' '$(cat /run/secrets/talk_signaling_secret)'"
run_occ "talk:stun:add '${TALK_DOMAIN}:3478'"
run_occ "talk:stun:add '${TALK_DOMAIN}:443'"
run_occ "talk:turn:add --secret='$(cat /run/secrets/talk_turn_secret)' turn '${TALK_DOMAIN}:3478' udp,tcp"
zcat "$@" | sub_app_cp
next_maintenance_off
sub_occ files:scan --all > /dev/null # Needs to be run in normal mode
success "Restored 'app'"
}
# abra_restore_db() {
# warning "Restoring the database is on a existing app and not a new one has not been tested. Use with caution."
# next_maintenance_on
# # 3wc: unlike abra_backup_db, we can assume abra__service_ will be 'db' if we
# # got this far..
install_fulltextsearch() {
install_apps fulltextsearch
install_apps fulltextsearch_elasticsearch
install_apps files_fulltextsearch
set_app_config fulltextsearch search_platform "OCA\\FullTextSearch_Elasticsearch\\Platform\\ElasticSearchPlatform"
set_app_config fulltextsearch_elasticsearch elastic_host "http://elastic:$(cat /run/secrets/elasticsearch_password)@elasticsearch:9200/"
set_app_config fulltextsearch_elasticsearch elastic_index "nextcloud"
set_app_config files_fulltextsearch files_local "1"
}
# # shellcheck disable=SC2034
# abra___no_tty="true"
set_default_quota() {
set_app_config files default_quota "$DEFAULT_QUOTA"
}
# DB_PASSWORD=$(sub_app_run cat /run/secrets/db_password)
set_authentik() {
install_apps sociallogin
AUTHENTIK_SECRET=$(cat /run/secrets/authentik_secret)
AUTHENTIK_ID=$(cat /run/secrets/authentik_id)
set_system_config logo_url https://$AUTHENTIK_DOMAIN
set_app_config sociallogin custom_providers "
{
\"custom_oidc\":[
{
\"name\":\"$AUTHENTIK_USER_PREFIX\",
\"title\":\"authentik\",
\"authorizeUrl\": \"https://$AUTHENTIK_DOMAIN/application/o/authorize/\",
\"tokenUrl\": \"https://$AUTHENTIK_DOMAIN/application/o/token/\",
\"displayNameClaim\":\"preferred_username\",
\"userInfoUrl\": \"https://$AUTHENTIK_DOMAIN/application/o/userinfo/\",
\"logoutUrl\": \"https://$AUTHENTIK_DOMAIN/application/o/nextcloud/end-session/\",
\"clientId\":\"$AUTHENTIK_ID\",
\"clientSecret\":\"$AUTHENTIK_SECRET\",
\"scope\":\"openid profile email nextcloud\",
\"groupsClaim\":\"nextcloud_groups\",
\"style\":\"openid\",
\"defaultGroup\":\"\",
\"groupMapping\": {
\"admin\": \"admin\",
\"authentik Admins\": \"admin\"
}
}
]
}"
# zcat "$@" | sub_app_run mysql -u root -p"$DB_PASSWORD" wordpress
set_app_config sociallogin update_profile_on_login 1
set_app_config sociallogin auto_create_groups 1
set_app_config sociallogin hide_default_login 1
run_occ 'config:system:set social_login_auto_redirect --value true'
run_occ 'config:system:set allow_user_to_change_display_name --value=false'
run_occ 'config:system:set lost_password_link --value=disabled'
}
# success "Restored 'db'"
# next_maintenance_off
# }
disable_skeletondirectory() {
run_occ "config:system:set skeletondirectory --value ''"
}
set_windowsfriendly_filenames() {
run_occ 'config:system:set forbidden_filename_characters 0 --value=?'
run_occ 'config:system:set forbidden_filename_characters 1 --value=\<'
run_occ 'config:system:set forbidden_filename_characters 2 --value=\>'
run_occ 'config:system:set forbidden_filename_characters 3 --value=:'
run_occ 'config:system:set forbidden_filename_characters 4 --value=*'
run_occ 'config:system:set forbidden_filename_characters 5 --value=\|'
run_occ 'config:system:set forbidden_filename_characters 6 --value=\"'
}
upgrade_mariadb() {
mariadb-upgrade -p`cat /run/secrets/db_root_password`
}

24
alaconnect.yml Normal file
View File

@ -0,0 +1,24 @@
authentik:
uncomment:
- compose.authentik.yml
- AUTHENTIK_USER_PREFIX
- AUTHENTIK_DOMAIN
- SECRET_AUTHENTIK_SECRET_VERSION
- SECRET_AUTHENTIK_ID_VERSION
initial-hooks:
- app set_authentik
shared_secrets:
nextcloud_secret: authentik_secret
nextcloud_id: authentik_id
onlyoffice:
uncomment:
- compose.onlyoffice.yml
- ONLYOFFICE_URL
- SECRET_ONLYOFFICE_JWT_VERSION
initial-hooks:
- app install_onlyoffice
collabora:
uncomment:
- COLLABORA_URL
initial-hooks:
- app install_collabora

14
compose.authentik.yml Normal file
View File

@ -0,0 +1,14 @@
version: "3.8"
services:
app:
secrets:
- authentik_secret
- authentik_id
secrets:
authentik_secret:
external: true
name: ${STACK_NAME}_authentik_secret_${SECRET_AUTHENTIK_SECRET_VERSION}
authentik_id:
external: true
name: ${STACK_NAME}_authentik_id_${SECRET_AUTHENTIK_ID_VERSION}

12
compose.bbb.yml Normal file
View File

@ -0,0 +1,12 @@
version: "3.8"
services:
app:
secrets:
- bbb_secret
environment:
- BBB_URL
secrets:
bbb_secret:
external: true
name: ${STACK_NAME}_bbb_secret_${SECRET_BBB_SECRET_VERSION}

View File

@ -0,0 +1,55 @@
version: "3.8"
services:
elasticsearch:
image: "docker.elastic.co/elasticsearch/elasticsearch:8.17.2"
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
# Disable authentication and ssl completely
# - xpack.security.enabled=false
# Use this to enable Basic Authentication:
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=false
- ELASTIC_PASSWORD_FILE=/var/run/secrets/elasticsearch_password
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch:/usr/share/elasticsearch/data
networks:
- internal
secrets:
- source: elasticsearch_password
uid: "1000"
gid: "1000"
mode: 0600
searchindexer:
image: nextcloud:31.0.6-fpm
volumes:
- nextcloud:/var/www/html/
- nextapps:/var/www/html/custom_apps:cached
- nextdata:/var/www/html/data:cached
- nextconfig:/var/www/html/config:cached
- ${EXTRA_VOLUME}
networks:
- internal
entrypoint: su -p www-data -s /bin/sh -c '/var/www/html/occ fulltextsearch:live'
# Add the secret to the app service so it is avaiable in the
# install_fulltextsearch command
app:
secrets:
- elasticsearch_password
secrets:
elasticsearch_password:
external: true
name: ${STACK_NAME}_elasticsearch_password_${SECRET_ELASTICSEARCH_PASSWORD_VERSION}
volumes:
elasticsearch:

View File

@ -9,12 +9,14 @@ services:
- MYSQL_PASSWORD_FILE=/run/secrets/db_password
db:
image: "mariadb:10.5"
image: "mariadb:11.4"
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
@ -27,14 +29,25 @@ services:
- internal
deploy:
labels:
backupbot.backup: "true"
backupbot.backup.pre-hook: 'mkdir -p /tmp/backup/ && mysqldump --single-transaction -u root -p"$$(cat /run/secrets/db_root_password)" nextcloud > /tmp/backup/backup.sql'
backupbot.backup.post-hook: "rm -rf /tmp/backup"
backupbot.backup.path: "/tmp/backup/"
backupbot.backup.pre-hook: 'mariadb-dump --single-transaction -u root -p"$$(cat /run/secrets/db_root_password)" nextcloud > /var/lib/mysql/backup.sql'
backupbot.backup.volumes.mariadb.path: "backup.sql"
backupbot.restore.post-hook: 'mariadb -u root -p"$$(cat /run/secrets/db_root_password)" nextcloud < /var/lib/mysql/backup.sql'
healthcheck:
test: ["CMD-SHELL", 'mariadb-admin -p"$$(cat /run/secrets/db_root_password)" ping']
interval: 30s
timeout: 10s
retries: 10
start_period: 1m
configs:
my_tune:
name: ${STACK_NAME}_my_cnf_${MY_CNF_VERSION}
file: my-tune.cnf
template_driver: golang
secrets:
db_root_password:
external: true
name: ${STACK_NAME}_db_root_password_${SECRET_DB_ROOT_PASSWORD_VERSION}
volumes:
mariadb:

12
compose.onlyoffice.yml Normal file
View File

@ -0,0 +1,12 @@
version: "3.8"
services:
app:
secrets:
- onlyoffice_jwt
environment:
- ONLYOFFICE_URL
secrets:
onlyoffice_jwt:
external: true
name: ${STACK_NAME}_onlyoffice_jwt_${SECRET_ONLYOFFICE_JWT_VERSION}

View File

@ -2,7 +2,6 @@ version: '3.8'
services:
app:
entrypoint: "sh -c 'sleep 10 && /entrypoint.sh php-fpm'" # tries to mitigate this error with postgres https://github.com/nextcloud/docker/issues/1204
environment:
- POSTGRES_HOST=db
- POSTGRES_DB=nextcloud
@ -11,28 +10,37 @@ services:
- NEXTCLOUD_UPDATE=1
db:
image: "postgres:12"
image: "postgres:13"
command: -c "max_connections=${MAX_DB_CONNECTIONS:-100}"
volumes:
- "postgres:/var/lib/postgresql/data"
networks:
- internal
environment:
POSTGRES_USER: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
POSTGRES_DB: nextcloud
POSTGRES_DB: nextcloud
secrets:
- db_password
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
test: ["CMD-SHELL", "pg_isready", "-U", "nextcloud"]
interval: 10s
timeout: 5s
retries: 5
deploy:
labels:
backupbot.backup: "true"
backupbot.backup.pre-hook: "mkdir -p /tmp/backup/ && PGPASSWORD=$$(cat $${POSTGRES_PASSWORD_FILE}) pg_dump -U $${POSTGRES_USER} $${POSTGRES_DB} > /tmp/backup/backup.sql"
backupbot.backup.post-hook: "rm -rf /tmp/backup"
backupbot.backup.path: "/tmp/backup/"
backupbot.backup.pre-hook: "/pg_backup.sh backup"
backupbot.backup.volumes.postgres.path: "backup.sql"
backupbot.restore.post-hook: '/pg_backup.sh restore'
configs:
- source: pg_backup
target: /pg_backup.sh
mode: 0555
volumes:
postgres:
configs:
pg_backup:
name: ${STACK_NAME}_pg_backup_${PG_BACKUP_VERSION}
file: pg_backup.sh

19
compose.smtp.yml Normal file
View File

@ -0,0 +1,19 @@
version: "3.8"
services:
app:
secrets:
- smtp_password
environment:
- SMTP_AUTHTYPE
- SMTP_HOST
- SMTP_SECURE
- SMTP_NAME
- SMTP_PORT
- SMTP_PASSWORD_FILE=/run/secrets/smtp_password
- MAIL_FROM_ADDRESS
- MAIL_DOMAIN
secrets:
smtp_password:
external: true
name: ${STACK_NAME}_smtp_password_${SECRET_SMTP_PASSWORD_VERSION}

70
compose.talk.yml Normal file
View File

@ -0,0 +1,70 @@
version: "3.8"
services:
talk:
image: "nextcloud/aio-talk:20251128_084214"
environment:
- NC_DOMAIN=${DOMAIN}
- TALK_HOST=${TALK_DOMAIN}
- TZ
- TALK_PORT=3478
- INTERNAL_SECRET_FILE=/run/secrets/talk_internal_secret
- TURN_SECRET_FILE=/run/secrets/talk_turn_secret
- SIGNALING_SECRET_FILE=/run/secrets/talk_signaling_secret
deploy:
labels:
- traefik.enable=true
- traefik.docker.network=proxy
- traefik.http.services.${STACK_NAME}_talk.loadbalancer.server.port=8081
- traefik.http.routers.${STACK_NAME}_talk.rule=Host(`${TALK_DOMAIN}`)
- traefik.http.routers.${STACK_NAME}_talk.entrypoints=web-secure
- traefik.http.routers.${STACK_NAME}_talk.tls.certresolver=${LETS_ENCRYPT_ENV}
- traefik.tcp.routers.${STACK_NAME}_nextcloud-talk-hpb.rule=HostSNI(`*`)
- traefik.tcp.routers.${STACK_NAME}_nextcloud-talk-hpb.entrypoints=nextcloud-talk-hpb
- traefik.tcp.routers.${STACK_NAME}_nextcloud-talk-hpb.service=${STACK_NAME}_nextcloud-talk-hpb-svc
- traefik.tcp.services.${STACK_NAME}_nextcloud-talk-hpb-svc.loadbalancer.server.port=3478
- traefik.udp.routers.${STACK_NAME}_nextcloud-talk-hpb-udp.entrypoints=nextcloud-talk-hpb-udp
- traefik.udp.routers.${STACK_NAME}_nextcloud-talk-hpb-udp.service=${STACK_NAME}_nextcloud-talk-hpb-udp-svc
- traefik.udp.services.${STACK_NAME}_nextcloud-talk-hpb-udp-svc.loadbalancer.server.port=3478
networks:
- proxy
configs:
- source: entrypoint_talk
target: /custom-entrypoint.sh
mode: 775
entrypoint: /custom-entrypoint.sh
secrets:
- source: talk_internal_secret
uid: "1000"
gid: "122"
mode: 0600
- source: talk_turn_secret
uid: "1000"
gid: "122"
mode: 0600
- source: talk_signaling_secret
uid: "1000"
gid: "122"
mode: 0600
app:
secrets:
- talk_turn_secret
- talk_signaling_secret
secrets:
talk_internal_secret:
external: true
name: ${STACK_NAME}_talk_internal_secret_${SECRET_TALK_INTERNAL_SECRET_VERSION}
talk_turn_secret:
external: true
name: ${STACK_NAME}_talk_turn_secret_${SECRET_TALK_TURN_SECRET_VERSION}
talk_signaling_secret:
external: true
name: ${STACK_NAME}_talk_signaling_secret_${SECRET_TALK_SIGNALING_SECRET_VERSION}
configs:
entrypoint_talk:
name: ${STACK_NAME}_entrypoint_talk_${ENTRYPOINT_TALK_VERSION}
file: entrypoint.talk.sh.tmpl
template_driver: golang

44
compose.whiteboard.yml Normal file
View File

@ -0,0 +1,44 @@
version: "3.8"
services:
app:
secrets:
- whiteboard_jwt
whiteboard:
image: ghcr.io/nextcloud-releases/whiteboard:v1.1.2
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

View File

@ -1,13 +1,19 @@
version: "3.8"
services:
web:
image: nginx:1.21.6
image: nginx:1.29.0
depends_on:
- app
configs:
- source: nginx_conf
target: /etc/nginx/nginx.conf
environment:
- X_FRAME_OPTIONS_ALLOW_FROM
- X_FRAME_OPTIONS_ENABLED
- DOMAIN
- STACK_NAME
- HSTS_ENABLED
- HSTS_PRELOAD
volumes:
- nextcloud:/var/www/html/
- nextapps:/var/www/html/custom_apps:cached
@ -29,33 +35,53 @@ services:
- "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"
- "traefik.http.middlewares.${STACK_NAME}-redirect.headers.SSLForceHost=true"
- "traefik.http.middlewares.${STACK_NAME}-redirect.headers.SSLHost=${DOMAIN}"
- "traefik.http.middlewares.${STACK_NAME}-redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares.${STACK_NAME}-redirect.redirectscheme.permanent=true"
- "caddy=${DOMAIN}"
- "caddy.reverse_proxy={{upstreams 80}}"
- "caddy.tls.on_demand="
healthcheck:
test: ["CMD-SHELL", 'curl -s -N curl -Ns localhost/status.php | grep "installed\":true"']
interval: 30s
timeout: 10s
retries: 10
start_period: 5m
app:
image: nextcloud:24.0.0-fpm
image: nextcloud:31.0.6-fpm
depends_on:
- db
configs:
- source: fpm_tune
target: /usr/local/etc/php-fpm.d/fpm-tune.conf
target: /usr/local/etc/php-fpm.d/zzz-fpm-tune.conf
- source: entrypoint
target: /custom-entrypoint.sh
mode: 555
entrypoint: /custom-entrypoint.sh
secrets:
- db_password
- admin_password
environment:
- APPS
- OCC_CMDS
- X_FRAME_OPTIONS_ALLOW_FROM
- X_FRAME_OPTIONS_ENABLED
- DOMAIN
- STACK_NAME
- NEXTCLOUD_ADMIN_USER=${ADMIN_USER}
- NEXTCLOUD_ADMIN_PASSWORD_FILE=/run/secrets/admin_password
- NEXTCLOUD_TRUSTED_DOMAINS=${DOMAIN}
- TRUSTED_PROXIES=traefik
- TRUSTED_PROXIES=10.0.0.0/8
- REDIS_HOST=cache
- SMTP_HOST
- MAIL_FROM_ADDRESS
- MAIL_DOMAIN
- SMTP_AUTHTYPE=PLAIN
- OVERWRITEPROTOCOL=https
- PHP_MEMORY_LIMIT=1G
- 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}
- FPM_MAX_SPARE_SERVERS=${FPM_MAX_SPARE_SERVERS:-98}
- DEFAULT_QUOTA
volumes:
- nextcloud:/var/www/html/
- nextapps:/var/www/html/custom_apps:cached
@ -69,13 +95,21 @@ services:
failure_action: rollback
order: start-first
labels:
- "coop-cloud.${STACK_NAME}.version=2.1.0+24.0.0-fpm"
- "backupbot.backup=true"
- "backupbot.backup.path=/var/www/html/config/,/var/www/html/data/,/var/www/html/custom_apps/"
- "coop-cloud.${STACK_NAME}.version=12.0.1+31.0.6-fpm"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}"
- "backupbot.backup=${ENABLE_BACKUPS:-true}"
- "backupbot.backup.volumes.redis=false"
#- "backupbot.backup.volumes.nextcloud=false"
healthcheck:
test: ["CMD-SHELL", 'SCRIPT_NAME=status SCRIPT_FILENAME=/var/www/html/status.php REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000 | grep "installed\":true"']
interval: 30s
timeout: 10s
retries: 10
start_period: 15m
cron:
image: nextcloud:24.0.0-fpm
image: nextcloud:31.0.6-fpm
volumes:
- nextcloud:/var/www/html/
- nextapps:/var/www/html/custom_apps:cached
@ -85,21 +119,27 @@ services:
networks:
- internal
entrypoint: /cron.sh
configs:
- source: crontab
target: /var/spool/cron/crontabs/www-data
cache:
image: redis:7.0.0-alpine
image: redis:8.0.2-alpine
networks:
- internal
volumes:
- "redis:/data"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 3s
timeout: 5s
retries: 20
secrets:
db_root_password:
external: true
name: ${STACK_NAME}_db_root_password_${SECRET_DB_ROOT_PASSWORD_VERSION}
db_password:
external: true
name: ${STACK_NAME}_db_password_${SECRET_DB_ROOT_PASSWORD_VERSION}
name: ${STACK_NAME}_db_password_${SECRET_DB_PASSWORD_VERSION}
admin_password:
external: true
name: ${STACK_NAME}_admin_password_${SECRET_ADMIN_PASSWORD_VERSION}
@ -111,6 +151,7 @@ volumes:
nextconfig:
redis:
configs:
nginx_conf:
name: ${STACK_NAME}_nginx_${NGINX_CONF_VERSION}
@ -119,6 +160,14 @@ configs:
fpm_tune:
name: ${STACK_NAME}_fpm_tune_${FPM_TUNE_VERSION}
file: fpm-tune.ini
template_driver: golang
entrypoint:
name: ${STACK_NAME}_entrypoint_${ENTRYPOINT_VERSION}
file: entrypoint.sh.tmpl
template_driver: golang
crontab:
name: ${STACK_NAME}_crontab_${CRONTAB_VERSION}
file: crontab
networks:
proxy:

View File

@ -1,55 +0,0 @@
#!/bin/bash
set -eu
app_name=$1
domain=$2
secret=$3
sub_occ(){
abra app run --user www-data $app_name app /var/www/html/occ "$@"
}
# Install apps
sub_occ app:install calendar || true
sub_occ app:install sociallogin || true
sub_occ app:install onlyoffice || true
# Disable Dashboard
sub_occ app:disable dashboard || true
# Configure SSO
sub_occ config:app:set sociallogin custom_providers --value="
{
\"custom_oidc\": [
{
\"name\": \"authentik\",
\"title\": \"Login\",
\"authorizeUrl\": \"https://$domain/application/o/authorize/\",
\"tokenUrl\": \"https://$domain/application/o/token/\",
\"displayNameClaim\": \"preferred_username\",
\"userInfoUrl\": \"https://$domain/application/o/userinfo/\",
\"logoutUrl\": \"https://$domain/application/o/nextcloud/end-session/\",
\"clientId\": \"nextcloud\",
\"clientSecret\": \"$secret\",
\"scope\": \"openid profile email nextcloud\",
\"groupsClaim\": \"nextcloud_groups\",
\"style\": \"openid\",
\"defaultGroup\": \"\",
\"groupMapping\": {
\"admin\": \"admin\"
}
}
]
}"
sub_occ config:app:set sociallogin update_profile_on_login --value 1
sub_occ config:app:set sociallogin auto_create_groups --value 1
sub_occ config:app:set sociallogin hide_default_login --value 1
sub_occ config:system:set allow_user_to_change_display_name --value=false
sub_occ config:system:set lost_password_link --value=disabled
sub_occ config:system:set social_login_auto_redirect --value=true
abra app run --user www-data $app_name app cat config/config.php

1
crontab Normal file
View File

@ -0,0 +1 @@
*/5 * * * * php -d memory_limit=1G -f /var/www/html/cron.php

41
entrypoint.sh.tmpl Normal file
View File

@ -0,0 +1,41 @@
#!/bin/bash
set -eu
file_env() {
local var="$1"
local fileVar="${var}_FILE"
local def="${2:-}"
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
exit 1
fi
local val="$def"
if [ "${!var:-}" ]; then
val="${!var}"
elif [ "${!fileVar:-}" ]; then
val="$(< "${!fileVar}")"
fi
export "$var"="$val"
unset "$fileVar"
}
file_env "SMTP_PASSWORD"
echo "Giving the db container some time to come up"; sleep 20
# see this issue with postgres db https://github.com/nextcloud/docker/issues/1204
{{ if eq (env "X_FRAME_OPTIONS_ENABLED") "1" }}
if ! [[ $(grep {{ env "X_FRAME_OPTIONS_ALLOW_FROM" }} lib/public/AppFramework/Http/ContentSecurityPolicy.php) ]]; then
sed -i "91 a\\\t\t'{{ env "X_FRAME_OPTIONS_ALLOW_FROM" }}', " lib/public/AppFramework/Http/ContentSecurityPolicy.php
fi
{{ end }}
# Required for healthcheck
which cgi-fcgi > /dev/null || (apt-get update && apt-get install -y libfcgi-bin)
/entrypoint.sh php-fpm

30
entrypoint.talk.sh.tmpl Normal file
View File

@ -0,0 +1,30 @@
#!/bin/bash
set -eu
file_env() {
local var="$1"
local fileVar="${var}_FILE"
local def="${2:-}"
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
exit 1
fi
local val="$def"
if [ "${!var:-}" ]; then
val="${!var}"
elif [ "${!fileVar:-}" ]; then
val="$(< "${!fileVar}")"
fi
export "$var"="$val"
unset "$fileVar"
}
file_env "INTERNAL_SECRET"
file_env "TURN_SECRET"
file_env "SIGNALING_SECRET"
/start.sh supervisord -c /supervisord.conf

View File

@ -0,0 +1,6 @@
#!/bin/sh
set -e
export JWT_SECRET_KEY=$(cat /run/secrets/whiteboard_jwt)
exec npm run server:start

View File

@ -1,5 +1,5 @@
pm = dynamic
pm.max_children = 131
pm.start_servers = 32
pm.min_spare_servers = 32
pm.max_spare_servers = 98
pm.max_children = {{ env "FPM_MAX_CHILDREN" }}
pm.start_servers = {{ env "FPM_START_SERVERS" }}
pm.min_spare_servers = {{ env "FPM_MIN_SPARE_SERVERS" }}
pm.max_spare_servers = {{ env "FPM_MAX_SPARE_SERVERS" }}

View File

@ -4,7 +4,7 @@
# https://mariadb.com/kb/en/library/performance-schema-overview/
[server]
innodb_buffer_pool_size = 1G
innodb_buffer_pool_size = {{ env "INNODB_BUFFER_POOL_SIZE" }}
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
@ -13,7 +13,7 @@ key_buffer_size = 16M
innodb_log_file_size = 256M
long_query_time = 1
max_allowed_packet = 256M
max_connections = 100
max_connections = {{ env "MAX_DB_CONNECTIONS" }}
max_heap_table_size = 64M
max_user_connections = 0
myisam_recover_options = BACKUP

View File

@ -11,6 +11,10 @@ events {
http {
include /etc/nginx/mime.types;
# See https://github.com/nextcloud/forms/issues/1838#issuecomment-1860497200
types {
application/javascript js mjs;
}
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
@ -41,6 +45,14 @@ 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;
fastcgi_buffers 64 4K;
@ -58,13 +70,19 @@ http {
#pagespeed off;
# HTTP response headers borrowed from Nextcloud `.htaccess`
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "noindex, nofollow" always;
add_header X-XSS-Protection "1; mode=block" always;
{{ if eq (env "X_FRAME_OPTIONS_ENABLED") "1" }}
add_header Content-Security-Policy "frame-ancestors {{ env "X_FRAME_OPTIONS_ALLOW_FROM" }} {{ env "DOMAIN" }}";
{{ else }}
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
{{ end }}
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
@ -125,6 +143,9 @@ http {
# then Nginx will encounter an infinite rewriting loop when it prepends `/index.php`
# to the URI, resulting in a HTTP 500 error response.
location ~ \.php(?:$|/) {
# Required for legacy support
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode(_arm64)?\/proxy) /index.php$request_uri;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;

34
pg_backup.sh Normal file
View File

@ -0,0 +1,34 @@
#!/bin/bash
set -e
BACKUP_FILE='/var/lib/postgresql/data/backup.sql'
function backup {
export PGPASSWORD=$(cat /run/secrets/db_password)
pg_dump -U ${POSTGRES_USER} ${POSTGRES_DB} > $BACKUP_FILE
}
function restore {
cd /var/lib/postgresql/data/
restore_config(){
# Restore allowed connections
cat pg_hba.conf.bak > pg_hba.conf
su postgres -c 'pg_ctl reload'
}
# Don't allow any other connections than local
cp pg_hba.conf pg_hba.conf.bak
echo "local all all trust" > pg_hba.conf
su postgres -c 'pg_ctl reload'
trap restore_config EXIT INT TERM
# Recreate Database
psql -U ${POSTGRES_USER} -d postgres -c "DROP DATABASE ${POSTGRES_DB} WITH (FORCE);"
createdb -U ${POSTGRES_USER} ${POSTGRES_DB}
psql -U ${POSTGRES_USER} -d ${POSTGRES_DB} -1 -f $BACKUP_FILE
trap - EXIT INT TERM
restore_config
}
$@

View File

@ -0,0 +1 @@
https://docs.nextcloud.com/server/latest/admin_manual/release_notes/upgrade_to_30.html

View File

@ -0,0 +1,4 @@
Upgrades mariadb from 10.5 to 11.4
NOTE: If your Nextcloud instance is using mariadb, after running this update you MUST run the database upgrade command:
`abra app command nextcloud.yourserver.org db upgrade_mariadb`
More info: https://mariadb.com/kb/en/upgrading-from-mariadb-10-11-to-mariadb-11-4/

57
release/3.1.0+25.0.1-fpm Normal file
View File

@ -0,0 +1,57 @@
## FPM Tune
The fpm-tune.ini settings are now configurable by `.env`. Please add this to your servers configs:
```
# fpm-tune, see: https://spot13.com/pmcalculator/
FPM_MAX_CHILDREN=131
FPM_START_SERVERS=32
FPM_MIN_SPARE_SERVERS=32
FPM_MAX_SPARE_SERVERS=98
```
## SMTP
Add SMTP Config to your .env file:
```
# COMPOSE_FILE="$COMPOSE_FILE:compose.smtp.yml"
# See https://github.com/nextcloud/docker#auto-configuration-via-environment-variables for default values
# SMTP_AUTHTYPE=
# SMTP_HOST=
# SMTP_SECURE=
# SMTP_NAME=
# SMTP_PORT=
# MAIL_FROM_ADDRESS=
# MAIL_DOMAIN=
# SECRET_SMTP_PASSWORD_VERSION=v1
abra app secret insert example.com smtp_password v1 example_password
```
## Post Deploy Commands
Some Apps can also be managed with abra app cmd!
```
# COMPOSE_FILE="$COMPOSE_FILE:compose.apps.yml"
# APPS="calendar sociallogin onlyoffice"
abra app cmd example.com app install_apps
# ONLYOFFICE_URL=https://onlyoffice.example.com
# SECRET_ONLYOFFICE_JWT_VERSION=v1
abra app secret insert example.com onlyoffice_jwt v1 example_password
abra app cmd example.com app install_onlyoffice
# BBB_URL=https://talk.example.org/bigbluebutton/ # trailing slash!
# SECRET_BBB_SECRET_VERSION=v1
abra app secret insert example.com bbb_secret v1 example_password
abra app cmd example.com app install_bbb
```
## Set Quota
```
# DEFAULT_QUOTA="10 GB"
abra app cmd example.com app set_default_quota
```

11
release/3.2.0+25.0.4-fpm Normal file
View File

@ -0,0 +1,11 @@
If the authentik configuration should be handled by abra add the following to the env:
COMPOSE_FILE="$COMPOSE_FILE:compose.authentik.yml"
AUTHENTIK_USER_PREFIX=authentik
AUTHENTIK_DOMAIN=authentik.example.com
AUTHENTIK_SECRET_NAME=authentik_example_com_nextcloud_secret_v1 # the same as in authentik
AUTHENTIK_ID_NAME=authentik_example_com_nextcloud_id_v1 # the same as in authentik
And run:
abra app cmd <app-name> app set_authentik

1
release/5.0.1+27.0.1-fpm Normal file
View File

@ -0,0 +1 @@
The authentik secrets need to be inserted again, as nextcloud is not sharing the secret with authentik any more.

1
release/8.0.0+29.0.1-fpm Normal file
View File

@ -0,0 +1 @@
BREAKING CHANGE: compose.apps.yml is now split for bbb and onlyoffice, configs must be updated

1
release/9.1.0+29.0.5-fpm Normal file
View File

@ -0,0 +1 @@
Added automated customization options. Config needs to be updated to be able to use it.