forked from coop-cloud/nextcloud
Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bc7a2aa62b | |||
| 519453c398 | |||
| 3d7dfed415 | |||
| 8b7ed8142e | |||
| 87b064c773 | |||
| d6a77fac4d | |||
| f27ea1a2cc | |||
| c952020194 | |||
| aa3ab83a38 | |||
| dbdf6227e1 | |||
| e83ae638eb | |||
| 96e9a224f3 | |||
| afee08ae4d | |||
| 5f05ab8f42 | |||
| 65d5af91bc | |||
| 93037e1a35 | |||
| 9986e87db5 | |||
| 42c90cce21 |
+9
-6
@@ -1,5 +1,5 @@
|
||||
TYPE=nextcloud
|
||||
TIMEOUT=900
|
||||
#TIMEOUT=900
|
||||
ENABLE_AUTO_UPDATE=true
|
||||
ENABLE_BACKUPS=true
|
||||
|
||||
@@ -15,6 +15,7 @@ COMPOSE_FILE="$COMPOSE_FILE:compose.mariadb.yml"
|
||||
#MAX_DB_CONNECTIONS=500
|
||||
|
||||
ADMIN_USER=admin
|
||||
TZ=Etc/UTC
|
||||
|
||||
SECRET_DB_ROOT_PASSWORD_VERSION=v1
|
||||
SECRET_DB_PASSWORD_VERSION=v1
|
||||
@@ -23,6 +24,7 @@ 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
|
||||
@@ -81,15 +83,16 @@ DEFAULT_QUOTA="10 GB"
|
||||
# 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
|
||||
|
||||
# Image / PDF previews with Imaginary (see README)
|
||||
#COMPOSE_FILE="$COMPOSE_FILE:compose.imaginary-preview.yml"
|
||||
#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
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
# Nextcloud Recipe Maintenance
|
||||
|
||||
> Status: **DRAFT** — open for discussion with co-maintainers and the wider
|
||||
> federation. Sections marked _(TBD)_ need collective input before this
|
||||
> document is considered ratified.
|
||||
|
||||
This document describes how the Nextcloud recipe is maintained. It builds on
|
||||
the floor set by [Federation Resolution
|
||||
025](https://docs.coopcloud.tech/federation/resolutions/passed/025/) and
|
||||
follows the [`MAINTENANCE.md`
|
||||
template](https://docs.coopcloud.tech/maintainers/maintain/#maintenancemd-template)
|
||||
described in the Co-op Cloud maintainers' docs.
|
||||
|
||||
All contributions should be made via a pull request so that quality and
|
||||
consistency stay something others can rely on.
|
||||
|
||||
## Maintainers
|
||||
|
||||
Everyone can apply to be a recipe maintainer.
|
||||
Simply add your self to the list in the README.md and open a new pull request
|
||||
with the change.
|
||||
|
||||
## Maintainer Responsibilities
|
||||
|
||||
This recipe commits to the following, which is tighter than the floor set by
|
||||
Resolution 025 (stable-recipe category). However, these timelines are
|
||||
best-effort, so we aim for them as good as possible:
|
||||
|
||||
- Respond to PRs / issues within 3 working days
|
||||
- Apply security patches within 1 week of disclosure
|
||||
- Ship patch / minor image updates within 2 weeks of upstream release
|
||||
- Adopt major Nextcloud version updates within 1 release cycle of upstream
|
||||
EOL of the previous major (see below)
|
||||
- Keep documentation current
|
||||
|
||||
In order to meet these responsibilities each maintainer:
|
||||
|
||||
- Watches the repository so notifications arrive
|
||||
- Keeps an eye on [Renovate](./renovate.json) updates and helps shepherd them through
|
||||
- Has a working contact (Matrix handle or email) reachable by the others
|
||||
|
||||
## Release cadence
|
||||
|
||||
The intent is to **track Nextcloud's own release schedule** rather than invent
|
||||
our own. In practice this means:
|
||||
|
||||
- **Patch releases (e.g. `32.0.x`)**: published to this recipe shortly after
|
||||
upstream, ideally within 1 week. `chore(deps)` opens the PRs; a maintainer
|
||||
reviews the release notes and Nextcloud's issue tracker, and merges the PR
|
||||
if it is OK.
|
||||
- **Minor releases**: same flow as patch releases, but one of the maintainer
|
||||
tests it on their own instance before merging.
|
||||
- **Major releases (e.g. `32 → 33`)**: not adopted on day one. We wait for the
|
||||
first one or two upstream patch releases of the new major to land
|
||||
(typically 1–2 months) before promoting it here, to avoid passing the
|
||||
early-adopter cost to operators. Major bumps get their own PR with release
|
||||
notes and an upgrade-path check.
|
||||
Before adding a major release, the following needs to be done:
|
||||
- at least two maintainers update one of their production instances to the
|
||||
new version
|
||||
- the previous release gets a last update pointing to the docker image
|
||||
versions nextcloud:xx-fpm, so that users can auto-update if they wish so
|
||||
- the new release is added to this repo
|
||||
- If people have the time it would be nice to create specially tagged versions
|
||||
for major releases, which reflect that this is 'bleeding edge' and has not
|
||||
been thoroughly tested.
|
||||
- **Co-installed components** (Talk HPB, OnlyOffice, Whiteboard, etc.) are
|
||||
bumped alongside or shortly after the matching Nextcloud release.
|
||||
|
||||
## Pull Requests
|
||||
|
||||
A pull request can be merged once it is approved by at least one maintainer.
|
||||
PRs opened by a maintainer need approval from another maintainer. With three
|
||||
maintainers this is workable; if the group shrinks, the rule should be
|
||||
revisited.
|
||||
|
||||
Approvals should ideally include a smoke test on a real instance for anything
|
||||
beyond a patch bump — Nextcloud upgrades have a long history of surprising us
|
||||
(see the [upgrade notes in `README.md`](./README.md#upgrading-nextcloud)),
|
||||
and silent CI is not enough.
|
||||
|
||||
## Becoming a maintainer
|
||||
|
||||
Everyone is welcome to apply:
|
||||
|
||||
1. Watch the repository so you get notifications.
|
||||
2. Open a pull request adding yourself to the `Maintainer` line in
|
||||
[`README.md`](./README.md) and to the list above.
|
||||
3. Once an existing maintainer merges the PR, you'll be added to the
|
||||
[nextcloud maintainers
|
||||
team](https://git.coopcloud.tech/org/coop-cloud/teams/nextcloud-maintainers)
|
||||
_(team to be created if it does not yet exist — TBD)_.
|
||||
|
||||
Stepping down is symmetrical: open a PR removing yourself, and flag it in
|
||||
the federation channels so the group can plan replacement before falling
|
||||
below the Res. 025 floor of one named maintainer.
|
||||
@@ -5,6 +5,7 @@
|
||||
Fully automated luxury Nextcloud via docker-swarm.
|
||||
|
||||
<!-- metadata -->
|
||||
* **Maintainer**: [@dannygroenewegen](https://git.coopcloud.tech/dannygroenewegen), [@ineiti](https://git.coopcloud.tech/ineiti)
|
||||
* **Category**: Apps
|
||||
* **Status**: 5
|
||||
* **Image**: [`nextcloud`](https://hub.docker.com/_/nextcloud), 4, upstream
|
||||
@@ -26,6 +27,7 @@ Fully automated luxury Nextcloud via docker-swarm.
|
||||
### Onlyoffice Integration
|
||||
|
||||
`abra app config <app-name>`
|
||||
|
||||
Configure the following envs:
|
||||
```
|
||||
COMPOSE_FILE="$COMPOSE_FILE:compose.apps.yml"
|
||||
@@ -33,12 +35,13 @@ 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`
|
||||
* `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"
|
||||
@@ -46,8 +49,44 @@ 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`
|
||||
* `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
|
||||
|
||||
@@ -64,21 +103,18 @@ 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
|
||||
@@ -249,20 +285,6 @@ docker exec -u www-data $(docker ps -f name=foo_com_app -q) ./occ preview:pre-ge
|
||||
|
||||
This app will improve performance of image browsing at the cost of storage space.
|
||||
|
||||
## Better image previews with `imaginary`
|
||||
|
||||
1. Run `abra app config <domain>` and uncomment the line `#COMPOSE_FILE="$COMPOSE_FILE:compose.imaginary-preview.yml"`.
|
||||
2. Re-deploy the app (`abra app deploy <domain> --force`)
|
||||
3. Edit `/var/www/config/config.php` and add:
|
||||
|
||||
```
|
||||
'enabledPreviewProviders' =>
|
||||
array (
|
||||
0 => 'OC\\Preview\\Imaginary',
|
||||
),
|
||||
'preview_imaginary_url' => 'http://imaginary:9000',
|
||||
```
|
||||
|
||||
## Fulltextsearch using elasticsearch
|
||||
|
||||
1. Uncomment the following lines in your env file:
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
export FPM_TUNE_VERSION=v5
|
||||
export NGINX_CONF_VERSION=v8
|
||||
export MY_CNF_VERSION=v5
|
||||
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
|
||||
|
||||
@@ -12,13 +13,6 @@ 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
|
||||
@@ -104,6 +98,15 @@ install_whiteboard() {
|
||||
}
|
||||
|
||||
|
||||
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"
|
||||
|
||||
}
|
||||
|
||||
install_fulltextsearch() {
|
||||
install_apps fulltextsearch
|
||||
install_apps fulltextsearch_elasticsearch
|
||||
|
||||
@@ -29,7 +29,7 @@ services:
|
||||
mode: 0600
|
||||
|
||||
searchindexer:
|
||||
image: nextcloud:31.0.6-fpm
|
||||
image: nextcloud:32.0.3-fpm
|
||||
volumes:
|
||||
- nextcloud:/var/www/html/
|
||||
- nextapps:/var/www/html/custom_apps:cached
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
version: '3.8'
|
||||
services:
|
||||
imaginary:
|
||||
image: nextcloud/aio-imaginary:20250822_112758
|
||||
environment:
|
||||
- PORT=9000
|
||||
command: -concurrency 50 -enable-url-source -log-level debug
|
||||
networks:
|
||||
- internal
|
||||
@@ -16,6 +16,7 @@ services:
|
||||
- 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
|
||||
|
||||
@@ -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
|
||||
@@ -6,7 +6,7 @@ services:
|
||||
- whiteboard_jwt
|
||||
|
||||
whiteboard:
|
||||
image: ghcr.io/nextcloud-releases/whiteboard:v1.1.2
|
||||
image: ghcr.io/nextcloud-releases/whiteboard:v1.5.0
|
||||
deploy:
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
|
||||
+10
-9
@@ -1,7 +1,7 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
web:
|
||||
image: nginx:1.29.0
|
||||
image: nginx:1.29.4
|
||||
depends_on:
|
||||
- app
|
||||
configs:
|
||||
@@ -35,20 +35,20 @@ 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"']
|
||||
test: ["CMD-SHELL", "curl -fsS http://localhost/status.php | grep -q '\"installed\":true'"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 5m
|
||||
|
||||
app:
|
||||
image: nextcloud:31.0.6-fpm
|
||||
image: nextcloud:32.0.3-fpm
|
||||
depends_on:
|
||||
- db
|
||||
configs:
|
||||
@@ -76,6 +76,7 @@ services:
|
||||
- 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,8 +95,8 @@ services:
|
||||
failure_action: rollback
|
||||
order: start-first
|
||||
labels:
|
||||
- "coop-cloud.${STACK_NAME}.version=12.0.1+31.0.6-fpm"
|
||||
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}"
|
||||
- "coop-cloud.${STACK_NAME}.version=13.0.1+32.0.3-fpm"
|
||||
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT}"
|
||||
- "backupbot.backup=${ENABLE_BACKUPS:-true}"
|
||||
- "backupbot.backup.volumes.redis=false"
|
||||
#- "backupbot.backup.volumes.nextcloud=false"
|
||||
@@ -108,7 +109,7 @@ services:
|
||||
start_period: 15m
|
||||
|
||||
cron:
|
||||
image: nextcloud:31.0.6-fpm
|
||||
image: nextcloud:32.0.3-fpm
|
||||
volumes:
|
||||
- nextcloud:/var/www/html/
|
||||
- nextapps:/var/www/html/custom_apps:cached
|
||||
@@ -124,7 +125,7 @@ services:
|
||||
|
||||
|
||||
cache:
|
||||
image: redis:8.0.2-alpine
|
||||
image: redis:8.4.0-alpine
|
||||
networks:
|
||||
- internal
|
||||
volumes:
|
||||
|
||||
@@ -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
|
||||
+1
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user