Compare commits

..

2 Commits

12 changed files with 36 additions and 203 deletions

View File

@ -1,5 +1,5 @@
TYPE=nextcloud
TIMEOUT=900
TIMEOUT=500
ENABLE_AUTO_UPDATE=true
DOMAIN=nextcloud.example.com
@ -44,35 +44,21 @@ DEFAULT_QUOTA="10 GB"
# MAIL_DOMAIN=
# SECRET_SMTP_PASSWORD_VERSION=v1
## Customization
# THEMING_COLOR=
# THEMING_SLOGAN=
# COPY_ASSETS="flow_background.jpg|app:/var/www/html/themes/background.jpg"
# COPY_ASSETS="$COPY_ASSETS icon_left_brand.svg|app:/var/www/html/themes/logo.svg"
# COPY_ASSETS="$COPY_ASSETS icon.png|app:/web/dist/assets/icons/icon.png"
# APPS="calendar"
# COLLABORA_URL=https://collabora.example.com
# COMPOSE_FILE="$COMPOSE_FILE:compose.onlyoffice.yml"
# COMPOSE_FILE="$COMPOSE_FILE:compose.apps.yml"
# APPS="calendar sociallogin onlyoffice"
#
# 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.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
# COMPOSE_FILE="$COMPOSE_FILE:compose.authentik.yml"
# AUTHENTIK_USER_PREFIX=authentik
# AUTHENTIK_DOMAIN=authentik.example.com
# SECRET_AUTHENTIK_SECRET_VERSION=v1
# SECRET_AUTHENTIK_ID_VERSION=v1

View File

@ -6,10 +6,10 @@ Fully automated luxury Nextcloud via docker-swarm.
<!-- metadata -->
* **Category**: Apps
* **Status**: 5
* **Status**: 2, beta
* **Image**: [`nextcloud`](https://hub.docker.com/_/nextcloud), 4, upstream
* **Healthcheck**: Yes
* **Backups**: Yes
* **Backups**: No
* **Email**: 3
* **Tests**: 2
* **SSO**: 1 (OAuth)
@ -17,6 +17,7 @@ Fully automated luxury Nextcloud via docker-swarm.
## Quick start
* `abra app new nextcloud`
* `abra app config <app-name>`
* `abra app secret insert <app-name> smtp_password v1 <SMTP_PASSWORD>`
@ -243,41 +244,3 @@ 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.
## 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"'
```

40
abra.sh
View File

@ -1,10 +1,9 @@
#!/bin/bash
export FPM_TUNE_VERSION=v5
export NGINX_CONF_VERSION=v6
export NGINX_CONF_VERSION=v4
export MY_CNF_VERSION=v5
export ENTRYPOINT_VERSION=v3
export CRONTAB_VERSION=v1
run_occ() {
su -p www-data -s /bin/sh -c "/var/www/html/occ $@"
@ -52,27 +51,6 @@ set_logfile_stdout() {
set_system_config logfile '/dev/stdout'
}
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
@ -87,21 +65,6 @@ install_onlyoffice() {
set_app_config onlyoffice customizationForcesave true
}
install_collabora() {
install_apps richdocuments
set_app_config richdocuments wopi_url "$COLLABORA_URL"
}
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"
}
set_default_quota() {
set_app_config files default_quota "$DEFAULT_QUOTA"
}
@ -110,7 +73,6 @@ 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\":[

View File

@ -3,10 +3,16 @@ services:
app:
secrets:
- onlyoffice_jwt
- bbb_secret
environment:
- APPS
- ONLYOFFICE_URL
- BBB_URL
secrets:
onlyoffice_jwt:
external: true
name: ${STACK_NAME}_onlyoffice_jwt_${SECRET_ONLYOFFICE_JWT_VERSION}
bbb_secret:
external: true
name: ${STACK_NAME}_bbb_secret_${SECRET_BBB_SECRET_VERSION}

View File

@ -1,12 +0,0 @@
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

@ -1,55 +0,0 @@
version: "3.8"
services:
elasticsearch:
image: "docker.elastic.co/elasticsearch/elasticsearch:8.11.3"
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:28.0.5-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

@ -44,10 +44,5 @@ configs:
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:

View File

@ -1,9 +1,7 @@
version: "3.8"
services:
web:
image: nginx:1.27.0
depends_on:
- app
image: nginx:1.25.1
configs:
- source: nginx_conf
target: /etc/nginx/nginx.conf
@ -46,7 +44,7 @@ services:
start_period: 5m
app:
image: nextcloud:28.0.5-fpm
image: nextcloud:27.0.1-fpm
depends_on:
- db
configs:
@ -91,7 +89,7 @@ services:
failure_action: rollback
order: start-first
labels:
- "coop-cloud.${STACK_NAME}.version=6.0.7+28.0.5-fpm"
- "coop-cloud.${STACK_NAME}.version=5.0.3+27.0.1-fpm"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}"
- "backupbot.backup=true"
- "backupbot.backup.path=/var/www/html/config/,/var/www/html/data/,/var/www/html/custom_apps/"
@ -100,10 +98,10 @@ services:
interval: 30s
timeout: 10s
retries: 10
start_period: 15m
start_period: 5m
cron:
image: nextcloud:28.0.5-fpm
image: nextcloud:27.0.1-fpm
volumes:
- nextcloud:/var/www/html/
- nextapps:/var/www/html/custom_apps:cached
@ -113,13 +111,9 @@ services:
networks:
- internal
entrypoint: /cron.sh
configs:
- source: crontab
target: /var/spool/cron/crontabs/www-data
cache:
image: redis:7.2.4-alpine
image: redis:7.0.12-alpine
networks:
- internal
volumes:
@ -131,6 +125,9 @@ services:
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_PASSWORD_VERSION}
@ -159,9 +156,6 @@ configs:
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 +0,0 @@
*/5 * * * * php -d memory_limit=1G -f /var/www/html/cron.php

View File

@ -11,10 +11,6 @@ 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" '
@ -63,12 +59,12 @@ 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 X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "noindex, nofollow" always;
add_header X-XSS-Protection "1; mode=block" 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 "none" 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" }}";

View File

@ -1 +0,0 @@
BREAKING CHANGE: compose.apps.yml was split to compose.bbb.yml and compose.onlyoffice.yml, configuration update is required!