From ec09bbc05c575def5be188bdd42a35d0ee0d1e08 Mon Sep 17 00:00:00 2001 From: tipi Date: Tue, 1 Jul 2025 19:10:25 +0000 Subject: [PATCH] Dateien nach "apps/nextcloud" hochladen --- apps/nextcloud/config.json | 37 +++++++++++++ apps/nextcloud/docker-compose.json | 82 ++++++++++++++++++++++++++++ apps/nextcloud/docker-compose.yml | 85 ++++++++++++++++++++++++++++++ 3 files changed, 204 insertions(+) create mode 100644 apps/nextcloud/config.json create mode 100644 apps/nextcloud/docker-compose.json create mode 100644 apps/nextcloud/docker-compose.yml diff --git a/apps/nextcloud/config.json b/apps/nextcloud/config.json new file mode 100644 index 0000000..b770221 --- /dev/null +++ b/apps/nextcloud/config.json @@ -0,0 +1,37 @@ +{ + "$schema": "../app-info-schema.json", + "name": "Nextcloud", + "available": true, + "exposable": true, + "dynamic_config": true, + "port": 8083, + "id": "nextcloud", + "tipi_version": 24, + "version": "26.0.13-apache", + "categories": ["data"], + "description": "Nextcloud is a self-hosted, open source, and fully-featured cloud storage solution for your personal files, office documents, and photos.", + "short_desc": "Productivity platform that keeps you in control", + "author": "Nextcloud GmbH", + "source": "https://github.com/nextcloud/server", + "form_fields": [ + { + "type": "text", + "label": "Username", + "max": 50, + "min": 3, + "required": true, + "env_variable": "NEXTCLOUD_ADMIN_USER" + }, + { + "type": "password", + "label": "Password", + "max": 50, + "min": 10, + "required": true, + "env_variable": "NEXTCLOUD_ADMIN_PASSWORD" + } + ], + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1742038546498 +} diff --git a/apps/nextcloud/docker-compose.json b/apps/nextcloud/docker-compose.json new file mode 100644 index 0000000..45a2b51 --- /dev/null +++ b/apps/nextcloud/docker-compose.json @@ -0,0 +1,82 @@ +{ + "$schema": "../dynamic-compose-schema.json", + "services": [ + { + "name": "nextcloud", + "image": "nextcloud:26.0.13-apache", + "isMain": true, + "internalPort": 80, + "environment": { + "POSTGRES_HOST": "db-nextcloud", + "REDIS_HOST": "redis-nextcloud", + "POSTGRES_PASSWORD": "tipi", + "POSTGRES_USER": "tipi", + "POSTGRES_DB": "nextcloud", + "NEXTCLOUD_ADMIN_USER": "${NEXTCLOUD_ADMIN_USER}", + "NEXTCLOUD_ADMIN_PASSWORD": "${NEXTCLOUD_ADMIN_PASSWORD}", + "NEXTCLOUD_TRUSTED_DOMAINS": "${APP_DOMAIN}", + "TRUSTED_PROXIES": "172.16.0.0/12", + "OVERWRITEPROTOCOL": "${APP_PROTOCOL:-http}" + }, + "dependsOn": ["db-nextcloud", "redis-nextcloud"], + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/nextcloud", + "containerPath": "/var/www/html" + } + ], + "extraLabels": { + "traefik.http.middlewares.nextcloud.headers.browserXSSFilter": "true", + "traefik.http.middlewares.nextcloud.headers.contentTypeNosniff": "true", + "traefik.http.middlewares.nextcloud.headers.stsIncludeSubdomains": "true", + "traefik.http.middlewares.nextcloud.headers.stsPreload": "true", + "traefik.http.middlewares.nextcloud.headers.stsSeconds": "155520011", + "traefik.http.middlewares.nextcloud_redirect.redirectregex.permanent": "true", + "traefik.http.middlewares.nextcloud_redirect.redirectregex.regex": "https://(.*)/.well-known/(card|cal)dav", + "traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement": "https://$${1}/remote.php/dav/", + "traefik.http.routers.nextcloud.middlewares": "nextcloud,nextcloud_redirect,nextcloud-https", + "traefik.http.middlewares.nextcloud.headers.customRequestHeaders.X-Forwarded-Proto": "https", + "traefik.http.middlewares.nextcloud-https.redirectscheme.scheme": "https", + "traefik.http.routers.nextcloud-http.middlewares": "nextcloud-https@docker" + } + }, + { + "name": "db-nextcloud", + "image": "postgres:14.2", + "environment": { + "POSTGRES_PASSWORD": "tipi", + "POSTGRES_USER": "tipi", + "POSTGRES_DB": "nextcloud" + }, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/db", + "containerPath": "/var/lib/postgresql/data" + } + ] + }, + { + "name": "redis-nextcloud", + "image": "redis:6.2.6", + "user": "1000:1000", + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/redis", + "containerPath": "/data" + } + ] + }, + { + "name": "cron", + "image": "nextcloud:25.0.13-apache", + "dependsOn": ["db-nextcloud", "redis-nextcloud"], + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/nextcloud", + "containerPath": "/var/www/html" + } + ], + "entrypoint": "/cron.sh" + } + ] +} diff --git a/apps/nextcloud/docker-compose.yml b/apps/nextcloud/docker-compose.yml new file mode 100644 index 0000000..22d171a --- /dev/null +++ b/apps/nextcloud/docker-compose.yml @@ -0,0 +1,85 @@ +version: "3.7" + +services: + nextcloud: + container_name: nextcloud + image: nextcloud:26.0.13-apache + restart: unless-stopped + ports: + - ${APP_PORT}:80 + volumes: + - ${APP_DATA_DIR}/data/nextcloud:/var/www/html + environment: + - POSTGRES_HOST=db-nextcloud + - REDIS_HOST=redis-nextcloud + - POSTGRES_PASSWORD=tipi + - POSTGRES_USER=tipi + - POSTGRES_DB=nextcloud + - NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER} + - NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD} + - NEXTCLOUD_TRUSTED_DOMAINS=${APP_DOMAIN} + - TRUSTED_PROXIES=172.16.0.0/12 + - OVERWRITEPROTOCOL=${APP_PROTOCOL:-http} + depends_on: + - db-nextcloud + - redis-nextcloud + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.nextcloud.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.nextcloud.entrypoints: websecure + traefik.http.routers.nextcloud.service: nextcloud + traefik.http.routers.nextcloud.tls.certresolver: myresolver + traefik.http.services.nextcloud.loadbalancer.server.port: 80 + traefik.http.middlewares.nextcloud.headers.browserXSSFilter: true + traefik.http.middlewares.nextcloud.headers.contentTypeNosniff: true + traefik.http.middlewares.nextcloud.headers.stsIncludeSubdomains: true + traefik.http.middlewares.nextcloud.headers.stsPreload: true + traefik.http.middlewares.nextcloud.headers.stsSeconds: 155520011 + traefik.http.middlewares.nextcloud_redirect.redirectregex.permanent: true + traefik.http.middlewares.nextcloud_redirect.redirectregex.regex: https://(.*)/.well-known/(card|cal)dav + traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement: https://$${1}/remote.php/dav/ + traefik.http.routers.nextcloud.middlewares: nextcloud,nextcloud_redirect,nextcloud-https + traefik.http.middlewares.nextcloud.headers.customRequestHeaders.X-Forwarded-Proto: https + traefik.http.middlewares.nextcloud-https.redirectscheme.scheme: https + traefik.http.routers.nextcloud-http.middlewares: nextcloud-https@docker + runtipi.managed: true + db-nextcloud: + container_name: db-nextcloud + image: postgres:14.2 + restart: on-failure + volumes: + - ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=tipi + - POSTGRES_USER=tipi + - POSTGRES_DB=nextcloud + networks: + - tipi_main_network + labels: + runtipi.managed: true + redis-nextcloud: + container_name: redis-nextcloud + user: "1000:1000" + image: redis:6.2.6 + restart: on-failure + volumes: + - "${APP_DATA_DIR}/data/redis:/data" + networks: + - tipi_main_network + labels: + runtipi.managed: true + cron: + image: nextcloud:25.0.13-apache + restart: on-failure + volumes: + - ${APP_DATA_DIR}/data/nextcloud:/var/www/html + entrypoint: /cron.sh + depends_on: + - db-nextcloud + - redis-nextcloud + networks: + - tipi_main_network + labels: + runtipi.managed: true