Difference between revisions of "NextCloud"

From RHS Wiki
Jump to navigation Jump to search
(Created page with "=== Install with docker compose === docker-compose.yml:<syntaxhighlight lang="yaml"> version: '3.8' services: nextcloud: image: nextcloud:latest container_name: nex...")
Tag: visualeditor
(No difference)

Revision as of 19:51, 26 August 2025

Install with docker compose

docker-compose.yml:

version: '3.8'

services:
  nextcloud:
    image: nextcloud:latest
    container_name: nextcloud
    restart: unless-stopped
    ports:
      - 8080:80  # interno, solo para Caddy
    volumes:
      - /mnt/nextcloud/nextcloud:/var/www/html
      - /mnt/nextcloud/data:/var/www/html/data
    depends_on:
      - db
      - redis
    environment:
      - POSTGRES_HOST=db
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=secret
      - REDIS_HOST=redis
      - NEXTCLOUD_ADMIN_USER=admin
      - NEXTCLOUD_ADMIN_PASSWORD=admin123
      - NEXTCLOUD_TRUSTED_DOMAINS=cloud.herrerosolis.com
      - NEXTCLOUD_OVERWRITEHOST=cloud.herrerosolis.com
      - NEXTCLOUD_OVERWRITEPROTOCOL=https

  db:
    image: postgres:15
    container_name: nextcloud_db
    restart: unless-stopped
    volumes:
      - /mnt/nextcloud/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=secret

  redis:
    image: redis:alpine
    container_name: nextcloud_redis
    restart: unless-stopped
    volumes:
      - /mnt/nextcloud/redis:/data

  caddy:
    image: greenpau/caddy-cloudflare:latest
    container_name: nextcloud_caddy
    restart: unless-stopped
    ports:
      - 443:443
    volumes:
      - /mnt/nextcloud/caddy/Caddyfile:/etc/caddy/Caddyfile
      - /mnt/nextcloud/caddy/data:/data
      - /mnt/nextcloud/caddy/config:/config
    environment:
      - CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}
    depends_on:
      - nextcloud

networks:
  default:
    name: nextcloud_net

/mnt/nextcloud/caddy/Caddyfile:

cloud.herrerosolis.com {
  reverse_proxy nextcloud:80

  tls {
    dns cloudflare {env.CLOUDFLARE_API_TOKEN}
  }

  encode gzip
  header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
  }
}

Create subfolder structure

sudo mkdir -p /mnt/nextcloud/{nextcloud,data,db,redis,caddy/data,caddy/config}
sudo chown -R root:root /mnt/nextcloud
sudo chmod -R 755 /mnt/nextcloud
cd ${DOCKER_COMPOSE_DIRECTORY}
echo 'CLOUDFLARE_API_TOKEN=tu_token_de_cloudflare' > .env

Start NextCloud

docker compose up --detach

Assing file permissions

docker exec -it nextcloud chown -R www-data:www-data /var/www/html

Format Cadyfile

docker compose exec caddy caddy fmt --overwrite /etc/caddy/Caddyfile
docker compose restart caddy

NextCloud Install Script

#!/bin/bash
set -e

echo "🔁 Deteniendo contenedores previos..."
docker compose down || true

echo "🧹 Borrando volúmenes de datos antiguos..."
sudo rm -rf /mnt/nextcloud/{db,data,nextcloud,redis,caddy/data,caddy/config}

echo "📁 Creando estructura de carpetas..."
sudo mkdir -p /mnt/nextcloud/{db,data,nextcloud,redis,caddy/data,caddy/config}
sudo chown -R $USER:$USER /mnt/nextcloud

echo "📄 Generando docker-compose.yml..."
cat > docker-compose.yml <<EOF
version: '3.8'

services:
  nextcloud:
    image: nextcloud:latest
    container_name: nextcloud
    restart: unless-stopped
    ports:
      - 8080:80
    volumes:
      - /mnt/nextcloud/nextcloud:/var/www/html
      - /mnt/nextcloud/data:/var/www/html/data
    depends_on:
      - db
      - redis
    environment:
      - POSTGRES_HOST=db
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=secret
      - REDIS_HOST=redis
      - NEXTCLOUD_ADMIN_USER=admin
      - NEXTCLOUD_ADMIN_PASSWORD=admin123
      - NEXTCLOUD_TRUSTED_DOMAINS=cloud.herrerosolis.com
      - NEXTCLOUD_OVERWRITEHOST=cloud.herrerosolis.com
      - NEXTCLOUD_OVERWRITEPROTOCOL=https

  db:
    image: postgres:15
    container_name: nextcloud_db
    restart: unless-stopped
    volumes:
      - /mnt/nextcloud/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=secret

  redis:
    image: redis:alpine
    container_name: nextcloud_redis
    restart: unless-stopped
    volumes:
      - /mnt/nextcloud/redis:/data

  caddy:
    build:
      context: .
      dockerfile: Dockerfile.caddy
    container_name: nextcloud_caddy
    restart: unless-stopped
    ports:
      - 443:443
    volumes:
      - /mnt/nextcloud/caddy/Caddyfile:/etc/caddy/Caddyfile
      - /mnt/nextcloud/caddy/data:/data
      - /mnt/nextcloud/caddy/config:/config
    environment:
      - CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}
    depends_on:
      - nextcloud

networks:
  default:
    name: nextcloud_net
EOF

echo "📄 Generando Dockerfile.caddy con plugin Cloudflare DNS..."
cat > Dockerfile.caddy <<EOF
FROM caddy:builder AS builder

RUN xcaddy build --with github.com/caddy-dns/cloudflare

FROM caddy:latest

COPY --from=builder /usr/bin/caddy /usr/bin/caddy
EOF

echo "📄 Generando Caddyfile..."
cat > /mnt/nextcloud/caddy/Caddyfile <<EOF
cloud.herrerosolis.com {
  reverse_proxy nextcloud:80

  tls {
    dns cloudflare {env.CLOUDFLARE_API_TOKEN}
  }

  encode gzip
  header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
  }
}
EOF

echo "🔐 Añade tu token Cloudflare al archivo .env si no lo has hecho aún:"
if [ ! -f .env ]; then
  echo "CLOUDFLARE_API_TOKEN=pon_aqui_tu_token" > .env
  echo "✔️  Archivo .env creado. Edita y pon tu token Cloudflare."
else
  echo "✔️  Archivo .env ya existe. Asegúrate de que el token sea correcto."
fi

echo "🚀 Levantando contenedores con build personalizado..."
docker compose up -d --build

echo "✅ Todo listo. Accede a https://cloud.herrerosolis.com"

Verify security config

https://cloud.herrerosolis.com/index.php/settings/admin/overview

Allow big file upload

php.ini:

upload_max_filesize = 2G
post_max_size = 2G
memory_limit = 1G

Backups

The important paths to backup are:

  • /mnt/nextcloud/db (PostgreSQL)
  • /mnt/nextcloud/data (tus archivos)
  • /mnt/nextcloud/nextcloud (archivos de Nextcloud + apps instaladas)
  • /mnt/nextcloud/caddy (configuración SSL + Caddyfile)


Updates

docker compose pull
docker compose up -d