diff --git a/blueprints/nextcloud-aio/docker-compose.yml b/blueprints/nextcloud-aio/docker-compose.yml index 1f4e43e6a..9cec8542c 100644 --- a/blueprints/nextcloud-aio/docker-compose.yml +++ b/blueprints/nextcloud-aio/docker-compose.yml @@ -1,32 +1,34 @@ services: nextcloud: - image: nextcloud:30.0.2 + image: nextcloud:stable restart: always - - ports: - - 80 volumes: - nextcloud_data:/var/www/html + - ../files/fix-nextcloud.sh:/usr/local/bin/fix-nextcloud.sh:ro environment: - - NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_DOMAIN} - MYSQL_HOST=nextcloud_db - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - - MYSQL_PASSWORD=${MYSQL_SECRET_PASSWORD} - - OVERWRITEPROTOCOL=https + - MYSQL_PASSWORD=${MYSQL_PASSWORD} + depends_on: + - nextcloud_db + - nextcloud_redis nextcloud_db: - image: mariadb + image: mariadb:10.11 restart: always - volumes: - nextcloud_db_data:/var/lib/mysql environment: - - MYSQL_ROOT_PASSWORD=${MYSQL_SECRET_PASSWORD_ROOT} + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - - MYSQL_PASSWORD=${MYSQL_SECRET_PASSWORD} + - MYSQL_PASSWORD=${MYSQL_PASSWORD} + + nextcloud_redis: + image: redis:alpine + restart: always volumes: nextcloud_data: - nextcloud_db_data: + nextcloud_db_data: \ No newline at end of file diff --git a/blueprints/nextcloud-aio/nextcloud-aio.svg b/blueprints/nextcloud-aio/nextcloud-aio.svg deleted file mode 100644 index 54e6056fa..000000000 --- a/blueprints/nextcloud-aio/nextcloud-aio.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/blueprints/nextcloud-aio/nextcloud.png b/blueprints/nextcloud-aio/nextcloud.png new file mode 100644 index 000000000..119d58b7e Binary files /dev/null and b/blueprints/nextcloud-aio/nextcloud.png differ diff --git a/blueprints/nextcloud-aio/template.toml b/blueprints/nextcloud-aio/template.toml index 30be77a1a..d45c89bee 100644 --- a/blueprints/nextcloud-aio/template.toml +++ b/blueprints/nextcloud-aio/template.toml @@ -1,17 +1,171 @@ [variables] -main_domain = "${domain}" -db_password = "${password}" -db_root_password = "${password}" + domain_name = "${domain}" + db_password = "${password:32}" + db_root_password = "${password:32}" + region = "DE" [config] -mounts = [] + env = [ + "MYSQL_PASSWORD=${db_password}", + "MYSQL_ROOT_PASSWORD=${db_root_password}", + "DEFAULT_PHONE_REGION=${region}", + "NEXTCLOUD_DOMAIN=${domain_name}", + "OVERWRITEPROTOCOL=https", + "TRUSTED_PROXIES=10.0.0.0/8 172.16.0.0/12", + "REDIS_HOST=nextcloud_redis", + "MYSQL_DATABASE=nextcloud", + "MYSQL_USER=nextcloud" + ] -[[config.domains]] -serviceName = "nextcloud" -port = 80 -host = "${main_domain}" + [[config.domains]] + serviceName = "nextcloud" + port = 80 + host = "${domain_name}" -[config.env] -NEXTCLOUD_DOMAIN = "${main_domain}" -MYSQL_SECRET_PASSWORD = "${db_password}" -MYSQL_SECRET_PASSWORD_ROOT = "${db_root_password}" + [[config.mounts]] + filePath = "fix-nextcloud.sh" + content = """#!/bin/sh +# +# Nextcloud Optimization Script +# ============================== +# This script applies production-ready optimizations to Nextcloud. +# +# MANUAL EXECUTION REQUIRED +# ------------------------- +# After Nextcloud completes its initial setup (create admin account, etc.), +# run this script manually: +# +# Option 1 (From Dokploy UI): +# 1. Go to your Nextcloud service in Dokploy +# 2. Open the Terminal tab +# 3. Run: su -s /bin/sh www-data -c "/bin/sh /usr/local/bin/fix-nextcloud.sh" +# +# Option 2 (From command line): +# docker exec -u www-data /bin/sh /usr/local/bin/fix-nextcloud.sh +# +# Optimizations include: +# - Trusted proxy configuration for reverse proxy support +# - HTTPS protocol override +# - Regional settings (phone region, maintenance window) +# - Performance optimizations (database repair, missing indices) +# - Redis caching configuration (APCu, distributed, locking) +# +# The script is idempotent - it creates a marker file to prevent re-running. +# To re-run manually: delete /var/www/html/data/.nextcloud-optimized and restart container +# + +MARKER_FILE="/var/www/html/data/.nextcloud-optimized" +OCC="php /var/www/html/occ" + +# Check if already run +if [ -f "$MARKER_FILE" ]; then + echo "Optimizations already applied (marker file exists)." + exit 0 +fi + +echo "==========================================" +echo " Nextcloud Optimization Script" +echo "==========================================" +echo "" + +# Check if running as www-data +CURRENT_USER=$(whoami) +if [ "$CURRENT_USER" = "www-data" ]; then + RUN_AS_WWWDATA="" +else + RUN_AS_WWWDATA="su -s /bin/sh www-data -c" +fi + +# Function to run occ command with error handling +run_occ() { + description="$1" + shift + printf " - %s... " "$description" + if [ -z "$RUN_AS_WWWDATA" ]; then + # Already running as www-data + if $OCC "$@" >/dev/null 2>&1; then + echo "✓" + return 0 + else + echo "✗ (failed, but continuing)" + return 1 + fi + else + # Need to switch to www-data + if $RUN_AS_WWWDATA "$OCC $*" >/dev/null 2>&1; then + echo "✓" + return 0 + else + echo "✗ (failed, but continuing)" + return 1 + fi + fi +} + +# Test database connectivity +echo "[1/5] Testing database connectivity..." +if [ -z "$RUN_AS_WWWDATA" ]; then + if $OCC status >/dev/null 2>&1; then + echo " ✓ Database is accessible" + else + echo " ✗ Database not accessible" + exit 1 + fi +else + if $RUN_AS_WWWDATA "$OCC status" >/dev/null 2>&1; then + echo " ✓ Database is accessible" + else + echo " ✗ Database not accessible" + exit 1 + fi +fi + +# Configure trusted proxies +echo "[2/5] Configuring trusted proxies..." +run_occ "Set trusted proxy 10.0.0.0/8" config:system:set trusted_proxies 0 --value='10.0.0.0/8' +run_occ "Set trusted proxy 172.16.0.0/12" config:system:set trusted_proxies 1 --value='172.16.0.0/12' +run_occ "Set trusted proxy 192.168.0.0/16" config:system:set trusted_proxies 2 --value='192.168.0.0/16' +run_occ "Set HTTPS protocol override" config:system:set overwriteprotocol --value='https' + +# Configure regional settings +echo "[3/5] Configuring regional settings..." +run_occ "Set phone region to DE" config:system:set default_phone_region --value='DE' +run_occ "Set maintenance window start" config:system:set maintenance_window_start --value=1 --type=integer + +# Run performance optimizations +echo "[4/5] Running performance optimizations..." +echo " - Running maintenance repair (this may take a while)..." +if [ -z "$RUN_AS_WWWDATA" ]; then + if $OCC maintenance:repair --include-expensive 2>&1 | grep -q "No repair steps available"; then + echo " ✓ No repairs needed" + else + echo " ✓ Repair completed" + fi +else + if $RUN_AS_WWWDATA "$OCC maintenance:repair --include-expensive" 2>&1 | grep -q "No repair steps available"; then + echo " ✓ No repairs needed" + else + echo " ✓ Repair completed" + fi +fi +run_occ "Add missing database indices" db:add-missing-indices + +# Configure Redis caching +echo "[5/5] Configuring Redis caching..." +run_occ "Set APCu for local cache" config:system:set memcache.local --value='\\OC\\Memcache\\APCu' +run_occ "Set Redis for distributed cache" config:system:set memcache.distributed --value='\\OC\\Memcache\\Redis' +run_occ "Set Redis for locking" config:system:set memcache.locking --value='\\OC\\Memcache\\Redis' +run_occ "Set Redis host" config:system:set redis host --value='nextcloud_redis' +run_occ "Set Redis port" config:system:set redis port --value=6379 --type=integer + +# Create marker file +touch "$MARKER_FILE" + +echo "" +echo "==========================================" +echo " Optimization Complete!" +echo "==========================================" +echo "All optimizations have been applied." +echo "Marker file created at: $MARKER_FILE" +echo "" +""" \ No newline at end of file diff --git a/meta.json b/meta.json index e3b7201ee..b29044c86 100644 --- a/meta.json +++ b/meta.json @@ -4080,10 +4080,10 @@ }, { "id": "nextcloud-aio", - "name": "Nextcloud All in One", - "version": "30.0.2", - "description": "Nextcloud (AIO) is a self-hosted file storage and sync platform with powerful collaboration capabilities. It integrates Files, Talk, Groupware, Office, Assistant and more into a single platform for remote work and data protection.", - "logo": "nextcloud-aio.svg", + "name": "Nextcloud", + "version": "stable", + "description": "Nextcloud is a self-hosted file storage and sync platform with powerful collaboration capabilities. It integrates Files, Talk, Groupware, Office, Assistant and more into a single platform for remote work and data protection.", + "logo": "nextcloud.png", "links": { "github": "https://github.com/nextcloud/docker", "website": "https://nextcloud.com/",